영사관에서는 서버 또는 클라이언트로 많은 에이전트를 보유 할 수 있습니다. 모든 서버 중에서 하나가 리더로 선택됩니다. 에이전트의 관점에서 볼 때, 그것이 리더라는 것을 어떻게 알 수 있습니까?영사 대리인은 그것이 클러스터의 리더임을 어떻게 알 수 있습니까?
답변
한 가지 방법은 현재 선두를 반환합니다 http://<localhost_ip_address>:8500/v1/status/leader
이와 클러스터를 호출하는 것입니다. 그런 다음 로컬 IP 주소와 비교하여 반환 된 IP 주소를 확인하십시오.
영사 리더는 영사 서버 정족수 중 Raft Protocol 구현을 통해 선출됩니다. 서버로 구성된 영사 인스턴스 만 뗏목 프로토콜 통신에 참여합니다. Consul Agent (데몬)은 Client 또는 Server으로 시작할 수 있습니다. 서버 만 데이터 센터의 리더가 될 수 있습니다.
뗏목 프로토콜은 Paxos과 같은 기존 합의 프로토콜의 복잡성에 대한 응답으로 스탠포드 대학의 Diego Ongaro 및 John Ousterhout에 의해 작성되었습니다. 뗏목은 무작위 타이머의 사용을 통해 지도자를 선출합니다. 알고리즘은 Ongaro and Ousterhout's paper에 자세히 설명되어 있습니다.
클라이언트로 구성된 영사 인스턴스는 Serf을 기반으로하는 Gossip Protocol을 통해 클러스터와 통신합니다. 서프 커뮤니케이션은 결국 일관성이있다. Serf 클러스터에는 중앙 서버가 없으며 각 노드는 동일한 것으로 간주됩니다. Gossip/Serf Protocol에 참여하는 모든 노드 (클라이언트 및 서버)는 인접 라우터에 메시지를 전파하고 메시지가 전체 클러스터로 전파 될 때까지 이웃 노드로 메시지를 전파합니다. 좀비 종말의 감염 경로와 비슷합니다. 이는 잠재적으로 수만개의 노드로 확장되므로 클러스터의 통신 오버 헤드를 크게 줄이기 위해 수행됩니다.
영사 클라이언트는 모든 영사 서버로 메시지를 전달할 수 있습니다. 그러면 영사는 메시지를 리더에게 전달할 수 있습니다. 영사 클라이언트는 어떤 영사 서버가 지도자인지 신경 쓸 필요가 없습니다. 서버 만 신경 써야합니다.
모든 영사 서버에서 실행되는 Consul HTTP API은 어느 서버가 선두에 있는지 알려주므로 $ANY_CONSUL_SERVER/v1/status/leader
에 있습니다. 그러나 이것은 영사 대리인이 지도자 선거를하는 방식과 아무런 관련이 없습니다.
답변을 종료하는 것은 싫지만 첫 번째 5 문장은 질문과는 아무런 관련이 없으며 여섯 번째 문장에는 이전에 제공된 것과 동일한 답변이 포함되어 있습니다. –
상담원이 클러스터의 리더임을 알리는 방법을 물었습니다. 에이전트의 유형은 누가 리더가 될 수 있는지를 좁히는 것과 관련이 있습니다. – jeremyjjbrown
- 1. 는 어떻게 알 수 있습니까 그리고 그것이
- 2. MessageWindow - 그것이 파괴되었는지 어떻게 알 수 있습니까?
- 3. "일반"대리인은 어떻게 가질 수 있습니까?
- 4. rabbitmq 클러스터의 어떤 노드가 HA인지 어떻게 알 수 있습니까?
- 5. 영사 매트릭스는 어떻게 작동합니까?
- 6. 영사 중요한 영사 시계는
- 7. 이 시나리오에서 대리인은 어떻게 사용합니까?
- 8. 어떻게 알 수 있습니까?
- 9. XCTest : 어떤 XCTestExpectation이 '이행'을 호출했는지 어떻게 알 수 있습니까?
- 10. 생년월일을 어떻게 알 수 있습니까?
- 11. mapView가로드되었는지 어떻게 알 수 있습니까?
- 12. ASIFormDataRequest를 어떻게 알 수 있습니까?
- 13. requestLocationUpdate가 활성화되어 있는지 어떻게 알 수 있습니까?
- 14. git 저장소의 깊이를 어떻게 알 수 있습니까?
- 15. 메서드는 어디에서 호출되는지 어떻게 알 수 있습니까?
- 16. 컬렉션이 편집 된시기를 어떻게 알 수 있습니까?
- 17. ASIHTTPRequest의 다른 대리인은 비동기입니까?
- 18. OpenId Identity URL을 어떻게 알 수 있습니까?
- 19. 이 파일의 언어를 어떻게 알 수 있습니까?
- 20. PreparedStatement가 어떻게 보이는지 어떻게 알 수 있습니까?
- 21. 유닉스에서 어떻게 프로세스가 시작되는지 알 수 있습니까?
- 22. NSObject는 그려진 뷰를 어떻게 알 수 있습니까
- 23. 분기 예측자가 잘못되었는지 어떻게 알 수 있습니까?
- 24. WINDOWS/system32/LogFiles가 사용 중입니다. 어떤 프로그램이 그것을 사용하고 있는지 어떻게 알 수 있습니까? 그것이 서버라면 어떻게 사용할 수 있습니까?
- 25. System.Windows.Input.Cursors는 커서의 모양을 어떻게 알 수 있습니까?
- 26. setFetchBatchSize가 작동하는지 어떻게 알 수 있습니까?
- 27. 메모리 누수가 있는지 어떻게 알 수 있습니까?
- 28. 컨트롤이 초기화되는 시점을 어떻게 알 수 있습니까?
- 29. node.js가 종료 시점을 어떻게 알 수 있습니까?
- 30. 예외가있을 수 있음을 어떻게 알 수 있습니까?
// 이것은 외부 프로그램이 누가 현재의 리더인지 알 수있는 방법입니다. 그러나 그것은 영사의 그 자체가 그것이 현재의 지도자라는 것을 어떻게 알고 있는지를 말하지 않습니다. –
@ NathanBasanese 알렉산드레 산토스가 정답을 염려하지 않는다고 생각합니다. – jeremyjjbrown