¸üÐÂʱ¼ä:2020Äê11ÔÂ06ÈÕ16ʱ01·Ö À´Ô´:ÀÖÓã²¥¿Í ä¯ÀÀ´ÎÊý:
ZooKeeperÊÇÒ»¸ö·Ö²¼Ê½ µÄ£¬¿ª·ÅÔ´ÂëµÄ·Ö²¼Ê½ Ó¦ÓóÌÐòе÷·þÎñ £¬ÊÇGoogleµÄChubbyÒ»¸ö¿ªÔ´µÄʵÏÖ£¬ ËüÊǼ¯ÈºµÄ¹ÜÀíÕߣ¬¼àÊÓ׿¯ÈºÖи÷¸ö½ÚµãµÄ״̬¸ù¾Ý½ÚµãÌá½»µÄ·´À¡½øÐÐÏÂÒ»²½ºÏÀí²Ù×÷¡£×îÖÕ£¬½«¼òµ¥Ò× ÓõĽӿںÍÐÔÄܸßЧ¡¢¹¦ÄÜÎȶ¨µÄϵͳÌṩ¸øÓû§¡£ ¿Í»§¶ËµÄ ¶ÁÇëÇó ¿ÉÒÔ±»¼¯ÈºÖÐµÄ ÈÎÒâһ̨»úÆ÷´¦Àí £¬Èç¹û¶ÁÇëÇóÔÚ½ÚµãÉÏ×¢²áÁ˼àÌýÆ÷£¬Õâ¸ö¼àÌýÆ÷Ò²ÊÇÓÉËù Á¬½ÓµÄzookeeper»úÆ÷À´´¦Àí¡£¶ÔÓÚ Ð´ÇëÇó £¬ÕâЩÇëÇó»áͬ ʱ·¢¸øÆäËû zookeeper »úÆ÷²¢ÇÒ´ï³ÉÒ»Öºó£¬Çë Çó²Å»á·µ»Ø³É¹¦ ¡£Òò´Ë£¬Ëæ×Å zookeeper µÄ¼¯Èº»úÆ÷Ôö¶à£¬¶ÁÇëÇóµÄÍÌÍ»áÌá¸ßµ«ÊÇдÇëÇóµÄÍÌÍ»áϽµ ¡£ ÓÐÐòÐÔÊÇzookeeperÖзdz£ÖØÒªµÄÒ»¸öÌØÐÔ£¬ËùÓÐµÄ ¸üж¼ÊÇÈ«¾ÖÓÐÐòµÄ £¬Ã¿¸ö¸üж¼ÓÐÒ»¸ö ΨһµÄʱ¼ä´Á £¬ Õâ¸öʱ¼ä´Á³ÆÎª zxid ( Zookeeper Transaction Id ) ¡£¶ø ¶ÁÇëÇóÖ»»áÏà¶ÔÓÚ¸üÐÂÓÐÐò £¬Ò²¾ÍÊǶÁÇëÇóµÄ·µ»Ø ½á¹ûÖÐ»á´øÓÐÕâ¸ö zookeeper ×îÐ嵀 zxid ¡£

1¡¢Îļþϵͳ
2¡¢Í¨Öª»úÖÆ
ZookeeperÌṩһ¸ö¶à²ã¼¶µÄ½ÚµãÃüÃû¿Õ¼ä(½Úµã³ÆÎªznode)¡£ÓëÎļþϵͳ²»Í¬µÄÊÇ£¬ÕâЩ½Úµã ¶¼¿ÉÒÔÉèÖà ¹ØÁªµÄÊý¾Ý £¬¶øÎļþϵͳÖÐÖ»ÓÐÎļþ½Úµã¿ÉÒÔ´æ·ÅÊý¾Ý¶øÄ¿Â¼½Úµã²»ÐС£ZookeeperΪÁ˱£Ö¤¸ßÍÌͺ͵ÍÑÓ ³Ù£¬ÔÚÄÚ´æÖÐά»¤ÁËÕâ¸öÊ÷×´µÄĿ¼½á¹¹£¬ÕâÖÖÌØÐÔʹµÃZookeeper ²»ÄÜÓÃÓÚ´æ·Å´óÁ¿µÄÊý¾Ý £¬Ã¿¸ö½ÚµãµÄ´æ ·ÅÊý¾ÝÉÏÏÞΪ 1M ¡£
1¡¢PERSISTENT- ³Ö¾Ã»¯Ä¿Â¼½Úµã ¿Í»§¶ËÓëzookeeper¶Ï¿ªÁ¬½Óºó£¬¸Ã½ÚµãÒÀ¾É´æÔÚ
2¡¢PERSISTENT_SEQUENTIAL- ³Ö¾Ã»¯Ë³Ðò±àºÅĿ¼½Úµã
¿Í»§¶ËÓëzookeeper¶Ï¿ªÁ¬½Óºó£¬¸Ã½ÚµãÒÀ¾É´æÔÚ£¬Ö»ÊÇZookeeper¸ø¸Ã½ÚµãÃû³Æ½øÐÐ˳Ðò±àºÅ
3¡¢EPHEMERAL- ÁÙʱĿ¼½Úµã
¿Í»§¶ËÓëzookeeper¶Ï¿ªÁ¬½Óºó£¬¸Ã½Úµã±»É¾³ý
4¡¢EPHEMERAL_SEQUENTIAL- ÁÙʱ˳Ðò±àºÅĿ¼½Úµã¿Í»§¶ËÓëzookeeper¶Ï¿ªÁ¬½Óºó£¬¸Ã½Úµã±»É¾³ý£¬Ö»ÊÇZookeeper¸ø¸Ã½ÚµãÃû³Æ½øÐÐ˳Ðò±àºÅ¡£
client¶Ë»á¶Ôij¸öznode½¨Á¢Ò»¸öwatcher ʼþ £¬µ±¸Ãznode·¢Éú±ä»¯Ê±£¬ÕâЩclient»áÊÕµ½zkµÄ֪ͨ£¬ È»ºóclient¿ÉÒÔ¸ù¾Ýznode±ä»¯À´×ö³öÒµÎñÉϵĸıäµÈ¡£
1¡¢ÃüÃû·þÎñ 2¡¢ÅäÖùÜÀí 3¡¢¼¯Èº¹ÜÀí 4¡¢·Ö²¼Ê½Ëø 5¡¢¶ÓÁйÜÀí
ÃüÃû·þÎñÊÇָͨ¹ýÖ¸¶¨µÄÃû×ÖÀ´»ñÈ¡×ÊÔ´»òÕß·þÎñµÄµØÖ·£¬ÀûÓÃzk´´½¨Ò»¸öÈ«¾ÖµÄ·¾¶£¬¼´ÊÇΨһµÄ·¾¶£¬Õâ¸ö·¾¶¾Í¿ÉÒÔ×÷Ϊһ¸öÃû×Ö£¬Ö¸Ïò¼¯ÈºÖеļ¯Èº£¬ÌṩµÄ·þÎñµÄµØÖ·£¬»òÕßÒ»¸öÔ¶³ÌµÄ¶ÔÏóµÈµÈ¡£
³ÌÐò·Ö²¼Ê½µÄ²¿ÊðÔÚ²»Í¬µÄ»úÆ÷ÉÏ£¬½«³ÌÐòµÄÅäÖÃÐÅÏ¢·ÅÔÚzkµÄznode Ï£¬µ±ÓÐÅäÖ÷¢Éú¸Ä±äʱ£¬Ò²¾ÍÊÇ znode·¢Éú±ä»¯Ê±£¬¿ÉÒÔͨ¹ý¸Ä±äzkÖÐij¸öĿ¼½ÚµãµÄÄÚÈÝ£¬ÀûÓà watcher ֪ͨ¸ø¸÷¸ö¿Í»§¶Ë£¬´Ó¶ø¸ü¸ÄÅäÖá£
Ëùν¼¯Èº¹ÜÀíÎÞÔÚºõÁ½µã£ºÊÇ·ñÓлúÆ÷Í˳öºÍ¼ÓÈ롢ѡ¾Ùmaster¡£¶ÔÓÚµÚÒ»µã£¬ËùÓлúÆ÷Ô¼¶¨ÔÚ¸¸Ä¿Â¼Ï´´½¨ÁÙʱĿ¼½Úµã£¬È»ºó¼àÌý¸¸Ä¿Â¼½ÚµãµÄ×Ó½Úµã±ä»¯ÏûÏ¢¡£Ò»µ©ÓлúÆ÷¹Òµô£¬¸Ã»úÆ÷Óë zookeeperµÄÁ¬½Ó¶Ï¿ª£¬ÆäËù´´½¨µÄÁÙʱĿ¼½Úµã±»É¾³ý£¬ËùÓÐÆäËû»úÆ÷¶¼ÊÕµ½Í¨Öª£ºÄ³¸öÐÖµÜĿ¼±»É¾³ý£¬ÓÚÊÇ£¬ËùÓÐÈ˶¼ÖªµÀ£ºËüÉÏ´¬ÁË¡£Ð»úÆ÷¼ÓÈëÒ²ÊÇÀàËÆ£¬ËùÓлúÆ÷ÊÕµ½Í¨Öª£ºÐÂÐÖµÜĿ¼¼ÓÈ룬highcountÓÖÓÐÁË£¬¶ÔÓÚµÚ¶þµã£¬ÎÒÃÇÉÔ΢¸Ä±ä һϣ¬ËùÓлúÆ÷´´½¨ÁÙʱ˳Ðò±àºÅĿ¼½Úµã£¬Ã¿´Îѡȡ±àºÅ×îСµÄ»úÆ÷×÷Ϊ master ¾ÍºÃ¡£
ÓÐÁËzookeeperµÄÒ»ÖÂÐÔÎļþϵͳ£¬ËøµÄÎÊÌâ±äµÃÈÝÒס£Ëø·þÎñ¿ÉÒÔ·ÖΪÁ½À࣬һ¸öÊDZ£³Ö¶ÀÕ¼£¬ÁíÒ»¸öÊÇ¿ØÖÆÊ±Ðò ¡£ ¶ÔÓÚµÚÒ»À࣬ÎÒÃǽ«zookeeperÉϵÄÒ»¸öznode¿´×÷ÊÇÒ»°ÑËø£¬Í¨¹ýcreateznodeµÄ·½Ê½À´ÊµÏÖ¡£ËùÓпͻ§ ¶Ë¶¼È¥´´½¨ /distribute_lock ½Úµã£¬×îÖճɹ¦´´½¨µÄÄǸö¿Í»§¶ËÒ²¼´ÓµÓÐÁËÕâ°ÑËø¡£ÓÃÍêɾ³ýµô×Ô¼º´´½¨µÄ distribute_lock ½Úµã¾ÍÊͷųöËø¡£(¾ªÈº)
¶ÔÓÚµÚ¶þÀ࣬ /distribute_lock ÒѾԤÏÈ´æÔÚ£¬ËùÓпͻ§¶ËÔÚËüÏÂÃæ´´½¨ÁÙʱ˳Ðò±àºÅĿ¼½Úµã£¬ºÍÑ¡ masterÒ»Ñù£¬ ±àºÅ×îСµÄ»ñµÃËø £¬ÓÃÍêɾ³ý£¬ÒÀ´Î·½±ã¡£
1¡¢Zookeeperµ±master¹ÒÁË£¬»áÔÚ30-120s½øÐÐleaderÑ¡¾Ù£¬ÕâµãÀàËÆÓÚredisµÄÉÚ±ø»úÖÆ£¬ÔÚÑ¡¾ÙÆÚ¼äZookeeperÊDz»¿ÉÓõģ¬Õâô³¤Ê±¼ä²»ÄܽøÐзþÎñ×¢²á£¬ÊÇÎÞ·¨ÈÌÊܵ쬱ð˵30s£¬5s¶¼²»ÄÜÈÌÊÜ¡£ÕâʱZookeeper¼¯Èº»á̱»¾£¬ÕâÒ²ÊÇZookeeperµÄCP£¬±£³Ö½ÚµãµÄÒ»ÖÂÐÔ£¬ÎþÉüÁËA/¸ß¿ÉÓá£
2¡¢¶øEureka²»»á£¬¼´Ê¹EurekaÓв¿·Ö¹Òµô£¬»¹ÓÐÆäËû½Úµã¿ÉÒÔʹÓõģ¬ËûÃDZ£³Öƽ¼¶µÄ¹ØÏµ£¬Ö»²»¹ýÐÅÏ¢ÓпÉÄܲ»Ò»Ö£¬Õâ¾ÍÊÇAP£¬ÎþÉüÁËC/Ò»ÖÂÐÔ¡£²¢ÇÒEureka»¹ÌṩÁË×ÔÎÒ±£»¤»úÖÆ(15·ÖÖÓÄÚ³¬¹ý85%µÄ·þÎñ½ÚµãûÓÐÐÄÌø/down)£¬ÕâµãÎÒ¾õµÃȷʵҪ±ÈZookeeperºÃ£¬¼´Ê¹·þÎñ²»¿ÉÓã¬Ò²»á±£Áôµ±Ç°Ê§Ð§µÄ΢·þÎñ£¬Ä¬ÈÏ90Ã룬ÔÚÕâ90ÃëEureka²»»á×¢Ïú΢·þÎñ£¬ÔÚÕâ90ÃëÄÚÈÔÈ»¿ÉÒÔ½ÓÊÜеķþÎñ×¢²á£¬Ö»ÊDz»»áͬ²½µ½ÆäËû½ÚµãÉÏ¡£µ±»µµôµÄ·þÎñ»Ö¸´µÄʱºò£¬»á×Ô¶¯¼ÓÈëµ½½ÚµãÉÏ£¬Ò²ÊǸ߿ÉÓõÄÒ»ÖÖ¡£È»ºóÍ˳ö×ÔÎÒ±£»¤»úÖÆ£¬ÕâÒ²ÊÇÓ¦¶ÔÍøÂçÒì³£µÄÒ»ÖÖ»úÖÆ¡£
ZookeeperµÄºËÐÄÊÇÔ×ӹ㲥£¬Õâ¸ö»úÖÆ±£Ö¤Á˸÷¸öServerÖ®¼äµÄͬ²½¡£ÊµÏÖÕâ¸ö»úÖÆµÄÐÒé½Ð×öZabÐÒé¡£ZabÐÒéÓÐÁ½ÖÖģʽ£¬ËüÃÇ·Ö±ðÊÇ »Ö¸´Ä£Ê½(Ñ¡Ö÷)ºÍ¹ã²¥Ä£Ê½(ͬ²½)¡£µ±·þÎñÆô¶¯»òÕßÔÚÁìµ¼Õß±ÀÀ£ºó£¬Zab¾Í½øÈëÁ˻ָ´Ä£Ê½£¬µ±Áìµ¼Õß±»Ñ¡¾Ù³öÀ´£¬ÇÒ´ó¶àÊýServerÍê³ÉÁ˺ÍleaderµÄ״̬ͬ²½ÒԺ󣬻ָ´ ģʽ¾Í½áÊøÁË¡£×´Ì¬Í¬²½±£Ö¤ÁËleaderºÍServer¾ßÓÐÏàͬµÄϵͳ״̬¡£
zookeeper²ÉÓÃÁË µÝÔöµÄÊÂÎñ Id À´±êʶ£¬ËùÓеÄproposal(ÌáÒé)¶¼ÔÚ±»Ìá³öµÄʱºò¼ÓÉÏÁËzxid£¬zxidʵ¼Ê ÉÏÊÇÒ»¸ö64λµÄÊý×Ö£¬¸ß32λÊÇepoch(ʱÆÚ; ¼ÍÔª; ÊÀ; ÐÂʱ´ú)ÓÃÀ´±êʶleaderÊÇ·ñ·¢Éú¸Ä±ä£¬Èç¹ûÓРеÄleader²úÉú³öÀ´£¬epoch»á×ÔÔö£¬ µÍ 32 λÓÃÀ´µÝÔö¼ÆÊý ¡£µ±Ð²úÉúproposalµÄʱºò£¬»áÒÀ¾ÝÊý¾Ý¿âµÄ Á½½×¶Î¹ý³Ì£¬Ê×ÏÈ»áÏòÆäËûµÄserver·¢³öÊÂÎñÖ´ÐÐÇëÇó£¬Èç¹û³¬¹ý°ëÊýµÄ»úÆ÷¶¼ÄÜÖ´Ðв¢ÇÒÄܹ»³É¹¦£¬ÄÇô¾Í »á¿ªÊ¼Ö´ÐС£
ÿ¸öServerÔÚ¹¤×÷¹ý³ÌÖÐÓÐÈýÖÖ״̬£ºLOOKING£ºµ±Ç°Server²»ÖªµÀleaderÊÇË £¬ÕýÔÚËÑѰ LEADING£ºµ±Ç°Server¼´ÎªÑ¡¾Ù³öÀ´µÄleader FOLLOWING£ºleaderÒѾѡ¾Ù³öÀ´£¬µ±Ç°ServerÓë֮ͬ²½¡£
µ±leader±ÀÀ£»òÕßleaderʧȥ´ó¶àÊýµÄfollower£¬Õâʱzk½øÈë»Ö¸´Ä£Ê½£¬»Ö¸´Ä£Ê½ÐèÒªÖØÐÂÑ¡¾Ù³öÒ»¸öÐ嵀 leader£¬ÈÃËùÓеÄServer¶¼»Ö¸´µ½Ò»¸öÕýÈ·µÄ״̬¡£ZkµÄÑ¡¾ÙËã·¨ÓÐÁ½ÖÖ£ºÒ»ÖÖÊÇ»ùÓÚbasic paxosʵÏÖ µÄ£¬ÁíÍâÒ»ÖÖÊÇ»ùÓÚfast paxosË㷨ʵÏֵġ£ÏµÍ³Ä¬ÈϵÄÑ¡¾ÙË㷨Ϊ fast paxos ¡£
1¡¢ZookeeperÑ¡Ö÷Á÷³Ì(basic paxos)
(1)Ñ¡¾ÙÏß³ÌÓɵ±Ç°Server·¢ÆðÑ¡¾ÙµÄÏ̵߳£ÈΣ¬ÆäÖ÷Òª¹¦ÄÜÊǶÔͶƱ½á¹û½øÐÐͳ¼Æ£¬²¢Ñ¡³öÍÆ¼öµÄ Server;
(2)Ñ¡¾ÙÏß³ÌÊ×ÏÈÏòËùÓÐServer·¢ÆðÒ»´ÎѯÎÊ(°üÀ¨×Ô¼º);
(3)Ñ¡¾ÙÏß³ÌÊÕµ½»Ø¸´ºó£¬ÑéÖ¤ÊÇ·ñÊÇ×Ô¼º·¢ÆðµÄѯÎÊ(ÑéÖ¤zxidÊÇ·ñÒ»ÖÂ)£¬È»ºó»ñÈ¡¶Ô·½µÄid(myid)£¬²¢´æ ´¢µ½µ±Ç°Ñ¯ÎʶÔÏóÁбíÖУ¬×îºó»ñÈ¡¶Ô·½ÌáÒéµÄleaderÏà¹ØÐÅÏ¢(id,zxid)£¬²¢½«ÕâЩÐÅÏ¢´æ´¢µ½µ±´ÎÑ¡¾ÙµÄͶ Ʊ¼Ç¼±íÖÐ;
(4)ÊÕµ½ËùÓÐServer»Ø¸´ÒԺ󣬾ͼÆËã³özxid×î´óµÄÄǸöServer£¬²¢½«Õâ¸öServerÏà¹ØÐÅÏ¢ÉèÖóÉÏÂÒ»´Î ҪͶƱµÄServer;
(5)Ï߳̽«µ±Ç°zxid×î´óµÄServerÉèÖÃΪµ±Ç°ServerÒªÍÆ¼öµÄLeader£¬Èç¹û´Ëʱ»ñʤµÄServer»ñµÃn/2 + 1µÄServerƱÊý£¬ÉèÖõ±Ç°ÍƼöµÄleaderΪ»ñʤµÄServer£¬½«¸ù¾Ý»ñʤµÄServerÏà¹ØÐÅÏ¢ÉèÖÃ×Ô¼ºµÄ×´ ̬£¬·ñÔò£¬¼ÌÐøÕâ¸ö¹ý³Ì£¬Ö±µ½leader±»Ñ¡¾Ù³öÀ´¡£ ͨ¹ýÁ÷³Ì·ÖÎöÎÒÃÇ¿ÉÒԵóö£ºÒªÊ¹Leader»ñµÃ¶àÊý ServerµÄÖ§³Ö£¬ÔòServer×ÜÊý±ØÐëÊÇÆæÊý2n+1£¬ÇÒ´æ»îµÄServerµÄÊýÄ¿²»µÃÉÙÓÚn+1. ÿ¸öServerÆô¶¯ºó ¶¼»áÖØ¸´ÒÔÉÏÁ÷³Ì¡£ÔÚ»Ö¸´Ä£Ê½Ï£¬Èç¹ûÊǸմӱÀÀ£×´Ì¬»Ö¸´µÄ»òÕߏկô¶¯µÄserver»¹»á´Ó´ÅÅÌ¿ìÕÕÖлָ´Êý¾ÝºÍ»á»°ÐÅÏ¢£¬zk»á¼Ç¼ÊÂÎñÈÕÖ¾²¢¶¨ÆÚ½øÐпìÕÕ£¬·½±ãÔÚ»Ö¸´Ê±½øÐÐ״̬»Ö¸´¡£
2¡¢ZookeeperÑ¡Ö÷Á÷³Ì(fast paxos)
fast paxosÁ÷³ÌÊÇÔÚÑ¡¾Ù¹ý³ÌÖУ¬Ä³ServerÊ×ÏÈÏòËùÓÐServerÌáÒé×Ô¼ºÒª³ÉΪleader£¬µ±ÆäËüServerÊÕµ½Ìá ÒéÒԺ󣬽â¾öepochºÍ zxidµÄ³åÍ»£¬²¢½ÓÊܶԷ½µÄÌáÒ飬ȻºóÏò¶Ô·½·¢ËͽÓÊÜÌáÒéÍê³ÉµÄÏûÏ¢£¬Öظ´Õâ¸öÁ÷³Ì£¬×îºóÒ»¶¨ÄÜÑ¡¾Ù³öLeader¡£
Ñ¡ÍêLeaderÒÔºó£¬zk¾Í½øÈë״̬ͬ²½¹ý³Ì¡£
1¡¢LeaderµÈ´ýserverÁ¬½Ó;
2¡¢FollowerÁ¬½Óleader£¬½«×î´óµÄzxid·¢Ë͸øleader;
3¡¢Leader¸ù¾ÝfollowerµÄzxidÈ·¶¨Í¬²½µã;
4¡¢Íê³Éͬ²½ºó֪ͨfollower ÒѾ³ÉΪuptodate״̬;
5¡¢FollowerÊÕµ½uptodateÏûÏ¢ºó£¬ÓÖ¿ÉÒÔÖØÐ½ÓÊÜclientµÄÇëÇó½øÐзþÎñÁË¡£
¶ÔÓÚϵͳµ÷¶ÈÀ´Ëµ£º²Ù×÷ÈËÔ±·¢ËÍ֪ͨʵ¼ÊÊÇͨ¹ý¿ØÖÆÌ¨¸Ä±äij¸ö½ÚµãµÄ״̬£¬ È»ºózk½«ÕâЩ±ä»¯·¢Ë͸ø×¢²áÁËÕâ¸ö½ÚµãµÄwatcherµÄËùÓпͻ§¶Ë¡£¶ÔÓÚÖ´ÐÐÇé¿ö»ã±¨£ºÃ¿¸ö¹¤×÷½ø³Ì¶¼ÔÚij¸öĿ¼Ï´´½¨Ò»¸öÁÙʱ½Úµã¡£²¢Ð¯´ø¹¤×÷µÄ½ø¶ÈÊý¾Ý£¬ÕâÑù»ã×ܵĽø³Ì¿ÉÒÔ¼à¿ØÄ¿Â¼×Ó½ÚµãµÄ±ä»¯»ñµÃ¹¤×÷½ø¶ÈµÄʵʱµÄÈ«¾ÖÇé¿ö ¡£
ÔÚ·Ö²¼Ê½»·¾³ÖУ¬ÓÐЩҵÎñÂß¼Ö»ÐèÒª¼¯ÈºÖеÄijһ̨»úÆ÷½øÐÐÖ´ÐУ¬ ÆäËûµÄ»úÆ÷¿ÉÒÔ¹²ÏíÕâ¸ö½á¹û £¬ÕâÑù¿É ÒÔ´ó´ó ¼õÉÙÖØ¸´¼ÆËã £¬ Ìá¸ßÐÔÄÜ £¬ÓÚÊǾÍÐèÒª½øÐÐleaderÑ¡¾Ù¡£
Zookeeper±¾ÉíÒ²ÊǼ¯Èº£¬ÍƼöÅäÖò»ÉÙÓÚ3¸ö·þÎñÆ÷¡£Zookeeper×ÔÉíÒ²Òª±£Ö¤µ±Ò»¸ö½Úµãå´»úʱ£¬ÆäËû ½Úµã»á¼ÌÐøÌṩ·þÎñ¡£ Èç¹ûÊÇÒ»¸öFollowerå´»ú£¬»¹ÓÐ2̨·þÎñÆ÷Ìṩ·ÃÎÊ£¬ÒòΪZookeeperÉϵÄÊý¾ÝÊÇÓжà¸ö¸±±¾µÄ£¬Êý¾Ý²¢²» »á¶ªÊ§; Èç¹ûÊÇÒ»¸öLeaderå´»ú£¬Zookeeper»áÑ¡¾Ù³öеÄLeader¡£ ZK¼¯ÈºµÄ»úÖÆÊÇÖ»Òª³¬¹ý°ëÊýµÄ½ÚµãÕý³££¬¼¯Èº¾ÍÄÜÕý³£Ìṩ·þÎñ¡£Ö»ÓÐÔÚZK½Úµã¹ÒµÃÌ«¶à£¬Ö»Ê£Ò»°ë»ò²» µ½Ò»°ë½ÚµãÄܹ¤×÷£¬¼¯Èº²ÅʧЧ¡£ ËùÒÔ 3¸ö½ÚµãµÄcluster¿ÉÒÔ¹Òµô1¸ö½Úµã(leader¿ÉÒԵõ½2Ʊ>1.5) 2¸ö½ÚµãµÄcluster¾Í²»ÄܹҵôÈκÎ1¸ö½ÚµãÁË(leader¿ÉÒԵõ½1Ʊ<=1) ¡£
zkµÄ¸ºÔؾùºâÊÇ¿ÉÒÔµ÷¿Ø£¬nginxÖ»ÊÇÄܵ÷È¨ÖØ£¬ÆäËûÐèÒª¿É¿ØµÄ¶¼ÐèÒª×Ô¼ºÐ´²å¼þ;µ«ÊÇnginxµÄÍÌÍÂÁ¿±È zk´óºÜ¶à£¬Ó¦¸Ã˵°´ÒµÎñÑ¡ÔñÓÃÄÄÖÖ·½Ê½¡£
Watch»úÖÆ¹Ù·½ÉùÃ÷£ºÒ»¸öWatchʼþÊÇÒ»¸öÒ»´ÎÐԵĴ¥·¢Æ÷£¬µ±±»ÉèÖÃÁËWatchµÄÊý¾Ý·¢ÉúÁ˸ıäµÄʱ ºò£¬Ôò·þÎñÆ÷½«Õâ¸ö¸Ä±ä·¢Ë͸øÉèÖÃÁËWatchµÄ¿Í»§¶Ë£¬ÒÔ±ã֪ͨËüÃÇ¡£ Zookeeper»úÖÆµÄÌØµã£º
1¡¢Ò»´ÎÐÔ´¥·¢Êý¾Ý·¢Éú¸Ä±äʱ£¬Ò»¸öwatcher event»á±»·¢Ë͵½client£¬µ«ÊÇclientÖ»»áÊÕµ½Ò»´ÎÕâÑùµÄÐÅÏ¢ ¡£
2¡¢watcher eventÒì²½·¢ËÍwatcherµÄ֪ͨʼþ´Óserver·¢Ë͵½clientÊÇ Òì²½ µÄ£¬Õâ¾Í´æÔÚÒ»¸öÎÊÌ⣬²»Í¬ µÄ¿Í»§¶ËºÍ·þÎñÆ÷Ö®¼äͨ¹ýsocket½øÐÐͨÐÅ£¬ÓÉÓÚ ÍøÂçÑÓ³Ù»òÆäËûÒòËØµ¼Ö¿ͻ§¶ËÔÚ²»Í¨µÄʱ¿Ì¼àÌýµ½Ê¼þ £¬ ÓÉÓÚZookeeper±¾ÉíÌṩÁË ordering guarantee £¬¼´¿Í»§¶Ë¼àÌýʼþºó£¬²Å»á¸ÐÖªËüËù¼àÊÓ znode ·¢ÉúÁ˱仯 ¡£ËùÒÔÎÒÃÇʹÓÃZookeeper²»ÄÜÆÚÍûÄܹ»¼à¿Øµ½½Úµãÿ´ÎµÄ±ä»¯¡£Zookeeper Ö»Äܱ£Ö¤×îÖÕµÄÒ»ÖÂÐÔ£¬ ¶øÎÞ·¨±£Ö¤Ç¿Ò»ÖÂÐÔ ¡£
3¡¢Êý¾Ý¼àÊÓZookeeperÓÐÊý¾Ý¼àÊÓºÍ×ÓÊý¾Ý¼àÊÓgetdata() and exists()ÉèÖÃÊý¾Ý¼àÊÓ£¬getchildren()ÉèÖÃÁË ×Ó½Úµã¼àÊÓ¡£
4¡¢×¢²áwatcher getData¡¢exists¡¢getChildren¡£
5¡¢´¥·¢watcher create ¡¢ delete ¡¢ setData¡£
6¡¢ setData()»á´¥·¢znodeÉÏÉèÖõÄdata watch(Èç¹ûset³É¹¦µÄ»°)¡£Ò»¸ö³É¹¦µÄ create()²Ù×÷»á´¥·¢±»´´½¨µÄznodeÉϵÄÊý¾Ýwatch£¬ÒÔ¼°Æä¸¸½ÚµãÉϵÄchild watch¡£¶øÒ»¸ö³É¹¦µÄdelete() ²Ù×÷½«»áͬʱ´¥·¢Ò»¸öznodeµÄdata watchºÍchild watch(ÒòΪÕâÑù¾ÍûÓÐ×Ó½ÚµãÁË)£¬Í¬Ê±Ò²»á´¥·¢Æä¸¸½ÚµãµÄchild watch¡£
7¡¢µ±Ò»¸ö¿Í»§¶ËÁ¬½Óµ½Ò»¸öеķþÎñÆ÷ÉÏʱ£¬watch½«»á±»ÒÔÈÎÒâ»á»°Ê¼þ´¥·¢¡£µ±ÓëÒ»¸ö·þÎñÆ÷ʧȥÁ¬½ÓµÄʱºò£¬ÊÇÎÞ·¨½ÓÊÕµ½watchµÄ¡£¶øµ±clientÖØÐÂÁ¬½Óʱ£¬Èç¹ûÐèÒªµÄ»°£¬ËùÓÐÏÈǰע²á¹ýµÄwatch£¬¶¼»á±»ÖØÐÂ×¢²á¡£Í¨³£ÕâÊÇÍêȫ͸Ã÷µÄ¡£Ö»ÓÐÔÚÒ»¸öÌØÊâÇé¿öÏ£¬watch¿ÉÄܻᶪʧ£º¶ÔÓÚÒ»¸öδ´´½¨µÄznodeµÄexist watch£¬Èç¹ûÔÚ¿Í»§¶Ë¶Ï¿ªÁ¬½ÓÆÚ¼ä±»´´½¨ÁË£¬²¢ÇÒËæºóÔÚ¿Í»§¶ËÁ¬½ÓÉÏ֮ǰÓÖɾ³ýÁË£¬ÕâÖÖÇé¿öÏ£¬Õâ¸öwatchʼþ¿ÉÄܻᱻ¶ªÊ§¡£
8¡¢WatchÊÇÇáÁ¿¼¶µÄ£¬Æäʵ¾ÍÊDZ¾µØJVMµÄCallback£¬·þÎñÆ÷¶ËÖ»ÊÇ´æÁËÊÇ·ñÓÐÉèÖÃÁËWatcherµÄ²¼¶ûÀàÐÍ¡£
²ÂÄãϲ»¶£º
Zookeeper·Ö²¼Ê½ÏµÍ³µÄ¼¯Èº¼Ü¹¹½éÉÜ
ZooKeeperÔÚ¼¯ÈºMasterÑ¡¾ÙÖÐÓ¦ÓýéÉÜ
Java¸ß¼¶Èí¼þ¹¤³Ìʦ¿Î³Ì
JavaÅàѵÐèÒª¶àÉÙ·ÑÓã¿JavaÅàѵ¼Û¸ñ½éÉÜ
2020-11-02KubernetesºËÐÄÔÀíºÍ´î½¨
2020-11-02JavaÅàѵ¶àÉÙÇ®£¿ÈçºÎÑ¡ÔñjavaÅàѵ°à£¿
2020-10-30ÅÅËûËøºÍ¹²ÏíËø·Ö±ðÊÇʲô£¿ÓÐʲô²»Í¬£¿
2020-10-30JavaÅàѵ¶àÉÙÇ®£¿Ñ¡ÔñjavaÅàѵ»ú¹¹Òª×¢Òâʲô£¿
2020-10-30ÖØÇìJavaÈí¼þ¿ª·¢Åàѵ¼Û¸ñÊǶàÉÙÇ®£¿JavaÁã»ù´¡×¢ÒâÀ²£¡
2020-10-30
±±¾©Ð£Çø