kafka 기술문서

zookeeper 쿼럼을 과반수 이상 작동해야하는 이유

saay-hi 2024. 6. 24. 13:36

[ 기동 불가한 경우 ]

[ 기동 가능한 경우 ]

  • Zookeeper 쿼럼을 과반수 이상 작동 해야하는 이유

         1 ) Zookeeper 1대만 기동할 경우 : zookeeper2,3 번갈아서 connection 시도

         2 ) Zookeeper 2대 기동할 경우 : zookeeper3 connection 하려고하지만, 연결이 안 되자 더 이상 connection 시도하지 않음. 또한 이 때 leader – follower 선출, zookeeper2 following 상태로 전환

         3 ) Zookeeper 3대 모두 기동할 경우 :기존 leader 변동 없이 zookeeper3 following 상태로 전환

 

  • zookeeper 먼저 기동하고 과반수 이상 작동해야, broker 정상 기동 

         1 ) 단, cluster 로 묶인 consumer group일 경우 broker 0,1,2가 모두 기동해야 consumer group 조회 가능

 

  • 기본 구성
Zookeeper_servers
server.1=192.168.56.105:2887:3887
server.2=192.168.56.105:2888:3888
server.3=192.168.56.105:2889:3889
Broker 0,1,2
Broker 0 : 192.168.56.105:9092
Broekr 1 : 192.168.56.105:9093
Broker 2 : 192.168.56.105:9094

참고) 

1. zookeeper 과반수 이상 기동해야 정상 기동 - 쿼럼

ookeeper1만 기동했을때 server log 상태
[2024-02-27 09:30:53,912] INFO Reading configuration from: ../config/zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
[2024-02-27 09:30:53,920] WARN ../config/zookeeper.properties is relative. Prepend ./ to indicate that you're sure! (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
[2024-02-27 09:30:53,924] INFO clientPortAddress is 0.0.0.0:2181 (org.apache.zookeeper.server.quorum.
생략...

java.net.ConnectException: 연결이 거부됨 (Connection refused)
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:607)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager.initiateConnection(QuorumCnxManager.java:384)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager$QuorumConnectionReqThread.run(QuorumCnxManager.java:458)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:750)

zookeeper2 이어서 기동 시작
[2024-02-27 09:33:50,796] INFO Reading configuration from: ../config/zookeeper2.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
[2024-02-27 09:33:50,798] WARN ../config/zookeeper2.properties is relative. Prepend ./ to indicate that you're sure! (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
[2024-02-27 09:33:50,804] INFO clientPortAddress is 0.0.0.0:2182 (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
[2024-02-27 09:33:50,804] INFO secureClientPort is not set (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
[2024-02-27 09:33:50,804] INFO observerMasterPort is not set (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
[2024-02-27 09:33:50,804] INFO metricsProvider.className is org.apache.zookeeper.metrics.impl.DefaultMetricsProvider (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
[2024-02-27 09:33:50,819] INFO autopurge.snapRetainCount set to 3 (org.apache.zookeeper)'

java.net.ConnectException: 연결이 거부됨 (Connection refused)
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:607)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager.initiateConnection(QuorumCnxManager.java:384)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager$QuorumConnectionReqThread.run(QuorumCnxManager.java:458)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:750)
[2024-02-27 09:33:51,177] INFO Notification: my state:LOOKING; n.sid:1, n.state:LOOKING, n.leader:1, n.round:0x1, n.peerEpoch:0x18, n.zxid:0x18000000a6, message format version:0x2, n.config version:0x0 (org.apache.zookeeper.server.quorum.FastLeaderElection)
[2024-02-27 09:33:51,179] INFO Notification: my state:LOOKING; n.sid:2, n.state:LOOKING, n.leader:2, n.round:0x1, n.peerEpoch:0x18, n.zxid:0x18000000a6, message format version:0x2, n.config version:0x0 (org.apache.zookeeper.server.quorum.FastLeaderElection)
[2024-02-27 09:33:51,181] INFO Notification: my state:LOOKING; n.sid:1, n.state:LOOKING, n.leader:2, n.round:0x1, n.peerEpoch:0x18, n.zxid:0x18000000a6, message format version:0x2, n.config version:0x0 (org.apache.zookeeper.server.quorum.FastLeaderElection)
[2024-02-27 09:33:51,183] INFO Notification: my state:LOOKING; n.sid:1, n.state:LOOKING, n.leader:2, n.round:0x1, n.peerEpoch:0x18, n.zxid:0x18000000a6, message format version:0x2, n.config version:0x0 (org.apache.zookeeper.server.quorum.FastLeaderElection)
[2024-02-27 09:33:51,183] WARN Cannot open channel to 3 at election address /192.168.56.105:3889 (org.apache.zookeeper.server.quorum.QuorumCnxManager)
java.net.ConnectException: 연결이 거부됨 (Connection refused)
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:607)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager.initiateConnection(QuorumCnxManager.java:384)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager$QuorumConnectionReqThread.run(QuorumCnxManager.java:458)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:750)
[2024-02-27 09:33:51,387] INFO Peer state changed: leading (org.apache.zookeeper.server.quorum.QuorumPeer)
[2024-02-27 09:33:51,388] INFO Peer state changed: following (org.apache.zookeeper.server.quorum.QuorumPeer)
[2024-02-27 09:33:51,388] INFO LEADING (org.apache.zookeeper.server.quorum.QuorumPeer)
[2024-02-27 09:33:51,389] INFO FOLLOWING (org.apache.zookeeper.server.quorum.QuorumPeer)
[2024-02-27 09:33:51,395] INFO zookeeper.leader.maxConcurrentSnapSyncs = 10 (org.apache.zookeeper.server.quorum.LearnerMaster)
[2024-02-27 09:33:51,395] INFO zookeeper.leader.maxConcurrentDiffSyncs = 100 (org.apache.zookeeper.server.quorum.LearnerMaster)
[2024-02-27 09:33:51,396] INFO TCP NoDelay set to: true (org.apache.zookeeper.server.quorum.Leader)
[2024-02-27 09:33:51,396] INFO zookeeper.leader.ackLoggingFrequency = 1000 (org.apache.zookeeper.server.quorum.Leader)
[2024-02-27 09:33:51,396] INFO zookeeper.leader.maxTimeToWaitForEpoch = -1ms (org.apache.zookeeper.server.quorum.Leader)
[2024-02-27 09:33:51,398] INFO leaderConnectDelayDuringRetryMs: 100 (org.apache.zookeeper.server.quorum.Learner)
[2024-02-27 09:33:51,398] INFO TCP NoDelay set to: true (org.apache.zookeeper.server.quorum.Learner)
[2024-02-27 09:33:51,398] INFO zookeeper.learner.asyncSending = false (org.apache.zookeeper.server.quorum.Learner)
[2024-02-27 09:33:51,398] INFO zookeeper.learner.closeSocketAsync = false (org.apache.zookeeper.server.quorum.Learner)
[2024-02-27 09:33:51,401] INFO Weighed connection throttling is disabled (org.apache.zookeeper.server.BlueThrottle)
[2024-02-27 09:33:51,402] INFO Weighed connection throttling is disabled (org.apache.zookeeper.server.BlueThrottle)
[2024-02-27 09:33:51,402] INFO minSessionTimeout set to 6000 ms (org.apache.zookeeper.server.ZooKeeperServer)
[2024-02-27 09:33:51,402] INFO maxSessionTimeout set to 60000 ms (org.apache.zookeeper.server.ZooKeeperServer)
[2024-02-27 09:33:51,403] INFO minSessionTimeout set to 6000 ms (org.apache.zookeeper.server.ZooKeeperServer)
[2024-02-27 09:33:51,404] INFO maxSessionTimeout set to 60000 ms (org.apache.zookeeper.server.ZooKeeperServer)
//zookeeper3 기동       
[2024-02-27 09:38:20,356] INFO Reading configuration from: ../config/zookeeper3.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
[2024-02-27 09:38:20,358] WARN ../config/zookeeper3.properties is relative. Prepend ./ to indicate that you're sure! (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
[2024-02-27 09:38:20,365] INFO clientPortAddress is 0.0.0.0:2183 (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
[2024-02-27 09:38:20,365] INFO secureClientPort is not set (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
[2024-02-27 09:38:20,365] INFO observerMasterPort is not set (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
[2024-02-27 09:38:20,365] INFO metricsProvider.className is org.apache.zookeeper.metrics.impl.DefaultMetricsProvider (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
[2024-02-27 09:38:20,382] INFO autopurge.snapRetainCount set to 3 (org.apache.zookeeper.server.DatadirCleanupManager)
[2024-02-27 09:38:20,382] INFO autopurge.purgeInterval set to 0 (org.apache.zookeeper.server.DatadirCleanupManager)
[2024-02-27 09:38:20,382] INFO Purge task is not scheduled. 
생략...
[2024-02-27 09:38:20,829] INFO 3 is accepting connections now, my election bind port: /192.168.56.105:3889 (org.apache.zookeeper.server.quorum.QuorumCnxManager)
[2024-02-27 09:38:20,831] INFO LOOKING (org.apache.zookeeper.server.quorum.QuorumPeer)
[2024-02-27 09:38:20,833] INFO New election. My id = 3, proposed zxid=0x18000000a6 (org.apache.zookeeper.server.quorum.FastLeaderElection)
[2024-02-27 09:38:20,845] INFO Notification: my state:LOOKING; n.sid:3, n.state:LOOKING, n.leader:3, n.round:0x1, n.peerEpoch:0x18, n.zxid:0x18000000a6, message format version:0x2, n.config version:0x0 (org.apache.zookeeper.server.quorum.FastLeaderElection)
[2024-02-27 09:38:20,846] INFO Received connection request from /192.168.56.105:37654 (org.apache.zookeeper.server.quorum.QuorumCnxManager)
[2024-02-27 09:38:20,846] INFO Received connection request from /192.168.56.105:35090 (org.apache.zookeeper.server.quorum.QuorumCnxManager)
[2024-02-27 09:38:20,852] INFO Notification: my state:LEADING; n.sid:3, n.state:LOOKING, n.leader:3, n.round:0x1, n.peerEpoch:0x18, n.zxid:0x18000000a6, message format version:0x2, n.config version:0x0 (org.apache.zookeeper.server.quorum.FastLeaderElection)
[2024-02-27 09:38:20,853] INFO Notification: my state:FOLLOWING; n.sid:3, n.state:LOOKING, n.leader:3, n.round:0x1, n.peerEpoch:0x18, n.zxid:0x18000000a6, message format version:0x2, n.config version:0x0 (org.apache.zookeeper.server.quorum.FastLeaderElection)
[2024-02-27 09:38:20,853] INFO Notification: my state:LOOKING; n.sid:2, n.state:LOOKING, n.leader:2, n.round:0x1, n.peerEpoch:0x18, n.zxid:0x18000000a6, message format version:0x2, n.config version:0x0 (org.apache.zookeeper.server.quorum.FastLeaderElection)
[2024-02-27 09:38:20,854] INFO Notification: my state:LOOKING; n.sid:1, n.state:LOOKING, n.leader:2, n.round:0x1, n.peerEpoch:0x18, n.zxid:0x18000000a6, message format version:0x2, n.config version:0x0 (org.apache.zookeeper.server.quorum.FastLeaderElection)
[2024-02-27 09:38:20,855] INFO Notification: my state:LOOKING; n.sid:1, n.state:FOLLOWING, n.leader:2, n.round:0x1, n.peerEpoch:0x19, n.zxid:0x18000000a6, message format version:0x2, n.config version:0x0 (org.apache.zookeeper.server.quorum.FastLeaderElection)
[2024-02-27 09:38:20,857] INFO Notification: my state:LOOKING; n.sid:2, n.state:LEADING, n.leader:2, n.round:0x1, n.peerEpoch:0x19, n.zxid:0x18000000a6, message format version:0x2, n.config version:0x0 (org.apache.zookeeper.server.quorum.FastLeaderElection)

고민해볼 것 : 연결이 성공했다는 워딩을 뭘로 잡고 grep으로 조회할 지