redis 데이터베이스를 한 서버에서 다른 서버로 이동하려면 어떻게 해야 합니까?
현재 클라우드 인스턴스에서 실행 중인 redis 서버가 있는데 이 redis 서버를 새 클라우드 인스턴스로 마이그레이션하고 해당 인스턴스를 새 redis 서버로 사용하려고 합니다.MySQL이라면 이전 서버에서 DB를 내보내고 새로운 서버로 가져올 것입니다.레디스는 어떻게 해야 하나요?
추신: 저는 복제를 설정할 생각이 없습니다.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
Redison B 버전은 A 버전보다 크거나 같아야 합니다. 그렇지 않으면 호환성 문제가 발생할 수 있습니다.
를 실행하거나 명령줄에서 데이터베이스의 스냅샷을 dump.rdb에 저장합니다.그러면 redis 서버와 동일한 폴더에 dump.rdb라는 파일이 생성됩니다.모든 서버 명령 목록을 봅니다.
이 dump.rdb를 마이그레이션할 다른 redis 서버에 복사합니다.redis가 시작되면 데이터베이스를 초기화할 이 파일을 찾습니다.
서버 간 연결이 있는 경우 새 인스턴스를 슬레이브 노드로 사용하여 복제(SQL과 달리 사소한)를 설정하는 것이 좋습니다. 그러면 단일 명령으로 새 노드를 마스터로 전환하여 다운타임 없이 이동할 수 있습니다.
SLAVEOF 명령을 사용하여 데이터를 마이그레이션할 수도 있습니다.
SLAVEOF old_instance_name old_instance_port
로 합니다.KEYS *
방법으로도 새할 수 하면 됩니다 다른 방법으로도 새 인스턴스를 테스트할 수 있으며, 작업이 완료되면 다음 중 하나만 복제하면 됩니다.
SLAVEOF NO ONE
에서는 Redis 5.0 를 .REPLICAOF
~하듯이SLAVEOF
사용되지 않음 - 설명서 참조
요즘에는 2.6 이후부터 사용 가능한 Migration도 사용할 수 있습니다.
데이터를 모두 이동하는 것이 아니라 하나의 데이터베이스에서만 이동하고자 했기 때문에 이를 사용할 수밖에 없었습니다.Redis 인스턴스 두 개는 서로 다른 두 개의 시스템에서 작동합니다.
Redis-1에서 Redis-2에 직접 연결할 수 없는 경우 ssh 포트 바인딩을 사용합니다.
ssh user@redis-2.foo.com -L 1234:127.0.0.1:6379
키를 사용하여 모든 키를 루프하고 각 키를 마이그레이션하는 작은 스크립트입니다.펄입니다. 하지만 여러분이 아이디어를 얻으셨기를 바랍니다.
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 을 참조하십시오.
제로 다운타임 마이그레이션의 주요 요소는 다음과 같습니다.
- 복제(http://redis.io/commands/SLAVEOF)
- 중 ()
CONFIG SET slave-read-only no
)
간단히 말해서:
- 대상 redis를 소스 redis의 슬레이브로 설정(데이터 포함)
- 복제가 완료될 때까지 기다립니다.
- 대상 redis(현재 슬레이브인)에 쓰기 허용
- 앱을 대상 redis로 전환
- 마스터에서 슬레이브로 데이터 스트림 완료 대기
- 목표물을 주인에서 노비로 바꾸다
또한 redis에는 소스 redis를 비활성화하여 대상을 분리한 후 바로 쓰기를 허용할 수 있는 옵션이 있습니다.
min-slaves-to-write
min-slaves-max-lag
에서 다루는 이 주제
RedisLabs팀 https://redislabs.com/blog/real-time-synchronization-tool-for-redis-migration 의 아주 좋은 설명 (web.archive.org 이용)
또한 마이그레이션을 위한 대화형 툴 https://github.com/RedisLabs/redis-migrate 도 있습니다.
redisdata를 가져올 때 dump.rdb를 어디에 두어야 하는지 확인하려면,
클라이언트를 시작합니다.
$ redis-cli
그리고.
그리고나서
redis 127.0.0.1:6379> CONFIG GET *
1) "dir"
2) "/Users/Admin"
여기서 /Users/Admin은 서버에서 읽은 dump.rdb의 위치이므로 파일을 교체해야 합니다.
source_host=xxx
source_port=6379
source_db=10
source_auth=xxx
target_host=yyyyy
target_port=6379
target_db=12
target_auth=yyyyy
redis-cli -a $source_auth -h $source_host -p $source_port -n $source_db keys \* | while read key; do
echo "redis-cli -h $source_host -p $source_port -a $source_auth -n $source_db MIGRATE $target_host $target_port "" $target_db 5000 COPY AUTH $target_auth KEYS $key"
redis-cli -h $source_host -p $source_port -a $source_auth -n $source_db MIGRATE $target_host $target_port "" $target_db 5000 COPY AUTH $target_auth KEYS $key
done
전 제 사건을 잘 처리하고 있어요, 시험해봤어요.
rdd를 사용할 수도 있습니다.
실행 중인 redis 서버를 덤프 및 복원하고 필터/일치/rename 덤프 키를 허용할 수 있습니다.
저도 같은 일을 하고 싶습니다. 독립 실행형 redisance에서 다른 redisance(redis sentinance)로 db를 마이그레이션하는 것입니다.
데이터가 중요하지 않기 때문에(session 데이터) https://github.com/yaauie/redis-copy 을 사용해 보겠습니다.
Redis 데이터 내보내기/백업 Redis 데이터(덤프 파일 생성)를 수행하는 간단한 방법은 플래그 슬레이브가 있는 명령줄을 통해 서버를 시작하고 다음과 같이 라이브 복제본을 생성하는 것입니다(소스 Redis가 포트 6379의 1.2.3.4라고 가정).
/usr/bin/redis-server --port 6399 --dbfilename backup_of_master.rdb --slaveof 1.2.3.4 6379
나는 방금 npm과 github에 주어진 패턴(심지어 *)과 일치하는 키를 한 Redis 데이터베이스에서 다른 데이터베이스로 복사할 수 있는 명령 줄 인터페이스 유틸리티를 게시했습니다.
이 유틸리티는 여기에서 확인할 수 있습니다.
https://www.npmjs.com/package/redis-utils-cli
레디스 dump가 드디어 효과가 있었어요이 문서에는 Redis 데이터베이스를 덤프하고 데이터를 다른 데이터베이스에 삽입하는 방법이 나와 있습니다.
언급URL : https://stackoverflow.com/questions/6004915/how-do-i-move-a-redis-database-from-one-server-to-another
'programing' 카테고리의 다른 글
경고: session_start(): 세션 쿠키를 보낼 수 없음 - 헤더는 이미 에 의해 전송되었습니다(출력 시작 시간: (0) | 2023.10.14 |
---|---|
Word press 연락처 양식 7 사용자에게 확인 메시지 보내기 (0) | 2023.10.14 |
각도를 고정하는 방법JS 및 Web Api 어플리케이션 (0) | 2023.10.14 |
개체에서 속성을 불변으로 제거 (0) | 2023.10.14 |
AngularJsng 테이블 고정 헤더 (0) | 2023.10.14 |