복붙노트

[REDIS] 레디 스 하드 오류가 발생할 경우 클러스터에 어떻게 특정 노드의 해시 슬롯을 다시 시작하려면?

REDIS

레디 스 하드 오류가 발생할 경우 클러스터에 어떻게 특정 노드의 해시 슬롯을 다시 시작하려면?

나는 레디 스 클러스터를 테스트입니다 그래서. 나는 3 개 마스터 3 노예와 설정이 있습니다. 이제, 경우에 노드가 하드 고장 (마스터 및 슬레이브 아래로 이동합니다)에 직면, 클러스터는 실패한 노드에서 제공하는 해시 슬롯을 금지, 여전히 작동합니다. 이러한 시나리오를 테스트하는 동안 지금, 나는 괜찮이 (내가 BTW jedis을 사용하고 있습니다) 인 예외와 함께 실패 이러한 해시 슬롯에서 제공하는 키에서 작동 / 쓰기를 읽고 참조하십시오. 내가 캐시로 레디 스 클러스터를 사용하고 있습니다 그러나, 나는 다른 노드에 의해 제공되는 이러한 해시 슬롯을하고 싶습니다. 이 기능은 레디 스-trib 유틸리티에 존재하지 않는 것.

./redis-trib.rb reshard 모든 # {ClusterHashSlots} 슬롯이 노드에 포함되는 것은 아닙니다 [ERR] 실패로 나는이 해시 슬롯을 이동하기 위해 클러스터를 reshard 수 없습니다 .. 또한 ./redis으로 클러스터에서 노드를 제거 할 수 없습니다 -trib.rb 델 노드는 [ERR]가 노드 # {노드} 비어 있지 않은 실패! 멀리 Reshard 데이터와 내가 내 원래의 노드를 가져올 수 없습니다 시나리오를 다루는 가장 좋은 방법 다음 ... 무엇을 다시 시도하지만 (나는 데이터의 손실로 미세한임을 가정하고 그 해시 슬롯은 다른 노드에 의해 제공되고 싶지 ) 이전 노드에? 이상적으로, (클러스터에서 마스터와 슬레이브와 다른 노드로 그 해시 슬롯을 할당) 노드를 제거 할 수있는 뭔가.

해결법

  1. ==============================

    1.그것은 몇 가지 접속 노드에 오류가 발생한 노드에서 제공 한 모든 슬롯을 추가하여 클러스터를 해결합니다. 접근 방식은 addslots 명령을 클러스터를 사용하는 것입니다,하지만 난 우리 팀에 의해 개발 된이 도구를 제안 그래서 물론 수동으로 그것을 어떻게 든 어렵습니다.

    그것은 몇 가지 접속 노드에 오류가 발생한 노드에서 제공 한 모든 슬롯을 추가하여 클러스터를 해결합니다. 접근 방식은 addslots 명령을 클러스터를 사용하는 것입니다,하지만 난 우리 팀에 의해 개발 된이 도구를 제안 그래서 물론 수동으로 그것을 어떻게 든 어렵습니다.

    (쉘) 사용 :

    # it requires Python2.7; install it via pip
    pip install redis-trib
    
    # suppose one of the accessible nodes is serving at 172.0.0.1:7000
    # start a cluster-mode Redis that is not involved in any cluster
    # suppose its address is 172.0.0.5:8000
    redis-trib.py rescue --existing-addr 172.0.0.1:7000 --new-addr 172.0.0.5:8000
    

    클러스터 상태가 확인 될 수 있도록 새로운 노드는 모두 실패 슬롯을 제공 할 후있다.

  2. from https://stackoverflow.com/questions/37416199/how-to-resume-hash-slots-of-a-particular-node-in-redis-cluster-in-case-of-hard-f by cc-by-sa and MIT license