1

아래에 docker-compose.yml 파일을 찾을 수 있습니다.지도자가 죽을 때 사육자 집단 지도력을 바꾸는 것

전제 조건 :

내가 (고정 표시기-compose.yml, 3 개 사육사)을 고정 표시기가-구성하여 클러스터로 3 개 사육사의 서버를 시작, 그럼 나는 4 일 (다른 docker-를 추가 compose.yml, 1 마리의 사육관)을 클러스터에 추가하십시오. 처음 3 명의 동물원 중 하나가 지도자이며, 4 명은 추종자입니다.

문제 :

내가 (docker-compose down에 의한) 처음 세 사육사를 중지, 나는 지도자를 "상실"하고 나는 4 사육사가 리더십을 기대합니다.

발생하는 유일한 것은 사육사가 echo stat | nc localhost 52181 | grep Mode 이전에이 마지막 사육사의 모드 follower 반환 수행

WARN Cannot open channel to 3 at election address localhost/127.0.0.1:43888 
java.net.ConnectException: Connection refused 

: 예컨대, 오류를 표시하고 이제 아무 것도 반환하지 않는다는 것이다.

INFO Closed socket connection for client /127.0.0.1:43548 (no session established for client) (org.apache.zookeeper.server.NIOServerCnxn) 

해결 방법 1 :

정지 runnng 사육사 서버는 예를 들어, 말한다

  • 증가 시간 제한이 도움이되지 않았다, 같은 결과 :

    ZOOKEEPER_TICK_TIME: 4000

    ,

    ZOOKEEPER_SYNC_LIMIT: 15

해결 방법 2 :하여 해결책

  • 다른 방법 :

내가 처음에 단일 사육사 서버를 시작 (다른 사람없이 이미 실행), 오류 메시지 만 반환하고 (위의 오류 참조) 분명히 실행되지 않습니다. echo stat | nc localhost 52181 | grep Mode은 아무것도 반환하지 않으므로 올바르게 입력하십시오.

그런 다음 다른 3 명의 동물원을 클러스터에 추가하면 모두 잘 실행되고 첫 번째 사육사 서버는 leader입니다.

첫 번째 사육사를 죽이는 것은 3 번 뛰며 그 중 하나는 새로운 leader입니다.

질문 :

  • 내가 기대 클러스터의 단일 사육사를 떠나는 것은 그것을 '리더'수있다.
  • 해결 방법 2에서 설명한 것처럼 "반대 방향"으로 작동합니다 (그러나 한 개는 아니지만 세 명의 동물원이 실행되고 한 개만 죽습니다).
  • 왜 단일 사육사를 리더 또는 단일 작업 사육사 서버로 남겨두고 문제에서 설명한대로 작동하지 않습니까?

고정 표시기-compose.yml 파일 :

--- 
version: '2' 
services: 
    zookeeper_1: 
    image: confluentinc/cp-zookeeper:3.1.1 
    network_mode: host 
    environment: 
     ZOOKEEPER_SERVER_ID: 1 
     ZOOKEEPER_CLIENT_PORT: 22181 
     ZOOKEEPER_TICK_TIME: 2000 
     ZOOKEEPER_INIT_LIMIT: 5 
     ZOOKEEPER_SYNC_LIMIT: 2 
     ZOOKEEPER_SERVERS: localhost:22888:23888;localhost:32888:33888;localhost:42888:43888;localhost:52888:53888 
    zookeeper_2: 
    image: confluentinc/cp-zookeeper:3.1.1 
    network_mode: host 
    environment: 
     ZOOKEEPER_SERVER_ID: 2 
     ZOOKEEPER_CLIENT_PORT: 32181 
     ZOOKEEPER_TICK_TIME: 2000 
     ZOOKEEPER_INIT_LIMIT: 5 
     ZOOKEEPER_SYNC_LIMIT: 2 
     ZOOKEEPER_SERVERS: localhost:22888:23888;localhost:32888:33888;localhost:42888:43888;localhost:52888:53888 
    zookeeper_3: 
    image: confluentinc/cp-zookeeper:3.1.1 
    network_mode: host 
    environment: 
     ZOOKEEPER_SERVER_ID: 3 
     ZOOKEEPER_CLIENT_PORT: 42181 
     ZOOKEEPER_TICK_TIME: 2000 
     ZOOKEEPER_INIT_LIMIT: 5 
     ZOOKEEPER_SYNC_LIMIT: 2 
     ZOOKEEPER_SERVERS: localhost:22888:23888;localhost:32888:33888;localhost:42888:43888;localhost:52888:53888 

의 I 시작 :

내가 3 개 고정 표시기-작성과 사육사 서버 다음과 같은 고정 표시기 - compose.yml 시작 4. 같은 방식으로 하나 :

--- 
version: '2' 
services: 
    zookeeper_4: 
    image: confluentinc/cp-zookeeper:3.1.1 
    network_mode: host 
    environment: 
     ZOOKEEPER_SERVER_ID: 4 
     ZOOKEEPER_CLIENT_PORT: 52181 
     ZOOKEEPER_TICK_TIME: 2000 
     ZOOKEEPER_INIT_LIMIT: 5 
     ZOOKEEPER_SYNC_LIMIT: 2 
     ZOOKEEPER_SERVERS: localhost:22888:23888;localhost:32888:33888;localhost:42888:43888;localhost:52888:53888 

답변

2

한가지 명심해야 할 점 : 사육자는 대다수의 서버가 실행 중일 때만 나타납니다. 그래서 4 대의 서버를 가지고 3 대의 서버를 가지고 있다면 사육사는 2 대의 서버를 다시 시작해야합니다.

사육사의 버전을 사용하고 계십니까? 3.5보다 크거나 (3.5를 사용하고 있고 reconfig 명령을 사용하지 않는 경우), 구성을 변경할 때 서버를 다시 시작해야합니다.

+0

이것은 올바른 방향으로 나를 인도했습니다. 감사합니다! 가능한 한 빨리 내 질문을 업데이트 할 것입니다. – rocksteady