programing

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

telebox 2023. 10. 14. 10:03
반응형

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)

간단히 말해서:

  1. 대상 redis를 소스 redis의 슬레이브로 설정(데이터 포함)
  2. 복제가 완료될 때까지 기다립니다.
  3. 대상 redis(현재 슬레이브인)에 쓰기 허용
  4. 앱을 대상 redis로 전환
  5. 마스터에서 슬레이브로 데이터 스트림 완료 대기
  6. 목표물을 주인에서 노비로 바꾸다

또한 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

반응형