현재 클라우드 인스턴스에서 실행중인 라이브 redis 서버가 있으며이 redis 서버를 새 클라우드 인스턴스로 마이그레이션하고 해당 인스턴스를 새 redis 서버로 사용하려고합니다. MySQL 인 경우 이전 서버에서 DB를 내보내고 새 서버로 가져옵니다. redis로 어떻게해야합니까?
추신 : 복제를 설정하지 않습니다. redis 서버를 새 인스턴스로 완전히 마이그레이션하고 싶습니다.
현재 클라우드 인스턴스에서 실행중인 라이브 redis 서버가 있으며이 redis 서버를 새 클라우드 인스턴스로 마이그레이션하고 해당 인스턴스를 새 redis 서버로 사용하려고합니다. MySQL 인 경우 이전 서버에서 DB를 내보내고 새 서버로 가져옵니다. redis로 어떻게해야합니까?
추신 : 복제를 설정하지 않습니다. redis 서버를 새 인스턴스로 완전히 마이그레이션하고 싶습니다.
답변:
실행 BGSAVE
하거나 SAVE
명령 행에서 데이터베이스의 스냅 샷을 dump.rdb에 저장하십시오 . 그러면 redis 서버와 같은 폴더에 dump.rdb라는 파일이 생성됩니다. 모든 서버 명령 목록을 참조하십시오 .
이 dump.rdb를 이주하려는 다른 redis 서버에 복사하십시오. redis가 시작되면 데이터베이스를 초기화 할이 파일을 찾습니다.
appendonly = yes
하기 no
전에로 설정하십시오. 그렇지 않으면 새 데이터 세트가로드되지 않습니다. 데이터 세트가 메모리에로드되면 메모리 ( config set appendonly yes
) 및 구성 파일 모두에서 다시 설정하십시오.
/etc/redis/redis.conf
을 검색하여 .rdb
파일 위치를 찾을 수 있습니다 cat /etc/redis/redis.conf | grep "rdb"
. 내 경우에는/var/lib/redis
redis-cli config get dir
.rdb
저장된 디렉토리를 제공합니다 .
먼저 서버 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보다 크거나 같아야 합니다 . 그렇지 않으면 호환성 문제가 발생할 수 있습니다 .
CONFIG GET dir
하는 것입니다."/usr/local/var/db/redis"
서버 간 연결이있는 경우 새 인스턴스를 슬레이브 노드로 사용하여 복제 (SQL과 달리 사소한)를 설정하는 것이 좋습니다. 그런 다음 단일 명령으로 새 노드를 마스터로 전환하고 가동 중지 시간이 없습니다.
SLAVEOF 명령을 사용하여 데이터를 마이그레이션 할 수도 있습니다.
SLAVEOF old_instance_name old_instance_port
로 키를 받았는지 확인하십시오 KEYS *
. 다른 방법으로도 새 인스턴스를 테스트 할 수 있으며 완료되면 다음을 복제하십시오.
SLAVEOF NO ONE
요즘에는 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 를 참조하십시오 .
다운 타임없는 마이그레이션의 핵심 요소는 다음과 같습니다.
CONFIG SET slave-read-only no
)한마디로 :
또한 redis에는 대상을 분리 한 직후 소스 redis가 쓰기를 허용하지 않도록하는 옵션이 있습니다.
min-slaves-to-write
min-slaves-max-lag
이 주제는
RedisLabs 팀의 매우 좋은 설명 https://redislabs.com/blog/real-time-synchronization-tool-for-redis-migration
https://github.com/RedisLabs/redis-migrate를 위한 대화식 도구도 있습니다.
또한 같은 일을하고 싶습니다 : 독립형 redis 인스턴스에서 다른 redis 인스턴스 (redis sentinel)로 DB를 마이그레이션하십시오.
데이터가 중요하지 않기 때문에 (세션 데이터) https://github.com/yaauie/redis-copy 시도해 볼 것입니다.
Redis 데이터 내보내기 / 백업 (덤프 파일 작성)에서 찾은 간단한 방법은 slaveof 플래그를 사용하여 명령 행을 통해 서버를 시작하고 다음과 같이 라이브 복제본을 작성하는 것입니다 (소스 Redis가 포트 6379에서 1.2.3.4라고 가정).
/usr/bin/redis-server --port 6399 --dbfilename backup_of_master.rdb --slaveof 1.2.3.4 6379
방금 한 패턴으로 일치하는 키를 하나의 Redis 데이터베이스에서 다른 Redis 데이터베이스로 복사 할 수있는 명령 줄 인터페이스 유틸리티를 npm 및 github에 게시했습니다.
유틸리티는 여기에서 찾을 수 있습니다.
redis-dump가 마침내 나를 위해 일했습니다. 이 문서는 Redis 데이터베이스를 덤프하고 다른 데이터베이스에 데이터를 삽입하는 방법의 예를 제공합니다.