±à¼ÍƼö: |
ZookeeperÖ÷ÒªÄÄЩ·þÎñ:ÅäÖùÜÀí£¬Ãû×Ö·þÎñ£¬Ìṩ·Ö²¼Ê½Í¬²½ÒÔ¼°¼¯Èº¹ÜÀí£¬¸ü¶à½éÉÜÇë¿´ÏÂÎÄ.
À´×ÔÓÚ²©¿ÍÔ°£¬,ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£ |
|
ÔÚZookeeperµÄ¹ÙÍøÉÏÓÐÕâôһ¾ä»°£ºZooKeeper is
a centralized service for maintaining configuration
information, naming, providing distributed synchronization,
and providing group services.
Õâ´ó¸ÅÃèÊöÁËZookeeperÖ÷Òª¿ÉÒÔ¸ÉÄÄЩÊÂÇ飺ÅäÖùÜÀí£¬Ãû×Ö·þÎñ£¬Ìṩ·Ö²¼Ê½Í¬²½ÒÔ¼°¼¯Èº¹ÜÀí¡£ÄÇÕâЩ·þÎñÓÖµ½µ×ÊÇÊ²Ã´ÄØ£¿ÎÒÃÇΪʲôÐèÒªÕâÑùµÄ·þÎñ£¿ÎÒÃÇÓÖΪʲôҪʹÓÃZookeeperÀ´ÊµÏÖÄØ£¬Ê¹ÓÃZookeeperÓÐʲôÓÅÊÆ£¿½ÓÏÂÀ´Îһᰤ¸ö½éÉÜÕâЩµ½µ×ÊÇʲô£¬ÒÔ¼°ÓÐÄÄЩ¿ªÔ´ÏµÍ³ÖÐʹÓÃÁË¡£
ÅäÖùÜÀí ÔÚÎÒÃǵÄÓ¦ÓÃÖгýÁË´úÂëÍ⣬»¹ÓÐһЩ¾ÍÊǸ÷ÖÖÅäÖᣱÈÈçÊý¾Ý¿âÁ¬½ÓµÈ¡£Ò»°ãÎÒÃǶ¼ÊÇʹÓÃÅäÖÃÎļþµÄ·½Ê½£¬ÔÚ´úÂëÖÐÒýÈëÕâЩÅäÖÃÎļþ¡£µ«Êǵ±ÎÒÃÇÖ»ÓÐÒ»ÖÖÅäÖã¬Ö»ÓÐһ̨·þÎñÆ÷£¬²¢ÇÒ²»¾³£Ð޸ĵÄʱºò£¬Ê¹ÓÃÅäÖÃÎļþÊÇÒ»¸öºÜºÃµÄ×ö·¨£¬µ«ÊÇÈç¹ûÎÒÃÇÅäÖ÷dz£¶à£¬Óкܶà·þÎñÆ÷¶¼ÐèÒªÕâ¸öÅäÖ㬶øÇÒ»¹¿ÉÄÜÊǶ¯Ì¬µÄ»°Ê¹ÓÃÅäÖÃÎļþ¾Í²»ÊǸöºÃÖ÷ÒâÁË¡£Õâ¸öʱºòÍùÍùÐèҪѰÕÒÒ»ÖÖ¼¯ÖйÜÀíÅäÖõķ½·¨£¬ÎÒÃÇÔÚÕâ¸ö¼¯Öеĵط½ÐÞ¸ÄÁËÅäÖã¬ËùÓжÔÕâ¸öÅäÖøÐÐËȤµÄ¶¼¿ÉÒÔ»ñµÃ±ä¸ü¡£±ÈÈçÎÒÃÇ¿ÉÒÔ°ÑÅäÖ÷ÅÔÚÊý¾Ý¿âÀȻºóËùÓÐÐèÒªÅäÖõķþÎñ¶¼È¥Õâ¸öÊý¾Ý¿â¶ÁÈ¡ÅäÖᣵ«ÊÇ£¬ÒòΪºÜ¶à·þÎñµÄÕý³£ÔËÐж¼·Ç³£ÒÀÀµÕâ¸öÅäÖã¬ËùÒÔÐèÒªÕâ¸ö¼¯ÖÐÌṩÅäÖ÷þÎñµÄ·þÎñ¾ß±¸ºÜ¸ßµÄ¿É¿¿ÐÔ¡£Ò»°ãÎÒÃÇ¿ÉÒÔÓÃÒ»¸ö¼¯ÈºÀ´ÌṩÕâ¸öÅäÖ÷þÎñ£¬µ«ÊÇÓü¯ÈºÌáÉý¿É¿¿ÐÔ£¬ÄÇÈçºÎ±£Ö¤ÅäÖÃÔÚ¼¯ÈºÖеÄÒ»ÖÂÐÔÄØ£¿
Õâ¸öʱºò¾ÍÐèҪʹÓÃÒ»ÖÖʵÏÖÁËÒ»ÖÂÐÔÐÒéµÄ·þÎñÁË¡£Zookeeper¾ÍÊÇÕâÖÖ·þÎñ£¬ËüʹÓÃZabÕâÖÖÒ»ÖÂÐÔÐÒéÀ´ÌṩһÖÂÐÔ¡£ÏÖÔÚÓкܶ࿪ԴÏîĿʹÓÃZookeeperÀ´Î¬»¤ÅäÖ㬱ÈÈçÔÚHBaseÖУ¬¿Í»§¶Ë¾ÍÊÇÁ¬½ÓÒ»¸öZookeeper£¬»ñµÃ±ØÒªµÄHBase¼¯ÈºµÄÅäÖÃÐÅÏ¢£¬È»ºó²Å¿ÉÒÔ½øÒ»²½²Ù×÷¡£»¹ÓÐÔÚ¿ªÔ´µÄÏûÏ¢¶ÓÁÐKafkaÖУ¬Ò²Ê¹ÓÃZookeeperÀ´Î¬»¤brokerµÄÐÅÏ¢¡£ÔÚAlibaba¿ªÔ´µÄSOA¿ò¼ÜDubboÖÐÒ²¹ã·ºµÄʹÓÃZookeeper¹ÜÀíһЩÅäÖÃÀ´ÊµÏÖ·þÎñÖÎÀí¡£
Ãû×Ö·þÎñ Ãû×Ö·þÎñÕâ¸ö¾ÍºÜºÃÀí½âÁË¡£±ÈÈçΪÁËͨ¹ýÍøÂç·ÃÎÊÒ»¸öϵͳ£¬ÎÒÃǵÃÖªµÀ¶Ô·½µÄIPµØÖ·£¬µ«ÊÇIPµØÖ·¶ÔÈ˷dz£²»ÓѺã¬Õâ¸öʱºòÎÒÃǾÍÐèҪʹÓÃÓòÃûÀ´·ÃÎÊ¡£µ«ÊǼÆËã»úÊDz»ÄÜÊDZðÓòÃûµÄ¡£Ôõô°ìÄØ£¿Èç¹ûÎÒÃÇÿ̨»úÆ÷Àï¶¼±¸ÓÐÒ»·ÝÓòÃûµ½IPµØÖ·µÄÓ³É䣬Õâ¸öµ¹ÊÇÄܽâ¾öÒ»²¿·ÖÎÊÌ⣬µ«ÊÇÈç¹ûÓòÃû¶ÔÓ¦µÄIP·¢Éú±ä»¯ÁËÓÖ¸ÃÔõô°ìÄØ£¿ÓÚÊÇÎÒÃÇÓÐÁËDNSÕâ¸ö¶«Î÷¡£ÎÒÃÇÖ»ÐèÒª·ÃÎÊÒ»¸ö´ó¼ÒÊìÖªµÄ(known)µÄµã£¬Ëü¾Í»á¸æËßÄãÕâ¸öÓòÃû¶ÔÓ¦µÄIPÊÇʲô¡£ÔÚÎÒÃǵÄÓ¦ÓÃÖÐÒ²»á´æÔںܶàÕâÀàÎÊÌâ£¬ÌØ±ðÊÇÔÚÎÒÃǵķþÎñÌØ±ð¶àµÄʱºò£¬Èç¹ûÎÒÃÇÔÚ±¾µØ±£´æ·þÎñµÄµØÖ·µÄʱºò½«·Ç³£²»·½±ã£¬µ«ÊÇÈç¹ûÎÒÃÇÖ»ÐèÒª·ÃÎÊÒ»¸ö´ó¼Ò¶¼ÊìÖªµÄ·ÃÎʵ㣬ÕâÀïÌṩͳһµÄÈë¿Ú£¬ÄÇôά»¤ÆðÀ´½«·½±ãµÃ¶àÁË¡£
·Ö²¼Ê½Ëø ÆäʵÔÚµÚһƪÎÄÕÂÖÐÒѾ½éÉÜÁËZookeeperÊÇÒ»¸ö·Ö²¼Ê½Ðµ÷·þÎñ¡£ÕâÑùÎÒÃǾͿÉÒÔÀûÓÃZookeeperÀ´Ðµ÷¶à¸ö·Ö²¼Ê½½ø³ÌÖ®¼äµÄ»î¶¯¡£±ÈÈçÔÚÒ»¸ö·Ö²¼Ê½»·¾³ÖУ¬ÎªÁËÌá¸ß¿É¿¿ÐÔ£¬ÎÒÃǵļ¯ÈºµÄÿ̨·þÎñÆ÷É϶¼²¿Êð×ÅͬÑùµÄ·þÎñ¡£µ«ÊÇ£¬Ò»¼þÊÂÇéÈç¹û¼¯ÈºÖеÄÿ¸ö·þÎñÆ÷¶¼½øÐеϰ£¬ÄÇÏ໥֮¼ä¾ÍҪе÷£¬±à³ÌÆðÀ´½«·Ç³£¸´ÔÓ¡£¶øÈç¹ûÎÒÃÇÖ»ÈÃÒ»¸ö·þÎñ½øÐвÙ×÷£¬ÄÇÓÖ´æÔÚµ¥µã¡£Í¨³£»¹ÓÐÒ»ÖÖ×ö·¨¾ÍÊÇʹÓ÷ֲ¼Ê½Ëø£¬ÔÚij¸öʱ¿ÌÖ»ÈÃÒ»¸ö·þÎñÈ¥¸É»î£¬µ±Õą̂·þÎñ³öÎÊÌâµÄʱºòËøÊÍ·Å£¬Á¢¼´fail
overµ½ÁíÍâµÄ·þÎñ¡£ÕâÔںܶà·Ö²¼Ê½ÏµÍ³Öж¼ÊÇÕâô×ö£¬ÕâÖÖÉè¼ÆÓÐÒ»¸ö¸üºÃÌýµÄÃû×Ö½ÐLeader Election(leaderÑ¡¾Ù)¡£±ÈÈçHBaseµÄMaster¾ÍÊDzÉÓÃÕâÖÖ»úÖÆ¡£µ«Òª×¢ÒâµÄÊÇ·Ö²¼Ê½Ëø¸úͬһ¸ö½ø³ÌµÄËø»¹ÊÇÓÐÇø±ðµÄ£¬ËùÒÔʹÓõÄʱºòÒª±Èͬһ¸ö½ø³ÌÀïµÄËø¸ü½÷É÷µÄʹÓá£
¼¯Èº¹ÜÀí ÔÚ·Ö²¼Ê½µÄ¼¯ÈºÖУ¬¾³£»áÓÉÓÚ¸÷ÖÖÔÒò£¬±ÈÈçÓ²¼þ¹ÊÕÏ£¬Èí¼þ¹ÊÕÏ£¬ÍøÂçÎÊÌ⣬ÓÐЩ½Úµã»á½ø½ø³ö³ö¡£ÓÐеĽڵã¼ÓÈë½øÀ´£¬Ò²ÓÐÀϵĽڵãÍ˳ö¼¯Èº¡£Õâ¸öʱºò£¬¼¯ÈºÖÐÆäËû»úÆ÷ÐèÒª¸ÐÖªµ½ÕâÖֱ仯£¬È»ºó¸ù¾ÝÕâÖֱ仯×ö³ö¶ÔÓ¦µÄ¾ö²ß¡£±ÈÈçÎÒÃÇÊÇÒ»¸ö·Ö²¼Ê½´æ´¢ÏµÍ³£¬ÓÐÒ»¸öÖÐÑë¿ØÖÆ½Úµã¸ºÔð´æ´¢µÄ·ÖÅ䣬µ±ÓÐеĴ洢½øÀ´µÄʱºòÎÒÃÇÒª¸ù¾ÝÏÖÔÚ¼¯ÈºÄ¿Ç°µÄ״̬À´·ÖÅä´æ´¢½Úµã¡£Õâ¸öʱºòÎÒÃǾÍÐèÒª¶¯Ì¬¸ÐÖªµ½¼¯ÈºÄ¿Ç°µÄ״̬¡£»¹ÓУ¬±ÈÈçÒ»¸ö·Ö²¼Ê½µÄSOA¼Ü¹¹ÖУ¬·þÎñÊÇÒ»¸ö¼¯ÈºÌṩµÄ£¬µ±Ïû·ÑÕß·ÃÎÊij¸ö·þÎñʱ£¬¾ÍÐèÒª²ÉÓÃijÖÖ»úÖÆ·¢ÏÖÏÖÔÚÓÐÄÄЩ½Úµã¿ÉÒÔÌṩ¸Ã·þÎñ(ÕâÒ²³ÆÖ®Îª·þÎñ·¢ÏÖ£¬±ÈÈçAlibaba¿ªÔ´µÄSOA¿ò¼ÜDubbo¾Í²ÉÓÃÁËZookeeper×÷Ϊ·þÎñ·¢Ïֵĵײã»úÖÆ)¡£»¹ÓпªÔ´µÄKafka¶ÓÁоͲÉÓÃÁËZookeeper×÷ΪCosnumerµÄÉÏÏÂÏß¹ÜÀí¡£
×Ô¼ºµÄһЩÀí½â£º
Leader¿ÉÒÔ½ÓÊÜclientÇëÇó£¬Ò²½ÓÊÕÆäËûServerת·¢µÄдÇëÇ󣬸ºÔð¸üÐÂϵͳ״̬¡£ FollowerÒ²¿ÉÒÔ½ÓÊÕclientÇëÇó£¬Èç¹ûÊÇдÇëÇó½«×ª·¢¸øLeaderÀ´¸üÐÂϵͳ״̬£¬¶ÁÇëÇóÔòÓÉFollowerµÄÄÚ´æÊý¾Ý¿âÖ±½ÓÏìÓ¦¡£

ÊÂÎï²Ù×÷ ÔÚZooKeeperÖУ¬ÄܸıäZooKeeper·þÎñÆ÷״̬µÄ²Ù×÷³ÆÎªÊÂÎñ²Ù×÷¡£Ò»°ã°üÀ¨Êý¾Ý½Úµã´´½¨Óëɾ³ý¡¢Êý¾ÝÄÚÈݸüкͿͻ§¶Ë»á»°´´½¨ÓëʧЧµÈ²Ù×÷¡£¶ÔӦÿһ¸öÊÂÎñÇëÇó£¬ZooKeeper¶¼»áΪÆä·ÖÅäÒ»¸öÈ«¾ÖΨһµÄÊÂÎñID£¬ÓÃ
ZXID ±íʾ£¬Í¨³£ÊÇÒ»¸ö64λµÄÊý×Ö¡£Ã¿Ò»¸ö ZXID¶ÔÓ¦Ò»´Î¸üвÙ×÷£¬´ÓÕâЩ ZXID ÖпÉÒÔ¼ä½ÓµØÊ¶±ð³ö
ZooKeeper ´¦ÀíÕâЩÊÂÎñ²Ù×÷ÇëÇóµÄ È«¾Ö˳Ðò¡£
Watcher(ʼþ¼àÌýÆ÷) ZooKeeper ÖÐÒ»¸öºÜÖØÒªµÄÌØÐÔ¡£ZooKeeperÔÊÐíÓû§ÔÚÖ¸¶¨½ÚµãÉÏ×¢²áһЩ Watcher£¬²¢ÇÒÔÚÒ»Ð©ÌØ¶¨Ê¼þ´¥·¢µÄʱºò£¬ZooKeeper·þÎñ¶Ë»á½«Ê¼þ֪ͨµ½¸ÐÐËȤµÄ¿Í»§¶ËÉÏÈ¥¡£¸Ã»úÖÆÊÇ
ZooKeeper ʵÏÖ·Ö²¼Ê½Ðµ÷·þÎñµÄÖØÒªÌØÐÔ¡£
ZooKeeperÊý¾ÝÄ£Ð͵ĽṹÕûÌåÉÏ¿ÉÒÔ¿´×÷ÊÇÒ»¿ÃÊ÷£¬Ã¿¸ö½Úµã³Æ×öÒ»¸öZNode¡£Ã¿¸öZNode¶¼¿ÉÒÔͨ¹ýÆä·¾¶Î¨Ò»±êʶÔÚÿ¸öZNodeÉϿɴ洢ÉÙÁ¿Êý¾Ý(ĬÈÏÊÇ1M,
¿ÉÒÔͨ¹ýÅäÖÃÐÞ¸Ä, ͨ³£²»½¨ÒéÔÚZNodeÉÏ´æ´¢´óÁ¿µÄÊý¾Ý)
ZooKeeperÖ§³ÖÒ»ÖÖWatch²Ù×÷£¬Client¿ÉÒÔÔÚij¸öZNodeÉÏÉèÖÃÒ»¸öWatcher£¬À´Watch¸ÃZNodeÉϵı仯¡£Èç¹û¸ÃZNodeÉÏÓÐÏàÓ¦µÄ±ä»¯£¬¾Í»á´¥·¢Õâ¸öWatcher£¬°ÑÏàÓ¦µÄʼþ֪ͨ¸øÉèÖÃWatcherµÄClient¡£ÐèҪעÒâµÄÊÇ£¬ZooKeeperÖеÄWatcherÊÇÒ»´ÎÐԵ쬼´´¥·¢Ò»´Î¾Í»á±»È¡Ïû£¬Èç¹ûÏë¼ÌÐøWatchµÄ»°£¬ÐèÒª¿Í»§¶ËÖØÐÂÉèÖÃWatcher
½Úµã״̬ ÿ¸ö¼¯ÈºÖеĽڵ㶼ÓÐÒ»¸ö״̬ LOOKING, FOLLOWING, LEADING, OBSERVING¡£¶¼ÊôÓÚÕâ4ÖÖ£¬Ã¿¸ö½ÚµãÆô¶¯µÄʱºò¶¼ÊÇLOOKING״̬£¬Èç¹ûÕâ¸ö½Úµã²ÎÓëÑ¡¾Ùµ«×îºó²»ÊÇleader£¬Ôò״̬ÊÇFOLLOWING£¬Èç¹û²»²ÎÓëÑ¡¾ÙÔòÊÇOBSERVING£¬leaderµÄ״̬ÊÇLEADING¡£
¹ØÓÚZooKeeper¼¯Èº·þÎñÆ÷Êý ZooKeeper ¹Ù·½È·Êµ¸ø³öÁ˹ØÓÚÆæÊýµÄ½¨Ò飬µ«¾ø´ó²¿·Ö ZooKeeper Óû§¶ÔÓÚÕâ¸ö½¨ÒéÈÏʶÓÐÆ«²î¡£Ò»¸ö
ZooKeeper ¼¯ÈºÈç¹ûÒª¶ÔÍâÌṩ¿ÉÓõķþÎñ£¬ÄÇô¼¯ÈºÖбØÐëÒªÓйý°ëµÄ»úÆ÷Õý³£¹¤×÷²¢Çұ˴ËÖ®¼äÄܹ»Õý³£Í¨ÐÅ¡£»ùÓÚÕâ¸öÌØÐÔ£¬Èç¹ûÏë´î½¨Ò»¸öÄܹ»ÔÊÐí
N ̨»úÆ÷ down µôµÄ¼¯Èº£¬ÄÇô¾ÍÒª²¿ÊðÒ»¸öÓÉ 2*N+1 ̨·þÎñÆ÷¹¹³ÉµÄ ZooKeeper
¼¯Èº¡£Òò´Ë£¬Ò»¸öÓÉ 3 ̨»úÆ÷¹¹³ÉµÄ ZooKeeper ¼¯Èº£¬Äܹ»ÔÚ¹Òµô 1 ̨»úÆ÷ºóÒÀÈ»Õý³£¹¤×÷£¬¶ø¶ÔÓÚÒ»¸öÓÉ
5 ̨·þÎñÆ÷¹¹³ÉµÄ ZooKeeper ¼¯Èº£¬Äܹ»¶Ô 2 ̨»úÆ÷¹ÒµôµÄÇé¿ö½øÐÐÈÝÔÖ¡£×¢Ò⣬Èç¹ûÊÇÒ»¸öÓÉ6̨·þÎñÆ÷¹¹³ÉµÄ
ZooKeeper ¼¯Èº£¬Í¬ÑùÖ»Äܹ»¹Òµô 2 ̨»úÆ÷£¬ÒòΪÈç¹û¹Òµô 3 ̨£¬Ê£ÏµĻúÆ÷¾ÍÎÞ·¨ÊµÏÖ¹ý°ëÁË¡£
zookeeperÓÐÕâÑùÒ»¸öÌØÐÔ£º
¡¾¼¯ÈºÖÐÖ»ÒªÓг¬¹ý¹ý°ëµÄ»úÆ÷ÊÇÕý³£¹¤×÷µÄ£¬ÄÇôÕû¸ö¼¯Èº¶ÔÍâ¾ÍÊÇ¿ÉÓõġ¿
Ò²¾ÍÊÇ˵Èç¹ûÓÐ2¸özookeeper£¬ÄÇôֻҪÓÐ1¸öËÀÁËzookeeper¾Í²»ÄÜÓÃÁË£¬ÒòΪ1ûÓйý°ë£¬ËùÒÔ2¸özookeeperµÄËÀÍöÈÝÈ̶ÈΪ0£»
ͬÀí£¬ÒªÊÇÓÐ3¸özookeeper£¬Ò»¸öËÀÁË£¬»¹Ê£ÏÂ2¸öÕý³£µÄ£¬¹ý°ëÁË£¬ËùÒÔ3¸özookeeperµÄÈÝÈ̶ÈΪ1£»
ͬÀíÄã¶àÁоټ¸¸ö£º2->0;3->1;4->1;5->2;6->2»á·¢ÏÖÒ»¸ö¹æÂÉ£¬2nºÍ2n-1µÄÈÝÈ̶ÈÊÇÒ»ÑùµÄ£¬
¶¼ÊÇn-1£¬ËùÒÔΪÁ˸ü¼Ó¸ßЧ£¬ºÎ±ØÔö¼ÓÄÇÒ»¸ö²»±ØÒªµÄzookeeperÄØ¡£
ZooKeeper¿ÉÉìËõÐÔ ÄÇô£¬ZooKeeperΪʲôҪÒýÈëObserverÕâ¸ö½ÇɫĨ£¿ÆäʵÔÚZooKeeperÖÐÒýÈëObserver£¬Ö÷ÒªÊÇΪÁËʹZooKeeper¾ßÓиüºÃµÄ¿ÉÉìËõÐÔ¡£ÄÇô£¬ºÎΪ¿ÉÉìËõÐÔ£¿¹ØÓÚÉìËõÐÔ£¬¶ÔÓÚ²»Í¬µÄÈËÒâζ×Ų»Í¬µÄÊÂÇé¡£
¶øÔÚÕâÀïÊÇ˵£¬Èç¹ûÎÒÃǵŤ×÷¸ºÔØ¿ÉÒÔͨ¹ý¸øÏµÍ³·ÖÅä¸ü¶àµÄ×ÊÔ´À´·Öµ££¬ÄÇôÕâ¸öϵͳ¾ÍÊÇ¿ÉÉìËõµÄ£»Ò»¸ö²»¿ÉÉìËõµÄϵͳȴÎÞ·¨Í¨¹ýÔö¼Ó×ÊÔ´À´ÌáÉýÐÔÄÜ£¬ÉõÖÁ»áÔÚ¹¤×÷¸ºÔØÔö¼Óʱ£¬ÐÔÄܻἱ¾çϽµ¡£ ÔÚObserver³öÏÖÒÔǰ£¬ZooKeeperµÄÉìËõÐÔÓÉFollowerÀ´ÊµÏÖ£¬ÎÒÃÇ¿ÉÒÔͨ¹ýÌí¼ÓFollower½ÚµãµÄÊýÁ¿À´±£Ö¤ZooKeeper·þÎñµÄ¶ÁÐÔÄÜ¡£µ«ÊÇËæ×ÅFollower½ÚµãÊýÁ¿µÄÔö¼Ó£¬ZooKeeper·þÎñµÄдÐÔÄÜÊܵ½ÁËÓ°Ïì¡£
¼òµ¥À´Ëµ£¬ZabÐÒ鹿¶¨£ºÀ´×ÔClientµÄËùÓÐдÇëÇ󣬶¼Òª×ª·¢¸øZK·þÎñÖÐΨһµÄServer¡ªLeader£¬ÓÉLeader¸ù¾Ý¸ÃÇëÇ󷢯ðÒ»¸öProposal£¨ÇëÇ󣩡£È»ºó£¬ÆäËûµÄServer¶Ô¸ÃProposal£¨ÇëÇ󣩽øÐÐVote£¨Í¶Æ±£©¡£Ö®ºó£¬Leader¶ÔVote£¨Í¶Æ±£©½øÐÐÊÕ¼¯£¬µ±VoteÊýÁ¿¹ý°ëʱLeader»áÏòËùÓеÄServer·¢ËÍÒ»¸ö֪ͨÏûÏ¢¡£×îºó£¬µ±ClientËùÁ¬½ÓµÄServerÊÕµ½¸ÃÏûϢʱ£¬»á°Ñ¸Ã²Ù×÷¸üе½ÄÚ´æÖв¢¶ÔClientµÄдÇëÇó×ö³ö»ØÓ¦¡£

´ÓͼÖÐÎÒÃÇ¿ÉÒÔ¿´³ö£¬ ZooKeeper ·þÎñÆ÷ÔÚÉÏÊöÐÒéÖÐʵ¼Ê°çÑÝÁËÁ½¸öÖ°ÄÜ¡£ËüÃÇÒ»·½Ãæ´Ó¿Í»§¶Ë½ÓÊÜÁ¬½ÓÓë²Ù×÷ÇëÇó£¬ÁíÒ»·½Ãæ¶Ô²Ù×÷½á¹û½øÐÐͶƱ¡£ÕâÁ½¸öÖ°ÄÜÔÚ
ZooKeeper¼¯ÈºÀ©Õ¹µÄʱºò±Ë´ËÖÆÔ¼¡£ÀýÈ磬µ±ÎÒÃÇÏ£ÍûÔö¼Ó ZK·þÎñÖÐClientÊýÁ¿µÄʱºò£¬ÄÇôÎÒÃǾÍÐèÒªÔö¼ÓServerµÄÊýÁ¿£¬À´Ö§³ÖÕâô¶àµÄ¿Í»§¶Ë¡£È»¶ø£¬´ÓZabÐÒé¶ÔдÇëÇóµÄ´¦Àí¹ý³ÌÖÐÎÒÃÇ¿ÉÒÔ·¢ÏÖ£¬Ôö¼Ó·þÎñÆ÷µÄÊýÁ¿£¬ÔòÔö¼ÓÁ˶ÔÐÒéÖÐͶƱ¹ý³ÌµÄѹÁ¦¡£ÒòΪLeader½Úµã±ØÐëµÈ´ý¼¯ÈºÖйý°ëServerÏìӦͶƱ£¬ÓÚÊǽڵãµÄÔö¼ÓʹµÃ²¿·Ö¼ÆËã»úÔËÐнÏÂý£¬´Ó¶øÍÏÂýÕû¸öͶƱ¹ý³ÌµÄ¿ÉÄÜÐÔÒ²ËæÖ®Ìá¸ß£¬Ð´²Ù×÷Ò²»áËæÖ®Ï½µ¡£ÕâÕýÊÇÎÒÃÇÔÚʵ¼Ê²Ù×÷Öп´µ½µÄÎÊÌ⡪¡ªËæ×Å
ZooKeeper ¼¯Èº±ä´ó£¬Ð´²Ù×÷µÄÍÌÍÂÁ¿»áϽµ¡£
ËùÒÔ£¬ÎÒÃDz»µÃ²»µÃÔÚÔö¼ÓClientÊýÁ¿µÄÆÚÍûºÍÎÒÃÇÏ£Íû±£³Ö½ÏºÃÍÌÍÂÐÔÄܵįÚÍû¼ä½øÐÐȨºâ¡£Òª´òÆÆÕâÒ»ñîºÏ¹ØÏµ£¬ÎÒÃÇÒýÈëÁ˲»²ÎÓëͶƱµÄ·þÎñÆ÷£¬³ÆÎªObserver¡£
Observer¿ÉÒÔ½ÓÊܿͻ§¶ËµÄÁ¬½Ó£¬²¢½«Ð´ÇëÇóת·¢¸øLeader½Úµã¡£µ«ÊÇ£¬Leader½Úµã²»»áÒªÇó
Observer²Î¼ÓͶƱ¡£Ïà·´£¬Observer²»²ÎÓëͶƱ¹ý³Ì£¬½ö½öÔÚÉÏÊöµÚ3šiÄÇÑù£¬ºÍÆäËû·þÎñ½ÚµãÒ»ÆðµÃµ½Í¶Æ±½á¹û¡£
Zookeeper¹¤×÷Á÷³Ì-Leader
1 .»Ö¸´Êý¾Ý£»
2 .ά³ÖÓëLearnerµÄÐÄÌø£¬½ÓÊÕLearnerÇëÇó²¢ÅжÏLearnerµÄÇëÇóÏûÏ¢ÀàÐÍ£»
3 .LearnerµÄÏûÏ¢ÀàÐÍÖ÷ÒªÓÐPINGÏûÏ¢¡¢REQUESTÏûÏ¢¡¢ACKÏûÏ¢¡¢REVALIDATEÏûÏ¢£¬¸ù¾Ý²»Í¬µÄÏûÏ¢ÀàÐÍ£¬½øÐв»Í¬µÄ´¦Àí¡£
PING ÏûÏ¢ÊÇÖ¸LearnerµÄÐÄÌøÐÅÏ¢£»
REQUESTÏûÏ¢ÊÇFollower·¢Ë͵ÄÌáÒéÐÅÏ¢£¬°üÀ¨Ð´ÇëÇó¼°Í¬²½ÇëÇó£»
ACKÏûÏ¢ÊÇ FollowerµÄ¶ÔÌáÒéµÄ»Ø¸´£¬³¬¹ý°ëÊýµÄFollowerͨ¹ý£¬Ôòcommit¸ÃÌáÒ飻
REVALIDATEÏûÏ¢ÊÇÓÃÀ´ÑÓ³¤SESSIONÓÐЧʱ¼ä¡£

Zookeeper¹¤×÷Á÷³Ì-Follower
FollowerÖ÷ÒªÓÐËĸö¹¦ÄÜ£º
1.ÏòLeader·¢ËÍÇëÇó£¨PINGÏûÏ¢¡¢REQUESTÏûÏ¢¡¢ACKÏûÏ¢¡¢REVALIDATEÏûÏ¢£©£»
2.½ÓÊÕLeaderÏûÏ¢²¢½øÐд¦Àí£»
3.½ÓÊÕClientµÄÇëÇó£¬Èç¹ûΪдÇëÇ󣬷¢Ë͸øLeader½øÐÐͶƱ£»
4.·µ»ØClient½á¹û¡£
FollowerµÄÏûϢѻ·´¦ÀíÈçϼ¸ÖÖÀ´×ÔLeaderµÄÏûÏ¢£º
1 .PINGÏûÏ¢£º ÐÄÌøÏûÏ¢£»
2 .PROPOSALÏûÏ¢£ºLeader·¢ÆðµÄÌá°¸£¬ÒªÇóFollowerͶƱ£»
3 .COMMITÏûÏ¢£º·þÎñÆ÷¶Ë×îÐÂÒ»´ÎÌá°¸µÄÐÅÏ¢£»
4 .UPTODATEÏûÏ¢£º±íÃ÷ͬ²½Íê³É£»
5 .REVALIDATEÏûÏ¢£º¸ù¾ÝLeaderµÄREVALIDATE½á¹û£¬¹Ø±Õ´ýrevalidateµÄsession»¹ÊÇÔÊÐíÆä½ÓÊÜÏûÏ¢£»
6 .SYNCÏûÏ¢£º·µ»ØSYNC½á¹ûµ½¿Í»§¶Ë£¬Õâ¸öÏûÏ¢×î³õÓɿͻ§¶Ë·¢Æð£¬ÓÃÀ´Ç¿ÖƵõ½×îеĸüС£

Zookeeper½ÚµãÊý¾Ý²Ù×÷Á÷³Ì

×¢£º
1.ÔÚClientÏòFollwer·¢³öÒ»¸öдµÄÇëÇó
2.Follwer°ÑÇëÇó·¢Ë͸øLeader
3.Leader½ÓÊÕµ½ÒÔºó¿ªÊ¼·¢ÆðͶƱ²¢Í¨ÖªFollwer½øÐÐͶƱ
4.Follwer°ÑͶƱ½á¹û·¢Ë͸øLeader
5.Leader½«½á¹û»ã×ܺóÈç¹ûÐèҪдÈ룬Ôò¿ªÊ¼Ð´Èëͬʱ°ÑдÈë²Ù×÷֪ͨ¸øLeader£¬È»ºócommit;
6.Follwer°ÑÇëÇó½á¹û·µ»Ø¸øClient
ZookeeperÉè¼ÆÄ¿µÄ
1.×îÖÕÒ»ÖÂÐÔ£ºclient²»ÂÛÁ¬½Óµ½ÄĸöServer£¬Õ¹Ê¾¸øËü¶¼ÊÇͬһ¸öÊÓͼ£¬ÕâÊÇzookeeper×îÖØÒªµÄÐÔÄÜ¡£
2.¿É¿¿ÐÔ£º¾ßÓмòµ¥¡¢½¡×³¡¢Á¼ºÃµÄÐÔÄÜ£¬Èç¹ûÏûÏ¢±»µ½Ò»Ì¨·þÎñÆ÷½ÓÊÜ£¬ÄÇôËü½«±»ËùÓеķþÎñÆ÷½ÓÊÜ¡£
3.ʵʱÐÔ£ºZookeeper±£Ö¤¿Í»§¶Ë½«ÔÚÒ»¸öʱ¼ä¼ä¸ô·¶Î§ÄÚ»ñµÃ·þÎñÆ÷µÄ¸üÐÂÐÅÏ¢£¬»òÕß·þÎñÆ÷ʧЧµÄÐÅÏ¢¡£µ«ÓÉÓÚÍøÂçÑÓʱµÈÔÒò£¬Zookeeper²»Äܱ£Ö¤Á½¸ö¿Í»§¶ËÄÜͬʱµÃµ½¸Õ¸üеÄÊý¾Ý£¬Èç¹ûÐèÒª×îÐÂÊý¾Ý£¬Ó¦¸ÃÔÚ¶ÁÊý¾Ý֮ǰµ÷ÓÃsync()½Ó¿Ú¡£
4.µÈ´ýÎ޹أ¨wait-free£©£ºÂýµÄ»òÕßʧЧµÄclient²»µÃ¸ÉÔ¤¿ìËÙµÄclientµÄÇëÇó£¬Ê¹µÃÿ¸öclient¶¼ÄÜÓÐЧµÄµÈ´ý¡£
5.Ô×ÓÐÔ£º¸üÐÂÖ»Äܳɹ¦»òÕßʧ°Ü£¬Ã»ÓÐÖмä״̬¡£
6.˳ÐòÐÔ£º°üÀ¨È«¾ÖÓÐÐòºÍÆ«ÐòÁ½ÖÖ£ºÈ«¾ÖÓÐÐòÊÇÖ¸Èç¹ûÔÚһ̨·þÎñÆ÷ÉÏÏûÏ¢aÔÚÏûÏ¢bǰ·¢²¼£¬ÔòÔÚËùÓÐServerÉÏÏûÏ¢a¶¼½«ÔÚÏûÏ¢bǰ±»·¢²¼£»Æ«ÐòÊÇÖ¸Èç¹ûÒ»¸öÏûÏ¢bÔÚÏûÏ¢aºó±»Í¬Ò»¸ö·¢ËÍÕß·¢²¼£¬a±Ø½«ÅÅÔÚbÇ°Ãæ¡£
|