zookeeper-3.4.6×ܽá

2026/4/24 2:22:07

4. zkÆô¶¯¹ý³Ì

OpCode.setDataOpCode.deleteOpCode.multiOpCode.createOpCode.setACLOpCode.closeSessionMinCommited ZxidMaxCommited ZxidprocessTxncommittedLogProposalProposalProposalProposalProposalDataTree1¡¢È¡100¸ö¿ìÕÕÎļþ°´Ê±¼äµ¹Ðð2¡¢Ñ°ÕÒµÚÒ»¸öÊý¾ÝÍêÕû²¢½øÐÐÐòÁл¯³É¹¦µÄ¿ìÕÕÎļþ3¡¢È»ºó½«ÈÕÖ¾ÎļþÖÐËùÓдóÓÚlastZidµÄÈÕÖ¾Ó¦Óõ½DataTreeºÍsessionsWithTimeoutÖУ¬²¢¸üÐÂLastXzidrestoreAdd ×î¶à±£Áô500¸öFileSnapPlayBackListenerPurgeTask(TimerTask¶¨Ê±ÇåÀíÈÕÖ¾)ͨ¹ý¿ÉÒÔÐÞ¸ÄÈÕÖ¾levelµÈÈë¿ÚFileTxnSnapLogrestoreLog4jMBeans FileTxnLogdoWorkRegiesterZKDatabasesessionsWithTimeoutsDatadirCleanupManagerQuorumPeerMainloadDataBase¢ÙsessionId¡ªtimeoutsessionId¡ªtimeoutsessionId¡ªtimeoutsessionId¡ªtimeoutsessionId¡ªtimeoutsessionId¡ªtimeoutsessionId¡ªtimeoutsessionId--timeoutQuorumPeerStartConfigFilesetConfig¢ÚQuorumPeerConfig¢ÛNIOServerCnxnFactoryThreadNIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181doWorkNIOServerCnxndoIOInput Args¢ÜtickTime,quorumVerifierµÈstartLeaderElectiondoAcceptSocketChannelAcceptServerSocketChannelCreate/startZkServerThreadQuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181doWorkCreatecreateThreadwhf1/192.168.137.10:3888sendNotificationslookForLeaderFastLeaderElectioncurrentVote(myid,lastZxid,currentEpoch)QuorumCnxManager.ListenerdoWorkServerSocket(port:3888)ThreadWorkerSender[myid=1]WorkerSenderQuorumCnxManagerMessengerstartdoWorkstartWorkerReceiverThreadWorkerReceiver[myid=1]doWork ?

µãÆÀ

Æô¶¯¹ý³Ì×öÁ˼¸¼þÊ£º1¡¢´ÓÊÂÎñÈÕÖ¾ºÍ¿ìÕÕÈÕÖ¾»Ö¸´Êý¾Ýµ½ÄÚ´æÊý¾Ý¿â 2¡¢Æô¶¯¶ÔÍâ·þÎñ¶Ë¿Ú

3¡¢Æô¶¯Ñ¡¾Ù¶Ë¿ÚºÍÏà¹ØỊ̈߳¬¿ªÊ¼Í¶Æ±Ñ¡¾ÙleaderµÄ¹ý³Ì Êý¾Ý»Ö¸´ÊÇÕâÑùµÄ£ºÊ×ÏȽ«×î½üµÄÒ»´ÎÍêºÃÎÞËðµÄ¿ìÕÕÎļþÈ«Á¿½âÎöµ½ÄÚ´æÊý¾Ý¿â£¬È»ºó´ÓÊÂÎñÈÕÖ¾ÖбȿìÕÕÎļþÉú³ÉµÄÊÂÎñidµÄÏÂÒ»¸öÊÂÎñid¿ªÊ¼£¬ÒÀ´ÎÓ¦ÓÃÊÂÎñµ½ÄÚ´æÊý¾Ý¿âµ±ÖУ¬²¢¼ÓÔØcurrentEpochÒÔ¼°lastZxid¡£

5. zk leaderÑ¡¾Ù

ThreadNIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181followLeaderZKDatabaseNIOServerCnxnFactorydoWorkNIOServerCnxndoIOobserveLeaderServerSocketLeaderZooKeeperServerFollowerZooKeeperServerObserverZooKeeperServerloadDataBasedoAcceptSocketChannelAcceptZkServerleadLeaderFollowerObserverServerSocketChannelCreatemakeLeaderCreatemakeFollowerCreatemakeObserverQuorumPeerStartThreadwhf1/192.168.137.10:3888leaderingFollowingobserveringstartLeaderElectionCreate/startQuorumCnxManager.ListenerdoWorkServerSocket(port:3888)½¨Á¢Á¬½Ó¡¢´«µÝsidSocketOBSERVING/FOLLOWING/LEADING״̬createThreadQuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181AcceptSocketdoWorkCreatecurrentVote(myid,lastZxid,currentEpoch)recvQueueÎÞÒìÒéPoll for 200msNotificationNotificationNotificationNotificationNotificationRecv Votes setSid-->leader,zxid,epochSid-->leader,zxid,epochSid-->leader,zxid,epochLOOKING״̬FastLeaderElectionCreate/initreceiveConnectionWait and poll toPredicateÊÇ·ñ¶àÊýÒ»ÖÂMessengercreateÖ»ÔÊÐíid´óµÄÈ¥Á¬idСµÄ·ñ£¬¼ÌÐøÑ­»·ÊÇtermPredicatesenderWorkerMapQuorumCnxManager¢ÛͶƱÀ´×Ôlooking¢ÛͶƱÀ´×Ôleader/followerlookForLeaderstartstartSidSidSendWorkerSendWorkerSendWorkerRecvWorker1¡¢ÅжÏleaderÊÇ·ñÈÏΪ×Ô¼ºÊÇleaderCheckLeaderooePredicate¢Ù¢Ûupdate¢ÚWorkerSenderWorkerReceiverSidsendNotificationsÓÃÓÚ´´½¨toSendVotepollThreadWorkerSender[myid=1]ThreadWorkerReceiver[myid=1]Create and startThreadSendWorker:IddoWorkdoWorkdoWorkSocketSend(ByteBuffer)VotingViewSID1offerÑ­»·SID1SID1QuorumServerQuorumServerQuorumServer¢ÙPOLLinitConnectionOfferSocket½¨Á¢Á¬½Ó±È¶Ôsid´óСServerSocket(port:3888)recvQueue¢ÚProcessNotificationNotificationNotificationNotificationNotificationAddPollPOLLToSendsendqueueToSendToSendToSendToSendToSendQuorumCnxManager.sendQueueZoom InByteBufferByteBufferByteBufferByteBufferByteBufferByteBufferqueueSendMapSidSidZoom InSidQueueQueueQueueIs To SelftoSend·ñ/addÊÇ/addQuorumCnxManagerMessageQuorumCnxManager.recvQueue for selfThreadRecvWorker:1QuorumCnxManagerdoWorkMessageMessageMessageMessageMessageZoom InToSend(leaderId,Zxid,logicClock,sid,state)ADD

? µãÆÀ£º ? ѡƱ¸ñʽ:

(proposedLeaderId,proposedZxid,logicalclock,proposedEpoch) ³õʼͶƱÊÇ

(×Ô¼ºµÄserverid,×Ô¼ºµÄlastZxid,×Ô¼ºµÄlogicalClock,×Ô¼ºµÄcurrentEpoch)

˵Ã÷£ºLogicalclockÊÇÑ¡¾Ù´ÎÊý£¬×Ô½ø³ÌÆô¶¯ÒÔÀ´¾­ÀúµÄµÚ¼¸´ÎÑ¡¾Ù£¬Îª±ÜÃâÒòÍøÂç¹ýÂýµ¼ÖÂÉÏÂÖÑ¡¾ÙÔì³ÉÓ°Ï죬¹ÊlogicclockÒª´ï³ÉÒ»Ö£¬ÒÔ×î´óµÄÄǸöÓÅÏÈ ? PK¹æÔò£ºÏȱȽÏepoch£¬epochÏàͬµÄ»°±È½Ïzxid£¬zxidÔÙÏàͬµÄ»°±È½Ïserverid£¬

Öµ´óµÄÄǸö»ñʤ£¬²ÎÓëͶƱµÄserverÈç¹û·¢ÏÖ½ÓÊÕµ½µÄͶƱ±È×Ô¼º´ó£¬ÄÇô»á¸üÐÂ×Ô¼ºµÄͶƱÔÙ·¢ËͳöÈ¥¡£ ? Ñ¡¾Ù¹æÔò

1¡¢ ËùÓд¦ÓÚlooking״̬µÄserver¶¼ÏòÆäËüËùÓÐserver·¢ËÍͶƱ£¬³õʼͶƱѡ×Ô¼º¡£ 2¡¢ ½ÓÊÕÀ´×ÔÆäËüserverµÄͶƱ£¬½ÓÊÕ²»µ½¾Í¼ÌÐø·¢Ëͱ¾µØÍ¶Æ±£¬Èç¹ûPKʧ°ÜÔò¸üб¾

µØÍ¶Æ±ÖØÐ·¢³ö

3¡¢ µ±ÊÕ¼¯µÄͶƱÂú×ãÌõ¼þ--->°üÀ¨±¾µØÍ¶Æ±ÔÚÄÚµÄquorumÊýÁ¿µÄͶƱ¶¼´ï³ÉÒ»Ö£¬µÈ

´ý200msÎÞÒìÒéʱ£¬µ±½ÓÊÕµÄͶƱÀ´×ÔÓÚleadering»òÕßfollowing״̬ʱ»¹ÐèÒªÅжÏleaderÊÇ·ñ´¦ÓÚleadering״̬£¬ÒÔ±ÜÃ⽨Á¢Á¬½Ó²»³ÉÖØÐ½øÈëlooking״̬

4¡¢ FollowerºÍleader½øÈë¸÷×ԵĽÇÉ«£¬leaderÆô¶¯sync¶Ë¿Ú£¬followerÏò

leader½¨Á¢Á¬½Ó£¬followerÏòleader×¢²á×Ô¼º£¬leader·¢ÏÖfollower²»×ã¹»»áÖØÐ½øÈëÑ¡¾Ù½×¶Î¡£

? Àý×Ó˵Ã÷

ÈçÉÏͼ£¬¼ÙÉèepoch¶¼ÊÇ1£¬s3µÄsid=3,zxidΪ5£¬s2µÄsid=2£¬zxidΪ5£¬s3µÄsid=1£¬zxid=6.

s3,s2ÊÕµ½Ö¸Ïòs1µÄͶƱºó£¬ÐÞ¸ÄÍ¶Æ±ÖØÐ·¢³ö£¬×îÖÕquorumÊýÁ¿´ïµ½Í¶Æ±Ò»Ö£¬Ò»ÖÂÑ¡¾ÙS1.

? Falsely Election

¢Ù»¹ÊÇÉÏͼµÄÀý×Ó£¬s3,s2»¥·¢Í¶Æ±ÏûÏ¢£¬ÓÉÓÚÍøÂçÔ­Òò¶¼Ã»Óнӵ½s1µÄͶƱ,s3,s2ÅжÏͶƱ¶àÊý´ï³ÉÒ»Ö¶¼ÊÇÑ¡s3×öleader£¬ÐÝÃß200ms£¬s1ͶƱÒÀ¾ÉûÓе½À´£¬ÓÚÊÇs3³ÉΪleaer£¬s2³ÉΪfollower¡£µÈs1ͶƱÏûÏ¢µ½´ïs2,s3ʱepochÒѾ­Ôö1±ä³É2ÁË£¬s1½«¸üÐÂ×Ô¼ºµÄͶƱѡ¾Ùs3.s1³ÉΪfollower£¬ÔÚs1ÓëleadeÊý¾Ýͬ²½Ê±£¬s1½«É¾³ýepoch=1ʱµÄÊÂÎñ6£¬Ôì³ÉÊý¾Ý¶ªÊ§¡£

¢Ú»¹ÊÇs1ÍøÂç¹ÊÕÏ£¬s1µÄͶƱûÓдﵽs3,ÔÚ200msÄÚµ½´ïÁËs2,s2½«¸üÐÂͶƱͶs1,s1ͶƱѡs2,s3ÔÚÐÝÃß200msºós1ºÍs2еÄͶƱÏûÏ¢ÈÔȻûÓе½´ïs3,s3ÅжÏs2Ϊleader£¬ÊÔͼÓës2½¨Á¢Á¬½Ó,µ«ÊÇs2ÈÏΪs1ÊÇleader£¬ÓÚÊDz»¿ªÆôsync¶Ë¿Ú£¬s3½¨Á¢Á¬½Ó³¬Ê±£¬ÖØÐ»ص½LOOKING״̬¡£

finalWait¿ØÖÆÔÚ200msÒÔÄÚ£¬¿ìËÙÑ¡¾Ù£¬ÕâÒ²¾ÍÊÇFast Leader ElectionÃüÃûµÄ³õÖÔ°É

? ¹ÊÕϻָ´

Ò»¸öÓÐ2N+1¸öʵÀý×é³ÉµÄzookeeper¼¯Èº£¬×î´óÄÜÔÊÐíN¸öʵÀý³öÏÖ¹ÊÕÏ£¬³¬¹ýN¸ö¾Í»áÔì³É·þÎñ²»¿ÉÓá£ÄÇʲôÇé¿öÏ»áʹµÃ¼¯Èº½øÈëleaderÑ¡¾Ù×´Ì¬ÄØ?

1¡¢leader³öÏÖ¹ÊÕÏ£ºµ±leader³öÏÖ¹ÊÕÏʱËùÓÐµÄ Follower»á½øÈëLOOKING×´Ì¬ÖØÐ½øÐÐͶƱѡ¾Ù

2¡¢µ±¼¯ÈºÖÐÓг¬¹ýN¸öʵÀý³öÏÖ¹ÊÕÏ£¬Õâʱleader½«½ÓÊÕ²»µ½×ã¹»quorumÊýÁ¿µÄPINGÏìÓ¦£¬Õâʱleader ¹Ø±Õͬ²½¶Ë¿Ú£¬¶Ï¿ªËùÓеÄlearnerÁ¬½Ó£¬Ê¹µÃÕû¸ö¼¯Èº¶¼½øÈëLOOKING״̬

3¡¢µ±Ñ¡¾Ù³É¹¦leader½ÇÉ«ºÍFollower½ÇÉ«¶¼ÒѾ­½¨Á¢Ö®ºó£¬Èç¹ûÔÚFollower×¢²á¡¢FollowerÓëleader½¨Á¢Á¬½Ó¡¢Í¬²½Êý¾Ý³É¹¦µÄ¸öÊý£¬²»×ãquorumÊýÁ¿£¬¶¼»áµ¼ÖÂÖØÐ½øÈëLOOKING×´Ì¬ÖØÐ½øÐÐleaderÑ¡¾Ù¡£

4¡¢learnerºÍleaderÖ®¼äÁ¬½ÓÊÇBIOµÄ£¬learnerÒ»Ö±×ö×èÈû¶ÁºÍ×èÈûдµÄÑ­»·£¬Ò»µ©·¢ÏÖ¶Á³¬Ê±ÔòÍ˻ص½LOOKING×´Ì¬ÖØÐÂѰÕÒleader

6. Êý¾Ýͬ²½

1¡¢½«Í¬²½¹ýÀ´µÄ¿ìÕÕÓ¦Óõ½ÄÚ´æÊý¾Ý¿â2¡¢½«½ÓÊÕµÄproposalºÍcommit·Åµ½¶ÓÁлº´æÆðÀ´3¡¢½ÓÊÕµ½newleaderºó£¬Éú³ÉÒ»¸ö¿ìÕÕÎļþ£¬¸üÐÂcurrentEpoch4¡¢ÏìÓ¦ack5¡¢½ÓÊÕupdateTodate£¬¹ØÁªZookeeperSeverΪ¿ªÆô¶ÔÍâ·þÎñ×¼±¸sendsocketPINGACKREVALIDATEPacketÀàÐÍReadPackage&processpackageREQUESTFOLLOWERINFO1¡¢·¢ËÍFollowerinfo2¡¢½ÓÊÕleaderinfo¸Ä±ä±¾µØacceptedEpoch3¡¢ÏìÓ¦ACKEPOCHsend¢ÙQuorumPeer[myid=1]connectToLeaderLEADERINFOÓöµ½Òì³£ACKEPOCHrecvsendrecvsendsendsendsendsendrecvWaitsendNEWLEADERrecvWaitcreate/startSocketLearnerHandler-/192.168.137.10:51850Sender-/192.168.137.10:51850sendpackagerecvsendSocketrecvrecvrecvsyncWithLeader¢ÜPINGPROPOSALrecvrecvsendrecvREVALIDATESYNCsenddoworkSHUTDOWNdoworkqueuedPacketspollQuorumPacketQuorumPacketQuorumPacketSNAP/DIFF/TRUNCZKDATABASE DATAQuorumPeerFOLLOWERING״̬FollowerfollowLeader¢Ú¢ÛregisterWithLeaderPROPOSALaddLearnerHandlerLeaderLearnersLearnerHandlerSocketLearnerHandleracceptSocketacceptdoworkServerSocketZkDataBasehzxidLearnerHandlerCOMMITFollowerZookeeperServerdoWorkReadPacket&processPacketPacketÀàÐͶÁ³¬Ê±µÈÒì³£StartupSendAckRequestProcessorQuorumPeercreate/startcreate/startsetupRequestProcessorsLOOKING״̬UPTODATEWaitThread 2888ACKloadDataBasesetloadDataÇëÇó´¦ÀíÆ÷SyncRequestProcessorcreate/startcreate/startFollowerRequestProcessorACKLearnerCnxAcceptorQuorumPeer[myid=2]LeaderZooKeeperServer¢ÙstartnextCommitProcessornextFinalRequestProcessorWait quorum packageFor initLimit*ticktime¢ÚleadLeaderkillDeadsessions³¬Ê±¢ÜLOOKING״̬QuorumPeerDoworkLEADERING״̬makeLeaderÖØÐÂÑ¡¾ÙstartZkServerÐÄÌø¼ì²âLeaderZooKeeperServer±éÀúLearnersLearnerHandlerLearnerHandlerLearnerHandlerPINGÿ¸ôticktime/2¼ì²âÒ»´Î£¬·¢´ÎpingLearnerHandlerStartupCheck1¡¢ÔÚsyncLimt*ticktimeÄÚµ½ÏìÓ¦µÄserverid½«¼ÓÈëset2¡¢Ã¿¸ôÒ»¸öticktimeÅжÏsetÊÇ·ñ×ã¹»¸²¸Ç´ó¶àÊýserver3¡¢·ñÔòshutdown Zookeeper½øÈëlooking״̬startstartSessionTrackerImplinitializestartPrepRequestProcessorstartstartnextProposalRequestProcessornextCommitProcessornextLeader.ToBeAppliedRequestProcessornextFinalRequestProcessor

?

µãÆÀ

³õʼ»¯ºÍÊý¾Ýͬ²½½×¶ÎÖ÷ÒªÍê³ÉÕâô¼¸¼þÊ Leader

1¡¢ ¶ÔÓÚleader£¬Æô¶¯Í¬²½¶Ë¿Ú£¬ÎªÃ¿¸ölearner·ÖÅäÒ»¹ÉlearnerHandlerºÍ

SenderÏß³Ì

2¡¢ µÈ´ý³¬¹ý¼¯Èº»úÆ÷°ëÊýµÄfollower×¢²á½øÈëforwardingÁÐ±í£¬

µÈ´ý³¬¹ý»úÆ÷»úÆ÷°ëÊýµÄfollower½ÓÊÕµ½Í¬²½Êý¾Ý£¬Íê³ÉÊý¾Ýͬ²½¡£ 3¡¢ ¿ªÆô¶ÔÍâ·þÎñ£¬Æô¶¯´¦ÀíÊÂÎñµÄprocessor

Follower

1¡¢ ¶ÔÓÚfollower£¬½¨Á¢Óëleaderͬ²½¶Ë¿ÚµÄÁ¬½Ó 2¡¢ ͬ²½epoch£¬Ïòleader×¢²á×Ô¼º£¬Íê³ÉÊý¾Ýͬ²½ 3¡¢ Æô¶¯´¦ÀíÊÂÎñµÄprocessor


zookeeper-3.4.6×ܽá.doc ½«±¾ÎĵÄWordÎĵµÏÂÔØµ½µçÄÔ
ËÑË÷¸ü¶à¹ØÓÚ£º zookeeper-3.4.6×Ü½á µÄÎĵµ
Ïà¹ØÍÆ¼ö
Ïà¹ØÔĶÁ
¡Á ÓοͿì½ÝÏÂÔØÍ¨µÀ£¨ÏÂÔØºó¿ÉÒÔ×ÔÓɸ´ÖƺÍÅŰ棩

ÏÂÔØ±¾ÎĵµÐèÒªÖ§¸¶ 10 Ôª

Ö§¸¶·½Ê½£º

¿ªÍ¨VIP°üÔ»áÔ± ÌØ¼Û£º29Ôª/ÔÂ

×¢£ºÏÂÔØÎĵµÓпÉÄÜ¡°Ö»ÓÐĿ¼»òÕßÄÚÈݲ»È«¡±µÈÇé¿ö£¬ÇëÏÂÔØÖ®Ç°×¢Òâ±æ±ð£¬Èç¹ûÄúÒѸ¶·ÑÇÒÎÞ·¨ÏÂÔØ»òÄÚÈÝÓÐÎÊÌ⣬ÇëÁªÏµÎÒÃÇЭÖúÄã´¦Àí¡£
΢ÐÅ£ºxuecool-com QQ£º370150219