GoogleµÄÈýƪÂÛÎÄÓ°ÏìÁ˺ܶàºÜ¶àÈË£¬Ò²Ó°ÏìÁ˺ܶàºÜ¶àϵͳ¡£ÕâÈýƪÂÛÎÄÒ»Ö±ÊÇ·Ö²¼Ê½ÁìÓò´«Ôĵľµä¡£¸ù¾ÝMapReduce£¬ÓÚÊÇÎÒÃÇÓÐÁËHadoop£»¸ù¾ÝGFS£¬ÓÚÊÇÎÒÃÇÓÐÁËHDFS£»¸ù¾ÝBigTable£¬ÓÚÊÇÎÒÃÇÓÐÁËHBase¡£¶øÔÚÕâÈýƪÂÛÎÄÀï¶¼Ìá¼°GoogleµÄÒ»¸öLock
Service ¡ª¡ª Chubby£¬Å¶£¬ÓÚÊÇÎÒÃÇÓÐÁËZookeeper¡£
Ëæ×Å´óÊý¾ÝµÄ»ðÈÈ£¬HxxÃÇÒѾ±äµÃ¶úÊìÄÜÏ꣬ÏÖÔÚ×÷Ϊһ¸ö¿ª·¢ÈËÔ±Èç¹û¶¼²»ÖªµÀÕ⼸¸öÃû´Ê³öÃŶ¼ºÃÏñ²»ºÃÒâ˼¸úÈË´òÕкô¡£µ«Êµ¼ÊÉ϶ÔÎÒÃÇÕâЩ·Ç´óÊý¾Ý¿ª·¢ÈËÔ±¶øÑÔ£¬ZookeeperÊDZÈHxxÃÇ¿ÉÄܽӴ¥µ½¸ü¶àµÄÒ»¸ö»ù´¡·þÎñ¡£µ«ÊÇ£¬ÎÞÄεÄÊÇËüһֱĬĬµÄλÓÚ¶þÏߣ¬´ÓÀ´Ã»ÓÐHxxÃÇÄÇôҫÑÛ¡£ÄÇôµ½µ×ʲôÊÇZookeeperÄØ£¿Zookeeper¿ÉÒÔÓÃÀ´¸Éʲô£¿ÎÒÃǽ«ÈçºÎʹÓÃZookeeper£¿ZookeeperÓÖÊÇÔõôʵÏֵģ¿
ʲôÊÇZookeeper
ÔÚZookeeperµÄ¹ÙÍøÉÏÓÐÕâôһ¾ä»°£ºZooKeeper is a centralized service
for maintaining configuration information, naming,
providing distributed synchronization, and providing
group services¡£
Õâ´ó¸ÅÃèÊöÁËZookeeperÖ÷ÒªÊÇÒ»¸ö·Ö²¼Ê½·þÎñе÷¿ò¼Ü£¬ÊµÏÖͬ²½·þÎñ£¬ÅäÖÃά»¤ºÍÃüÃû·þÎñµÈ·Ö²¼Ê½Ó¦Óá£ÊÇÒ»¸ö¸ßÐÔÄܵķֲ¼Ê½Êý¾ÝÒ»ÖÂÐÔ½â¾ö·½°¸¡£
ͨË׵ؽ²£¬ZooKeeperÊǶ¯ÎïÔ°¹ÜÀíÔ±£¬ËüÊÇÄÃÀ´¹Ü´óÏó Hadoop¡¢¾¨Óã HBase¡¢KafkaµÈµÄ¹ÜÀíÔ±¡£
ZookeeperºÍCAPµÄ¹ØÏµ
×÷Ϊһ¸ö·Ö²¼Ê½ÏµÍ³£¬·ÖÇøÈÝ´íÐÔÊÇÒ»¸ö±ØÐëÒª¿¼ÂǵĹؼüµã¡£Ò»¸ö·Ö²¼Ê½ÏµÍ³Ò»µ©É¥Ê§ÁË·ÖÇøÈÝ´íÐÔ£¬Ò²¾Í±íʾ·ÅÆúÁËÀ©Õ¹ÐÔ¡£ÒòΪÔÚ·Ö²¼Ê½ÏµÍ³ÖУ¬ÍøÂç¹ÊÕÏÊǾ³£³öÏֵģ¬Ò»µ©³öÏÖÔÚÕâÖÖÎÊÌâ¾Í»áµ¼ÖÂÕû¸öϵͳ²»¿ÉÓÃÊǾø¶Ô²»ÄÜÈÝÈ̵ġ£ËùÒÔ£¬´ó²¿·Ö·Ö²¼Ê½ÏµÍ³¶¼»áÔÚ±£Ö¤·ÖÇøÈÝ´íÐÔµÄǰÌáÏÂÔÚÒ»ÖÂÐԺͿÉÓÃÐÔÖ®¼ä×öȨºâ¡£

ZooKeeperÊǸöCP£¨Ò»ÖÂÐÔ+·ÖÇøÈÝ´íÐÔ£©µÄ£¬¼´ÈκÎʱ¿Ì¶ÔZooKeeperµÄ·ÃÎÊÇëÇóÄܵõ½Ò»ÖµÄÊý¾Ý½á¹û£¬Í¬Ê±ÏµÍ³¶ÔÍøÂç·Ö¸î¾ß±¸ÈÝ´íÐÔ£»µ«ÊÇËü²»Äܱ£Ö¤Ã¿´Î·þÎñÇëÇóµÄ¿ÉÓÃÐÔ¡£Ò²¾ÍÊÇÔÚ¼«¶Ë»·¾³Ï£¬ZooKeeper¿ÉÄܻᶪÆúһЩÇëÇó£¬Ïû·ÑÕß³ÌÐòÐèÒªÖØÐÂÇëÇó²ÅÄÜ»ñµÃ½á¹û¡£
ZooKeeperÊÇ·Ö²¼Ê½Ðµ÷·þÎñ£¬ËüµÄÖ°ÔðÊDZ£Ö¤Êý¾ÝÔÚÆä¹ÜϽϵÄËùÓзþÎñÖ®¼ä±£³Öͬ²½¡¢Ò»Ö£»ËùÒԾͲ»ÄÑÀí½âΪʲôZooKeeper±»Éè¼Æ³ÉCP¶ø²»ÊÇAPÌØÐÔµÄÁË¡£¶øÇÒ£¬
×÷ΪZooKeeperµÄºËÐÄʵÏÖËã·¨Zab£¬¾ÍÊǽâ¾öÁË·Ö²¼Ê½ÏµÍ³ÏÂÊý¾ÝÈçºÎÔÚ¶à¸ö·þÎñÖ®¼ä±£³Öͬ²½ÎÊÌâµÄ¡£
Zookeeper½ÚµãÌØÐÔ¼°½ÚµãÊôÐÔ·ÖÎö
ZookeeperÌṩ»ùÓÚÀàËÆÓÚÎļþϵͳµÄĿ¼½ÚµãÊ÷·½Ê½µÄÊý¾Ý´æ´¢£¬µ«ÊÇZookeeper²¢²»ÊÇÓÃÀ´×¨ÃÅ´æ´¢Êý¾ÝµÄ£¬ËüµÄ×÷ÓÃÖ÷ÒªÊÇÓÃÀ´Î¬»¤ºÍ¼à¿ØÄã´æ´¢µÄÊý¾ÝµÄ״̬±ä»¯¡£Í¨¹ý¼à¿ØÕâЩÊý¾Ý״̬µÄ±ä»¯£¬´Ó¶ø¿ÉÒÔ´ïµ½»ùÓÚÊý¾ÝµÄ¼¯Èº¹ÜÀí¡£
Êý¾ÝÄ£ÐÍ
ÓëLinuxÎļþϵͳ²»Í¬µÄÊÇ£¬LinuxÎļþϵͳÓÐĿ¼ºÍÎļþµÄÇø±ð£¬¶øZookeeperµÄÊý¾Ý½Úµã³ÆÎªZNode£¬ZNodeÊÇZookeeperÖÐÊý¾ÝµÄ×îСµ¥Ôª£¬Ã¿¸öZNode¶¼¿ÉÒÔ±£´æÊý¾Ý£¬Í¬Ê±»¹¿ÉÒÔ¹ÒÔØ×ӽڵ㣬Òò´Ë¹¹³ÉÁËÒ»¸ö²ã´Î»¯µÄÃüÃû¿Õ¼ä£¬³ÆÎªÊ÷¡£

ZookeeperÖÐZNodeµÄ½Úµã´´½¨Ê±ºòÊÇ¿ÉÒÔÖ¸¶¨ÀàÐ͵ģ¬Ö÷ÒªÓÐÏÂÃæ¼¸ÖÖÀàÐÍ¡£
PERSISTENT£º³Ö¾Ã»¯ZNode½Úµã£¬Ò»µ©´´½¨Õâ¸öZNodeµã´æ´¢µÄÊý¾Ý²»»áÖ÷¶¯Ïûʧ£¬³ý·ÇÊǿͻ§¶ËÖ÷¶¯µÄdelete¡£
EPHEMERAL£ºÁÙʱZNode½Úµã£¬ClientÁ¬½Óµ½Zookeeper ServiceµÄʱºò»á½¨Á¢Ò»¸öSession£¬Ö®ºóÓÃÕâ¸öZookeeperÁ¬½ÓʵÀý´´½¨¸ÃÀàÐ͵Äznode£¬Ò»µ©Client¹Ø±ÕÁËZookeeperµÄÁ¬½Ó£¬·þÎñÆ÷¾Í»áÇå³ýSession£¬È»ºóÕâ¸öSession½¨Á¢µÄZNode½Úµã¶¼»á´ÓÃüÃû¿Õ¼äÏûʧ¡£×ܽá¾ÍÊÇ£¬Õâ¸öÀàÐ͵ÄznodeµÄÉúÃüÖÜÆÚÊǺÍClient½¨Á¢µÄÁ¬½ÓÒ»ÑùµÄ¡£
PERSISTENT_SEQUENTIAL£ºË³Ðò×Ô¶¯±àºÅµÄZNode½Úµã£¬ÕâÖÖznoe½Úµã»á¸ù¾Ýµ±Ç°Òѽü´æÔÚµÄZNode½Úµã±àºÅ×Ô¶¯¼Ó
1£¬¶øÇÒ²»»áËæSession¶Ï¿ª¶øÏûʧ¡£
EPEMERAL_SEQUENTIAL£ºÁÙʱ×Ô¶¯±àºÅ½Úµã£¬ZNode½Úµã±àºÅ»á×Ô¶¯Ôö¼Ó£¬µ«ÊÇ»áËæSessionÏûʧ¶øÏûʧ
WatcherÊý¾Ý±ä¸ü֪ͨ
ZookeeperʹÓÃWatcher»úÖÆÊµÏÖ·Ö²¼Ê½Êý¾ÝµÄ·¢²¼/¶©ÔŦÄÜ¡£

ZookeeperµÄWatcher»úÖÆÖ÷Òª°üÀ¨¿Í»§¶ËÏ̡߳¢¿Í»§¶ËWatcherManager¡¢Zookeeper·þÎñÆ÷Èý²¿·Ö¡£¿Í»§¶ËÔÚÏòZookeeper·þÎñÆ÷×¢²áµÄͬʱ£¬»á½«Watcher¶ÔÏó´æ´¢ÔÚ¿Í»§¶ËµÄWatcherManagerµ±ÖС£µ±Zookeeper·þÎñÆ÷´¥·¢Watcherʼþºó£¬»áÏò¿Í»§¶Ë·¢ËÍ֪ͨ£¬¿Í»§¶ËÏ̴߳ÓWatcherManagerÖÐÈ¡³ö¶ÔÓ¦µÄWatcher¶ÔÏóÀ´Ö´Ðлص÷Âß¼¡£
ACL±£ÕÏÊý¾ÝµÄ°²È«
ZookeeperÄÚ²¿´æ´¢ÁË·Ö²¼Ê½ÏµÍ³ÔËÐÐʱ״̬µÄÔªÊý¾Ý£¬ÕâЩԪÊý¾Ý»áÖ±½ÓÓ°Ïì»ùÓÚZookeeper½øÐй¹ÔìµÄ·Ö²¼Ê½ÏµÍ³µÄÔËÐÐ״̬£¬ÈçºÎ±£ÕÏϵͳÖÐÊý¾ÝµÄ°²È«£¬´Ó¶ø±ÜÃâÒòÎó²Ù×÷¶ø´øÀ´µÄÊý¾ÝËæÒâ±ä¸ü¶øµ¼ÖµÄÊý¾Ý¿âÒ쳣ʮ·ÖÖØÒª£¬ZookeeperÌṩÁËÒ»Ì×ÍêÉÆµÄACLȨÏÞ¿ØÖÆ»úÖÆÀ´±£ÕÏÊý¾ÝµÄ°²È«¡£
ÎÒÃÇ¿ÉÒÔ´ÓÈý¸ö·½ÃæÀ´Àí½âACL»úÖÆ£ºÈ¨ÏÞģʽ Scheme¡¢ÊÚȨ¶ÔÏó ID¡¢È¨ÏÞ Permission£¬Í¨³£Ê¹ÓÃ"scheme:id:permission"À´±êʶһ¸öÓÐЧµÄACLÐÅÏ¢¡£
ÄÚ´æÊý¾Ý
ZookeeperµÄÊý¾ÝÄ£ÐÍÊÇÊ÷½á¹¹£¬ÔÚÄÚ´æÊý¾Ý¿âÖУ¬´æ´¢ÁËÕû¿ÃÊ÷µÄÄÚÈÝ£¬°üÀ¨ËùÓеĽڵã·¾¶¡¢½ÚµãÊý¾Ý¡¢ACLÐÅÏ¢£¬Zookeeper»á¶¨Ê±½«Õâ¸öÊý¾Ý´æ´¢µ½´ÅÅÌÉÏ¡£
DataTree£ºDataTreeÊÇÄÚ´æÊý¾Ý´æ´¢µÄºËÐÄ£¬ÊÇÒ»¸öÊ÷½á¹¹£¬´ú±íÁËÄÚ´æÖÐÒ»·ÝÍêÕûµÄÊý¾Ý¡£DataTree²»°üº¬ÈκÎÓëÍøÂç¡¢¿Í»§¶ËÁ¬½Ó¼°ÇëÇó´¦ÀíÏà¹ØµÄÒµÎñÂß¼£¬ÊÇÒ»¸ö¶ÀÁ¢µÄ×é¼þ¡£
DataNode£ºDataNodeÊÇÊý¾Ý´æ´¢µÄ×îСµ¥Ôª£¬ÆäÄÚ²¿³ýÁ˱£´æÁ˽áµãµÄÊý¾ÝÄÚÈÝ¡¢ACLÁÐ±í¡¢½Úµã״̬֮Í⣬»¹¼Ç¼Á˸¸½ÚµãµÄÒýÓúÍ×Ó½ÚµãÁбíÁ½¸öÊôÐÔ£¬ÆäÒ²ÌṩÁ˶Ô×Ó½ÚµãÁÐ±í½øÐвÙ×÷µÄ½Ó¿Ú¡£
ZKDatabase£ºZookeeperµÄÄÚ´æÊý¾Ý¿â£¬¹ÜÀíZookeeperµÄËùÓлỰ¡¢DataTree´æ´¢ºÍÊÂÎñÈÕÖ¾¡£ZKDatabase»á¶¨Ê±Ïò´ÅÅÌdump¿ìÕÕÊý¾Ý£¬Í¬Ê±ÔÚZookeeperÆô¶¯Ê±£¬»áͨ¹ý´ÅÅ̵ÄÊÂÎñÈÕÖ¾ºÍ¿ìÕÕÎļþ»Ö¸´³ÉÒ»¸öÍêÕûµÄÄÚ´æÊý¾Ý¿â¡£
ZookeeperµÄʵÏÖÔÀí·ÖÎö
1. Zookeeper ServiceÍøÂç½á¹¹
ZookeeperµÄ¹¤×÷¼¯Èº¿ÉÒÔ¼òµ¥·Ö³ÉÁ½À࣬һ¸öÊÇLeader£¬Î¨Ò»Ò»¸ö£¬ÆäÓàµÄ¶¼ÊÇfollower£¬ÈçºÎÈ·¶¨LeaderÊÇͨ¹ýÄÚ²¿Ñ¡¾ÙÈ·¶¨µÄ¡£

LeaderºÍ¸÷¸öfollowerÊÇ»¥ÏàͨÐŵ쬶ÔÓÚZookeeperϵͳµÄÊý¾Ý¶¼ÊDZ£´æÔÚÄÚ´æÀïÃæµÄ£¬Í¬ÑùÒ²»á±¸·ÝÒ»·ÝÔÚ´ÅÅÌÉÏ¡£
Èç¹ûLeader¹ÒÁË£¬Zookeeper¼¯Èº»áÖØÐÂÑ¡¾Ù£¬ÔÚºÁÃë¼¶±ð¾Í»áÖØÐÂÑ¡¾Ù³öÒ»¸öLeader¡£
¼¯ÈºÖгý·ÇÓÐÒ»°ëÒÔÉϵÄZookeeper½Úµã¹ÒÁË£¬Zookeeper Service²Å²»¿ÉÓá£
2. Zookeeper¶ÁдÊý¾Ý

дÊý¾Ý£¬Ò»¸ö¿Í»§¶Ë½øÐÐдÊý¾ÝÇëÇóʱ£¬Èç¹ûÊÇfollower½ÓÊÕµ½Ð´ÇëÇ󣬾ͻá°ÑÇëÇóת·¢¸øLeader£¬Leaderͨ¹ýÄÚ²¿µÄZabÐÒé½øÐÐÔ×ӹ㲥£¬Ö±µ½ËùÓÐZookeeper½Úµã¶¼³É¹¦Ð´ÁËÊý¾Ýºó£¨ÄÚ´æÍ¬²½ÒÔ¼°´ÅÅ̸üУ©£¬Õâ´ÎдÇëÇóËãÊÇÍê³É£¬È»ºóZookeeper
Service¾Í»á¸øClient·¢»ØÏìÓ¦¡£
¶ÁÊý¾Ý£¬ÒòΪ¼¯ÈºÖÐËùÓеÄZookeeper½Úµã¶¼³ÊÏÖÒ»¸öͬÑùµÄÃüÃû¿Õ¼äÊÓͼ£¨¾ÍÊǽṹÊý¾Ý£©£¬ÉÏÃæµÄдÇëÇóÒѾ±£Ö¤ÁËдһ´ÎÊý¾Ý±ØÐë±£Ö¤¼¯ÈºËùÓеÄZookeeper½Úµã¶¼ÊÇͬ²½ÃüÃû¿Õ¼äµÄ£¬ËùÒÔ¶ÁµÄʱºò¿ÉÒÔÔÚÈÎÒâһ̨Zookeeper½ÚµãÉÏ¡£
3. Zookeeper¹¤×÷ÔÀí
ZabÐÒé
ZookeeperµÄºËÐÄÊǹ㲥£¬Õâ¸ö»úÖÆ±£Ö¤Á˸÷¸öServerÖ®¼äµÄͬ²½¡£ÊµÏÖÕâ¸ö»úÖÆµÄÐÒé½Ð×öZabÐÒé¡£
Zab£¨ZooKeeper Atomic Broadcast£©Ô×ÓÏûÏ¢¹ã²¥ÐÒé×÷ΪÊý¾ÝÒ»ÖÂÐԵĺËÐÄËã·¨£¬ZabÐÒéÊÇרΪZookeeperÉè¼ÆµÄÖ§³Ö±ÀÀ£»Ö¸´Ô×ÓÏûÏ¢¹ã²¥Ëã·¨¡£
ZabÐÒéºËÐÄÈçÏ£º
ËùÓеÄÊÂÎñÇëÇó±ØÐëÒ»¸öÈ«¾ÖΨһµÄ·þÎñÆ÷£¨Leader£©À´Ðµ÷´¦Àí£¬¼¯ÈºÆäÓàµÄ·þÎñÆ÷³ÆÎªfollower·þÎñÆ÷¡£Leader·þÎñÆ÷¸ºÔð½«Ò»¸ö¿Í»§¶ËÇëÇóת»¯ÎªÊÂÎñÌáÒ飨Proposal£©£¬²¢½«¸Ãproposal·Ö·¢¸ø¼¯ÈºËùÓеÄfollower·þÎñÆ÷¡£Ö®ºóLeader·þÎñÆ÷ÐèÒªµÈ´ýËùÓеÄfollower·þÎñÆ÷µÄ·´À¡£¬Ò»µ©³¬¹ýÁ˰ëÊýµÄfollower·þÎñÆ÷½øÐÐÁËÕýÈ··´À¡ºó£¬ÄÇôLeader·þÎñÆ÷¾Í»áÔÙ´ÎÏòËùÓеÄfollower·þÎñÆ÷·Ö·¢commitÏûÏ¢£¬ÒªÇóÆä½«Ç°Ò»¸öproposal½øÐÐÌá½»¡£
Zabģʽ
ZabÐÒé°üÀ¨Á½ÖÖ»ù±¾µÄģʽ£º±ÀÀ£»Ö¸´ºÍÏûÏ¢¹ã²¥¡£
µ±Õû¸ö·þÎñ¿ò¼ÜÆô¶¯¹ý³ÌÖлòLeader·þÎñÆ÷³öÏÖÍøÂçÖжϡ¢±ÀÀ£Í˳öÓëÖØÆôµÈÒì³£Çé¿öʱ£¬ZabÐÒé¾Í»á½øÈë»Ö¸´Ä£Ê½²¢Ñ¡¾Ù²úÉúеÄLeader·þÎñÆ÷¡£
µ±Ñ¡¾Ù²úÉúÁËеÄLeader·þÎñÆ÷£¬Í¬Ê±¼¯ÈºÖÐÒѾÓйý°ëµÄ»úÆ÷Óë¸ÃLeader·þÎñÆ÷Íê³ÉÁË״̬ͬ²½Ö®ºó£¬ZabÐÒé¾Í»áÍ˳ö»Ö¸´Ä£Ê½£¬×´Ì¬Í¬²½ÊÇÖ¸Êý¾Ýͬ²½£¬ÓÃÀ´±£Ö¤¼¯ÈºÔÚ¹ý°ëµÄ»úÆ÷Äܹ»ºÍLeader·þÎñÆ÷µÄÊý¾Ý״̬±£³ÖÒ»Ö¡£
µ±¼¯ÈºÖÐÒѾÓйý°ëµÄFollower·þÎñÆ÷Íê³ÉÁ˺ÍLeader·þÎñÆ÷µÄ״̬ͬ²½£¬ÄÇôÕû¸ö·þÎñ¿ò¼Ü¾Í¿ÉÒÔ½øÈëÏûÏ¢¹ã²¥Ä£Ê½¡£
µ±Ò»Ì¨Í¬Ñù×ñÊØZabÐÒéµÄ·þÎñÆ÷Æô¶¯ºó¼ÓÈëµ½¼¯ÈºÖУ¬Èç¹û´Ëʱ¼¯ÈºÖÐÒѾ´æÔÚÒ»¸öLeader·þÎñÆ÷ÔÚ¸ºÔð½øÐÐÏûÏ¢¹ã²¥£¬ÄÇô¼ÓÈëµÄ·þÎñÆ÷¾Í»á×Ô¾õµØ½øÈëÊý¾Ý»Ö¸´Ä£Ê½£ºÕÒµ½LeaderËùÔڵķþÎñÆ÷£¬²¢ÓëÆä½øÐÐÊý¾Ýͬ²½£¬È»ºóÒ»Æð²ÎÓëµ½ÏûÏ¢¹ã²¥Á÷³ÌÖÐÈ¥¡£
ZookeeperÖ»ÔÊÐíΨһµÄÒ»¸öLeader·þÎñÆ÷À´½øÐÐÊÂÎñÇëÇóµÄ´¦Àí£¬Leader·þÎñÆ÷ÔÚ½ÓÊÕµ½¿Í»§¶ËµÄÊÂÎñÇëÇóºó£¬»áÉú³É¶ÔÓ¦µÄÊÂÎñÌáÒé²¢·¢ÆðÒ»Âֹ㲥ÐÒ飬¶øÈç¹û¼¯ÈºÖÐµÄÆäËû»úÆ÷ÊÕµ½¿Í»§¶ËµÄÊÂÎñÇëÇóºó£¬ÄÇôÕâЩ·ÇLeader·þÎñÆ÷»áÊ×ÏȽ«Õâ¸öÊÂÎñÇëÇóת·¢¸øLeader·þÎñÆ÷¡£
ÏûÏ¢¹ã²¥

ZabÐÒéµÄÏûÏ¢¹ã²¥¹ý³ÌʹÓÃÊÇÒ»¸öÔ×ӹ㲥ÐÒ飬ÀàËÆÒ»¸ö2PCÌá½»¹ý³Ì¡£¾ßÌåµÄ£º
ZooKeeperʹÓõ¥Ò»Ö÷½ø³ÌLeaderÓÃÓÚ´¦Àí¿Í»§¶ËËùÓÐÊÂÎñÇëÇ󣬲¢²ÉÓÃZabµÄÔ×ӹ㲥ÐÒ飬½«·þÎñÆ÷Êý¾Ý״̬±ä¸üÒÔÊÂÎñProposalµÄÐÎʽ¹ã²¥FollowerÉÏ£¬Òò´ËÄܺܺõĴ¦Àí¿Í»§¶ËµÄ´óÁ¿²¢·¢ÇëÇó¡£
ÁíÒ»·½Ã棬ÓÉÓÚÊÂÎñ¼ä¿ÉÄÜ´æÔÚ×ÅÒÀÀµ¹ØÏµ£¬ZabÐÒé±£Ö¤Leader¹ã²¥µÄ±ä¸üÐòÁб»Ë³ÐòµÄ´¦Àí£¬ÓÐЩ״̬µÄ±ä¸ü±ØÐëÒÀÀµÓÚ±ÈËüÔçÉú³ÉµÄÄÇЩ״̬±ä¸ü¡£
×îºó£¬¿¼Âǵ½Ö÷½ø³ÌLeaderÔÚÈκÎʱºò¿ÉÄܱÀÀ£»òÕßÒì³£Í˳ö£¬ Òò´ËZabÐÒ黹ҪLeader½ø³Ì±ÀÀ£µÄʱºò¿ÉÒÔÖØÐÂÑ¡³öLeader²¢ÇÒ±£Ö¤Êý¾ÝµÄÍêÕûÐÔ£»FollowerÊÕµ½Proposalºó£¬Ð´µ½´ÅÅÌ£¬·µ»ØAck¡£LeaderÊÕµ½´ó¶àÊýACKºó£¬¹ã²¥CommitÏûÏ¢£¬×Ô¼ºÒ²Ìá½»¸ÃÏûÏ¢¡£FollowerÊÕµ½CommitÖ®ºó£¬Ìá½»¸ÃÏûÏ¢¡£
ZabÐÒé¼ò»¯ÁË2PCÊÂÎñÌá½»£º
È¥³ýÖжÏÂß¼ÒÆ³ý£¬followerҪôack£¬ÒªÃ´ÅׯúLeader¡£
Leader²»ÐèÒªËùÓеÄFollower¶¼ÏìÓ¦³É¹¦£¬Ö»ÒªÒ»¸ö¶àÊýÅÉAck¼´¿É¡£
±ÀÀ£»Ö¸´
ÉÏÃæÎÒÃǽ²ÁËZabÐÒéÔÚÕý³£Çé¿öϵÄÏûÏ¢¹ã²¥¹ý³Ì£¬ÄÇôһµ©Leader·þÎñÆ÷³öÏÖ±ÀÀ£»òÕßÓë¹ý°ëµÄfollower·þÎñÆ÷ʧȥÁªÏµ£¬¾Í½øÈë±ÀÀ£»Ö¸´Ä£Ê½¡£
»Ö¸´Ä£Ê½ÐèÒªÖØÐÂÑ¡¾Ù³öÒ»¸öеÄLeader£¬ÈÃËùÓеÄServer¶¼»Ö¸´µ½Ò»¸öÕýÈ·µÄ״̬¡£
Zookeeperʵ¼ù£¬¹²ÏíËø£¬LeaderÑ¡¾Ù
·Ö²¼Ê½ËøÓÃÓÚ¿ØÖÆ·Ö²¼Ê½ÏµÍ³Ö®¼äͬ²½·ÃÎʹ²Ïí×ÊÔ´µÄÒ»ÖÖ·½Ê½£¬¿ÉÒÔ±£Ö¤²»Í¬ÏµÍ³·ÃÎÊÒ»¸ö»òÒ»×é×ÊԴʱµÄÒ»ÖÂÐÔ£¬Ö÷Òª·ÖΪÅÅËüËøºÍ¹²ÏíËø¡£
ÅÅËüËøÓÖ³ÆÎªÐ´Ëø»ò¶ÀÕ¼Ëø£¬ÈôÊÂÎñT1¶ÔÊý¾Ý¶ÔÏóO1¼ÓÉÏÁËÅÅËüËø£¬ÄÇôÔÚÕû¸ö¼ÓËøÆÚ¼ä£¬Ö»ÔÊÐíÊÂÎñT1¶ÔO1½øÐжÁÈ¡ºÍ¸üвÙ×÷£¬ÆäËûÈκÎÊÂÎñ¶¼²»ÄÜÔÙ¶ÔÕâ¸öÊý¾Ý¶ÔÏó½øÐÐÈκÎÀàÐ͵IJÙ×÷£¬Ö±µ½T1ÊÍ·ÅÁËÅÅËüËø¡£

¹²ÏíËøÓÖ³ÆÎª¶ÁËø£¬ÈôÊÂÎñT1¶ÔÊý¾Ý¶ÔÏóO1¼ÓÉϹ²ÏíËø£¬ÄÇôµ±Ç°ÊÂÎñÖ»ÄܶÔO1½øÐжÁÈ¡²Ù×÷£¬ÆäËûÊÂÎñÒ²Ö»ÄܶÔÕâ¸öÊý¾Ý¶ÔÏó¼Ó¹²ÏíËø£¬Ö±µ½¸ÃÊý¾Ý¶ÔÏóÉϵÄËùÓй²ÏíËø¶¼±»ÊÍ·Å¡£

ÍÆ¼öÎÄÕ£º»ùÓÚZkʵÏÖ·Ö²¼Ê½Ëø
LeaderÑ¡¾Ù
LeaderÑ¡¾ÙÊDZ£Ö¤·Ö²¼Ê½Êý¾ÝÒ»ÖÂÐԵĹؼüËùÔÚ¡£µ±Zookeeper¼¯ÈºÖеÄһ̨·þÎñÆ÷³öÏÖÒÔÏÂÁ½ÖÖÇé¿ö֮һʱ£¬ÐèÒª½øÈëLeaderÑ¡¾Ù¡£
·þÎñÆ÷³õʼ»¯Æô¶¯¡£
·þÎñÆ÷ÔËÐÐÆÚ¼äÎÞ·¨ºÍLeader±£³ÖÁ¬½Ó¡£
ZookeeperÔÚ3.4.0°æ±¾ºóÖ»±£ÁôÁËTCP°æ±¾µÄ FastLeaderElection Ñ¡¾ÙËã·¨¡£µ±Ò»Ì¨»úÆ÷½øÈëLeaderÑ¡¾Ùʱ£¬µ±Ç°¼¯Èº¿ÉÄܻᴦÓÚÒÔÏÂÁ½ÖÖ״̬£º
¼¯ÈºÖÐÒÑ´æÔÚLeader¡£
¼¯ÈºÖв»´æÔÚLeader¡£
¶ÔÓÚ¼¯ÈºÖÐÒѾ´æÔÚLeader¶øÑÔ£¬´ËÖÖÇé¿öÒ»°ã¶¼ÊÇij̨»úÆ÷Æô¶¯µÃ½ÏÍí£¬ÔÚÆäÆô¶¯Ö®Ç°£¬¼¯ÈºÒѾÔÚÕý³£¹¤×÷£¬¶ÔÕâÖÖÇé¿ö£¬¸Ã»úÆ÷ÊÔͼȥѡ¾ÙLeaderʱ£¬»á±»¸æÖªµ±Ç°·þÎñÆ÷µÄLeaderÐÅÏ¢£¬¶ÔÓڸûúÆ÷¶øÑÔ£¬½ö½öÐèÒªºÍLeader»úÆ÷½¨Á¢ÆðÁ¬½Ó£¬²¢½øÐÐ״̬ͬ²½¼´¿É¡£
¶øÔÚ¼¯ÈºÖв»´æÔÚLeaderÇé¿öÏÂÔò»áÏà¶Ô¸´ÔÓ£¬Æä²½ÖèÈçÏ£º
(1) µÚÒ»´ÎͶƱ¡£ÎÞÂÛÄÄÖÖµ¼Ö½øÐÐLeaderÑ¡¾Ù£¬¼¯ÈºµÄËùÓлúÆ÷¶¼´¦ÓÚÊÔͼѡ¾Ù³öÒ»¸öLeaderµÄ״̬£¬¼´LOOKING״̬£¬LOOKING»úÆ÷»áÏòËùÓÐÆäËû»úÆ÷·¢ËÍÏûÏ¢£¬¸ÃÏûÏ¢³ÆÎªÍ¶Æ±¡£Í¶Æ±Öаüº¬ÁËSID£¨·þÎñÆ÷µÄΨһ±êʶ£©ºÍZXID£¨ÊÂÎñID£©£¬(SID,
ZXID)ÐÎʽÀ´±êʶһ´ÎͶƱÐÅÏ¢¡£¼Ù¶¨ZookeeperÓÉ5̨»úÆ÷×é³É£¬SID·Ö±ðΪ1¡¢2¡¢3¡¢4¡¢5£¬ZXID·Ö±ðΪ9¡¢9¡¢9¡¢8¡¢8£¬²¢ÇÒ´ËʱSIDΪ2µÄ»úÆ÷ÊÇLeader»úÆ÷£¬Ä³Ò»Ê±¿Ì£¬1¡¢2ËùÔÚ»úÆ÷³öÏÖ¹ÊÕÏ£¬Òò´Ë¼¯Èº¿ªÊ¼½øÐÐLeaderÑ¡¾Ù¡£ÔÚµÚÒ»´ÎͶƱʱ£¬Ã¿Ì¨»úÆ÷¶¼»á½«×Ô¼º×÷ΪͶƱ¶ÔÏó£¬ÓÚÊÇSIDΪ3¡¢4¡¢5µÄ»úÆ÷ͶƱÇé¿ö·Ö±ðΪ(3,
9)£¬(4, 8)£¬ (5, 8)¡£
(2) ±ä¸üͶƱ¡£Ã¿Ì¨»úÆ÷·¢³öͶƱºó£¬Ò²»áÊÕµ½ÆäËû»úÆ÷µÄͶƱ£¬Ã¿Ì¨»úÆ÷»á¸ù¾ÝÒ»¶¨¹æÔòÀ´´¦ÀíÊÕµ½µÄÆäËû»úÆ÷µÄͶƱ£¬²¢ÒÔ´ËÀ´¾ö¶¨ÊÇ·ñÐèÒª±ä¸ü×Ô¼ºµÄͶƱ£¬Õâ¸ö¹æÔòÒ²ÊÇÕû¸öLeaderÑ¡¾ÙËã·¨µÄºËÐÄËùÔÚ£¬ÆäÖÐÊõÓïÃèÊöÈçÏÂ
vote_sid£º½ÓÊÕµ½µÄͶƱÖÐËùÍÆ¾ÙLeader·þÎñÆ÷µÄSID¡£
vote_zxid£º½ÓÊÕµ½µÄͶƱÖÐËùÍÆ¾ÙLeader·þÎñÆ÷µÄZXID¡£
self_sid£ºµ±Ç°·þÎñÆ÷×Ô¼ºµÄSID¡£
self_zxid£ºµ±Ç°·þÎñÆ÷×Ô¼ºµÄZXID¡£
ÿ´Î¶ÔÊÕµ½µÄͶƱµÄ´¦Àí£¬¶¼ÊǶÔ(vote_sid, vote_zxid)ºÍ(self_sid, self_zxid)¶Ô±ÈµÄ¹ý³Ì¡£
¹æÔòÒ»£ºÈç¹ûvote_zxid´óÓÚself_zxid£¬¾ÍÈϿɵ±Ç°ÊÕµ½µÄͶƱ£¬²¢Ôٴν«¸ÃͶƱ·¢ËͳöÈ¥¡£
¹æÔò¶þ£ºÈç¹ûvote_zxidСÓÚself_zxid£¬ÄÇô¼á³Ö×Ô¼ºµÄͶƱ£¬²»×öÈκαä¸ü¡£
¹æÔòÈý£ºÈç¹ûvote_zxidµÈÓÚself_zxid£¬ÄÇô¾Í¶Ô±ÈÁ½ÕßµÄSID£¬Èç¹ûvote_sid´óÓÚself_sid£¬ÄÇô¾ÍÈϿɵ±Ç°ÊÕµ½µÄͶƱ£¬²¢Ôٴν«¸ÃͶƱ·¢ËͳöÈ¥¡£
¹æÔòËÄ£ºÈç¹ûvote_zxidµÈÓÚself_zxid£¬²¢ÇÒvote_sidСÓÚself_sid£¬ÄÇô¼á³Ö×Ô¼ºµÄͶƱ£¬²»×öÈκαä¸ü¡£
½áºÏÉÏÃæ¹æÔò£¬¸ø³öÏÂÃæµÄ¼¯Èº±ä¸ü¹ý³Ì¡£

(3) È·¶¨Leader¡£¾¹ýµÚ¶þÂÖͶƱºó£¬¼¯ÈºÖеÄÿ̨»úÆ÷¶¼»áÔٴνÓÊÕµ½ÆäËû»úÆ÷µÄͶƱ£¬È»ºó¿ªÊ¼Í³¼ÆÍ¶Æ±£¬Èç¹ûһ̨»úÆ÷ÊÕµ½Á˳¬¹ý°ëÊýµÄÏàͬͶƱ£¬ÄÇôÕâ¸öͶƱ¶ÔÓ¦µÄSID»úÆ÷¼´ÎªLeader¡£´ËʱServer3½«³ÉΪLeader¡£
ÓÉÉÏÃæ¹æÔò¿ÉÖª£¬Í¨³£ÄÇ̨·þÎñÆ÷ÉϵÄÊý¾ÝԽУ¨ZXID»áÔ½´ó£©£¬Æä³ÉΪLeaderµÄ¿ÉÄÜÐÔÔ½´ó£¬Ò²¾ÍÔ½Äܹ»±£Ö¤Êý¾ÝµÄ»Ö¸´¡£Èç¹ûZXIDÏàͬ£¬ÔòSIDÔ½´ó»ú»áÔ½´ó¡£ |