Ò»¡¢ZooKeeperµÄ±³¾°
1.1 ÈÏʶZooKeeper
ZooKeeper---ÒëÃûΪ¡°¶¯ÎïÔ°¹ÜÀíÔ±¡±¡£¶¯ÎïÔ°ÀﵱȻÓкöàµÄ¶¯ÎÓοͿÉÒÔ¸ù¾Ý¶¯ÎïÔ°ÌṩµÄÏòµ¼Í¼µ½²»Í¬µÄ³¡¹Ý¹ÛÉ͸÷ÖÖÀàÐ͵͝Î¶ø²»ÊÇÏñ×ßÔÚÔʼ´ÔÁÖÀÐľªµ¨²üµÄ±»¶¯
ÎïËù¹ÛÉÍ¡£ÎªÁËÈø÷ÖÖ²»Í¬µÄ¶¯Îï´ôÔÚËüÃÇÓ¦¸Ã´ôµÄµØ·½£¬¶ø²»ÊÇÏ໥´®ÃÅ£¬»òÊÇÏ໥ØËɱ£¬¾ÍÐèÒª¶¯ÎïÔ°¹ÜÀíÔ±°´ÕÕ¶¯ÎïµÄ¸÷ÖÖϰÐÔ¼ÓÒÔ·ÖÀàºÍ¹ÜÀí£¬ÕâÑùÎÒÃDzÅÄܸü¼Ó·ÅÐݲȫµÄ¹ÛÉͶ¯Îï¡£
»Øµ½ÆóÒµ¼¶Ó¦ÓÃϵͳÖУ¬Ëæ×ÅÐÅÏ¢»¯Ë®Æ½µÄ²»¶ÏÌá¸ß£¬ÆóÒµ¼¶ÏµÍ³±äµÃÔ½À´Ô½ÅÓ´óÓ·Ö×£¬ÐÔÄܼ±¾çϽµ£¬¿Í»§±§Ô¹ÆµÆµ¡£²ð·ÖϵͳÊÇĿǰÎÒÃÇ¿ÉÑ¡ÔñµÄ½â¾öϵͳ¿ÉÉìËõÐÔºÍÐÔÄÜÎÊÌâµÄΨһÐÐÖ®ÓÐЧµÄ·½·¨¡£µ«ÊDzð·ÖϵͳͬʱҲ´øÀ´ÁËϵͳµÄ¸´ÔÓÐÔ¡ª¡ª¸÷×Óϵͳ²»ÊǹÂÁ¢´æÔڵģ¬ËüÃDZ˴ËÖ®¼äÐèÒªÐ×÷ºÍ½»»¥£¬Õâ¾ÍÊÇÎÒÃdz£ËµµÄ·Ö²¼Ê½ÏµÍ³0¡£¸÷¸ö×Óϵͳ¾ÍºÃ±È¶¯ÎïÔ°ÀïµÄ¶¯ÎΪÁËʹ¸÷¸ö×ÓϵͳÄÜÕý³£ÎªÓû§ÌṩͳһµÄ·þÎñ£¬±ØÐëÐèÒªÒ»ÖÖ»úÖÆÀ´½øÐÐе÷¡ª¡ªÕâ¾ÍÊÇZooKeeper£¨¶¯ÎïÔ°¹ÜÀíÔ±£©¡£
1.2 ΪʲôʹÓÃZooKeeper
ÎÒÃÇÖªµÀҪдһ¸ö·Ö²¼Ê½Ó¦ÓÃÊǷdz£À§Äѵģ¬Ö÷ÒªÔÒò¾ÍÊǾֲ¿¹ÊÕÏ¡£Ò»¸öÏûϢͨ¹ýÍøÂçÔÚÁ½¸ö½ÚµãÖ®¼ä´«µÝʱ£¬ÍøÂçÈç¹û·¢Éú¹ÊÕÏ£¬·¢ËÍ·½²¢²»ÖªµÀ½ÓÊÕ·½ÊÇ·ñ½ÓÊÕµ½ÁËÕâ¸öÏûÏ¢¡£Ëû¿ÉÄÜÔÚÍøÂç¹ÊÕÏǨ¾ÍÊÕµ½ÁË´ËÏûÏ¢£¬Ò²¿ÓûÓÐÊÕµ½£¬ÓÖ»òÕß¿ÉÄܽÓÊÕ·½µÄ½ø³ÌËÀÁË¡£·¢ËÍ·½Á˽âÇé¿öµÄΨһ·½·¨¾ÍÊÇÔÙ´ÎÁ¬½Ó·¢ËÍ·½£¬²¢ÏòËû½øÐÐѯÎÊ¡£Õâ¾ÍÊǾֲ¿¹ÊÕÏ£º¸ù±¾²»ÖªµÀ²Ù×÷ÊÇ·ñʧ°Ü¡£Òò´Ë£¬´ó²¿·Ö·Ö²¼Ê½Ó¦ÓÃÐèÒªÒ»¸öÖ÷¿Ø¡¢Ðµ÷¿ØÖÆÆ÷À´¹ÜÀíÎïÀí·Ö²¼µÄ×Ó½ø³Ì¡£Ä¿Ç°£¬´ó²¿·ÖÓ¦ÓÃÐèÒª¿ª·¢Ë½ÓеÄе÷³ÌÐò£¬È±·¦Ò»¸öͨÓõĻúÖÆ¡£Ðµ÷³ÌÐòµÄ·´¸´±àдÀË·Ñ£¬ÇÒÄÑÒÔÐγÉͨÓá¢ÉìËõÐԺõÄе÷Æ÷¡£Ðµ÷·þÎñ·Ç³£ÈÝÒ׳ö´í£¬²¢ºÜÄÑ´Ó¹ÊÕÏÖлָ´¡£ÀýÈ磺е÷·þÎñºÜÈÝÒ×´¦ÓÚ¾ºÌ¬1ÉõÖÁËÀËø2¡£ZookeeperµÄÉè¼ÆÄ¿µÄ£¬ÊÇΪÁ˼õÇá·Ö²¼Ê½Ó¦ÓóÌÐòËù³Ðµ£µÄе÷ÈÎÎñ¡£
Zookeeper²¢²»ÄÜ×èÖ¹¾Ö²¿¹ÊÕϵķ¢Éú£¬ÒòΪËüÃǵı¾ÖÊÊÇ·Ö²¼Ê½ÏµÍ³¡£Ëûµ±È»Ò²²»»áÒþ²Ø¾Ö²¿¹ÊÕÏ¡£ZooKeeperµÄÄ¿µÄ¾ÍÊÇÌṩһЩ¹¤¾ß¼¯£¬ÓÃÀ´½¨Á¢°²È«´¦Àí¾Ö²¿¹ÊÕϵķֲ¼Ê½Ó¦Óá£
ZooKeeperÊÇÒ»¸ö·Ö²¼Ê½Ð¡Îļþϵͳ£¬²¢ÇÒ±»Éè¼ÆÎª¸ß¿ÉÓÃÐÔ¡£Í¨¹ýÑ¡¾ÙËã·¨ºÍ¼¯Èº¸´ÖÆ¿ÉÒÔ±ÜÃâµ¥µã¹ÊÕÏ3£¬ÓÉÓÚÊÇÎļþϵͳ£¬ËùÒÔ¼´Ê¹ËùÓеÄZooKeeper½ÚµãÈ«²¿¹Òµô£¬Êý¾ÝÒ²²»»á¶ªÊ§£¬ÖØÆô·þÎñÆ÷Ö®ºó£¬Êý¾Ý¼´¿É»Ö¸´¡£ÁíÍâZooKeeperµÄ½Úµã¸üÐÂÊÇÔ×ӵģ¬Ò²¾ÍÊÇ˵¸üв»Êdzɹ¦¾ÍÊÇʧ°Ü¡£Í¨¹ý°æ±¾ºÅ£¬ZooKeeperʵÏÖÁ˸üеÄÀÖ¹ÛËø4£¬µ±°æ±¾ºÅ²»Ïà·ûʱ£¬Ôò±íʾ´ý¸üеĽڵãÒѾ±»ÆäËû¿Í»§¶ËÌáǰ¸üÐÂÁË£¬¶øµ±Ç°µÄÕû¸ö¸üвÙ×÷½«È«²¿Ê§°Ü¡£µ±È»ËùÓеÄÒ»ÇÐZooKeeperÒѾΪ¿ª·¢ÕßÌṩÁ˱£ÕÏ£¬ÎÒÃÇÐèÒª×öµÄÖ»Êǵ÷ÓÃAPI¡£Óë´Ëͬʱ£¬Ëæ×Å·Ö²¼Ê½Ó¦ÓõĵIJ»¶ÏÉîÈ룬ÐèÒª¶Ô¼¯Èº¹ÜÀíÖð²½Í¸Ã÷»¯¼à¿Ø¼¯ÈººÍ×÷ҵ״̬£¬¿ÉÒÔ³ä·ÖÀûZKµÄ¶ÀÓÐÌØÐÔ¡£
1.3 ZooKeeperµÄÓ¦Óá¡
ZooKeeper±¾ÖÊÉÏÊÇÒ»¸ö·Ö²¼Ê½µÄСÎļþ´æ´¢ÏµÍ³¡£Ô±¾ÊÇApache HadoopµÄÒ»¸ö×é¼þ£¬ÏÖÔÚ±»²ð·ÖΪһ¸öHadoopµÄ¶ÀÁ¢×ÓÏîÄ¿£¬ÔÚHBase£¨HadoopµÄÁíÍâÒ»¸ö±»²ð·Ö³öÀ´µÄ×ÓÏîÄ¿£¬ÓÃÓÚ·Ö²¼Ê½»·¾³Ïµij¬´óÊý¾ÝÁ¿µÄDBMS£©ÖÐÒ²Óõ½ÁËZooKeeper¼¯Èº¡£¡¡
Hadoop£¬Ê¹ÓÃZookeeperµÄʼþ´¦ÀíÈ·±£Õû¸ö¼¯ÈºÖ»ÓÐÒ»¸öNameNode£¬´æ´¢ÅäÖÃÐÅÏ¢µÈ.
¡¡¡¡HBase£¬Ê¹ÓÃZookeeperµÄʼþ´¦ÀíÈ·±£Õû¸ö¼¯ÈºÖ»ÓÐÒ»¸öHMaster£¬²ì¾õHRegionServerÁª»úºÍå´(d¨¤ng)»ú£¬´æ´¢·ÃÎÊ¿ØÖÆÁбíµÈ¡£
ÓÐÈ˻ỳÒÉZooKeeperµÄÖ´ÐÐÄÜÁ¦£¬ÔÚZooKeeperµ®ÉúµÄµØ·½¡ª¡ªYahoo!Ëû±»ÓÃ×÷ÑÅ»¢ÏûÏ¢´úÀíµÄе÷ºÍ¹ÊÕϻָ´·þÎñ¡£ÑÅ»¢ÏûÏ¢´úÀíÊÇÒ»¸ö¸ß¶È¿ÉÀ©Õ¹µÄ·¢²¼-¶©ÔÄϵͳ£¬Ëû¹ÜÀí×ųÉǧÉÏÍǫ̀Áª¼°³ÌÐòºÍÐÅÏ¢¿ØÖÆÏµÍ³¡£ËüµÄÍÌÍÂÁ¿±ê×¼ÒѾ´ïµ½´óԼÿÃë10000»ùÓÚд²Ù×÷µÄ¹¤×÷Á¿¡£¶ÔÓÚ¶Á²Ù×÷µÄ¹¤×÷Á¿À´Ëµ£¬ËüµÄÍÌÍÂÁ¿±ê×¼»¹Òª¸ß¼¸±¶¡£
¶þ¡¢ZooKeeperµÄ½éÉÜ
2.1 ZooKeeperµÄ¸ÅÊö
Zookeeper ÊÇΪ·Ö²¼Ê½Ó¦ÓóÌÐòÌṩ¸ßÐÔÄÜе÷·þÎñµÄ¹¤¾ß¼¯ºÏ£¬Ò²ÊÇGoogleµÄChubbyÒ»¸ö¿ªÔ´µÄʵÏÖ£¬ÊÇHadoop
µÄ·Ö²¼Ê½Ðµ÷·þÎñ¡£Ëü°üº¬Ò»¸ö¼òµ¥µÄÔÓO5£¬·Ö²¼Ê½Ó¦ÓóÌÐò¿ÉÒÔ»ùÓÚËüʵÏÖÅäÖÃά»¤¡¢ÃüÃû·þÎñ¡¢·Ö²¼Ê½Í¬²½¡¢×é·þÎñµÈ¡£Zookeeper¿ÉÒÔÓÃÀ´±£Ö¤Êý¾ÝÔÚZK¼¯ÈºÖ®¼äµÄÊý¾ÝµÄÊÂÎñÐÔÒ»ÖÂ6¡£ÆäÖÐZooKeeperÌṩͨÓõķֲ¼Ê½Ëø·þÎñ7£¬ÓÃÒÔе÷·Ö²¼Ê½Ó¦Óá£
Zookeeper×÷ΪHadoopÏîÄ¿ÖеÄÒ»¸ö×ÓÏîÄ¿,ÊÇ Hadoop¼¯Èº¹ÜÀíµÄÒ»¸ö±Ø²»¿ÉÉÙµÄÄ£¿é,ËüÖ÷ÒªÓÃÀ´½â¾ö·Ö²¼Ê½Ó¦ÓÃÖо³£Óöµ½µÄÊý¾Ý¹ÜÀíÎÊÌ⣬È缯Ⱥ¹ÜÀí¡¢Í³Ò»ÃüÃû·þÎñ¡¢·Ö²¼Ê½ÅäÖùÜÀí¡¢·Ö²¼Ê½ÏûÏ¢¶ÓÁС¢·Ö²¼Ê½Ëø¡¢·Ö²¼Ê½Ðµ÷µÈ¡£ÔÚHadoopÖУ¬Ëü¹ÜÀíHadoop¼¯ÈºÖеÄNameNode£¬»¹ÓÐÔÚHbaseÖÐMaster
Election¡¢Server Ö®¼ä״̬ͬ״²½µÈ¡£
¡¡¡¡Zoopkeeper ÌṩÁËÒ»Ì׺ܺõķֲ¼Ê½¼¯Èº¹ÜÀíµÄ»úÖÆ£¬¾ÍÊÇËüÕâÖÖ»ùÓÚ²ã´ÎÐ͵ÄĿ¼Ê÷µÄÊý¾Ý½á¹¹£¬²¢¶ÔÊ÷ÖÐµÄ½Úµã½øÐÐÓÐЧ¹ÜÀí£¬´Ó¶ø¿ÉÒÔÉè¼Æ³ö¶àÖÖ¶àÑùµÄ·Ö²¼Ê½µÄÊý¾Ý¹ÜÀíÄ£ÐÍ¡£
2.2 ZooKeeperµÄÉè¼ÆÄ¿±ê
ÖÚËùÖÜÖª£¬·Ö²¼Ê½»·¾³ÏµijÌÐòºÍ»î¶¯ÎªÁ˴ﵽе÷Ò»ÖÂÄ¿µÄ£¬Í¨³£¾ßÓÐijЩ¹²Í¬µÄÌØµã£¬ÀýÈ磬¼òµ¥ÐÔ¡¢ÓÐÐòÐԵȡ£ZooKeeper²»µ«ÔÚÕâЩĿ±êµÄʵÏÖÉÏÓÐ×ÔÉíÌØµã£¬²¢ÇÒ¾ßÓжÀÌØÓÅÊÆ¡£ÏÂÃæÎÒÃǽ«¼òÊöZooKeeperµÄÉè¼ÆÄ¿±ê¡£
£¨1£©¼òµ¥»¯
ZooKeeperÔÊÐí¸÷·Ö²¼Ê½½ø³Ìͨ¹ýÒ»¸ö¹²ÏíµÄÃüÃû¿Õ¼äÏ໥ÁªÏµ£¬¸ÃÃüÃû¿Õ¼äÀàËÆÓÚÒ»¸ö±ê×¼µÄ²ã´ÎÐ͵ÄÎļþϵͳ£ºÓÉÈô¸É×¢²áÁ˵ÄÊý¾Ý½Úµã¹¹³É(ÓÃZookeeperµÄÊõÓï½Ðznode)£¬ÕâЩ½ÚµãÀàËÆÓÚÎļþºÍĿ¼¡£µäÐ͵ÄÎļþϵͳÊÇ»ùÓÚ´æ´¢É豸µÄ£¬ÎÄ´«Í³µÄÎļþϵͳÖ÷ÒªÓÃÓÚ´æ´¢¹¦ÄÜ£¬È»¶øZooKepperµÄÊý¾ÝÊDZ£´æÔÚÄÚ´æÖеġ£Ò²¾ÍÊÇ˵£¬¿ÉÒÔ»ñµÃ¸ßÍÌͺ͵ÍÑÓ³Ù¡£ZooKeeperµÄʵÏַdz£ÖØÊÓ¸ßÐÔÄÜ¡¢¸ß¿É¿¿£¬ÒÔ¼°ÑϸñµÄÓÐÐò·ÃÎÊ¡£
¸ßÐÔÄܱ£Ö¤ÁËZooKeeper¿ÉÒÔÓÃÓÚ´óÐ͵ķֲ¼Ê½ÏµÍ³£¬¸ß¿É¿¿±£Ö¤ÁËZooKeeper²»»á·¢Éúµ¥µã¹ÊÕÏ£¬ÑϸñµÄ˳Ðò·ÃÎʱ£Ö¤Á˿ͻ§¶Ë¿ÉÒÔ»ñµÃ¸´ÔÓµÄͬ²½²Ù×÷ÔÓï¡£
£¨2£©½¡×³ÐÔ
¾ÍÏñZooKeeperÐèҪе÷µÄ·Ö²¼Ê½ÏµÍ³Ò»Ñù£¬Ëü±¾Éí¾ÍÊǾßÓÐÈßÓà½á¹¹£¬Ëü¹¹½¨ÔÚһϵÁÐÖ÷»úÖ®ÉÏ£¬½Ð×öÒ»¸ö¡±ensemble¡±¡£
¡¡¡¡¹¹³ÉZooKeeper·þÎñµÄ¸÷·þÎñÆ÷Ö®¼ä±ØÐëÏ໥֪µÀ£¬ËüÃÇά»¤×ÅÒ»¸ö״̬ÐÅÏ¢µÄÄÚ´æÓ³Ïñ8£¬ÒÔ¼°Ôڳ־û¯´æ´¢ÖÐά»¤×ÅÊÂÎñÈÕÖ¾ºÍ¿ìÕÕ9¡£Ö»Òª´ó²¿·Ö·þÎñÆ÷Õý³£¹¤×÷£¬ZooKeeper·þÎñ¾ÍÄÜÕý³£¹¤×÷¡£
¡¡¡¡¿Í»§¶ËÁ¬½Óµ½Ò»Ì¨ZooKeeper·þÎñÆ÷¡£¿Í»§¶Ëά»¤Õâ¸öTCPÁ¬½Ó£¬Í¨¹ýÕâ¸öÁ¬½Ó£¬¿Í»§¶Ë¿ÉÒÔ·¢ËÍÇëÇ󡢵õ½Ó¦´ð£¬µÃµ½¼àÊÓʼþÒÔ¼°·¢ËÍÐÄÌø¡£Èç¹ûÕâ¸öÁ¬½Ó¶ÏÁË£¬¿Í»§¶Ë¿ÉÒÔÁ¬½Óµ½ÁíÒ»¸öZooKeeper·þÎñÆ÷¡£
£¨3£©ÓÐÐòÐÔ
ZooKeeper¸øÃ¿´Î¸üи½¼ÓÒ»¸öÊý×Ö±êÇ©£¬±íÃ÷ZooKeeperÖеÄÊÂÎñ˳Ðò£¬ºóÐø²Ù×÷¿ÉÒÔÀûÓÃÕâ¸ö˳ÐòÀ´Íê³É¸ü¸ß²ã´ÎµÄ³éÏó¹¦ÄÜ£¬ÀýÈçͬ²½ÔÓï7¡£
£¨4£©ËÙ¶ÈÓÅÊÆ
ZooKeeperÌØ±ðÊʺÏÓÚÒÔ¶ÁΪÖ÷Òª¸ººÉµÄ³¡ºÏ¡£ZooKeeper¿ÉÒÔÔËÐÐÔÚÊýǧ̨»úÆ÷ÉÏ£¬Èç¹û´ó²¿·Ö²Ù×÷Ϊ¶Á£¬ÀýÈç¶Áд±ÈÀýΪ10:1£¬ZooKeeperµÄЧÂÊ»áºÜ¸ß¡£
2.3 ZooKeeperµÄ¼¯Èº
ZK¼¯ÈºÈçÏÂͼ2.1Ëùʾ¡£ÕâÊÇʵ¼ÊÓ¦ÓõÄÒ»¸ö³¡¾°£¬¸ÃZooKeeper¼¯Èºµ±ÖÐÒ»¹²ÓÐ5̨·þÎñÆ÷£¬ÓÐÁ½ÖÖ½ÇÉ«LeaderºÍFollwer£¬5̨·þÎñÆ÷Á¬Í¨ÔÚÒ»Æð£¬¿Í»§¶ËÓзֱðÁ¬ÔÚ²»Í¬µÄZK·þÎñÆ÷ÉÏ¡£Èç¹ûµ±Êý¾Ýͨ¹ý¿Í»§¶Ë1£¬ÔÚ×ó±ßµÚһ̨Follower·þÎñÆ÷ÉÏ×öÁËÒ»´ÎÊý¾Ý±ä¸ü£¬Ëû»á°ÑÕâ¸öÊý¾ÝµÄ±ä»¯Í¬²½µ½ÆäËûËùÓеķþÎñÆ÷£¬Í¬²½½áÊøÖ®ºó£¬ÄÇôÆäËûµÄ¿Í»§¶Ë¶¼»á»ñµÃÕâ¸öÊý¾ÝµÄ±ä»¯¡£

ͼ 2.1
×¢Ò⣺
ͨ³£ZookeeperÓÉ2n+1̨servers×é³É£¬Ã¿¸öserver¶¼ÖªµÀ±Ë´ËµÄ´æÔÚ¡£Ã¿¸öserver¶¼Î¬»¤µÄÄÚ´æ×´Ì¬¾µÏñÒÔ¼°³Ö¾Ã»¯´æ´¢µÄÊÂÎñÈÕÖ¾ºÍ¿ìÕÕ¡£ÎªÁ˱£Ö¤LeaderÑ¡¾ÙÄܹýµÃµ½¶àÊýµÄÖ§³Ö£¬ËùÒÔZooKeeper¼¯ÈºµÄÊýÁ¿Ò»°ãÎªÆæÊý¡£¶ÔÓÚ2n+1̨server£¬Ö»ÒªÓÐn+1̨£¨´ó¶àÊý£©server¿ÉÓã¬Õû¸öϵͳ±£³Ö¿ÉÓá£
2.3.1 ¼¯ÈºÖеĽÇÉ«
ÔÚZooKeeper¼¯Èºµ±ÖУ¬¼¯ÈºÖеķþÎñÆ÷½ÇÉ«ÓÐÁ½ÖÖLeaderºÍLearner£¬Learner½ÇÉ«ÓÖ·ÖΪObserverºÍFollower£¬¾ßÌ幦ÄÜÈçÏ£º
1.Áìµ¼Õß(leader)£¬¸ºÔð½øÐÐͶƱµÄ·¢ÆðºÍ¾öÒ飬¸üÐÂϵͳ״̬
2.ѧϰÕß(learner)£¬°üÀ¨¸úËæÕߣ¨follower£©ºÍ¹Û²ìÕߣ¨observer£©£¬
3.followerÓÃÓÚ½ÓÊܿͻ§¶ËÇëÇó²¢Ïò¿Í»§¶Ë·µ»Ø½á¹û£¬ÔÚÑ¡Ö÷¹ý³ÌÖвÎÓëͶƱ
4.Observer¿ÉÒÔ½ÓÊܿͻ§¶ËÇëÇ󣬽«Ð´ÇëÇóת·¢¸øleader£¬µ«observer²»²Î¼ÓͶƱ¹ý³Ì£¬Ö»Í¬²½leaderµÄ״̬£¬observerµÄÄ¿µÄÊÇΪÁËÀ©Õ¹ÏµÍ³£¬Ìá¸ß¶ÁÈ¡ËÙ¶È¡£
5. ¿Í»§¶Ë(client)£¬ÇëÇ󷢯ð·½

ZooKeeperµÄ×é¼þͼÖиø³öÁËZooKeeper·þÎñµÄ¸ß²ã´ÎµÄ×é¼þ¡£³ýÁËÇëÇó´¦ÀíÆ÷£¨requestprocessor£©Í⣬¹¹³ÉZooKeeper·þÎñµÄÿ¸ö·þÎñÆ÷¶¼ÓÐÒ»¸ö±¸·Ý¡£¸´ÖƵÄÊý¾Ý¿â£¨replicateddatabase£©ÊÇÒ»¸öÄÚ´æÊý¾Ý¿â£¬°üº¬Õû¸öÊý¾ÝÊ÷¡£ÎªÁ˿ɻָ´£¬¸üлᱻlogµ½´ÅÅÌ£¬²¢ÇÒÔÚ¸üÐÂÕâ¸öÄÚ´æÊý¾Ý¿â֮ǰ£¬ÏÈÐòÁл¯µ½´ÅÅÌ¡£
ÿ¸öZooKeeper¶¼Îª¿Í»§¶ËÌṩ·þÎñ¡£¿Í»§¶ËÖ»Á¬½Óµ½Ò»¸ö·þÎñÆ÷£¬²¢Ìá½»ÇëÇó¡£¶ÁÇëÇóÖ±½ÓÓɱ¾µØµÄ¸´ÖÆÊý¾Ý¿âÌṩÊý¾Ý¡£¶Ô·þÎñ״̬½øÐÐÐ޸ĵÄÇëÇó¡¢Ð´ÇëÇóͨ¹ýÒ»¸öÔ¼¶¨µÄÐÒé½øÐÐͨѶ¡£
×÷ΪÕâ¸öÐÒéµÄÒ»²¿·Ö£¬ËùÓеÄдÇëÇó¶¼±»´«Ë͵½Ò»¸ö½Ð¡°Ê×Áì(leader)¡±µÄ·þÎñÆ÷£¬¶øÆäËûµÄ·þÎñÆ÷£¬½Ð×ö¡°(Ëæ´Ó)followers¡±£¬follower´Óleader½ÓÊÕÐÅÏ¢Ð޸ĵÄÌáÒ飬²¢Í¬Òâ½øÐС£µ±leader·¢Éú¹ÊÕÏʱ£¬ÐÒéµÄÐÅÏ¢²ã£¨messaginglayer£©¹Ø×¢leaderµÄÌæ»»£¬²¢Í¬²½µ½ËùÓеÄfollower¡£
ZooKeeper²ÉÓÃÒ»¸ö×Ô¶¨ÒåµÄÐÅÏ¢Ô×Ó²Ù×÷ÐÒ飬ÓÉÓÚÐÅÏ¢²ãµÄ²Ù×÷ÊÇÔ×ÓÐԵģ¬ZooKeeperÄܱ£Ö¤±¾µØµÄ¸´ÖÆÊý¾Ý¿â²»»á²úÉú²»Ò»Ö¡£µ±leader½ÓÊÕµ½Ò»¸öдÇëÇó£¬Ëü¼ÆËã³öд֮ºóϵͳµÄ״̬£¬°ÑËü±ä³ÉÒ»¸öÊÂÎñ¡£
2.3.2 ZookeeperµÄ¶Áд»úÖÆºÍ±£Ö¤¼°Ìصã
£¨1£©ZooKeeperµÄ¶Áд»úÖÆ
ZookeeperÊÇÒ»¸öÓɶà¸öserver×é³ÉµÄ¼¯Èº
Ò»¸öleader£¬¶à¸öfollower
ÿ¸öserver±£´æÒ»·ÝÊý¾Ý¸±±¾
È«¾ÖÊý¾ÝÒ»ÖÂ
·Ö²¼Ê½¶Áд
¸üÐÂÇëÇóת·¢£¬ÓÉleaderʵʩ
£¨2£©ZooKeeperµÄ±£Ö¤
ZooKeeperÔËÐзdz£¿ì¶øÇÒ¼òµ¥¡£ËäÈ»ËüµÄÄ¿±êÊǹ¹½¨¸ü¼Ó¸´ÔÓ·þÎñ£¨ÀýÈçͬ²½£©µÄ»ù´¡£¬µ«ËüÌṩÁËһЩ±£Ö¤£¬ÈçÏ£º
1.˳ÐòÒ»ÖÂÐÔ£ºÀ´×ÔÓÚ¿Í»§¶ËµÄ¸üУ¬¸ù¾Ý·¢Ë͵ÄÏȺó±»Ë³Ðòʵʩ¡£
2.ΨһµÄϵͳӳÏñ£º¾¡¹Ü¿Í»§¶ËÁ¬½Óµ½²»Í¬µÄ·þÎñÆ÷£¬µ«ËüÃÇ¿´µ½µÄÒ»¸öΨһ£¨Ò»ÖÂÐÔ£©µÄϵͳ·þÎñ£¬clientÎÞÂÛÁ¬½Óµ½Äĸöserver£¬Êý¾ÝÊÓͼ¶¼ÊÇÒ»Öµġ£
3.¿É¿¿ÐÔ£ºÒ»µ©ÊµÊ©ÁËÒ»¸ö¸üУ¬¾Í»áÒ»Ö±±£³ÖÄÇÖÖ״̬£¬Ö±µ½¿Í»§¶ËÔٴθüÐÂËü£¬Í¬Ê±Êý¾Ý¸üÐÂÔ×ÓÐÔ£¬Ò»´ÎÊý¾Ý¸üÐÂҪô³É¹¦£¬ÒªÃ´Ê§°Ü¡£
4.¼°Ê±ÐÔ£ºÔÚÒ»¸öÈ·¶¨µÄʱ¼äÄÚ£¬¿Í»§¶Ë¿´µ½µÄϵͳ״̬ÊÇ×îеġ£
£¨3£©ZooKeeperÌØµã
×îÖÕÒ»ÖÂÐÔ£ºclient²»ÂÛÁ¬½Óµ½ÄĸöServer£¬Õ¹Ê¾¸øËü¶¼ÊÇͬһ¸öÊÓͼ£¬ÕâÊÇzookeeper×îÖØÒªµÄÐÔÄÜ¡£
¿É¿¿ÐÔ£º¾ßÓмòµ¥¡¢½¡×³¡¢Á¼ºÃµÄÐÔÄÜ£¬Èç¹ûÏûÏ¢m±»Ò»Ì¨·þÎñÆ÷½ÓÊÜ£¬ÄÇôËü½«±»ËùÓеķþÎñÆ÷½ÓÊÜ¡£
ʵʱÐÔ£ºZookeeper±£Ö¤¿Í»§¶Ë½«ÔÚÒ»¸öʱ¼ä¼ä¸ô·¶Î§ÄÚ»ñµÃ·þÎñÆ÷µÄ¸üÐÂÐÅÏ¢£¬»òÕß·þÎñÆ÷ʧЧµÄÐÅÏ¢¡£
µ«ÓÉÓÚÍøÂçÑÓʱµÈÔÒò£¬Zookeeper²»Äܱ£Ö¤Á½¸ö¿Í»§¶ËÄÜͬʱµÃµ½¸Õ¸üеÄÊý¾Ý£¬Èç¹ûÐèÒª×îÐÂÊý¾Ý£¬Ó¦¸ÃÔÚ¶ÁÊý¾Ý֮ǰµ÷ÓÃsync()½Ó¿Ú¡£
µÈ´ýÎÞ¹Ø(wait-free)£ºÂýµÄ»òÕßʧЧµÄclient£¬²»µÃ¸ÉÔ¤¿ìËÙµÄclientµÄÇëÇó£¬Ê¹µÃÿ¸öclient¶¼ÄÜÓÐЧµÄµÈ´ý¡£
Ô×ÓÐÔ£º¸üÐÂÖ»Äܳɹ¦»òÕßʧ°Ü£¬Ã»ÓÐÖмä״̬¡£
˳ÐòÐÔ£º°üÀ¨È«¾ÖÓÐÐòºÍÆ«ÐòÁ½ÖÖ£º
È«¾ÖÓÐÐò£ºÊÇÖ¸Èç¹ûÔÚһ̨·þÎñÆ÷ÉÏÏûÏ¢aÔÚÏûÏ¢bǰ·¢²¼£¬ÔòÔÚËùÓÐServerÉÏÏûÏ¢a¶¼½«ÔÚÏûÏ¢bǰ±»·¢²¼£»
Æ«Ðò£ºÊÇÖ¸Èç¹ûÒ»¸öÏûÏ¢bÔÚÏûÏ¢aºó±»Í¬Ò»¸ö·¢ËÍÕß·¢²¼£¬a±Ø½«ÅÅÔÚbÇ°Ãæ
Èý¡¢ZooKeeper·þÎñ
3.1 ZooKeeperÊý¾ÝÄ£ÐÍ
ZooKeeperÓµÓÐÒ»¸ö²ã´ÎµÄÃüÃû¿Õ¼ä£¬Õâ¸öºÍ·Ö²¼Ê½µÄÎļþϵͳ·Ç³£ÏàËÆ¡£²»Í¬µÄÊÇZooKeeperÃüÃû¿Õ¼äÖеÄZnode£¬¼æ¾ßÎļþºÍĿ¼Á½ÖÖÌØµã¡£¼ÈÏñÎļþÒ»Ñùά»¤×ÅÊý¾Ý¡¢ÔªÐÅÏ¢¡¢ACL¡¢Ê±¼ä´ÁµÈÊý¾Ý½á¹¹£¬ÓÖÏñĿ¼һÑù¿ÉÒÔ×÷Ϊ·¾¶±êʶµÄÒ»²¿·Ö£¬²¢¿ÉÒÔ¾ßÓÐ×Óznode¡£Óû§¶Ôznode¾ßÓÐÔö¡¢É¾¡¢¸Ä¡¢²éµÈ²Ù×÷£¨È¨ÏÞÔÊÐíµÄÇé¿öÏ£©¡£
znode¾ßÓÐÔ×ÓÐÔ²Ù×÷£¬Ã¿¸öznodeµÄÊý¾Ý½«±»Ô×ÓÐԵضÁд£¬¶Á²Ù×÷»á¶ÁÈ¡ÓëznodeÏà¹ØµÄËùÓÐÊý¾Ý£¬Ð´²Ù×÷»áÒ»´ÎÐÔÌæ»»ËùÓÐÊý¾Ý¡£zookeeper²¢Ã»Óб»Éè¼ÆÎª³£¹æµÄÊý¾Ý¿â»òÕß´óÊý¾Ý´æ´¢£¬Ïà·´µÄÊÇ£¬ËüÓÃÀ´¹ÜÀíµ÷¶ÈÊý¾Ý£¬±ÈÈç·Ö²¼Ê½Ó¦ÓÃÖеÄÅäÖÃÎļþÐÅÏ¢¡¢×´Ì¬ÐÅÏ¢¡¢»ã¼¯Î»Öõȵȡ£ÕâЩÊý¾ÝµÄ¹²Í¬ÌØÐÔ¾ÍÊÇËüÃǶ¼ÊǺÜСµÄÊý¾Ý£¬Í¨³£ÒÔKBΪ´óСµ¥Î»¡£zooKeeperµÄ·þÎñÆ÷ºÍ¿Í»§¶Ë¶¼±»Éè¼ÆÎªÑϸñ¼ì²é²¢ÏÞÖÆÃ¿¸öznodeµÄÊý¾Ý´óСÖÁ¶à1M£¬µ±Ê±³£¹æÊ¹ÓÃÖÐÓ¦¸ÃԶСÓÚ´ËÖµ¡£
ZondeÓÉ·¾¶±ê×¢£¬ZooKeeperÖб»±íʾ³ÉÓз´Ð±¸Ü·Ö¸îµÄUnicode×Ö·û´®£¬ÈçͬUnixÖеÄÎļþ·¾¶¡£Â·¾¶±ØÐëÊǾø¶ÔµÄ£¬Òò´ËËûÃDZØÐëÓÉ·´Ð±¸ÜÀ´×Ö·û¿ªÍ·¡£³ý´ËÒÔÍ⣬ËûÃDZØÐëÊÇΨһµÄ£¬Ò²¾ÍÊÇ˵ÿһ¸ö·¾¶Ö»ÓÐÒ»¸ö±íʾ£¬Òò´ËÕâЩ·¾¶²»Äܸı䡣ZooKeeperµÄÊý¾Ý½á¹¹,
ÓëÆÕͨµÄÎļþϵͳ¼«ÎªÀàËÆ. ¼ûÏÂͼ£º

ͼÖеÄÿ¸ö½Úµã³ÆÎªÒ»¸öznode. ÿ¸öznodeÓÉ3²¿·Ö×é³É:
1.stat£º´ËΪ״̬ÐÅÏ¢, ÃèÊö¸ÃznodeµÄ°æ±¾, ȨÏÞµÈÐÅÏ¢.
2.data£ºÓë¸Ãznode¹ØÁªµÄÊý¾Ý.
3.children£º¸ÃznodeϵÄ×Ó½Úµã.
3.1.1 ZooKeeper½ÚµãZnode
ZooKeeperĿ¼Ê÷ÖÐÿһ¸ö½Úµã¶ÔÓ¦Ò»¸öZnode¡£Ã¿¸öZnodeά»¤×ÅÒ»¸öÊôÐԽṹ£¬Ëü°üº¬×Ű汾ºÅ(dataVersion)£¬Ê±¼ä´Á(ctime,mtime)µÈ״̬ÐÅÏ¢¡£ZooKeeperÕýÊÇʹÓýڵãµÄÕâÐ©ÌØÐÔÀ´ÊµÏÖËüµÄÄ³Ð©ÌØ¶¨¹¦ÄÜ¡£Ã¿µ±ZnodeµÄÊý¾Ý¸Ä±äʱ£¬ËûÏàÓ¦µÄ°æ±¾ºÅ½«»áÔö¼Ó¡£Ã¿µ±¿Í»§¶Ë¼ìË÷Êý¾Ýʱ£¬Ëü½«Í¬Ê±¼ìË÷Êý¾ÝµÄ°æ±¾ºÅ¡£²¢ÇÒÈç¹ûÒ»¸ö¿Í»§¶ËÖ´ÐÐÁËij¸ö½ÚµãµÄ¸üлòɾ³ý²Ù×÷£¬ËûÒ²±ØÐëÌṩҪ±»²Ù×÷µÄÊý¾Ý°æ±¾ºÅ¡£Èç¹ûËùÌṩµÄÊý¾Ý°æ±¾ºÅÓëʵ¼Ê²»Æ¥Å䣬ÄÇôÕâ¸ö²Ù×÷½«»áʧ°Ü¡£
ZnodeÊǿͻ§¶Ë·ÃÎÊZooKeeperµÄÖ÷ҪʵÌ壬Ëü°üº¬ÒÔϼ¸¸öÌØÕ÷£º
£¨1£©Watches
¿Í»§¶Ë¿ÉÒÔÔÚ½ÚµãÉÏÉèÖÃwatch(ÎÒÃdzÆÖ®Îª¼àÊÓÆ÷)¡£µ±½Úµã״̬·¢Éú¸Ä±äʱ(Êý¾ÝµÄÔö¡¢É¾¡¢¸Ä)½«»á´¥·¢watchËù¶ÔÓ¦µÄ²Ù×÷¡£µ±watch±»´¥·¢Ê±£¬ZooKeeper½«»áÏò¿Í»§¶Ë·¢ËÍÇÒ½ö·¢ËÍÒ»Ìõ֪ͨ£¬ÒòΪwatchÖ»Äܱ»´¥·¢Ò»´Î¡£
£¨2£©Êý¾Ý·ÃÎÊ
ZooKeeperÖеÄÿ¸ö½Úµã´æ´¢µÄÊý¾ÝÒª±»Ô×ÓÐԵIJÙ×÷¡£Ò²¾ÍÊÇ˵¶Á²Ù×÷½«»ñÈ¡Óë½ÚµãÏà¹ØµÄËùÓÐÊý¾Ý£¬Ð´²Ù×÷Ò²½«Ìæ»»µô½ÚµãµÄËùÓÐÊý¾Ý¡£ÁíÍ⣬ÿһ¸ö½Úµã¶¼ÓµÓÐ×Ô¼ºµÄACL(·ÃÎÊ¿ØÖÆÁбí)£¬Õâ¸öÁÐ±í¹æ¶¨ÁËÓû§µÄȨÏÞ£¬¼´ÏÞ¶¨ÁËÌØ¶¨Óû§¶ÔÄ¿±ê½Úµã¿ÉÒÔÖ´ÐеIJÙ×÷¡£
£¨3£©½ÚµãÀàÐÍ
ZooKeeperÖеĽڵãÓÐÁ½ÖÖ£¬·Ö±ðΪÁÙʱ½ÚµãºÍÓÀ¾Ã½Úµã¡£½ÚµãµÄÀàÐÍÔÚ´´½¨Ê±¼´±»È·¶¨£¬²¢ÇÒ²»Äܸı䡣
¡¡¡¡ZooKeeperµÄÁÙʱ½Úµã£º¸Ã½ÚµãµÄÉúÃüÖÜÆÚÒÀÀµÓÚ´´½¨ËüÃǵĻỰ¡£Ò»µ©»á»°½áÊø£¬ÁÙʱ½Úµã½«±»×Ô¶¯É¾³ý£¬µ±È»¿ÉÒÔÒ²¿ÉÒÔÊÖ¶¯É¾³ý¡£ÁíÍ⣬ÐèҪעÒâÊÇ£¬ZooKeeperµÄÁÙʱ½Úµã²»ÔÊÐíÓµÓÐ×ӽڵ㡣
¡¡¡¡ZooKeeperµÄÓÀ¾Ã½Úµã£º¸Ã½ÚµãµÄÉúÃüÖÜÆÚ²»ÒÀÀµÓڻỰ£¬²¢ÇÒÖ»ÓÐÔÚ¿Í»§¶ËÏÔʾִÐÐɾ³ý²Ù×÷µÄʱºò£¬ËûÃDzÅÄܱ»É¾³ý¡£
£¨4£©Ë³Ðò½Úµã£¨Î¨Ò»ÐԵı£Ö¤£©
µ±´´½¨ZnodeµÄʱºò£¬Óû§¿ÉÒÔÇëÇóÔÚZooKeeperµÄ·¾¶½áβÌí¼ÓÒ»¸öµÝÔöµÄ¼ÆÊý¡£Õâ¸ö¼ÆÊý¶ÔÓڴ˽ڵãµÄ¸¸½ÚµãÀ´ËµÊÇΨһµÄ£¬ËüµÄ¸ñʽΪ¡°%10d¡±(10λÊý×Ö£¬Ã»ÓÐÊýÖµµÄÊýλÓÃ0²¹³ä£¬ÀýÈç¡°0000000001¡±)¡£µ±¼ÆÊýÖµ´óÓÚ232-1ʱ£¬¼ÆÊýÆ÷½«Òç³ö¡£
org.apache.zookeeper.CreateModeÖж¨ÒåÁËËÄÖÖ½ÚµãÀàÐÍ£¬·Ö±ð¶ÔÓ¦£º
PERSISTENT£ºÓÀ¾Ã½Úµã
EPHEMERAL£ºÁÙʱ½Úµã
PERSISTENT_SEQUENTIAL£ºÓÀ¾Ã½Úµã¡¢ÐòÁл¯
EPHEMERAL_SEQUENTIAL£ºÁÙʱ½Úµã¡¢ÐòÁл¯
3.1.2 ZooKeeperÖеÄʱ¼ä
ZooKeeperÓжàÖּǼʱ¼äµÄÐÎʽ£¬ÆäÖаüº¬ÒÔϼ¸¸öÖ÷ÒªÊôÐÔ£º
£¨1£©Zxid
ÖÂʹZooKeeper½Úµã״̬¸Ä±äµÄÿһ¸ö²Ù×÷¶¼½«Ê¹½Úµã½ÓÊÕµ½Ò»¸özxid¸ñʽµÄʱ¼ä´Á£¬²¢ÇÒÕâ¸öʱ¼ä´ÁÈ«¾ÖÓÐÐò¡£Ò²¾ÍÊÇ˵£¬Ò²¾ÍÊÇ˵£¬Ã¿¸ö¶Ô½ÚµãµÄ¸Ä±ä¶¼½«²úÉúÒ»¸öΨһµÄzxid¡£Èç¹ûzxid1µÄֵСÓÚzxid2µÄÖµ£¬ÄÇôzxid1Ëù¶ÔÓ¦µÄʼþ·¢ÉúÔÚzxid2Ëù¶ÔÓ¦µÄʼþ֮ǰ¡£Êµ¼ÊÉÏ£¬ZooKeeperµÄÿ¸ö½Úµãά»¤ÕßÈý¸özxidÖµ£¬Îª±ðΪ£ºcZxid¡¢mZxid¡¢pZxid¡£
cZxid£º ÊǽڵãµÄ´´½¨Ê±¼äËù¶ÔÓ¦µÄZxid¸ñʽʱ¼ä´Á¡£
mZxid£ºÊǽڵãµÄÐÞ¸Äʱ¼äËù¶ÔÓ¦µÄZxid¸ñʽʱ¼ä´Á¡£
ʵÏÖÖÐzxidÊÇÒ»¸ö64ΪµÄÊý×Ö£¬Ëü¸ß32λÊÇepochÓÃÀ´±êʶleader¹ØÏµÊÇ·ñ¸Ä±ä£¬Ã¿´ÎÒ»¸öleader±»Ñ¡³öÀ´£¬Ëü¶¼»áÓÐÒ»¸ö
еÄepoch¡£µÍ32λÊǸöµÝÔö¼ÆÊý¡£
£¨2£©°æ±¾ºÅ
¶Ô½ÚµãµÄÿһ¸ö²Ù×÷¶¼½«ÖÂʹÕâ¸ö½ÚµãµÄ°æ±¾ºÅÔö¼Ó¡£Ã¿¸ö½Úµãά»¤×ÅÈý¸ö°æ±¾ºÅ£¬ËûÃÇ·Ö±ðΪ£º
version ½ÚµãÊý¾Ý°æ±¾ºÅ
cversion ×Ó½Úµã°æ±¾ºÅ
aversion ½ÚµãËùÓµÓеÄACL°æ±¾ºÅ
3.1.3 ½ÚµãµÄÊôÐԽṹ
ͨ¹ýÇ°ÃæµÄ½éÉÜ£¬ÎÒÃÇ¿ÉÒÔÁ˽⵽£¬Ò»¸ö½Úµã×ÔÉíÓµÓбíʾÆä״̬µÄÐí¶àÖØÒªÊôÐÔ£¬ÈçÏÂͼËùʾ¡£

3.1.4 Zonde×ܽá
£¨1£©znodeÖеÄÊý¾Ý¿ÉÒÔÓжà¸ö°æ±¾£¬ÔÚ²éѯ¸ÃznodeÊý¾Ýʱ¾ÍÐèÒª´øÉϰ汾ÐÅÏ¢¡£È磺set
path version / delete path version
£¨2£©znode¿ÉÒÔÊÇÁÙʱznode£¬ÓÉcreate -e Éú³ÉµÄ½Úµã£¬Ò»µ©´´½¨Õâ¸öznodeµÄclientÓëserver¶Ï¿ªÁ¬½Ó£¬¸Ãznode½«±»×Ô¶¯É¾³ý¡£
clientºÍserverÖ®¼äͨ¹ýheartbeatÀ´È·ÈÏÁ¬½ÓÕý³££¬ÕâÖÖ״̬³ÆÖ®Îªsession£¬¶Ï¿ªÁ¬½ÓºósessionʧЧ¡£
£¨3£©ÁÙʱznode²»ÄÜÓÐ×Óznode¡£
£¨4£©znode¿ÉÒÔ×Ô¶¯±àºÅ£¬ÓÉcreate -s Éú³ÉµÄ½Úµã£¬ÀýÈçÔÚ
create -s /app/node ÒÑ´æÔÚʱ£¬½«»áÉú³É /app/node00***001½Úµã¡£
£¨5£©znode¿ÉÒÔ±»¼à¿Ø£¬¸ÃĿ¼ÏÂijЩÐÅÏ¢µÄÐ޸ģ¬ÀýÈç½ÚµãÊý¾Ý¡¢×Ó½Úµã±ä»¯µÈ£¬¿ÉÒÔÖ÷¶¯Í¨Öª¼à¿Ø×¢²áµÄclient¡£ÊÂʵÉÏ£¬Í¨¹ýÕâ¸öÌØÐÔ£¬¿ÉÒÔÍê³ÉÐí¶àÖØÒªÓ¦Óã¬ÀýÈçÅäÖùÜÀí¡¢ÐÅϢͬ²½¡¢·Ö²¼Ê½ËøµÈµÈ¡£
3.2 ZooKeeper·þÎñÖеIJÙ×÷
ÔÚZooKeeperÖÐÓÐ9¸ö»ù±¾²Ù×÷£¬ÈçÏÂͼËùʾ£º

¸üÐÂZooKeeper²Ù×÷ÊÇÓÐÏÞÖÆµÄ¡£delete»òsetData±ØÐëÃ÷È·Òª¸üеÄZnodeµÄ°æ±¾ºÅ£¬ÎÒÃÇ¿ÉÒÔµ÷ÓÃexistsÕÒµ½¡£Èç¹û°æ±¾ºÅ²»Æ¥Å䣬¸üн«»áʧ°Ü¡£
¸üÐÂZooKeeper²Ù×÷ÊÇ·Ç×èÈûʽµÄ¡£Òò´Ë¿Í»§¶ËÈç¹ûʧȥÁËÒ»¸ö¸üУ¨ÓÉÓÚÁíÒ»¸ö½ø³ÌÔÚͬʱ¸üÐÂÕâ¸öZnode£©£¬Ëû¿ÉÒÔÔÚ²»×èÈûÆäËû½ø³ÌÖ´ÐеÄÇé¿öÏ£¬Ñ¡ÔñÖØÐ³¢ÊÔ»ò½øÐÐÆäËû²Ù×÷¡£
¾¡¹ÜZooKeeper¿ÉÒÔ±»¿´×öÊÇÒ»¸öÎļþϵͳ£¬µ«ÊÇ´¦ÓÚ±ãÀû£¬ÞðÆúÁËһЩÎļþϵͳµØ²Ù×÷ÔÓï¡£ÒòΪÎļþ·Ç³£µÄС²¢ÇÒʹÕûÌå¶ÁдµÄ£¬ËùÒÔ²»ÐèÒª´ò¿ª¡¢¹Ø±Õ»òÊÇѰµØµÄ²Ù×÷¡£
3.2.1 watch´¥·¢Æ÷
¶Á²Ù×÷exists¡¢getChildrenºÍgetData¶¼±»ÉèÖÃÁËwatch£¬²¢ÇÒÕâЩwatch¶¼ÓÉд²Ù×÷À´´¥·¢£ºcreate¡¢deleteºÍsetData¡£ACL²Ù×÷²¢²»²ÎÓëµ½watchÖС£µ±watch±»´¥·¢Ê±£¬watchʼþ±»Éú³É£¬ËûµÄÀàÐÍÓÉwatchºÍ´¥·¢ËûµÄ²Ù×÷¹²Í¬¾ö¶¨¡£ZooKeeperËù¹ÜÀíµÄwatch¿ÉÒÔ·ÖΪÁ½Àࣺ
1.Êý¾Ýwatch£¨data watches£©£ºgetDataºÍexists¸ºÔðÉèÖÃÊý¾Ýwatch£»
2.º¢×Ówatch£¨child watches£©£ºgetChildren¸ºÔðÉèÖú¢×Ówatch£»
ÎÒÃÇ¿ÉÒÔͨ¹ý²Ù×÷·µ»ØµÄÊý¾ÝÀ´ÉèÖò»Í¬µÄwatch£º
1.getDataºÍexists£º·µ»Ø¹ØÓÚ½ÚµãµÄÊý¾ÝÐÅÏ¢
2.getChildren£º·µ»Øº¢×ÓÁбí
Òò´Ë£¬Ò»¸ö³É¹¦µÄsetData²Ù×÷½«´¥·¢ZnodeµÄÊý¾Ýwatch¡£
Ò»¸ö³É¹¦µÄcreate²Ù×÷½«´¥·¢ZnodeµÄÊý¾ÝwatchÒÔ¼°º¢×Ówatch¡£
Ò»¸ö³É¹¦µÄdelete²Ù×÷½«´¥·¢ZnodeµÄÊý¾ÝwatchÒÔ¼°º¢×Ówatch¡£
watchÓɿͻ§¶ËËùÁ¬½ÓµÄZooKeeper·þÎñÆ÷ÔÚ±¾µØÎ¬»¤£¬Òò´Ëwatch¿ÉÒԷdz£ÈÝÒ×µØÉèÖᢹÜÀíºÍ·ÖÅÉ¡£µ±¿Í»§¶ËÁ¬½Óµ½Ò»¸öеķþÎñÆ÷ÉÏʱ£¬ÈκεĻỰʼþ¶¼½«¿ÉÄÜ´¥·¢watch¡£ÁíÍ⣬µ±´Ó·þÎñÆ÷¶Ï¿ªÁ¬½ÓµÄʱºò£¬watch½«²»»á±»½ÓÊÕ¡£µ«ÊÇ£¬µ±Ò»¸ö¿Í»§¶ËÖØÐ½¨Á¢Á¬½ÓµÄʱºò£¬ÈκÎÏÈǰע²á¹ýµÄwatch¶¼»á±»ÖØÐÂ×¢²á¡£
exists²Ù×÷ÉϵÄwatch£¬ÔÚ±»¼àÊÓµÄZnode´´½¨¡¢É¾³ý»òÊý¾Ý¸üÐÂʱ±»´¥·¢¡£
getData²Ù×÷ÉϵÄwatch£¬ÔÚ±»¼àÊÓµÄZnodeɾ³ý»òÊý¾Ý¸üÐÂʱ±»´¥·¢¡£ÔÚ±»´´½¨Ê±²»Äܱ»´¥·¢£¬ÒòΪֻÓÐZnodeÒ»¶¨´æÔÚ£¬getData²Ù×÷²Å»á³É¹¦¡£
getChildren²Ù×÷ÉϵÄwatch£¬ÔÚ±»¼àÊÓµÄZnodeµÄ×ӽڵ㴴½¨»òɾ³ý£¬»òÊÇÕâ¸öZnode×ÔÉí±»É¾³ýʱ±»´¥·¢¡£¿ÉÒÔͨ¹ý²é¿´watchʼþÀàÐÍÀ´Çø·ÖÊÇZnode»¹ÊÇËûµÄ×ӽڵ㱻ɾ³ý£ºNodeDelete±íʾZnode±»É¾³ý£¬NodeDeletedChanged±íʾ×ӽڵ㱻ɾ³ý¡£
watchÉèÖòÙ×÷¼°ÏàÓ¦µÄ´¥·¢Æ÷ÈçͼÏÂͼËùʾ£º

watchʼþ°üÀ¨ÁËʼþËùÉæ¼°µÄZnodeµÄ·¾¶£¬Òò´Ë¶ÔÓÚNodeCreatedºÍNodeDeletedʼþÀ´Ëµ£¬¸ù¾Ý·¾¶¾Í¿ÉÒÔ¼òµ¥Çø·Ö³öÊÇÄĸöZnode±»´´½¨»òÊDZ»É¾³ýÁË¡£ÎªÁ˲éѯÔÚNodeChildrenChangedʼþºóÄĸö×ӽڵ㱻¸Ä±äÁË£¬ÐèÒªÔٴε÷ÓÃgetChildrenÀ´»ñµÃеÄchildrenÁÐ±í¡£Í¬ÑùµÄ£¬ÎªÁ˲éѯNodeDeletedChangedʼþºó²úÉúµÄÐÂÊý¾Ý£¬ÐèÒªµ÷ÓÃgetData¡£ÔÚÁ½ÖÖÇé¿öÏ£¬Znode¿ÉÄÜÔÚ»ñÈ¡watchʼþ»òÖ´ÐжÁ²Ù×÷ÕâÁ½ÖÖ״̬ÏÂÇл»£¬ÔÚдӦÓóÌÐòʱ£¬±ØÐë¼ÇסÕâÒ»µã¡£
£¨1£©ZookeeperµÄwatchʵ¼ÊÉÏÒª´¦ÀíÁ½Ààʼþ£º
1. Á¬½Ó״̬ʼþ(type=None, path=null)
ÕâÀàʼþ²»ÐèҪע²á£¬Ò²²»ÐèÒªÎÒÃÇÁ¬Ðø´¥·¢£¬ÎÒÃÇÖ»Òª´¦Àí¾ÍÐÐÁË¡£
2. ½Úµãʼþ
½ÚµãµÄ½¨Á¢£¬É¾³ý£¬Êý¾ÝµÄÐ޸ġ£ËüÊÇone time trigger£¬ÎÒÃÇÐèÒª²»Í£µÄ×¢²á´¥·¢£¬»¹¿ÉÄÜ·¢Éúʼþ¶ªÊ§µÄÇé¿ö¡£
ÉÏÃæ2Ààʼþ¶¼ÔÚWatchÖд¦Àí£¬Ò²¾ÍÊÇÖØÔØµÄprocess(Event
event)
£¨2£©½ÚµãʼþµÄ´¥·¢£¬Í¨¹ýº¯Êýexists,getData»ògetChildrenÀ´´¦Àí
ÕâÀຯÊý£¬ÓÐË«ÖØ×÷Óãº
1. ×¢²á´¥·¢Ê¼þ
2. º¯Êý±¾ÉíµÄ¹¦ÄÜ
º¯ÊýµÄ±¾ÉíµÄ¹¦ÄÜÓÖ¿ÉÒÔÓÃÒì²½µÄ»Øµ÷º¯ÊýÀ´ÊµÏÖ,ÖØÔØprocessResult()¹ý³ÌÖд¦Àíº¯Êý±¾ÉíµÄµÄ¹¦ÄÜ¡£
º¯Êý»¹¿ÉÒÔÖ¸¶¨×Ô¼ºµÄwatch,ËùÒÔÿ¸öº¯Êý¶¼ÓÐ4¸ö°æ±¾¡£¸ù¾Ý×Ô¼ºµÄÐèÒªÀ´Ñ¡Ôñ²»Í¬µÄº¯Êý£¬²»Í¬µÄ°æ±¾¡£
3.3 ZooKeeper·ÃÎÊ¿ØÖÆÁбíACL
ZooKeeperʹÓÃACLÀ´¶ÔZnode½øÐзÃÎÊ¿ØÖÆ¡£ACLµÄʵÏÖºÍUnixÎļþ·ÃÎÊÐí¿É·Ç³£ÏàËÆ£ºËüʹÓÃÐí¿ÉλÀ´¶ÔÒ»¸ö½ÚµãµÄ²»Í¬²Ù×÷½øÐÐÔÊÐí»ò½ûÖ¹µÄȨÏÞ¿ØÖÆ¡£µ«ÊÇ£¬ºÍ±ê×¼µÄUnixÐí¿É²»Í¬µÄÊÇ£¬Zookeeper¶ÔÓÚÓû§Àà±ðµÄÇø·Ö£¬²»Ö¹¾ÖÏÞÓÚËùÓÐÕß(owner)¡¢×é
(group)¡¢ËùÓÐÈË(world)Èý¸ö¼¶±ð¡£ZookeeperÖУ¬Êý¾Ý½ÚµãûÓС°ËùÓÐÕß¡±µÄ¸ÅÄî¡£·ÃÎÊÕßÀûÓÃid±êʶ×Ô¼ºµÄÉí·Ý£¬²¢»ñµÃÓëÖ®ÏàÓ¦µÄ
²»Í¬µÄ·ÃÎÊȨÏÞ¡£
×¢Ò⣺
´«Í³µÄÎļþϵͳÖУ¬ACL·ÖΪÁ½¸öά¶È£¬Ò»¸öÊÇÊô×飬һ¸öÊÇȨÏÞ£¬×ÓĿ¼/ÎļþĬÈϼ̳и¸Ä¿Â¼µÄACL¡£¶øÔÚZookeeperÖÐÒ»¸öACLºÍÒ»¸öZooKeeper½ÚµãÏà¶ÔÓ¦¡£²¢ÇÒ£¬¸¸½ÚµãµÄACLÓë×Ó½ÚµãµÄACLÊÇÏ໥¶ÀÁ¢µÄ¡£Ò²¾ÍÊÇ˵£¬ACL²»Äܱ»×Ó½ÚµãËù¼Ì³Ð£¬¸¸½ÚµãËùÓµÓеÄȨÏÞÓë×Ó½ÚµãËùÓõÄȨÏÞ¶¼Ã»ÓÐÈκιØÏµ¡£
ZookeeperÖ§³Ö¿ÉÅäÖõÄÈÏÖ¤»úÖÆ¡£ËüÀûÓÃÒ»¸öÈýÔª×éÀ´¶¨Òå¿Í»§¶ËµÄ·ÃÎÊȨÏÞ£º(scheme:expression,
perms) ¡£ÆäÖУº
1.scheme£º¶¨ÒåÁËexpressionµÄº¬Òå¡£
È磺£¨host:host1.corp.com£¬READ£©,±êʶÁËÒ»¸öÃûΪhost1.corp.comµÄÖ÷»ú,ÓиÃÊý¾Ý½ÚµãµÄ¶ÁȨÏÞ¡£
2.Perms£º±êʶÁ˲Ù×÷ȨÏÞ¡£
È磺£¨ip:19.22.0.0/16, READ£©,±íʾIPµØÖ·ÒÔ19.22¿ªÍ·µÄÖ÷»ú,ÓиÃÊý¾Ý½ÚµãµÄ¶ÁȨÏÞ¡£
ZookeeperµÄACLÒ²¿ÉÒÔ´ÓÈý¸öά¶ÈÀ´Àí½â£ºÒ»ÊÇ£¬scheme;
¶þÊÇ£¬user; ÈýÊÇ£¬permission£¬Í¨³£±íʾΪscheme:id:permissions£¬ÈçÏÂͼËùʾ¡£

1.world : id¸ñʽ£ºanyone¡£
È磺world:anyone´ú±íÈκÎÈË£¬zookeeperÖжÔËùÓÐÈËÓÐȨÏ޵Ľáµã¾ÍÊÇÊôÓÚworld:anyoneµÄ¡£
2.auth : Ëü²»ÐèÒªid¡£
×¢£ºÖ»ÒªÊÇͨ¹ýauthenticationµÄuser¶¼ÓÐȨÏÞ£¬zookeeperÖ§³Öͨ¹ýkerberosÀ´½øÐÐÈÏÖ¤,
Ò²Ö§³Öusername/passwordÐÎʽµÄÈÏÖ¤¡£
3.digest: id¸ñʽ£ºusername:BASE64(SHA1(password))¡£
ËüÐèÒªÏÈͨ¹ýusername:passwordÐÎʽµÄauthentication¡£
4.ip: id¸ñʽ£º¿Í»§»úµÄIPµØÖ·¡£
ÉèÖõÄʱºò¿ÉÒÔÉèÖÃÒ»¸öip¶Î¡£È磺ip:192.168.1.0/16,
±íʾƥÅäǰ16¸öbitµÄIP¶Î
5.super: ³¬¼¶Óû§Ä£Ê½¡£
ÔÚÕâÖÖschemeÇé¿öÏ£¬¶ÔÓ¦µÄidÓµÓг¬¼¶È¨ÏÞ£¬¿ÉÒÔ×öÈκÎÊÂÇé
ZooKeeperȨÏÞ¶¨ÒåÈçÏÂͼËùʾ£º

ZooKeeperÄÚÖõÄACLģʽÈçÏÂͼËùʾ£º

µ±»á»°½¨Á¢µÄʱºò£¬¿Í»§¶Ë½«»á½øÐÐ×ÔÎÒÑéÖ¤¡£ÁíÍ⣬ZooKeeper Java
APIÖ§³ÖÈýÖÖ±ê×¼µÄÓû§È¨ÏÞ£¬ËüÃÇ·Ö±ðΪ£º
1.ZOO_PEN_ACL_UNSAFE£º¶ÔÓÚËùÓеÄACLÀ´Ëµ¶¼ÊÇÍêÈ«¿ª·ÅµÄ£¬ÈκÎÓ¦ÓóÌÐò¿ÉÒÔÔÚ½ÚµãÉÏÖ´ÐÐÈκβÙ×÷£¬±ÈÈç´´½¨¡¢Áгö²¢É¾³ý×ӽڵ㡣
2.ZOO_READ_ACL_UNSAFE£º¶ÔÓÚÈÎÒâµÄÓ¦ÓóÌÐòÀ´Ëµ£¬½ö½ö¾ßÓжÁȨÏÞ¡£
3.ZOO_CREATOR_ALL_ACL£ºÊÚÓè½Úµã´´½¨ÕßËùÓÐȨÏÞ¡£ÐèҪעÒâµÄÊÇ£¬ÉèÖôËȨÏÞ֮ǰ£¬´´½¨Õß±ØÐëÒѾͨÁË·þÎñÆ÷µÄÈÏÖ¤¡£
ÏÂÃæÑÝʾһ¸öͨ¹ýdigest£¨Óû§ÃûÃÜÂëµÄ·½Ê½£©Îª´´½¨µÄ½ÚµãÉèÖÃACLµÄÀý×Ó£¬´úÂëÈçÏ£º
import org.apache.zookeeper.*;
import org.apache.zookeeper.server.auth.DigestAuthenticationProvider;
import org.apache.zookeeper.data.*;
import java.util.*;
public class NewDigest {
public static void main(String[] args) throws Exception {//newÒ»¸öacl
List acls = new ArrayList();
¡¡¡¡¡¡¡¡¡¡//Ìí¼ÓµÚÒ»¸öid£¬²ÉÓÃÓû§ÃûÃÜÂëÐÎʽ
Id id1 = new Id("digest",DigestAuthenticationProvider.generateDigest("admin:admin"));
ACL acl1 = new ACL(ZooDefs.Perms.ALL, id1);
acls.add(acl1);
¡¡¡¡¡¡¡¡ //Ìí¼ÓµÚ¶þ¸öid£¬ËùÓÐÓû§¿É¶ÁȨÏÞ
Id id2 = new Id("world", "anyone");
ACL acl2 = new ACL(ZooDefs.Perms.READ, id2);
acls.add(acl2);
// zkÓÃadminÈÏÖ¤£¬´´½¨/test ZNode¡£
¡¡¡¡¡¡¡¡¡¡ZooKeeper zk = new ZooKeeper("host1:2181,host2:2181,host3:2181",2000, null);
¡¡¡¡¡¡¡¡¡¡zk.addAuthInfo("digest", "admin:admin".getBytes());
¡¡¡¡¡¡¡¡¡¡zk.create("/test", "data".getBytes(), acls, CreateMode.PERSISTENT);
}
}
|
3.4 ZooKeeperµÄÖ´ÐÐ
ZooKeeper·þÎñ¿ÉÒÔÒÔÁ½ÖÖģʽÔËÐС£ÔÚµ¥»úģʽÏ£¬Ö»ÓÐÒ»¸öZooKeeper·þÎñÆ÷£¬±ãÓÚÓÃÀ´²âÊÔ¡£µ«ÊÇËûûÓи߿ÉÓÃÐԺͻָ´ÐԵı£ÕÏ¡£ÔÚ¹¤Òµ½ç£¬ZooKeeperÒÔ¸´ºÏģʽ10ÔËÐÐÔÚÒ»×é½ÐensembleµÄ¼¯ÈºÉÏ¡£ZooKeeperͨ¹ý¸´ÖÆÀ´»ñµÃ¸ß¿ÉÓÃÐÔ£¬Í¬Ê±£¬Ö»ÒªensembleÖд󲿷ֻúÆ÷ÔË×÷£¬¾Í¿ÉÒÔÌṩ·þÎñ¡£ÔÚ2n+1¸ö½ÚµãµÄensembleÖУ¬¿ÉÒÔ³ÐÊÜn̨»úÆ÷¹ÊÕÏ¡£
ZooKeeperµÄ˼Ïë·Ç³£¼òµ¥£ºËûËùÐèÒª×öµÄ¾ÍÊDZ£Ö¤¶ÔZnodeÊ÷µÄÿһ´ÎÐ޸ͼ¸´ÖƵ½ensembleÖеĴ󲿷ֻúÆ÷ÉÏÈ¥¡£Èç¹û»úÆ÷ÖеÄС²¿·Ö³ö¹ÊÕÏÁË£¬ÄÇôÖÁÉÙÓÐһ̨»úÆ÷½«»á»Ö¸´µ½×îÐÂ״̬£¬ÆäËûµÄÔò±£´æÕ⸱±¾£¬Ö±µ½×îÖÕ´ïµ½×îÐÂ״̬¡£Zookeeper²ÉÓÃZabÐÒ飬Ëü·ÖΪÁ½¸ö½×¶Î£¬²¢ÇÒ¿ÉÄܱ»ÎÞÏÞµÄÖØ¸´¡£
£¨1£©½×¶Î1£ºÁìµ¼ÕßÑ¡¾Ù
ÔÚensembleÖеĻúÆ÷Òª²ÎÓëÒ»¸öÑ¡ÔñÌØÊâ³ÉÔ±µÄ½ø³Ì£¬Õâ¸ö³ÉÔ±½ÐÁìµ¼Õߣ¬ÆäËû»úÆ÷½Å¸úËæÕß¡£Ôڴ󲿷ֵĸúËæÕßÓëËûÃǵÄÁìµ¼Õßͬ²½ÁË״̬ÒÔºó£¬Õâ¸ö½×¶Î²ÅËãÍê³É¡£
£¨2£©½×¶Î2£ºÔ×ӹ㲥
ËùÓеÄд²Ù×÷ÇëÇó±»´«Ë͸øÁìµ¼Õߣ¬²¢Í¨¹ý¹ã²¥½«¸üÐÂÐÅÏ¢¸æË߸úËæÕß¡£µ±´ó²¿·Ö¸úËæÕßÖ´ÐÐÁËÐÞ¸ÄÖ®ºó£¬Áìµ¼Õß¾ÍÌá½»¸üвÙ×÷£¬¿Í»§¶Ë½«µÃµ½¸üгɹ¦µÄ»ØÓ¦¡£Î´»ñµÃÒ»ÖÂÐÔµÄÐÒé±»Éè¼ÆÎªÔ×ӵģ¬Òò´ËÎÞÂÛÐÞ¸Äʧ°ÜÓë·ñ£¬Ëû¶¼·ÖÁ½½×¶ÎÌá½»¡£
Èç¹ûÁìµ¼Õß³ö¹ÊÕÏÁË£¬³ÇϵĻúÆ÷½«»áÔٴνøÐÐÁìµ¼ÕßÑ¡¾Ù£¬²¢ÔÚÐÂÁìµ¼±»Ñ¡³öǰ¼ÌÐøÖ´ÐÐÈÎÎñ¡£Èç¹ûÔÚ²»¾ÃºóÀϵÄÁìµ¼Õ߻ָ´ÁË£¬ÄÇôËü½«ÒÔ¸úËæÕßµÄÉí·Ý¼ÌÐøÔËÐС£Áìµ¼ÕßÑ¡¾Ù·Ç³£¿ì£¬ÓÉ·¢²¼µÄ½á¹ûËùÖª£¬´óÔ¼ÊÇ200ºÁÃ룬Òò´ËÔÚÑ¡¾ÙÊÇÐÔÄܲ»»áÃ÷ÏÔ¼õÂý¡£
ËùÓÐÔÚensembleÖеĻúÆ÷ÔÚ¸üÐÂËüÃÇÄÚ´æÖеÄZnodeÊ÷֮ǰ»áÏȽ«¸üÐÂÐÅϢдÈë´ÅÅÌ¡£¶Á²Ù×÷ÇëÇó¿ÉÓÉÈκλúÆ÷·þÎñ£¬Í¬Ê±£¬ÓÉÓÚËûÃÇֻɿ¼°ÄÚ´æ²éÕÒ£¬Òò´Ë·Ç³£¿ì¡£
3.5 ZooKeeperÒ»ÖÂÐÔ
ÔÚensembleÖеÄÁìµ¼Õߺ͸úËæ×ŷdz£Áé»î£¬¸úËæÕßͨ¹ý¸üкÅÀ´ÖͺóÁìµ¼Õß11£¬½á¹ûµ¼ÖÂÁËÖ»Òª´ó²¿·Ö¶ø²»ÊÇËùÓеÄensembleÖеÄÔªËØÈ·ÈϸüУ¬¾ÍÄܱ»Ìá½»ÁË¡£¶ÔÓÚZooKeeperÀ´Ëµ£¬Ò»¸ö½ÏºÃµÄÖÇÄÜģʽÊǽ«¿Í»§¶ËÁ¬½Óµ½¸ú×ÅÁìµ¼ÕßµÄZooKeeper·þÎñÆ÷ÉÏ¡£¿Í»§¶Ë¿ÉÄܱ»Á¬½Óµ½Áìµ¼ÕßÉÏ£¬µ«Ëû²»ÄÜ¿ØÖÆËü£¬¶øÇÒÔÚÈçÏÂÇé¿öʱ£¬ÉõÖÁ¿ÉÄܲ»ÖªµÀ¡£²Î¼ûÏÂͼ£º

ÿһ¸öZnodeÊ÷µÄ¸üж¼»á¸ø¶¨Ò»¸öΨһµÄÈ«¾Ö±êʶ£¬½Ðzxid£¨±íʾZooKeeperÊÂÎñ¡°ID¡±£©¡£¸üÐÂÊDZ»ÅÅÐòµÄ£¬Òò´ËÈç¹ûzxidµÄz1<z2£¬ÄÇôz1¾Í±Èz2ÏÈÖ´ÐС£¶ÔÓÚZooKeeperÀ´Ëµ£¬ÕâÊÇ·Ö²¼Ê½ÏµÍ³ÖÐÅÅÐòµÄΨһ±ê×¼¡£
ZooKeeperÊÇÒ»ÖÖ¸ßÐÔÄÜ¡¢¿ÉÀ©Õ¹µÄ·þÎñ¡£ZooKeeperµÄ¶ÁдËٶȷdz£¿ì£¬²¢ÇÒ¶ÁµÄËÙ¶ÈÒª±Èд¿ì¡£ÁíÍ⣬ÔÚ½øÐжÁ²Ù×÷µÄʱºò£¬ZooKeeperÒÀÈ»Äܹ»Îª¾ÉµÄÊý¾ÝÌṩ·þÎñ¡£ÕâЩ¶¼ÊÇÓÉZooKeeperËùÌṩµÄÒ»ÖÂÐÔ±£Ö¤µÄ£¬Ëü¾ßÓÐÈçÏÂÌØµã£º
£¨1£©Ë³ÐòÒ»ÖÂÐÔ
ÈκÎÒ»¸ö¿Í»§¶ËµÄ¸üж¼°´ËûÃÇ·¢Ë͵Ä˳ÐòÅÅÐò£¬Ò²¾ÍÒâζ×ÅÈç¹ûÒ»¸ö¿Í»§¶Ë½«Znode zµÄÖµ¸üÐÂΪֵa£¬ÄÇôÔÚÖ®ºóµÄ²Ù×÷ÖУ¬Ëû»á½«z¸üÐÂΪb£¬ÔÚ¿Í»§¶Ë·¢ÏÖz´øÓÐÖµbÖ®ºó£¬¾Í²»»áÔÙ¿´¼û´øÓÐÖµaµÄz¡£
£¨2£©Ô×ÓÐÔ
¸üв»³É¹¦¾Íʧ°Ü£¬ÕâÒâζ×ÅÈç¹û¸üÐÂʧ°ÜÁË£¬Ã»Óпͻ§¶Ë»áÖªµÀ¡£¡î¡î
£¨3£©µ¥ÏµÍ³Ó³Ïñ¡î
ÎÞÂÛ¿Í»§¶ËÁ¬½ÓµÄÊÇÄĄ̈·þÎñÆ÷£¬ËûÓëϵͳ¿´¼ûµÄÊÓͼһÑù¡£Õâ¾ÍÒâζ×Å£¬Èç¹ûÒ»¸ö¿Í»§¶ËÔÚÏàͬµÄ»á»°Ê±Á¬½ÓÁËһ̨еķþÎñÆ÷£¬Ëû½«²»»áÔÙ¿´¼û±ÈÔÚ֮ǰ·þÎñÆ÷ÉÏ¿´¼ûµÄ¸üÀϵÄϵͳ״̬£¬µ±·þÎñÆ÷ϵͳ³ö¹ÊÕÏ£¬Í¬Ê±¿Í»§¶Ë³¢ÊÔÁ¬½ÓensembleÖÐµÄÆäËû»úÆ÷ʱ£¬¹ÊÕÏ·þÎñÆ÷µÄºóÃæÄÇ̨»úÆ÷½«²»»á½ÓÊÜÁ¬½Ó£¬Ö±µ½ËüÁ¬½Óµ½¹ÊÕÏ·þÎñÆ÷¡£
£¨4£©ÈÝ´íÐÔ¡î¡î¡î
Ò»µ©¸üгɹ¦ºó£¬ÄÇôÔÚ¿Í»§¶ËÔٴθüÐÂËû֮ǰ£¬Ëû¾Í¹Ì¶¨ÁË£¬½«²»ÔÙ±»Ð޸ģ¬Õâ¾Í»á±£Ö¤²úÉúÏÂÃæÁ½ÖÖ½á¹û£º
Èç¹û¿Í»§¶Ë³É¹¦µÄ»ñµÃÁËÕýÈ·µÄ·µ»Ø´úÂ룬ÄÇô˵Ã÷¸üÐÂÒѾ³É¹¦¡£Èç¹û²»Äܹ»»ñµÃ·µ»Ø´úÂ루ÓÉÓÚͨÐÅ´íÎó¡¢³¬Ê±µÈÔÒò£©£¬ÄÇô¿Í»§¶Ë½«²»ÖªµÀ¸üÐÂÊÇ·ñÉúЧ¡£
µ±¹ÊÕϻָ´µÄʱºò£¬Èκοͻ§¶ËÄܹ»¿´µ½µÄÖ´Ðгɹ¦µÄ¸üвÙ×÷½«²»»á»Ø¹ö¡£
£¨5£©ÊµÊ±ÐÔ¡î¡î
ÔÚÈκοͻ§¶ËµÄϵͳÊÓͼÉϵĵÄʱ¼ä¼ä¸ôÊÇÓÐÏ޵ģ¬Òò´ËËûÔÚ³¬¹ý¼¸Ê®ÃëµÄʱ¼äÄÚ²¿»á¹ýÆÚ¡£Õâ¾ÍÒâζ×Å£¬·þÎñÆ÷²»»áÈÿͻ§¶Ë¿´Ò»Ð©¹ýʱµÄÊý¾Ý£¬¶øÊǹرգ¬Ç¿Öƿͻ§¶Ëתµ½Ò»¸ö¸üеķþÎñÆ÷ÉÏ¡£
½âÊÍһϣº
ÓÉÓÚÐÔÄÜÔÒò£¬¶Á²Ù×÷ÓÉZooKeeper·þÎñÆ÷µÄÄÚ´æÌṩ£¬¶øÇÒ²»²ÎÓëд²Ù×÷µÄÈ«¾ÖÅÅÐò¡£ÕâÒ»ÌØÐÔ¿ÉÄܻᵼÖÂÀ´×ÔʹÓÃZooKeeperÍⲿ»úÖÆ½»Á÷µÄ¿Í»§¶ËÓëZooKeeper״̬µÄ²»Ò»Ö¡£¾ÙÀýÀ´Ëµ£¬¿Í»§¶ËA½«Znode
zµÄÖµa¸üÐÂΪa'£¬AÈÃBÀ´¶Áz£¬B¶Áµ½zµÄÖµÊÇa¶ø²»ÊÇa¡¯¡£ÕâÓëZooKeeperµÄ±£Ö¤»úÖÆÊÇÏàÈݵ썲»ÔÊÐíµÄÇé¿ö½Ï×÷¡°Í¬²½Ò»ÖµĽ»²æ¿Í»§¶ËÊÓ
ͼ¡±£©¡£ÎªÁ˱ÜÃâÕâÖÖÇé¿öµÄ·¢Éú£¬BÔÚ¶ÁÈ¡zµÄֵ֮ǰ£¬Ó¦¸ÃÏȵ÷ÓÃzÉϵÄsync¡£Sync²Ù×÷Ç¿ÖÆBÁ¬½ÓÉϵÄZooKeeper·þÎñÆ÷Óëleader±£
³ÖÒ»ÖÂÕâÑù£¬µ±B¶Áµ½zµÄֵʱ£¬Ëû½«³ÉΪAÉèÖõÄÖµ£¨»òÊÇÖ®ºóµÄÖµ£©
ÈÝÒ×»ìÏýµÄÊÇ£º
sync²Ù×÷Ö»Äܱ»Òì²½µ÷ÓÃ12¡£ÕâÑù²Ù×÷µÄÔÒòÊÇÄã²»ÐèÒªµÈ´ýËûµÄ·µ»Ø£¬ÒòΪZooKeeper±£Ö¤ÁËÈκνÓÏÂÈ¥µÄ²Ù×÷½«»á·¢ÉúÔÚsyncÔÚ·þÎñÆ÷ÉÏÖ´ÐÐÒԺ󣬼´Ê¹²Ù×÷ÊÇÔÚsyncÍê³Éǰ±»µ÷Óõġ£
ÕâЩÒÑÖ´Ðеı£Ö¤ºó£¬ZooKeeper¸ü¸ß¼¶¹¦ÄܵÄÉè¼ÆÓëʵÏÖ½«»á±äµÃ·Ç³£ÈÝÒ×£¬ÀýÈ磺leaderÑ¡¾Ù¡¢¶ÓÁУ¬ÒÔ¼°¿É³·ÏúËøµÈ»úÖÆµÄʵÏÖ¡£
3.6 ZooKeeperȇȡ
ZooKeeper¿Í»§¶ËÓëensembleÖеķþÎñÆ÷ÁбíÅäÖÃÒ»Ö£¬ÔÚÆô¶¯Ê±£¬Ëû³¢ÊÔÓë±íÖеÄÒ»¸ö·þÎñÆ÷ÏàÁ¬½Ó¡£Èç¹ûÁ¬½Óʧ°ÜÁË£¬Ëû¾Í³¢ÊÔ±íÖÐµÄÆäËû·þÎñÆ÷£¬ÒÔ´ËÀàÍÆ£¬ÖªµÀËû×îÖÕÁ¬½Óµ½ÆäÖÐÒ»¸ö£¬»òÕßZooKeeperµÄËùÓзþÎñÆ÷¶¼ÎÞ·¨»ñµÃʱ£¬Á¬½Óʧ°Ü¡£
Ò»µ©ÓëZooKeeper·þÎñÆ÷Á¬½Ó³É¹¦£¬·þÎñÆ÷»á´´½¨Óë¿Í»§¶ËµÄÒ»¸öеĶԻ°¡£Ã¿¸ö»Ø»°¶¼Óг¬Ê±Ê±¶Î£¬ÕâÊÇÓ¦ÓóÌÐòÔÚ´´½¨ËüʱÉ趨µÄ¡£Èç¹û·þÎñÆ÷ûÓÐÔÚ³¬Ê±Ê±¶ÎÄڵõ½ÇëÇó£¬Ëû¿ÉÄÜ»áÖжÏÕâ¸ö»á»°¡£Ò»µ©»á»°±»ÖжÏÁË£¬Ëû¿ÉÄܲ»ÔÙ±»´ò¿ª£¬¶øÇÒÈκÎÓë»á»°ÏàÁ¬½ÓµÄÁÙʱ½Úµã¶¼½«¶ªÊ§¡£
ÎÞÂÛʲôʱºò»á»°³ÖÐø¿ÕÏг¤´ïÒ»¶¨Ê±¼ä£¬¶¼»áÓɿͻ§¶Ë·¢ËÍpingÇëÇó±£³Ö»îÔ¾£¨ÓÌÈçÐÄÌø£©¡£Ê±¼ä¶ÎÒª×㹻СÒÔ¼à²â·þÎñÆ÷¹ÊÕÏ£¨ÓɶÁ²Ù×÷³¬Ê±·´Ó¦£©£¬²¢ÇÒÄÜÔٻػ°³¬ÊÐʱ¼ä¶ÎÄÚÖØÐÂÁ¬½Óµ½ÁíÒ»¸ö·þÎñÆ÷¡£
ÔÚZooKeeperÖÐÓм¸¸ötime²ÎÊý¡£tick timeÊÇZooKeeperÖеĻù±¾Ê±¼ä³¤¶È£¬ÎªensembleÀïµÄ·þÎñÆ÷ËùʹÓã¬ÓÃÀ´¶¨Òå¶ÔÓÚ½»»¥ÔËÐеĵ÷¶È¡£ÆäËûÉèÖÃÒÔtick
timeµÄÃûÒ嶨Ò壬»òÕßÖÁÉÙÓÉËüÀ´Ô¼Êø¡£
´´½¨¸ü¸´ÔÓµÄÁÙʱÐÔ״̬µÄÓ¦ÓóÌÐòÓ¦¸ÃÖ§³Ö¸ü³¤µÄ»á»°³¬Ê±£¬ÒòÎªÖØÐ¹¹½¨µÄ´ú¼Û»á¸ü°º¹ó¡£ÔÚһЩÇé¿öÏ£¬ÎÒÃÇ¿ÉÒÔÈÃÓ¦ÓóÌÐòÔÚÒ»¶¨»á»°Ê±¼äÄÚÄܹ»ÖØÆô£¬²¢ÇÒ±ÜÃâ»á»°¹ýÆÚ¡££¨Õâ¿ÉÄܸüÊʺÏÖ´ÐÐά»¤»òÊÇÉý¼¶£©Ã¿¸ö»á»°¶¼ÓÉ·þÎñÆ÷¸ø¶¨Ò»¸öΨһµÄÉí·ÝºÍÃÜÂ룬¶øÇÒÈç¹ûÊÇÔÚ½¨Á¢Á¬½Óʱ±»´«µÝ¸øZooKeeperµÄ»°£¬Ö»ÒªÃ»ÓйýÆÚËüÄܹ»»Ö¸´»á»°¡£
ÕâÐ©ÌØÐÔ¿ÉÒÔÊÓΪһÖÖ¿ÉÒÔ±ÜÃâ»á»°¹ýÆÚµÄÓÅ»¯£¬µ«Ëü²¢²»ÄÜ´úÌæÓÃÀ´´¦Àí»á»°¹ýÆÚ¡£»á»°¹ýÆÚ¿ÉÄܳöÏÖÔÚ»úÆ÷ͻȻ¹ÊÕÏʱ£¬»òÊÇÓÉÓÚÈκÎÔÒòµ¼ÖµÄÓ¦ÓóÌÐò°²È«¹Ø±ÕÁË£¬µ«ÔڻỰÖжÏǰûÓÐÖØÆô¡£
3.7 ZooKeeperʵÀý״̬
Zookeeper¶ÔÏóµÄת±äÊÇͨ¹ýÆäÉúÃüÖÜÆÚÖеIJ»Í¬×´Ì¬À´ÊµÏÖ¡£¿ÉÒÔʹÓÃgetState()·½·¨ÔÚÈκÎʱºòÈ¥²éѯËûµÄ״̬£º
Zookeeper״̬ÊÂÎñ£¬Èçͼ3.5Ëùʾ

ͼ 3.5 Zookeeper״̬ÊÂÎñ
¡¡¡¡getState()·½·¨µÄ·µ»ØÀàÐÍÊÇstates£¬statesÊÇö¾ÙÀàÐÍ´ú±íZookeeper¶ÔÏó¿ÉÄÜËù´¦µÄ²»Í¬×´Ì¬£¬Ò»¸öZookeeperʵÀý¿ÉÄÜÒ»´ÎÖ»´¦ÓÚÒ»¸ö״̬¡£Ò»¸öн¨µÄZookeeperʵÀýÕýÔÚÓÚZookeeper·þÎñÆ÷½¨Á¢Á¬½Óʱ£¬ÊÇ´¦ÓÚCONNECTING״̬µÄ¡£Ò»µ©Á¬½Ó½¨Á¢ºÃÒÔºó£¬Ëû¾Í±ä³ÉÁËConnected״̬¡£
ʹÓÃZookeeperµÄ¿Í»§¶Ë¿ÉÒÔͨ¹ý×¢²áWatcherµÄ·½·¨À´»ñȡ״̬ת±äµÄÏûÏ¢¡£Ò»µ©½øÈëÁËCONNNECTED״̬£¬Watcher½«»ñµÃÒ»¸öKeepStateֵΪSyncConnectedµÄWatchedEvent¡£
×¢ÒâZookeeperµÄwatcherÓÐÁ½¸öÖ°Ôð£º
<1>Á˽âZookeeperµÄ״̬¸Ä±ä¡£´«µÝ¸øZooKeeper¶ÔÏó¹¹Ô캯ÊýµÄ(ĬÈÏ)watcher£¬±»ÓÃÀ´¼à²â״̬µÄ¸Ä±ä¡£
<2>Á˽âZondeµÄ¸Ä±ä¡£¼à²âZondeµÄ¸Ä±ä¼È¿ÉÒÔʹÓÃרÃŵÄʵÀýÉèÖõ½¶Á²Ù×÷ÉÏ£¬Ò²¿ÉÒÔʹÓöÁ²Ù×÷µÄĬÈÏwatcher¡£
ZookeeperʵÀý¿ÉÄÜʧȥ»òÖØÐÂÁ¬½ÓZookeeper·þÎñ£¬ÔÚCONNECTEDºÍCONNECTING״̬ÖÐÇл»¡£Èç¹ûÁ¬½Ó¶Ï¿ª£¬watcherµÃµ½Ò»¸öDisconnectedʼþ¡£Ñ§Òª×¢ÒâµÄÊÇ£¬ÕâЩ״̬µÄÇ¨ÒÆÊÇÓÉZookeeperʵÀý×Ô¼º·¢ÆðµÄ£¬Èç¹ûÁ¬½Ó¶Ï¿ªËû½«×Ô¶¯³¢ÊÔ×Ô¶¯Á¬½Ó¡£
Èç¹ûÈκÎÒ»¸öclose()·½·¨±»µ÷Ó㬻òÊǻỰÓÉExpiredÀàÐ͵ÄKeepStateÌáʾ¹ýÆÚʱ£¬ZooKeeper¿ÉÄÜ»áת±ä³ÉµÚÈýÖÖ״̬CLOSED¡£Ò»µ©´¦ÓÚCLOSED״̬£¬Zookeeper¶ÔÏ󽫲»ÔÙÊǻµÄÁË(¿ÉÒÔʹÓÃstatesµÄisActive()·½·¨½øÐвâÊÔ)£¬¶øÇÒ²»Äܱ»ÖØÓ᣿ͻ§¶Ë±ØÐ뽨Á¢Ò»¸öеÄZookeeperʵÀý²ÅÄÜÖØÐÂÁ¬½Óµ½Zookeeper·þÎñ¡£
ÏÂÆÚÔ¤¸æ£ºZooKeeperµÄ¼¯Èº°²×°ºÍÅäÖ㬾´Çë¹Ø×¢¡£±¾ÆÚÄÚÈݼ°¹©´ó¼Ò²Î¿¼£¬ÓÐʲô²»¶ÔµÄµØ·½£¬Ï£Íû´ó¼Ò¸øÓèÖ¸µã¸üÕý¡£Èç¹ûÄú¾õµÃ£¬ÎÄÕÂдµÃ»¹ÐУ¬¾Í̧ÆðÄúµÄ¹óÊÖ£¬µãÒ»ÏÂÍÆ¼ö¡£
|