아래에 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
이것은 올바른 방향으로 나를 인도했습니다. 감사합니다! 가능한 한 빨리 내 질문을 업데이트 할 것입니다. – rocksteady