0

상황docker 클러스터에서 redis 클러스터를 실행하는 방법은 무엇입니까?

가 최고 떨어져 고정 표시기 클러스터에서 실행되도록 내가 최대의 자동 복구 기능을 달성하기 위해, 설치에 레디 스 클러스터를 시도하고있다.

좀 더 정확히 말하면, 3 개의 복제본을 가진 서비스를 정의하는 도커 작성 파일이 있습니다. 각 서비스 복제에는 실행중인 redis-server가 있습니다. 그런 다음 각 복제본 안에 도커 클러스터의 변경 사항을 수신하고 조건이 충족되면 클러스터를 시작하는 프로그램이 있습니다 (각 redis-servers는 서로를 알고 있습니다).

redis 클러스터 작업을 설정하면 클러스터가 형성되고 모든 redis-server는 통신이 잘되지만 redis-server 간의 통신은 docker 클러스터 내에 있습니다.

문제점

내가 정보를 추가 할 때 때문에하지만, 레디 스-서버와 통신 할 수 있어요 유입 모드는 고정 표시기 클러스터 외부에서 통신을 시도 (예 : 세트 foo bar) 클라이언트가 다른 redis-server로 이동하면 통신이 중지되고 결국 시간 초과됩니다.

코드

이것은 고정 표시기-작성 파일입니다.

version: "3.3" 
services: 
    redis-cluster: 
     image: redis-srv-instance 
     volumes: 
     - /var/run/:/var/run 
     deploy: 
     mode: replicated 
     #endpoint_mode: dnsrr 
     replicas: 3 
     resources: 
      limits: 
      cpus: '0.5' 
      memory: 512M 
     ports: 
     - target: 6379 
      published: 30000 
      protocol: tcp 
      mode: ingress 

문제를 나타내는 명령의 흐름.

클라이언트

~ ./redis-cli -c -p 30000 
127.0.0.1:30000> 

레디 스 서버

OK 
1506533095.032738 [0 10.255.0.2:59700] "COMMAND" 
1506533098.335858 [0 10.255.0.2:59700] "info" 

클라이언트

127.0.0.1:30000> set ghb fki 
OK 

레디 S-서버

1506533566.481334 [0 10.255.0.2:59718] "COMMAND" 
1506533571.315238 [0 10.255.0.2:59718] "set" "ghb" "fki" 

클라이언트

127.0.0.1:30000> set rte fgh 
-> Redirected to slot [3830] located at 10.0.0.3:6379 
Could not connect to Redis at 10.0.0.3:6379: Operation timed out 
Could not connect to Redis at 10.0.0.3:6379: Operation timed out 
(150.31s) 
not connected> 

어떤 아이디어? 나는 또한 하나의 프록시 /로드 밸런서를 만들려고했으나 작동하지 않았다.

감사합니다. 좋은 하루 되세요.

답변

1

이 사례의 경우 sentinel이 도움이 될 수 있습니다. Redis는 자체적으로 가용성이 높지는 않습니다. 다른 쪽의 Sentinel은 다음을 수행 할 수있는 분산 시스템입니다.

  • 수신 트래픽을 현재 Redis 마스터로 라우팅하십시오.
  • 현재 Redis 마스터가 실패 할 경우 새 Redis 마스터를 선택하십시오.

이전에이 주제에 대한 연구를 수행했지만 필자는 아직 작업 예제를 게터로 가져 오지 못했습니다.

0

redis-cli는 수신 네트워크 내에 redis server ip를 가져 와서 해당 ip로 원격 redis 서버에 직접 액세스하려고합니다. 이것이 바로 redis-cli가 Redirected to slot [3830] located at 10.0.0.3:6379 인 이유입니다. 그러나이 내부 10.0.0.3은 redis-cli에 액세스 할 수 없습니다.

하나의 솔루션은 redis 클러스터를 사용하여 동일한 네트워크에 연결된 다른 프록시 서비스를 실행하는 것입니다. 응용 프로그램은 모든 요청을 해당 프록시 서비스로 보내고 프록시 서비스는 redis 클러스터와 대화합니다.

또는 브리지 네트워크를 사용하고 노드에 redis 포트를 제공하는 3 개의 swarm 서비스를 만들 수 있습니다. 그에 따라 내부 프로그램도 변경해야합니다.

관련 문제