Redis 데이터를 새 서버에 복사
3가지 간단한 방법을 알고 있습니다.
더 복잡한 기타 옵션:
https://github.com/Netflix/dynomite - 복제 및 라우팅
redis-migrate-tool
https://github.com/vipshop/redis-migrate-tool
원본 서버/클러스터의 변경 사항을 모니터링하고 대상 서버에 적용합니다. 새 redis 인스턴스를 사용하기 위해 redis에 적극적으로 쓰는 앱을 마이그레이션할 때 유용합니다. 다른 유사한 도구가 있지만 이 도구는 작동하고 구성하기 쉽습니다.
지원되는 유형에 대한 README를 확인하십시오. C로 작성되었으며 docker로 실행하기가 더 쉽습니다.
docker pull ahmadgh21/redis-migrate-tool
docker run -it ahmadgh21/redis-migrate-tool bash
# inside container
mkdir /tmp
chmod 777 /tmp
apt-get update
apt install nano
nano /etc/redis-migrate-tool/rmt.conf
구성 예
[source]
type: single
hash: fnv1a_64
hash_tag: "{}"
distribution: ketama
servers :
- <source IP>:6379 # <--- change this
[target]
type: single
servers:
- <destination IP>:6379 # <--- change this
[common]
listen: 0.0.0.0:8888
컨테이너 내에서 마이그레이션 도구 실행
/opt/redis-migrate-tool -c /etc/redis-migrate-tool/rmt.conf
나만의 스크립트 만들기
이 스크립트는 단순히 서버 A에서 서버 B로 모든 키를 복사합니다(모든 데이터 유형을 지원하지는 않습니다. 코드에서 찾으십시오).
require 'redis'
puts "Connecting to redis://#{ARGV[0]} and redis://#{ARGV[1]}"
redis_src = Redis.new(url: "redis://#{ARGV[0]}")
redis_dest = Redis.new(url: "redis://#{ARGV[1]}")
dest_keys = redis_dest.keys("*")
redis_src.keys("*").each do |key|
next if dest_keys.include?(key)
type = redis_src.type(key)
if type == "hash"
value = redis_src.hgetall(key)
puts "HASH #{key} : #{value}"
redis_dest.mapped_hmset(key, value)
elsif type == "list"
values = redis_src.lrange(key, 0, -1)
puts "LIST. #{key} : #{values}"
redis_dest.lpush(key, values)
elsif type == "set"
values = redis_src.smembers(key)
puts "SET #{key} : #{values}"
redis_dest.sadd(key, values)
else
data = redis_src.get(key)
puts "STRING #{key} : #{data}"
redis_dest.set(key, data)
end
end
puts "Complete"
Ruby redis 라이브러리가 설치되어 있는지 확인하십시오(
gem install redis
).스크립트 실행
ruby redis_copy.rb source_IP destination_IP
redis 복제 설정
이것이 가장 적절한 선택이라고 생각하지만 더 많은 준비가 필요합니다.
마스터에서 구성을 업데이트해야 합니다.
protected-mode no
requirepass 1234abcd
레플리카 서버에서 우리는 설정을 넣어야 합니다:
replicaof <master ip> 6379
masterauth 1234abcd
마스터를 다시 시작한 다음 복제본을 다시 시작하고 로그를 확인하십시오.
redis-cli에서 상태 확인
INFO replication
더 많은 문서:
장점과 단점
간단한 스크립트 - 값을 한 번만 복사하면 캐시, 속도 제한과 같이 중요하지 않은 데이터 및 구성과 같이 거의 업데이트되지 않는 데이터에 사용할 수 있습니다.
나는 보통 새 서버에 연결하기 위해 앱을 업데이트하기 전에 한 번 실행하고 모든 데이터가 동기화되었는지 확인하기 위해 다시 한 번 실행합니다.
redis-migrate-tool - 소스에서 대상으로 모든 데이터를 지속적으로 복제합니다. 지속적으로 redis에 업데이트를 작성하는 앱의 경우. 사용자 세션, 임시 중요 값.
그러나 대상 서버에서 다시 소스로 쓰기를 복제하지 않습니다. 한 프로세스가 새 서버에 쓰기/업데이트하고 다른 프로세스가 이전 서버에서 찾을 수 없는 상황을 방지하려면 업데이트된 구성으로 한 번에 모든 앱을 다시 시작해야 합니다. (마이그레이션하는 동안 보통 앱을 1개의 복제본으로 축소합니다.)
redis 복제 - 복제본을 쓸 수 없습니다. 마이그레이션에 짧은 가동 중지 시간이 필요하거나 원활하게 처리하기 위해 코드를 수정해야 합니다. 코드에서 데이터를 새 서버에 저장하려고 시도하고 "쓸 수 없음"오류가 발생하면 이전 서버에 저장합니다.
지금 하고 있는 모든 분들에게 원활한 Redis 마이그레이션을 진행하세요 :)
Reference
이 문제에 관하여(Redis 데이터를 새 서버에 복사), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/paxa/copy-redis-data-to-new-server-1cb9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)