먼저 센티넬을 이야기합시다.
Sentinel은 장애 조치를 관리하지만 HA 용 Redis를 구성하지 않습니다. 중요한 구별입니다. 둘째, 게시 한 다이어그램은 실제로 잘못된 설정입니다. 관리중인 Redis 노드와 동일한 노드에서 Sentinel을 실행하고 싶지는 않습니다. 호스트를 잃으면 둘 다 잃게됩니다.
"자원 낭비인가?" 사용 사례에 따라 다릅니다. 해당 설정에는 3 개의 Redis 노드가 필요하지 않으며 2 개만 필요합니다. 3은 중복성을 증가 시키지만 필수는 아닙니다. 추가 중복이 필요한 경우 리소스 낭비가 아닙니다. 중복성이 필요하지 않은 경우 단일 Redis 인스턴스를 실행하고 더 많은 것을 실행하는 것은 "낭비"될 수 있으므로이를 좋음이라고합니다.
두 개의 슬레이브를 실행하는 또 다른 이유는 읽기를 분할하는 것입니다. 다시 말하지만, 필요하다면 낭비가 아닙니다.
"사용 가능한 자원을 최대한 활용하는 더 좋은 방법이 있습니까?" 특정 시나리오와 코드에 너무 많이 의존하기 때문에 대답 할 수 없습니다. 즉, 저장할 데이터의 양이 "작고"명령 속도가 너무 높지 않다면 호스트를 Redis 전용으로 사용할 필요가 없다는 것을 기억하십시오.
이제 "Redis 클러스터링은 Redis 센티넬의 대안입니까?"입니다. 실제로 사용 사례에 따라 다릅니다. Redis Cluster는 HA 솔루션이 아닙니다. 다중 작성자 / ram보다 큰 솔루션입니다. 목표가 HA 인 경우 적합하지 않을 수 있습니다. Redis Cluster에는 특히 다중 키 작업과 관련된 제한 사항이 있으므로 반드시 "클러스터 사용"작업이 간단하지는 않습니다.
Redis를 실행하는 호스트 3 개 (및 센티넬 실행중인 3 개)를 갖는 것이 낭비라고 생각한다면 더 많은 리소스가 필요하므로 클러스터를 훨씬 더 많이 보유하게 될 것입니다.
당신이 묻는 질문은 아마도 너무 광범위하고 의견에 근거하여 쓰여진대로 살아남을 수 없습니다. 해결중인 특정 사례 / 문제가있는 경우이를 업데이트하여 특정 지원 및 정보를 제공 할 수 있습니다.
세부 사항 업데이트 :
귀하의 시나리오에서 적절한 장애 조치 관리를 위해 JBoss 서버에서 실행되는 3 개의 센티널을 사용하겠습니다. 3 개의 JBoss 노드가있는 경우 각각 하나씩 사용하십시오. 별도의 노드에 Redis 포드 (마스터 + 슬레이브)가 있고 sentinel이 장애 조치를 관리하도록합니다.
거기에서 정보 및 연결 관리를 위해 Sentinel을 사용하기 위해 JBoss / Jedis를 연결하는 문제입니다. 빠른 검색을 사용하지 않기 때문에 Jedis가 지원하는 것으로 나타 났으므로 올바르게 구성하면됩니다. 내가 찾은 몇 가지 예 는 Sentinel 및 https://github.com/xetorthio/jedis/issues/725 와 함께 Jedis의 예 를 찾고JedisSentinelPool 있으며 풀 사용 경로에 대해 이야기 합니다.
Sentinel이 페일 오버를 실행할 때 클라이언트는 연결이 끊어지고 Jedis는 현재 마스터가 누구인지 센티넬에게 요청하여 재 연결을 처리합니다.