실제 온라인 상황은 총 4개의 서버가 있는 상황입니다. 지금은 주로 memcache
를 사용하고 있고, 현재 메모리 공간은 61M정도만 사용하고 있습니다. 회사의 요구는 전체 웹사이트의 캐시를 점차적으로 Redis로 마이그레이션하는 것입니다.
현재 아이디어는 3개의 서버를 클러스터로 사용하고 각 서버는 마스터 인스턴스로 구성되는 것입니다. 고가용성을 달성하려면 각 서버도 슬레이브 인스턴스로 구성되어야 합니다. 제가 묻고 싶은 것은 마스터 인스턴스와 슬레이브 인스턴스를 하나의 호스트에 구성할 수 있으며, 이러한 구성이 미치는 영향은 무엇입니까?
또 다른 아이디어는 2개의 서버만 사용하는 것입니다. 한 서버는 3개의 마스터 인스턴스를 실행하고 다른 서버는 3개의 슬레이브 인스턴스를 실행합니다. 더 나은 해결책이 있나요?
클러스터에는 마스터 노드가 3개 이상 있어야 한다는 말도 들었습니다. 마스터노드 2개 사용은 불가능한가요?
마스터와 슬레이브를 동일한 머신에 배치하면 문제가 발생합니다.
마스터와 슬레이브 모두 실행 시 메모리를 점유해야 하며, 머신의 메모리가 부족할 수 있습니다
머신이 다운되거나 전원이 꺼지거나 네트워크 연결이 끊어지면 마스터와 슬레이브에 대한 고가용성이 없습니다.
마스터와 슬레이브를 서로 다른 머신에 배치하는 것이 가장 좋습니다.
왜 2가 아닌 3인지. 이는 클러스터 선거 중 가장 좋은 전략입니다. Redis3.0이 클러스터를 지원하기 시작합니다.
일반적으로 클러스터가 특정 공개 상태에 대한 합의에 도달하려면 클러스터에 있는 Redis 인스턴스의 절반 이상이 동의해야 합니다.
다수결이 필요한 이유는 클러스터 내 분할 브레인, 즉 네트워크 분할 상황을 고려해야 하기 때문입니다.
다수결은 네트워크가 어떻게 분리되어도 보장할 수 있습니다. 얼마나 많은 소규모 클러스터가 대규모 클러스터로 분리되어 있더라도 서비스를 제공할 수 있는 소규모 클러스터의 인스턴스(인스턴스가 절반 이상 있음을 의미)는 적어도 하나의 인스턴스가 최신 상태 정보에 동기화됩니다.
위에서 언급한 과반수를 이해한 후 왜 홀수인지
짝수도 과반수를 가질 수 있습니다. 예를 들어, 4 인스턴스 클러스터의 경우 3이 다수입니다.
그런데 왜 여전히 홀수가 최고일까요?
클러스터에 인스턴스가 5개 있는 경우 인스턴스 2개의 충돌만 허용할 수 있습니다.
클러스터에 6개의 인스턴스가 있는 경우 2개의 인스턴스 충돌만 허용할 수 있습니다.
동일한 공차에서 6과 5의 차이점은 무엇입니까?
클러스터는 서로 통신해야 하기 때문에 인스턴스가 많을수록 네트워크 오버헤드도 커집니다.
인스턴스가 많을수록 인스턴스가 5개 있을 때 인스턴스 3개가 충돌할 확률은 인스턴스가 6개일 때보다 적습니다.
물론 홀수가 가장 비용 효율적입니다.
가능합니다. 포트만 다르게 설정하면 되는데, 영향에 관해서는 특별한 영향은 없는 것 같습니다.
3개의 머신이 있는 경우 계란을 한 바구니에 담는 대신 각 머신이 마스터를 실행한 다음 각 슬레이브를 다른 머신에 배치하여 링 백업을 형성합니다.
IP 자원이 충분하다면 고가용성을 구현하기 위한 하 미들웨어를 찾아보세요.
동일한 물리적 머신에 프로덕션 환경을 두는 것은 권장되지 않습니다. 3개의 마스터가 있는 클러스터는 3.0 클러스터를 말하는 것입니다. 홀수의 노드는 투표가 확실한 결과를 낳을 수 있음을 보장합니다
그럼 슬레이브는 다른 곳에 두자.
이 디자인에 대해 어떻게 생각하시나요?