Programing

한 서버에서 다른 서버로 redis 데이터베이스를 어떻게 이동합니까?

crosscheck 2020. 5. 24. 12:51
반응형

한 서버에서 다른 서버로 redis 데이터베이스를 어떻게 이동합니까?


현재 클라우드 인스턴스에서 실행중인 라이브 redis 서버가 있으며이 redis 서버를 새 클라우드 인스턴스로 마이그레이션하고 해당 인스턴스를 새 redis 서버로 사용하려고합니다. MySQL 인 경우 이전 서버에서 DB를 내보내고 새 서버로 가져옵니다. redis로 어떻게해야합니까?

추신 : 복제를 설정하지 않습니다. redis 서버를 새 인스턴스로 완전히 마이그레이션하고 싶습니다.


실행 BGSAVE하거나 SAVE명령 행에서 데이터베이스의 스냅 샷을 dump.rdb에 저장하십시오 . 그러면 redis 서버와 같은 폴더에 dump.rdb라는 파일이 생성됩니다. 모든 서버 명령 목록을 참조하십시오 .

이 dump.rdb를 이주하려는 다른 redis 서버에 복사하십시오. redis가 시작되면 데이터베이스를 초기화 할이 파일을 찾습니다.


먼저 서버 A에 덤프를 작성하십시오.

A$ redis-cli
127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/var/lib/redis/"
127.0.0.1:6379> SAVE
OK

이를 통해 dump.rdb완전히 최신 상태를 유지하고 저장 위치 ( /var/lib/redis/dump.rdb이 경우)를 보여줍니다 . dump.rdb또한 주기적으로 디스크에 자동으로 기록됩니다.

그런 다음 서버 B에 복사하십시오.

A$ scp /var/lib/redis/dump.rdb myuser@B:/tmp/dump.rdb

B에서 Redis 서버를 중지하고 dump.rdb를 복사 한 후 (권한이 이전과 동일 함) 시작하십시오.

B$ sudo service redis-server stop
B$ sudo cp /tmp/dump.rdb /var/lib/redis/dump.rdb
B$ sudo chown redis: /var/lib/redis/dump.rdb
B$ sudo service redis-server start

B의 Redis 버전은 A 버전보다 크거나 같아야 합니다 . 그렇지 않으면 호환성 문제가 발생할있습니다 .


서버 간 연결이있는 경우 새 인스턴스를 슬레이브 노드로 사용하여 복제 (SQL과 달리 사소한)를 설정하는 것이 좋습니다. 그런 다음 단일 명령으로 새 노드를 마스터로 전환하고 가동 중지 시간이 없습니다.


믿거 나 말거나, 나는 단지 그것을 위해 기사를 만들었다.

http://redis4you.com/articles.php?id=005&name=Seamless+migration+from+one+Redis+server+to+another

그러나 마스터와 슬레이브간에 데이터 전송이 완료된 시점을 어떻게 알 수 있습니까? INFO 명령을 사용할 수 있습니다.


요즘에는 2.6 이후로 사용 가능한 MIGRATE도 사용할 수 있습니다.

하나의 데이터베이스에서만 데이터를 옮기고 싶었 기 때문에 이것을 사용해야했습니다. 두 Redis 인스턴스는 서로 다른 두 머신에 있습니다.

Redis-1에서 Redis-2에 직접 연결할 수없는 경우 ssh 포트 바인딩을 사용하십시오.

 ssh user@redis-2.foo.com -L 1234:127.0.0.1:6379

KEYS를 사용하여 모든 키를 반복하고 각 키를 마이그레이션하는 작은 스크립트. 이것은 Perl이지만 아이디어를 얻길 바랍니다.

 foreach ( $redis_from->keys('*') ) {

    $redis_from->migrate(
        $destination{host},    # localhost in my example
        $destination{port},    # 1234
        $_,                    # The key
        $destination{db},
        $destination{timeout} 
    );
 }

자세한 내용은 http://redis.io/commands/migrate참조하십시오 .


SLAVEOF 명령을 사용하여 데이터를 마이그레이션 할 수도 있습니다.

SLAVEOF old_instance_name old_instance_port

로 키를 받았는지 확인하십시오 KEYS *. 다른 방법으로도 새 인스턴스를 테스트 할 수 있으며 완료되면 다음을 복제하십시오.

SLAVEOF NO ONE

redis 데이터를 가져올 때 dump.rdb를 배치해야하는 위치를 확인하려면

클라이언트를 시작

$redis-cli

그때

redis 127.0.0.1:6379> CONFIG GET *
 1) "dir"
 2) "/Users/Admin"

여기서 / Users / Admin은 서버에서 읽은 dump.rdb의 위치이므로 교체해야 할 파일입니다.


당신은 또한 rdd 를 사용할 수 있습니다

실행중인 redis 서버를 덤프 및 복원 할 수 있으며 덤프 키 필터 / 일치 / 이름 바꾸기를 허용합니다


I also want to do the same thing: migrate a db from a standalone redis instance to a another redis instances(redis sentinel).

Because the data is not critical(session data), i will give https://github.com/yaauie/redis-copy a try.


The simple way I found to export / Backup Redis data (create dump file ) is to start up a server via command line with slaveof flag and create live replica as follow (assuming the source Redis is 1.2.3.4 on port 6379):

/usr/bin/redis-server --port 6399 --dbfilename backup_of_master.rdb --slaveof 1.2.3.4 6379

I just published a command line interface utility to npm and github that allows you to copy keys that match a given pattern (even *) from one Redis database to another.

You can find the utility here:

https://www.npmjs.com/package/redis-utils-cli


Key elements of a zero-downtime migration is:

In short:

  1. setup a target redis (empty) as slave of a source redis (with your data)
  2. wait for replication finish
  3. permit writes to a target redis (which is currently slave)
  4. switch your apps to a target redis
  5. wait for finish datastream from master to slave
  6. turn a target redis from master to slave

Additionally redis have options which allows to disable a source redis to accept writes right after detaching a target:

  • min-slaves-to-write
  • min-slaves-max-lag

This topic covered by

Very good explanation from RedisLabs team https://redislabs.com/blog/real-time-synchronization-tool-for-redis-migration

And even their interactive tool for migrate: https://github.com/RedisLabs/redis-migrate


redis-dump finally worked for me. Its documentation provides an example how to dump a Redis database and insert the data into another one.

참고URL : https://stackoverflow.com/questions/6004915/how-do-i-move-a-redis-database-from-one-server-to-another

반응형