Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ZookeeperÓ¦ÓýéÉÜÓë°²×°²¿Êð
 
  2065  次浏览      27
 2018-8-27
 
±à¼­ÍƼö:

±¾ÎÄÀ´×ÔÓÚÍøÂ磬ÎÄÕÂÖ÷Òª¶ÔZookeeper¶ÔÆäÌØÕ÷¡¢»ù±¾ÖªÊ¶ÒÔ¼°»·¾³ÅäÖ㬰²×°½øÐÐÁËÏêϸ½éÉÜ¡£

1 Zookeeper¸ÅÊö#

ZooKeeperÊÇÒ»¸öΪ·Ö²¼Ê½Ó¦ÓÃËùÉè¼ÆµÄ·Ö²¼µÄ¡¢¿ªÔ´µÄЭµ÷·þÎñ£¬ËüÖ÷ÒªÊÇÓÃÀ´½â¾ö·Ö²¼Ê½Ó¦ÓÃÖо­³£Óöµ½µÄһЩÊý¾Ý¹ÜÀíÎÊÌ⣬¼ò»¯·Ö²¼Ê½Ó¦ÓÃЭµ÷¼°Æä¹ÜÀíµÄÄѶȣ¬Ìṩ¸ßÐÔÄܵķֲ¼Ê½·þÎñ¡£ZooKeeper±¾Éí¿ÉÒÔÒÔStandaloneģʽ°²×°ÔËÐУ¬²»¹ýËüµÄ³¤´¦ÔÚÓÚͨ¹ý·Ö²¼Ê½ZooKeeper¼¯Èº£¨Ò»¸öLeader£¬¶à¸öFollower£©£¬»ùÓÚÒ»¶¨µÄ²ßÂÔÀ´±£Ö¤ZooKeeper¼¯ÈºµÄÎȶ¨ÐԺͿÉÓÃÐÔ£¬´Ó¶øÊµÏÖ·Ö²¼Ê½Ó¦ÓõĿɿ¿ÐÔ¡£

ÔÚÍøÉÏ¿´µ½ÁËÒ»¸öºÜ²»´íµÄ¹ØÓÚZooKeeperµÄ½éÉÜ£º ¹ËÃû˼Ò嶯ÎïÔ°¹ÜÀíÔ±£¬ËûÊÇÄÃÀ´¹Ü´óÏó(Hadoop) ¡¢ ÃÛ·ä(Hive) ¡¢ СÖí(Pig) µÄ¹ÜÀíÔ±£¬ Apache HbaseºÍ Apache Solr ÒÔ¼°LinkedIn sensei µÈÏîÄ¿Öж¼²ÉÓõ½ÁË Zookeeper¡£ZooKeeperÊÇÒ»¸ö·Ö²¼Ê½µÄ£¬¿ª·ÅÔ´ÂëµÄ·Ö²¼Ê½Ó¦ÓóÌÐòЭµ÷·þÎñ£¬ZooKeeperÊÇÒÔFast PaxosË㷨Ϊ»ù´¡£¬ÊµÏÖͬ²½·þÎñ£¬ÅäÖÃά»¤ºÍÃüÃû·þÎñµÈ·Ö²¼Ê½Ó¦Óá£

´Ó½éÉÜ¿ÉÒÔ¿´³ö£¬ZooKeeper¸üÇãÏòÓÚ¶Ô´óÐÍÓ¦ÓõÄЭͬά»¤¹ÜÀí¹¤×÷¡£IBMÔò¸ø³öÁËIBM¶ÔZooKeeperµÄÈÏÖª£º Zookeeper ·Ö²¼Ê½·þÎñ¿ò¼ÜÊÇ Apache Hadoop µÄÒ»¸ö×ÓÏîÄ¿£¬ËüÖ÷ÒªÊÇÓÃÀ´½â¾ö·Ö²¼Ê½Ó¦ÓÃÖо­³£Óöµ½µÄһЩÊý¾Ý¹ÜÀíÎÊÌ⣬È磺ͳһÃüÃû·þÎñ¡¢×´Ì¬Í¬²½·þÎñ¡¢¼¯Èº¹ÜÀí¡¢·Ö²¼Ê½Ó¦ÓÃÅäÖÃÏîµÄ¹ÜÀíµÈ¡£

×ÜÖ®£¬ÎÒÈÏΪËüµÄºËÐĴʾÍÊÇÒ»¸öµ¥´Ê£¬Ð­µ÷¡£

2 ZookeeperÌØÕ÷#

ÔÚHadoopȨÍþÖ¸ÄÏÖп´µ½Á˹ØÓÚZooKeeperµÄһЩºËÐÄÌØÕ÷£¬ÔĶÁÖ®ºó¸Ð¾õ×ܽáµÄÉõÊǾ«±Ù£¬ÔÚÕâÀïÒýÓò¢×ܽᡣ

2.1 ¼òÒ×##

ZooKeeperµÄ×îÖØÒªºËÐľÍÊÇÒ»¸ö¾«¼òÎļþϵͳ£¬ÌṩһЩ¼òµ¥µÄ²Ù×÷ÒÔ¼°¸½¼ÓµÄ³éÏó£¨ÀýÈçÅÅÐòºÍ֪ͨ£©¡£

2.2 Ò×±í´ï##

ZooKeeperµÄÔ­ÐÍÊÇÒ»¸ö·á¸»µÄ¼¯ºÏ£¬ËüÃÇÊÇһЩÒѽ¨ºÃµÄ¿é£¬¿ÉÒÔÓÃÀ´¹¹½¨´óÐ͵ÄЭ×÷Êý¾Ý½á¹¹ºÍЭÒ飬ÀýÈ磺·Ö²¼Ê½¶ÓÁС¢·Ö²¼Ê½ËøÒÔ¼°Ò»×é¶ÔµÈÌåµÄÑ¡¾Ù¡£

2.3 ¸ß¿ÉÓÃÐÔ##

ZooKeeperÔËÐÐÔÚһЩ¼¯ÈºÉÏ£¬±»Éè¼Æ³É¿ÉÓÃÐԽϸߵģ¬Òò´ËÓ¦ÓóÌÐò¿ÉÒÔÒÀÀµËü¡£ZooKeeper¿ÉÒÔ°ïÖúÄãµÄϵͳ±ÜÃâµ¥µã¹ÊÕÏ£¬´Ó¶ø½¨Á¢Ò»¸ö¿É¿¿µÄÓ¦ÓóÌÐò¡£

2.4 ËÉÉ¢ñîºÏ##

ZooKeeperµÄ½»»¥Ö§³Ö²ÎÓëÕßÖ®¼ä²¢²»Á˽â¶Ô·½¡£ÀýÈ磺ZooKeeper¿ÉÒÔ±»µ±×öÒ»ÖÖ¹«¹²µÄ»úÖÆ£¬Ê¹µÃ½ø³Ì±Ë´Ë²»ÖªµÀ¶Ô·½µÄ´æÔÚÒ²¿ÉÒÔÏ໥·¢ÏÖ²¢ÇÒ½»»¥£¬¶ÔµÈ·½¿ÉÄÜÉõÖÁ²»ÊÇͬ²½µÄ¡£

ÕâÒ»ÌØµãÎҸоõ×îÄÜÌåÏÖÔÚ¼¯ÈºµÄ²¿ÊðÆô¶¯¹ý³ÌÖС£ÏñHadoopµ±°ÑÅäÖÃÎļþдºÃÖ®ºó£¬È»ºóÔËÐÐÆô¶¯½Å±¾£¬Ôò251£¬241£¬242ÖÐ×÷Ϊ¼¯ÈºµÄÐéÄâ»úÊÇͬ²½Æô¶¯µÄ£¬Ò²¾ÍÊÇDataNode£¬NameNode£¬TaskTracker£¬ÒÔ¼°JobTrackerµÄÆô¶¯²¢ÔËÐÐʱÔÚÒ»´ÎÆô¶¯¹ý³ÌÖÐÆô¶¯µÄ£¬¾ÍÊÇÔËÐÐÒ»´ÎÆô¶¯½Å±¾Îļþ£¬Ôò¶¼Æô¶¯ÆðÀ´¡£µ«ÊÇZooKeeperµÄÆô¶¯¹ý³ÌÈ´²»ÊÇÕâÑùµÄ¡£ÎÒÔÚ251£¬241£¬242²¿ÊðÁËZooKeeper¼¯Èº£¬²¢½øÐÐÆô¶¯£¬ÔòÆô¶¯µÄ¹ý³ÌÊÇÕâÑùµÄ£ºÊ×ÏÈsshµ½251È»ºóÆô¶¯£¬Õâʱºò251µÄ¼¯Èº½ÚµãÆô¶¯ÆðÀ´£¬µ«ÊÇ¿ØÖÆÌ¨Ò»Ö±±¨´í£¬´ó¸ÅµÄº¬Òå¾ÍÊÇûÓмì²âµ½ÆäËûÁ½¸ö½áµã¡£½Ó×Å·Ö±ðsshµ½241£¬242£¬·Ö±ðÆô¶¯¼¯ÈºÖеÄʣϵĽáµã£¬µ±241Æô¶¯ÆðÀ´Ê±£¬»Øµ½251²é¿´£¬·¢ÏÖ±¨´íµÄÐÅÏ¢¼õÉÙ£¬Òâ˼ÊÇÖ»²îÒ»¸ö½áµã¡£µ±251£¬241£¬242Èý̨·þÎñÆ÷µÄ½áµãÈ«²¿Æô¶¯ÆðÀ´£¬ÔòÈý̨µÄ·þÎñÆ÷µÄ¿ØÖÆÌ¨´òÓ¡³öÕý³£µÄÐÅÏ¢¡£

2.5 Ò»¸ö¿â##

ZooKeeperÌṩÁËÒ»¸ö¿ªÔ´µÄ¡¢¹²ÏíµÄÖ´Ðд洢£¬ÒÔ¼°Í¨ÓÃЭ×÷µÄ·½·¨£¬·Öµ£ÁËÿ¸ö³ÌÐòԱдͨÓÃЭÒéµÄ¸ºµ£¡£Ëæ×Åʱ¼äµÄÍÆÒÆ£¬ÈËÃÇ¿ÉÒÔÔö¼ÓºÍ¸Ä½øÕâ¸ö¿âÀ´Âú×ã×Ô¼ºµÄÐèÇó¡£

3 ΪʲôʹÓÃZookeeper#

¼ÇµÃÔÚ´óÔ¼ÔÚ2006ÄêµÄʱºòGoogle³öÁËChubbyÀ´½â¾ö·Ö²¼Ò»ÖÂÐÔµÄÎÊÌâ(distributed consensus problem)£¬ËùÓм¯ÈºÖеķþÎñÆ÷ͨ¹ýChubby×îÖÕÑ¡³öÒ»¸öMaster Server £¬×îºóÕâ¸öMaster ServerÀ´Ð­µ÷¹¤×÷¡£¼òµ¥À´ËµÆäÔ­Àí¾ÍÊÇ£ºÔÚÒ»¸ö·Ö²¼Ê½ÏµÍ³ÖУ¬ÓÐÒ»×é·þÎñÆ÷ÔÚÔËÐÐͬÑùµÄ³ÌÐò£¬ËüÃÇÐèҪȷ¶¨Ò»¸öValue£¬ÒÔÄǸö·þÎñÆ÷ÌṩµÄÐÅϢΪÖ÷/Ϊ׼£¬µ±Õâ¸ö·þÎñÆ÷¾­¹ýn/2+1µÄ·½Ê½±»Ñ¡³öÀ´ºó£¬ËùÓеĻúÆ÷ÉϵÄProcess¶¼»á±»Í¨Öªµ½Õâ¸ö·þÎñÆ÷¾ÍÊÇÖ÷·þÎñÆ÷ Master·þÎñÆ÷£¬´ó¼ÒÒÔËûÌṩµÄÐÅϢΪ׼¡£ºÜÏëÖªµÀGoogle ChubbyÖеİÂÃ¿ÉϧÈ˼ÒGoogle²»¿ªÔ´£¬×Ô¼ÒÓá£

µ«ÊÇÔÚ2009Äê3ÄêÒÔºó³ÁĬÒѾõÄYahooÔÚApacheÉÏÍÆ³öÁËÀàËÆµÄ²úÆ·ZooKeeper£¬²¢ÇÒÔÚGoogleÔ­ÓÐChubbyµÄÉè¼ÆË¼ÏëÉÏ×öÁËһЩ¸Ä½ø£¬ÒòΪZooKeeper²¢²»ÊÇÍêÈ«×ñÑ­PaxosЭÒ飬¶øÊÇ»ùÓÚ×ÔÉíÉè¼Æ²¢ÓÅ»¯µÄÒ»¸ö2 phase commitµÄЭÒ飬ÈçͼËùʾ£º

ZooKeeper¸úChubbyÒ»ÑùÓÃÀ´´æ·ÅһЩÏ໥Э×÷µÄÐÅÏ¢(Coordination)£¬ÕâЩÐÅÏ¢±È½ÏСһ°ã²»»á³¬¹ý1M£¬ÔÚzookeeperÖÐÊÇÒÔÒ»ÖÖhierarchical treeµÄÐÎʽÀ´´æ·Å£¬ÕâЩ¾ßÌåµÄKey/ValueÐÅÏ¢¾ÍstoreÔÚtree nodeÖС£

µ±ÓÐʼþµ¼ÖÂnodeÊý¾Ý£¬ÀýÈ磺±ä¸ü£¬Ôö¼Ó£¬É¾³ýʱ£¬Zookeeper¾Í»áµ÷Óà triggerWatch·½·¨£¬Åжϵ±Ç°µÄpathÀ´ÊÇ·ñÓжÔÓ¦µÄ¼àÌýÕß(watcher),Èç¹ûÓÐwatcher£¬»á´¥·¢Æäprocess·½·¨£¬Ö´ÐÐprocess·½·¨ÖеÄÒµÎñÂß¼­£¬Èçͼ£º

3.1 Ó¦ÓÃʵÀý##

ZooKeeperÓÐÁËÉÏÊöµÄÕâЩÓÃ;£¬ÈÃÎÒÃÇÉèÏëһϣ¬ÔÚÒ»¸ö·Ö²¼Ê½ÏµÍ³ÖÐÓÐÕâÕâÑùµÄÒ»¸öÓ¦Óãº

2¸öÈÎÎñ¹¤³§(Task Factory)Ò»Ö÷Ò»´Ó£¬Èç¹û´ÓµÄ·¢ÏÖÖ÷µÄËÀÁËÒԺ󣬴ӵľͿªÊ¼¹¤×÷£¬ËûµÄ¹¤×÷¾ÍÊÇÏòÏÂÃæºÜ¶ą̀´úÀí(Agent)·¢ËÍÖ¸ÁÈÃÿ̨´úÀí(Agent)»ñµÃ²»Í¬µÄÕË»§½øÐзֲ¼Ê½²¢ÐмÆË㣬¶øÃ¿Ì¨´úÀí(Agent)Öн«·ÖÅäºÜ¶àÕʺţ¬Èç¹ûÆäÖÐһ̨´úÀí(Agent)ËÀµôÁË£¬ÄÇôÕą̂ËÀµôµÄ´úÀíÉϵÄÕË»§¾Í²»»á¼ÌÐø¹¤×÷ÁË¡£ÉÏÊö£¬³öÏÖÁË3¸ö×îÖ÷ÒªµÄÎÊÌ⣺

Task Factory Ö÷/´ÓÒ»ÖÂÐÔµÄÎÊÌ⣻

Task Factory Ö÷/´ÓÐÄÌøÈçºÎÓüòµ¥+Îȶ¨ »òÕß2ÕßÕÛÖеķ½Ê½ÊµÏÖ£»

һ̨´úÀí(Agent)ËÀµôÁËÒÔºó£¬Ò»²¿·ÖµÄÕË»§¾ÍÎÞ·¨¼ÌÐø¹¤×÷£¬ÐèҪ֪ͨËùÓÐÔÚÏߵĴúÀí(Agent)ÖØÐ·ÖÅäÒ»´ÎÕʺţ»

OK£¬ÈÃÎÒÃÇÏëÏëZooKeeperÊDz»ÊÇÄܰïÖúÎÒÃÇÈ¥½â¾öĿǰÓöµ½µÄÕâ3¸ö×îÖ÷ÒªµÄÎÊÌâÄØ£¿

ÈÎÎñ¹¤³§Task Factory¶¼Á¬½Óµ½ZooKeeperÉÏ£¬´´½¨½Úµã£¬ÉèÖöÔÕâ¸ö½Úµã½øÐÐ¼à¿Ø£¬¼à¿Ø·½·¨ÀýÈ磺

event= new WatchedEvent(EventType.NodeDeleted, KeeperState.SyncConnected, "/TaskFactory");

Õâ¸ö·½·¨µÄÒâ˼¾ÍÊÇÖ»ÒªTask FactoryÓëzookeeper¶Ï¿ªÁ¬½Óºó£¬Õâ¸ö½Úµã¾Í»á±»×Ô¶¯É¾³ý¡£

Ô­À´Ö÷µÄÈÎÎñ¹¤³§¶Ï¿ªÁËTCPÁ¬½Ó£¬Õâ¸ö±»´´½¨µÄ/TaskFactory½Úµã¾Í²»´æÔÚÁË£¬¶øÇÒÁíÍâÒ»¸öÁ¬½ÓÔÚÉÏÃæµÄTask Factory¿ÉÒÔÁ¢¿ÌÊÕµ½Õâ¸öʼþ(Event)£¬ÖªµÀÕâ¸ö½Úµã²»´æÔÚÁË£¬Ò²¾ÍÊÇ˵Ö÷TaskFactoryËÀÁË¡£

½ÓÏÂÀ´ÁíÍâÒ»¸ö»î×ŵÄTaskFactory»áÔٴδ´½¨/TaskFactory½Úµã£¬²¢ÇÒдÈë×Ô¼ºµÄipµ½znodeÀïÃæ£¬×÷Ϊеıê¼Ç¡£

´ËʱAgentsÒ²»áÖªµÀÖ÷µÄTaskFactory²»¹¤×÷ÁË£¬ÎªÁË·ÀֹϵͳÖдóÁ¿µÄÅ׳öÒì³££¬ËûÃǽ«»áÏȰÑ×Ô¼ºÊÖÉϵÄÊÂÇé×öÍ꣬Ȼºó¹ÒÆð£¬µÈ´ýÊÕµ½ZookeeperÉÏÖØÐ´´½¨Ò»¸ö/TaskFactory½Úµã£¬ÊÕµ½ EventType.NodeCreated ÀàÐ͵Äʼþ½«»á¼ÌÐø¹¤×÷¡£

Ô­À´´ÓµÄTaskFactory ½«×Ô¼º±ä³ÉÒ»¸öÖ÷TaskFactory£¬µ±ÏµÍ³¹ÜÀíÔ±Æô¶¯Ô­À´ËÀµôµÄÖ÷µÄTaskFactory£¬ÊÀ½çÓÖ»Ö¸´Æ½¾²ÁË¡£

Èç¹ûһ̨´úÀíËÀµô£¬ÆäËû´úÀíËûÃǽ«»áÏȰÑ×Ô¼ºÊÖÉϵÄÊÂÇé×öÍ꣬Ȼºó¹ÒÆð£¬ÏòTaskFactory·¢ËÍÇëÇó£¬TaskFactory»áÖØÐ·ÖÅä(sharding)ÕÊ»§µ½Ã¿¸öAgentÉÏÁË£¬¼ÌÐø¹¤×÷¡£

ÉÏÊöÄÚÈÝ£¬´óÖÂÈçͼËùʾ£º

4 Zookeeper»ù±¾ÖªÊ¶#

4.1 ²ã´Î»¯µÄÃû×Ö¿Õ¼ä##

ZooKeeperµÄÕû¸öÃû×Ö¿Õ¼äµÄ½á¹¹ÊDzã´Î»¯µÄ£¬ºÍÒ»°ãµÄLinuxÎļþϵͳ½á¹¹·Ç³£ÏàËÆ£¬Ò»¿ÅºÜ´óµÄÊ÷¡£ÕâÒ²¾ÍÊÇZooKeeperµÄÊý¾Ý½á¹¹Çé¿ö¡£Ãû×Ö¿Õ¼äµÄ²ã´ÎÓÉб¸Ü/À´½øÐзָÔÚÃû³Æ¿Õ¼äÀïÃæµÄÿһ¸ö½áµãµÄÃû×Ö¿Õ¼äΨһÓÉÕâ¸ö½áµãµÄ·¾¶À´È·¶¨¡£

ÿһ¸ö½ÚµãÓµÓÐ×ÔÉíµÄһЩÐÅÏ¢£¬°üÀ¨£ºÊý¾Ý¡¢Êý¾Ý³¤¶È¡¢´´½¨Ê±¼ä¡¢ÐÞ¸Äʱ¼äµÈµÈ¡£´ÓÕâÑùÒ»Àà¼Èº¬ÓÐÊý¾Ý£¬ÓÖ×÷Ϊ·¾¶±í±êʾµÄ½ÚµãµÄÌØµãÖУ¬¿ÉÒÔ¿´³ö£¬ZooKeeperµÄ½Úµã¼È¿ÉÒÔ±»¿´×öÊÇÒ»¸öÎļþ£¬ÓÖ¿ÉÒÔ±»¿´×öÊÇÒ»¸öĿ¼£¬Ëüͬʱ¾ßÓжþÕßµÄÌØµã¡£ÎªÁ˱ãÓÚ±í´ï£¬½ñºóÎÒÃǽ«Ê¹ÓÃZnodeÀ´±íʾËùÌÖÂÛµÄZooKeeper½Úµã¡£

4.2 Znode##

Znodeά»¤×ÅÊý¾Ý¡¢ACL£¨access control list£¬·ÃÎÊ¿ØÖÆÁÐ±í£©¡¢Ê±¼ä´ÁµÈ½»»»°æ±¾ºÅµÈÊý¾Ý½á¹¹£¬Ëüͨ¹ý¶ÔÕâЩÊý¾ÝµÄ¹ÜÀíÀ´Èûº´æÉúЧ²¢ÇÒÁîЭµ÷¸üС£Ã¿µ±ZnodeÖеÄÊý¾Ý¸üкóËüËùά»¤µÄ°æ±¾ºÅ½«Ôö¼Ó£¬Õâ·Ç³£ÀàËÆÓÚÊý¾Ý¿âÖмÆÊýÆ÷ʱ¼ä´ÁµÄ²Ù×÷·½Ê½¡£

ÁíÍâZnode»¹¾ßÓÐÔ­×ÓÐÔ²Ù×÷µÄÌØµã£ºÃüÃû¿Õ¼äÖУ¬Ã¿Ò»¸öZnodeµÄÊý¾Ý½«±»Ô­×ӵضÁд¡£¶Á²Ù×÷½«¶ÁÈ¡ÓëZnodeÏà¹ØµÄËùÓÐÊý¾Ý£¬Ð´²Ù×÷½«Ìæ»»µôËùÓеÄÊý¾Ý¡£³ý´ËÖ®Í⣬ÿһ¸ö½Úµã¶¼ÓÐÒ»¸ö·ÃÎÊ¿ØÖÆÁÐ±í£¬Õâ¸ö·ÃÎÊ¿ØÖÆÁÐ±í¹æ¶¨ÁËÓû§²Ù×÷µÄȨÏÞ¡£

ZooKeeperÖÐͬÑù´æÔÚÁÙʱ½Úµã¡£ÕâЩ½ÚµãÓësessionͬʱ´æÔÚ£¬µ±sessionÉúÃüÖÜÆÚ½áÊø£¬ÕâЩÁÙʱ½ÚµãÒ²½«±»É¾³ý¡£ÁÙʱ½ÚµãÔÚijЩ³¡ºÏÒ²·¢»Ó×ŷdz£ÖØÒªµÄ×÷Óá£

4.3 Watch»úÖÆ##

Watch»úÖÆ¾ÍºÍµ¥´Ê±¾ÉíµÄÒâ˼һÑù£¬¿´¡£¿´Ê²Ã´£¿¾ßÌåÀ´½²¾ÍÊÇijһ¸ö»òÕßһЩZnodeµÄ±ä»¯¡£¹Ù·½¸ø³öµÄ¶¨Ò壺һ¸öWatchʼþÊÇÒ»¸öÒ»´ÎÐԵĴ¥·¢Æ÷£¬µ±±»ÉèÖÃÁËWatchµÄÊý¾Ý·¢ÉúÁ˸ıäµÄʱºò£¬Ôò·þÎñÆ÷½«Õâ¸ö¸Ä±ä·¢Ë͸øÉèÖÃÁËWatchµÄ¿Í»§¶Ë£¬ÒÔ±ã֪ͨËüÃÇ¡£

Watch»úÖÆÖ÷ÒªÓÐÒÔÏÂÈý¸öÌØµã£º

Ò»´ÎÐԵĴ¥·¢Æ÷£¨one-time trigger£©

µ±Êý¾Ý¸Ä±äµÄʱºò£¬ÄÇôһ¸öWatchʼþ»á²úÉú²¢ÇÒ±»·¢Ë͵½¿Í»§¶ËÖС£µ«Êǿͻ§¶ËÖ»»áÊÕµ½Ò»´ÎÕâÑùµÄ֪ͨ£¬Èç¹ûÒÔºóÕâ¸öÊý¾ÝÔٴη¢Éú¸Ä±äµÄʱºò£¬Ö®Ç°ÉèÖÃWatchµÄ¿Í»§¶Ë½«²»»áÔÙ´ÎÊÕµ½¸Ä±äµÄ֪ͨ£¬ÒòΪWatch»úÖÆ¹æ¶¨ÁËËüÊÇÒ»¸öÒ»´ÎÐԵĴ¥·¢Æ÷¡£

µ±ÉèÖüàÊÓµÄÊý¾Ý·¢Éú¸Ä±äʱ£¬¸Ã¼àÊÓʼþ»á±»·¢Ë͵½¿Í»§¶Ë£¬ÀýÈ磬Èç¹û¿Í»§¶Ëµ÷ÓÃÁË getData("/znode1", true) ²¢ÇÒÉÔºó /znode1 ½ÚµãÉϵÄÊý¾Ý·¢ÉúÁ˸ıä»òÕß±»É¾³ýÁË£¬¿Í»§¶Ë½«»á»ñÈ¡µ½ /znode1 ·¢Éú±ä»¯µÄ¼àÊÓʼþ£¬¶øÈç¹û /znode1 ÔÙÒ»´Î·¢ÉúÁ˱仯£¬³ý·Ç¿Í»§¶ËÔÙ´Î¶Ô /znode1 ÉèÖüàÊÓ£¬·ñÔò¿Í»§¶Ë²»»áÊÕµ½Ê¼þ֪ͨ¡£

·¢Ë͸ø¿Í»§¶Ë£¨Sent to the client£©

Õâ¸ö±íÃ÷ÁËWatchµÄ֪ͨʼþÊÇ´Ó·þÎñÆ÷·¢Ë͸ø¿Í»§¶ËµÄ£¬ÊÇÒì²½µÄ£¬Õâ¾Í±íÃ÷²»Í¬µÄ¿Í»§¶ËÊÕµ½µÄWatchµÄʱ¼ä¿ÉÄܲ»Í¬£¬µ«ÊÇZooKeeperÓб£Ö¤£ºµ±Ò»¸ö¿Í»§¶ËÔÚ¿´µ½Watchʼþ֮ǰÊDz»»á¿´µ½½áµãÊý¾ÝµÄ±ä»¯µÄ¡£ÀýÈ磺A=3£¬´ËʱÔÚÉÏÃæÉèÖÃÁËÒ»´ÎWatch£¬Èç¹ûAͻȻ±ä³É4ÁË£¬ÄÇô¿Í»§¶Ë»áÏÈÊÕµ½WatchʼþµÄ֪ͨ£¬È»ºó²Å»á¿´µ½A=4¡£

Zookeeper ¿Í»§¶ËºÍ·þÎñ¶ËÊÇͨ¹ý Socket ½øÐÐͨÐŵģ¬ÓÉÓÚÍøÂç´æÔÚ¹ÊÕÏ£¬ËùÒÔ¼àÊÓʼþºÜÓпÉÄܲ»»á³É¹¦µØµ½´ï¿Í»§¶Ë£¬¼àÊÓʼþÊÇÒì²½·¢ËÍÖÁ¼àÊÓÕߵģ¬Zookeeper ±¾ÉíÌṩÁ˱£ÐòÐÔ(ordering guarantee)£º¼´¿Í»§¶ËÖ»ÓÐÊ×ÏÈ¿´µ½Á˼àÊÓʼþºó£¬²Å»á¸ÐÖªµ½ËüËùÉèÖüàÊ znode ·¢ÉúÁ˱仯(a client will never see a change for which it has set a watch until it first sees the watch event). ÍøÂçÑÓ³Ù»òÕ߯äËûÒòËØ¿ÉÄܵ¼Ö²»Í¬µÄ¿Í»§¶ËÔÚ²»Í¬µÄʱ¿Ì¸Ð֪ijһ¼àÊÓʼþ£¬µ«ÊDz»Í¬µÄ¿Í»§¶ËËù¿´µ½µÄÒ»ÇоßÓÐÒ»ÖµÄ˳Ðò¡£

±»ÉèÖÃWatchµÄÊý¾Ý£¨The data for which the watch was set£©

ÕâÒâζ×Å znode ½Úµã±¾Éí¾ßÓв»Í¬µÄ¸Ä±ä·½Ê½¡£ÄãÒ²¿ÉÒÔÏëÏó Zookeeper ά»¤ÁËÁ½Ìõ¼àÊÓÁ´±í£ºÊý¾Ý¼àÊÓºÍ×Ó½Úµã¼àÊÓ(data watches and child watches) getData() and exists() ÉèÖÃÊý¾Ý¼àÊÓ£¬getChildren() ÉèÖÃ×Ó½Úµã¼àÊÓ¡£ »òÕߣ¬ÄãÒ²¿ÉÒÔÏëÏó Zookeeper ÉèÖõIJ»Í¬¼àÊÓ·µ»Ø²»Í¬µÄÊý¾Ý£¬getData() ºÍ exists() ·µ»Ø znode ½ÚµãµÄÏà¹ØÐÅÏ¢£¬¶ø getChildren() ·µ»Ø×Ó½ÚµãÁÐ±í¡£Òò´Ë£¬ setData() »á´¥·¢ÉèÖÃÔÚijһ½ÚµãÉÏËùÉèÖõÄÊý¾Ý¼àÊÓ(¼Ù¶¨Êý¾ÝÉèÖóɹ¦)£¬¶øÒ»´Î³É¹¦µÄ create() ²Ù×÷Ôò»á³ö·¢µ±Ç°½ÚµãÉÏËùÉèÖõÄÊý¾Ý¼àÊÓÒÔ¼°¸¸½ÚµãµÄ×Ó½Úµã¼àÊÓ¡£Ò»´Î³É¹¦µÄ delete() ²Ù×÷½«»á´¥·¢µ±Ç°½ÚµãµÄÊý¾Ý¼àÊÓºÍ×Ó½Úµã¼àÊÓʼþ£¬Í¬Ê±Ò²»á´¥·¢¸Ã½Úµã¸¸½ÚµãµÄchild watch¡£

Zookeeper ÖеļàÊÓÊÇÇáÁ¿¼¶µÄ£¬Òò´ËÈÝÒ×ÉèÖá¢Î¬»¤ºÍ·Ö·¢¡£µ±¿Í»§¶ËÓë Zookeeper ·þÎñÆ÷¶ËʧȥÁªÏµÊ±£¬¿Í»§¶Ë²¢²»»áÊÕµ½¼àÊÓʼþµÄ֪ͨ£¬Ö»Óе±¿Í»§¶ËÖØÐÂÁ¬½Óºó£¬ÈôÔÚ±ØÒªµÄÇé¿öÏ£¬ÒÔǰע²áµÄ¼àÊÓ»áÖØÐ±»×¢²á²¢´¥·¢£¬¶ÔÓÚ¿ª·¢ÈËÔ±À´Ëµ Õâͨ³£ÊÇ͸Ã÷µÄ¡£Ö»ÓÐÒ»ÖÖÇé¿ö»áµ¼Ö¼àÊÓʼþµÄ¶ªÊ§£¬¼´£ºÍ¨¹ý exists() ÉèÖÃÁËij¸ö znode ½ÚµãµÄ¼àÊÓ£¬µ«ÊÇÈç¹ûij¸ö¿Í»§¶ËÔÚ´Ë znode ½Úµã±»´´½¨ºÍɾ³ýµÄʱ¼ä¼ä¸ôÄÚÓë zookeeper ·þÎñÆ÷ʧȥÁËÁªÏµ£¬¸Ã¿Í»§¶Ë¼´Ê¹ÉÔºóÖØÐÂÁ¬½Ó zookeeper·þÎñÆ÷ºóÒ²µÃ²»µ½Ê¼þ֪ͨ¡£

4.4 ACL·ÃÎÊ¿ØÖÆÁбí##

ÕâÊÇÁíÍâÒ»¸öºÍLinux²Ù×÷ϵͳ·Ç³£ÏàËÆµÄµØ·½£¬ZooKeeperʹÓÃACLÀ´¿ØÖÆ¶ÔÆìÏÂZnode½áµãÃǵķÃÎÊ¡£ACLµÄʵÏÖºÍLinuxÎļþϵͳµÄ·ÃÎÊȨÏÞÊ®·ÖÀàËÆ£ºËüͨ¹ýÉèÖÃȨÏÞΪÀ´±íÃ÷ÊÇ·ñÔÊÐí¶ÔÒ»¸ö½áµãµÄÏà¹ØÄÚÈݵĸı䡣

µ«ÊÇÓ봫ͳLinux»úÖÆ²»Ì«Ïàͬ£¬Ò»¸ö½áµãµÄÊý¾ÝûÓÐÀàËÆ¡°ÓµÓÐÕߣ¬×éÓû§£¬ÆäËûÓû§¡±µÄ¸ÅÄÔÚZooKeeperÖУ¬ACLͨ¹ýÉèÖÃIDÒÔ¼°ÓëÆä¹ØÁªµÄȨÏÞÀ´Íê³É·ÃÎÊ¿ØÖƵġ£ACLµÄȨÏÞ×é³ÉÓï·¨ÊÇ£º

(scheme:expression, perms)

ǰÕß±íÃ÷ÉèÖõÄID£¬¶ººÅºóÃæ±íʾµÄÊÇIDÏà¹ØµÄȨÏÞ£¬ÀýÈ磺

(ip:172.16.16.1,READ)

Ö¸Ã÷ÁËIPµØÖ·ÎªÈçÉϵÄÓû§µÄȨÏÞΪֻ¶Á¡£

ÒÔÏÂÁоÙÒÔÏÂACLËù¾ßÓеÄȨÏÞ£º

CREATE£º±íÃ÷Äã¿ÉÒÔ´´½¨Ò»¸öZnodeµÄ×Ó½áµã¡£

READ£ºÄã¿ÉÒԵõ½Õâ¸ö½áµãµÄÊý¾ÝÒÔ¼°ÁоٸýáµãµÄ×Ó½áµãÇé¿ö¡£

WRITE£ºÉèÖÃÒ»¸ö½áµãµÄÊý¾Ý¡£

DELETE£º¿ÉÒÔɾ³ýÒ»¸ö½áµã

ADMIN£º¶ÔÒ»¸ö½áµãÉèÖÃȨÏÞ¡£

5 Zookeeper²¿Êð#

ZooKeeperµÄ²¿Êð·½Ê½Ö÷ÒªÓÐÈýÖÖ£¬µ¥»úģʽ¡¢Î±¼¯ÈºÄ£Ê½¡¢¼¯ÈºÄ£Ê½¡£ÆäʵʣϵÄÁ½ÖÖģʽ¶¼ÊǼ¯ÈºÄ£Ê½µÄÌØÊâÇé¿ö¡£

5.1 ϵͳ»·¾³##

5.2 ÏÂÔØZookeeper##

mkdir /home/taomk/zk ´´½¨Îļþ¼Ð

cd /home/taomk/zk; wget http://mirror.bit.edu.cn
/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz ÏÂÔØ

tar xvf zookeeper-3.4.6.tar.gz ½âѹËõ

mv zookeeper-3.4.6 zookeeper346 ÖØÃüÃû

cd zookeeper346; ls -l

5.3 ÅäÖû·¾³±äÁ¿##

export ZOOKEEPER_HOME=/home/taomk/zk/zookeeper346
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf

5.4 ZooKeeperµÄµ¥»úģʽ²¿Êð##

ZooKeeperµÄµ¥»úģʽͨ³£ÊÇÓÃÀ´¿ìËÙ²âÊÔ¿Í»§¶ËÓ¦ÓóÌÐòµÄ£¬ÔÚʵ¼Ê¹ý³ÌÖв»¿ÉÄÜÊǵ¥»úģʽ¡£µ¥»úģʽµÄÅäÖÃÒ²±È½Ï¼òµ¥¡£

±àдÅäÖÃÎļþzoo.cfg£ºZooKeeperµÄÔËÐÐĬÈÏÊǶÁÈ¡zoo.cfgÎļþÀïÃæµÄÄÚÈݵġ£

¡«mkdir /home/taomk/zk/zoo/zk0
¡«cp conf/zoo_sample.cfg conf/zk0.cfg
¡«vim conf/zk0.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/conan/zoo/zk0
clientPort=2181

ÔÚzk0.cfgÕâ¸öÎļþÖУ¬ÎÒÃÇÐèÒªÖ¸¶¨ dataDir µÄÖµ£¬ËüÖ¸ÏòÁËÒ»¸öĿ¼£¬Õâ¸öĿ¼ÔÚ¿ªÊ¼µÄʱºòÐèҪΪ¿Õ¡£ÏÂÃæÊÇÿ¸ö²ÎÊýµÄº¬Ò壺

tickTime £º»ù±¾Ê¼þµ¥Ôª£¬ÒÔºÁÃëΪµ¥Î»¡£Õâ¸öʱ¼äÊÇ×÷Ϊ Zookeeper ·þÎñÆ÷Ö®¼ä»ò¿Í»§¶ËÓë·þÎñÆ÷Ö®¼äά³ÖÐÄÌøµÄʱ¼ä¼ä¸ô£¬Ò²¾ÍÊÇÿ¸ö tickTime ʱ¼ä¾Í»á·¢ËÍÒ»¸öÐÄÌø¡£

dataDir £º´æ´¢ÄÚ´æÖÐÊý¾Ý¿â¿ìÕÕµÄλÖ㬹ËÃû˼Òå¾ÍÊÇ Zookeeper ±£´æÊý¾ÝµÄĿ¼£¬Ä¬ÈÏÇé¿öÏ£¬Zookeeper ½«Ð´Êý¾ÝµÄÈÕÖ¾ÎļþÒ²±£´æÔÚÕâ¸öĿ¼Àï¡£

clientPort £ºÕâ¸ö¶Ë¿Ú¾ÍÊǿͻ§¶ËÁ¬½Ó Zookeeper ·þÎñÆ÷µÄ¶Ë¿Ú£¬Zookeeper »á¼àÌýÕâ¸ö¶Ë¿Ú£¬½ÓÊܿͻ§¶ËµÄ·ÃÎÊÇëÇó¡£

ʹÓõ¥»úģʽʱÓû§ÐèҪעÒ⣺ÕâÖÖÅäÖ÷½Ê½ÏÂûÓÐ ZooKeeper ¸±±¾£¬ËùÒÔÈç¹û ZooKeeper ·þÎñÆ÷³öÏÖ¹ÊÕÏ£¬ ZooKeeper ·þÎñ½«»áÍ£Ö¹¡£

Æô¶¯Zookeeper

¡«bin/zkServer.sh start zk0.cfg

zkµÄ·þÎñÏÔʾΪQuorumPeerMain£º

¡«jps
5321 QuorumPeerMain
5338 Jps

²é¿´ÔËÐÐ״̬£º

¡«bin/zkServer.sh status zk0.cfg
JMX enabled by default
Using config: /home/taomk/zk/zookeeper346/bin/../conf/zk0.cfg
Mode: standalone

µ¥½ÚµãµÄʱ£¬Mode»áÏÔʾΪstandalone¡£

Í£Ö¹ZooKeeper·þÎñ

~ bin/zkServer.sh stop zk0.cfg
JMX enabled by default
Using config: /home/taomk/zk/zookeeper346/bin/../conf/zk0.cfg
Stopping zookeeper ... STOPPED

5.5 ZooKeeperµÄα¼¯ÈºÄ£Ê½²¿Êð##

Ëùν ¡°Î±·Ö²¼Ê½¼¯Èº¡± ¾ÍÊÇÔÚ£¬ÔÚһ̨PCÖУ¬Æô¶¯¶à¸öZooKeeperµÄʵÀý¡£¡°ÍêÈ«·Ö²¼Ê½¼¯Èº¡± ÊÇÿ̨PC£¬Æô¶¯Ò»¸öZooKeeperʵÀý¡£ÆäʵÔÚÆóÒµÖÐʽ²»»á´æÔڵģ¬ÁíÍâΪÁ˲âÊÔÒ»¸ö¿Í»§¶Ë³ÌÐòҲûÓбØÒª´æÔÚ£¬Ö»ÓÐÔÚÎïÖÊÌõ¼þ±È½ÏØÑ·¦µÄÌõ¼þÏÂ²Å»á´æÔÚµÄģʽ¡£¼¯ÈºÎ±·Ö²¼Ä£Ê½¾ÍÊÇÔÚµ¥»úÏÂÄ£Ä⼯ȺµÄZooKeeper·þÎñ£¬ÔÚһ̨»úÆ÷ÉÏÃæÓжà¸öZooKeeperµÄJVMͬʱÔËÐС£

ZooKeeperµÄ¼¯ÈºÄ£Ê½Ï£¬¶à¸öZookeeper·þÎñÆ÷ÔÚ¹¤×÷ǰ»áÑ¡¾Ù³öÒ»¸öLeader£¬ÔÚ½ÓÏÂÀ´µÄ¹¤×÷ÖÐÕâ¸ö±»Ñ¡¾Ù³öÀ´µÄLeaderËÀÁË£¬¶øÊ£ÏµÄZookeeper·þÎñÆ÷»áÖªµÀÕâ¸öLeaderËÀµôÁË£¬ÔÚ»î×ŵÄZookeeper¼¯ÈºÖлá¼ÌÐøÑ¡³öÒ»¸öLeader£¬Ñ¡¾Ù³öLeaderµÄÄ¿µÄÊÇΪÁË¿ÉÒÔÔÚ·Ö²¼Ê½µÄ»·¾³Öб£Ö¤Êý¾ÝµÄÒ»ÖÂÐÔ¡£

È·Èϼ¯Èº·þÎñÆ÷µÄÊýÁ¿

ÓÉÓÚZooKeeper¼¯ÈºÖУ¬»áÓÐÒ»¸öLeader¸ºÔð¹ÜÀíºÍЭµ÷ÆäËû¼¯Èº·þÎñÆ÷£¬Òò´Ë·þÎñÆ÷µÄÊýÁ¿Í¨³£¶¼Êǵ¥Êý£¬ÀýÈç3£¬5£¬7...µÈ£¬ÕâÑù2n+1µÄÊýÁ¿µÄ·þÎñÆ÷¾Í¿ÉÒÔÔÊÐí×î¶àn̨·þÎñÆ÷µÄʧЧ¡£

´´½¨»·¾³Ä¿Â¼

~ mkdir /home/taomk/zk/zoo/zk1
~ mkdir /home/taomk/zk/zoo/zk2
~ mkdir /home/taomk/zk/zoo/zk3
#н¨myidÎļþ
~ echo "1" > /home/taomk/zk/zoo/zk1/myid
~ echo "2" > /home/taomk/zk/zoo/zk2/myid
~ echo "3" > /home/taomk/zk/zoo/zk3/myid

·Ö±ðÐÞ¸ÄÅäÖÃÎļþ

Ð޸ģºdataDir,clientPort

Ôö¼Ó£º¼¯ÈºµÄʵÀý£¬server.X£¬¡±X¡±±íʾÿ¸öĿ¼ÖеÄmyidµÄÖµ

~ vim /home/taomk/zk/zookeeper346/conf/zk1.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/taomk/zk/zoo/zk1
clientPort=2181
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
~ vim /home/taomk/zk/zookeeper346/conf/zk2.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/taomk/zk/zoo/zk2
clientPort=2182
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
~ vim /home/taomk/zk/zookeeper346/conf/zk3.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/taomk/zk/zoo/zk3
clientPort=2183
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890

initLimit£ºÕâ¸öÅäÖÃÏîÊÇÓÃÀ´ÅäÖà Zookeeper ½ÓÊܿͻ§¶Ë£¨ÕâÀïËù˵µÄ¿Í»§¶Ë²»ÊÇÓû§Á¬½Ó Zookeeper ·þÎñÆ÷µÄ¿Í»§¶Ë£¬¶øÊÇ Zookeeper ·þÎñÆ÷¼¯ÈºÖÐÁ¬½Óµ½ Leader µÄ Follower ·þÎñÆ÷£©³õʼ»¯Á¬½Óʱ×ÄÜÈÌÊܶàÉÙ¸öÐÄÌøÊ±¼ä¼ä¸ôÊý¡£µ±ÒѾ­³¬¹ý 10 ¸öÐÄÌøµÄʱ¼ä£¨Ò²¾ÍÊÇ tickTime£©³¤¶Èºó Zookeeper ·þÎñÆ÷»¹Ã»ÓÐÊÕµ½¿Í»§¶ËµÄ·µ»ØÐÅÏ¢£¬ÄÇô±íÃ÷Õâ¸ö¿Í»§¶ËÁ¬½Óʧ°Ü¡£×ܵÄʱ¼ä³¤¶È¾ÍÊÇ 10*2000=20 Ãë¡£

syncLimit£ºÕâ¸öÅäÖÃÏî±êʶ Leader Óë Follower Ö®¼ä·¢ËÍÏûÏ¢£¬ÇëÇóºÍÓ¦´ðʱ¼ä³¤¶È£¬×²»Äܳ¬¹ý¶àÉÙ¸ö tickTime µÄʱ¼ä³¤¶È£¬×ܵÄʱ¼ä³¤¶È¾ÍÊÇ 5*2000=10 Ãë¡£

server.A=B£ºC£ºD£ºÆäÖÐ A ÊÇÒ»¸öÊý×Ö£¬±íʾÕâ¸öÊǵڼ¸ºÅ·þÎñÆ÷£¬¾ÍÊǼ¯ÈºÄ£Ê½ÏÂÅäÖõÄmyidÎļþËù´æ·ÅµÄÊýÖµ£»B ÊÇÕâ¸ö·þÎñÆ÷µÄ ip µØÖ·£»C ±íʾµÄÊÇÕâ¸ö·þÎñÆ÷Ó뼯ȺÖÐµÄ Leader ·þÎñÆ÷½»»»ÐÅÏ¢µÄ¶Ë¿Ú£»D ±íʾµÄÊÇÍòÒ»¼¯ÈºÖÐµÄ Leader ·þÎñÆ÷¹ÒÁË£¬ÐèÒªÒ»¸ö¶Ë¿ÚÀ´ÖØÐ½øÐÐÑ¡¾Ù£¬Ñ¡³öÒ»¸öÐ嵀 Leader£¬¶øÕâ¸ö¶Ë¿Ú¾ÍÊÇÓÃÀ´Ö´ÐÐÑ¡¾Ùʱ·þÎñÆ÷Ï໥ͨÐŵĶ˿ڡ£Èç¹ûÊÇα¼¯ÈºµÄÅäÖ÷½Ê½£¬ÓÉÓÚ B ¶¼ÊÇÒ»Ñù£¬ËùÒÔ²»Í¬µÄ Zookeeper ʵÀýͨÐŶ˿ںŲ»ÄÜÒ»Ñù£¬ËùÒÔÒª¸øËüÃÇ·ÖÅ䲻ͬµÄ¶Ë¿ÚºÅ¡£

ÓÉÓÚÈý¸ö·þÎñ¶¼ÔÚͬһ̨µçÄÔÉÏ£¬Òò´ËÕâÀïÒª±£Ö¤µØÖ·µÄΨһÐÔ£¬Òò´ËÒªÌØ±ð×¢ÒâIPµØÖ·ºÍ¶Ë¿ÚºÅ²»Òª»¥Ïà³åÍ»£¬ÒÔÃâÓ°Ïì³ÌÐòµÄÕýÈ·Ö´ÐС£

3¸ö½ÚµãµÄZooKeeper¼¯ÈºÅäÖÃÍê³É£¬½ÓÏÂÀ´ÎÒÃÇµÄÆô¶¯·þÎñ¡£

Æô¶¯¼¯Èº

s~ bin/zkServer.sh start zk1.cfg
~ bin/zkServer.sh start zk2.cfg
~ bin/zkServer.sh start zk3.cfg
~ jps
5422 QuorumPeerMain
5395 QuorumPeerMain
5463 QuorumPeerMain
5494 Jps
#²é¿´½Úµã״̬
~ bin/zkServer.sh status zk1.cfg
JMX enabled by default
Using config: /home/taomk/zk/zookeeper346/bin/../conf/zk1.cfg
Mode: follower
~ bin/zkServer.sh status zk2.cfg
JMX enabled by default
Using config: /home/taomk/zk/zookeeper346/bin/../conf/zk2.cfg
Mode: leader
~ bin/zkServer.sh status zk3.cfg
JMX enabled by default
Using config: /home/taomk/zk/zookeeper346/bin/../conf/zk3.cfg
Mode: follower

²é¿´ZooKeeperÎïÀíÎļþĿ¼½á¹¹

~ tree -L 3 /home/taomk/zk/zoo

5.6 ZooKeeper Distributedģʽ##

ZooKeeper·Ö²¼Ê½Ä£Ê½°²×°£¨ZooKeeper¼¯Èº£©Ò²±È½ÏÈÝÒ×£¬ÕâÀï˵Ã÷һϻù±¾Òªµã¡£

Ê×ÏÈÒªÃ÷È·µÄÊÇ£¬ZooKeeper¼¯ÈºÊÇÒ»¸ö¶ÀÁ¢µÄ·Ö²¼Ê½Ð­µ÷·þÎñ¼¯Èº£¬¡°¶ÀÁ¢¡±µÄº¬Òå¾ÍÊÇ˵£¬Èç¹ûÏëʹÓÃZooKeeperʵÏÖ·Ö²¼Ê½Ó¦ÓõÄЭµ÷Óë¹ÜÀí£¬¼ò»¯Ð­µ÷Óë¹ÜÀí£¬Èκηֲ¼Ê½Ó¦Óö¼¿ÉÒÔʹÓã¬Õâ¾ÍÒª¹é¹¦ÓÚZookeeperµÄÊý¾ÝÄ£ÐÍ£¨Data Model£©ºÍ²ã´ÎÃüÃû¿Õ¼ä£¨Hierarchical Namespace£©½á¹¹£¬ÔÚÉè¼ÆÄãµÄ·Ö²¼Ê½Ó¦ÓÃЭµ÷·þÎñʱ£¬Ê×ÒªµÄ¾ÍÊÇ¿¼ÂÇÈçºÎ×éÖ¯²ã´ÎÃüÃû¿Õ¼ä¡£

ÏÂÃæËµÃ÷·Ö²¼Ê½Ä£Ê½µÄ°²×°ÅäÖ㬹ý³ÌÈçÏÂËùʾ£º

µÚÒ»²½£ºÖ÷»úÃû³Æµ½IPµØÖ·Ó³ÉäÅäÖÃ

ZooKeeper¼¯ÈºÖоßÓÐÁ½¸ö¹Ø¼üµÄ½ÇÉ«£ºLeaderºÍFollower¡£¼¯ÈºÖÐËùÓеĽáµã×÷Ϊһ¸öÕûÌå¶Ô·Ö²¼Ê½Ó¦ÓÃÌṩ·þÎñ£¬¼¯ÈºÖÐÿ¸ö½áµãÖ®¼ä¶¼»¥ÏàÁ¬½Ó£¬ËùÒÔ£¬ÔÚÅäÖõÄZooKeeper¼¯ÈºµÄʱºò£¬Ã¿Ò»¸ö½áµãµÄhostµ½IPµØÖ·µÄÓ³Éä¶¼ÒªÅäÖÃÉϼ¯ÈºÖÐÆäËü½áµãµÄÓ³ÉäÐÅÏ¢¡£

ÀýÈ磬ZooKeeper¼¯ÈºÖÐÿ¸ö½áµãµÄÅäÖã¬ÒÔslave-01ΪÀý£¬/etc/hostsÄÚÈÝÈçÏÂËùʾ£º

192.168.0.179 slave-01
192.168.0.178 slave-02
192.168.0.177 slave-03

ZooKeeper²ÉÓÃÒ»ÖÖ³ÆÎªLeader electionµÄÑ¡¾ÙËã·¨¡£ÔÚÕû¸ö¼¯ÈºÔËÐйý³ÌÖУ¬Ö»ÓÐÒ»¸öLeader£¬ÆäËûµÄ¶¼ÊÇFollower£¬Èç¹ûZooKeeper¼¯ÈºÔÚÔËÐйý³ÌÖÐLeader³öÁËÎÊÌ⣬ϵͳ»á²ÉÓøÃËã·¨ÖØÐÂÑ¡³öÒ»¸öLeader¡£Òò´Ë£¬¸÷¸ö½áµãÖ®¼äÒªÄܹ»±£Ö¤»¥ÏàÁ¬½Ó£¬±ØÐëÅäÖÃÉÏÊöÓ³Éä¡£

ZooKeeper¼¯ÈºÆô¶¯µÄʱºò£¬»áÊ×ÏÈÑ¡³öÒ»¸öLeader£¬ÔÚLeader election¹ý³ÌÖУ¬Ä³Ò»¸öÂú×ãÑ¡¾ÙËã·¨µÄ½áµã¾ÍÄܳÉΪLeader¡£

µÚ¶þ²½£ºÐÞ¸ÄZooKeeperÅäÖÃÎļþ

ÔÚÆäÖÐһ̨»úÆ÷£¨slave-01£©ÉÏ£¬½âѹËõzookeeper-3.3.4.tar.gz£¬ÐÞ¸ÄÅäÖÃÎļþconf/zoo.cfg£¬ÄÚÈÝÈçÏÂËùʾ£º

tickTime=2000
dataDir=/home/hadoop/storage/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=slave-01:2888:3888
server.2=slave-02:2888:3888
server.3=slave-03:2888:3888

µÚÈý²½£ºÔ¶³Ì¸´ÖÆ·Ö·¢°²×°Îļþ

ÉÏÃæÒѾ­ÔÚһ̨»úÆ÷slave-01ÉÏÅäÖÃÍê³ÉZooKeeper£¬ÏÖÔÚ¿ÉÒÔ½«¸ÃÅäÖúõݲװÎļþÔ¶³Ì¿½±´µ½¼¯ÈºÖеĸ÷¸ö½áµã¶ÔÓ¦µÄĿ¼Ï£º

cd /home/hadoop/installation/
scp -r zookeeper-3.3.4/ hadoop@slave-02:/home/hadoop/installation/
scp -r zookeeper-3.3.4/ hadoop@slave-03:/home/hadoop/installation/

µÚËIJ½£ºÉèÖÃmyid

ÔÚÎÒÃÇÅäÖõÄdataDirÖ¸¶¨µÄĿ¼ÏÂÃæ£¬´´½¨Ò»¸ömyidÎļþ£¬ÀïÃæÄÚÈÝΪһ¸öÊý×Ö£¬ÓÃÀ´±êʶµ±Ç°Ö÷»ú£¬conf/zoo.cfgÎļþÖÐÅäÖõÄserver.XÖÐXΪʲôÊý×Ö£¬ÔòmyidÎļþÖоÍÊäÈëÕâ¸öÊý×Ö£¬ÀýÈ磺

hadoop@slave-01:~/installation/zookeeper-3.3.4$ echo "1" > /home/hadoop/storage/zookeeper/myid
hadoop@slave-02:~/installation/zookeeper-3.3.4$ echo "2" > /home/hadoop/storage/zookeeper/myid
hadoop@slave-03:~/installation/zookeeper-3.3.4$ echo "3" > /home/hadoop/storage/zookeeper/myid

µÚÎå²½£ºÆô¶¯ZooKeeper¼¯Èº

ÔÚZooKeeper¼¯ÈºµÄÿ¸ö½áµãÉÏ£¬Ö´ÐÐÆô¶¯ZooKeeper·þÎñµÄ½Å±¾£¬ÈçÏÂËùʾ£º

hadoop@slave-01:~/installation/zookeeper-3.3.4$ bin/zkServer.sh start
hadoop@slave-02:~/installation/zookeeper-3.3.4$ bin/zkServer.sh start
hadoop@slave-03:~/installation/zookeeper-3.3.4$ bin/zkServer.sh start

Æô¶¯µÄ˳ÐòÊÇslave-01>slave-02>slave-03£¬ÓÉÓÚZooKeeper¼¯ÈºÆô¶¯µÄʱºò£¬Ã¿¸ö½áµã¶¼ÊÔͼȥÁ¬½Ó¼¯ÈºÖÐµÄÆäËü½áµã£¬ÏÈÆô¶¯µÄ¿Ï¶¨Á¬²»ÉϺóÃæ»¹Ã»Æô¶¯µÄ£¬ËùÒÔÈÕÖ¾Ç°Ãæ²¿·ÖµÄÒì³£ÊÇ¿ÉÒÔºöÂԵġ£Í¨¹ýºóÃæ²¿·Ö¿ÉÒÔ¿´µ½£¬¼¯ÈºÔÚÑ¡³öÒ»¸öLeaderºó£¬×îºóÎȶ¨ÁË¡£ÆäËû½áµã¿ÉÄÜÒ²³öÏÖÀàËÆÎÊÌ⣬ÊôÓÚÕý³£¡£

6 ZookeeperÃüÁîÐвÙ×÷#

ZooKeeperÃüÁîÐй¤¾ßÀàËÆÓÚLinuxµÄshell»·¾³£¬²»¹ý¹¦Äܿ϶¨²»¼°shellÀ²£¬µ«ÊÇʹÓÃËüÎÒÃÇ¿ÉÒÔ¼òµ¥µÄ¶ÔZooKeeper½øÐзÃÎÊ£¬Êý¾Ý´´½¨£¬Êý¾ÝÐ޸ĵȲÙ×÷¡£

¶ÔÓÚ¿Í»§¶ËÀ´Ëµ£¬ZooKeeperÊÇÒ»¸öÕûÌ壨ensemble£©£¬Á¬½Óµ½ZooKeeper¼¯ÈºÊµ¼ÊÉϸоõÔÚ¶ÀÏíÕû¸ö¼¯ÈºµÄ·þÎñ£¬ËùÒÔ£¬Äã¿ÉÒÔÔÚÈκÎÒ»¸ö½áµãÉϽ¨Á¢µ½·þÎñ¼¯ÈºµÄÁ¬½Ó¡£

µ±Æô¶¯ ZooKeeper ·þÎñ³É¹¦Ö®ºó£¬ÊäÈëÏÂÊöÃüÁÁ¬½Óµ½ ZooKeeper ·þÎñ£º

~ bin/zkCli.sh ¨Cserver 127.0.0.1:2181

Á¬½Ó³É¹¦ºó£¬ÏµÍ³»áÊä³ö ZooKeeper µÄÏà¹Ø»·¾³ÒÔ¼°ÅäÖÃÐÅÏ¢£¬²¢ÔÚÆÁÄ»Êä³ö¡° Welcome to ZooKeeper ¡±µÈÐÅÏ¢¡£

ÃüÁîÐй¤¾ßµÄһЩ¼òµ¥²Ù×÷ÈçÏ£º

ʹÓà ls ÃüÁîÀ´²é¿´µ±Ç° ZooKeeper ÖÐËù°üº¬µÄÄÚÈÝ£º

ls /

´´½¨Ò»¸öÐ嵀 znode £¬Ê¹Óà create /zk myData ¡£Õâ¸öÃüÁî´´½¨ÁËÒ»¸öÐ嵀 znode ½Úµã¡° zk ¡±ÒÔ¼°ÓëËü¹ØÁªµÄ×Ö·û´®£º

create /zk "myData"

ÔËÐÐ get ÃüÁîÀ´È·ÈÏ znode ÊÇ·ñ°üº¬ÎÒÃÇËù´´½¨µÄ×Ö·û´®£º

get /zk

ͨ¹ý set ÃüÁîÀ´¶Ô zk Ëù¹ØÁªµÄ×Ö·û´®½øÐÐÉèÖãº

set /zk "zsl"
get /zk

znode ɾ³ý£º

delete /zk

ͨ¹ýhelp´òÓ¡ÃüÁîÐаïÖú£º

Í˳ö¿Í»§¶ËÁ¬½Ó£º

quit

7 Java±à³ÌÏÖʵÃüÁîÐвÙ×÷#

ZkDemo.java £º

public class ZkDemo {
public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
// ´´½¨Ò»¸öÓë·þÎñÆ÷µÄÁ¬½Ó
ZooKeeper zk = new ZooKeeper("127.0.0.1:2181", 60000, new Watcher() {
// ¼à¿ØËùÓб»´¥·¢µÄʼþ
public void process(WatchedEvent event) {
System.out.println("EVENT:" + event.getType());
}
});
// ²é¿´¸ù½Úµã
System.out.println("ls / => " + zk.getChildren("/", true));
// ´´½¨Ò»¸öĿ¼½Úµã
if (zk.exists("/node", true) == null) {
zk.create("/node", "conan".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println("create /node conan");
// ²é¿´/node½ÚµãÊý¾Ý
System.out.println("get /node => " + new String(zk.getData("/node", false, null)));
// ²é¿´¸ù½Úµã
System.out.println("ls / => " + zk.getChildren("/", true));
}
// ´´½¨Ò»¸ö×ÓĿ¼½Úµã
if (zk.exists("/node/sub1", true) == null) {
zk.create("/node/sub1", "sub1".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println("create /node/sub1 sub1");
// ²é¿´node½Úµã
System.out.println("ls /node => " + zk.getChildren("/node", true));
}
// Ð޸ĽڵãÊý¾Ý
if (zk.exists("/node", true) != null) {
zk.setData("/node", "changed".getBytes(), -1);
// ²é¿´/node½ÚµãÊý¾Ý
System.out.println("get /node => " + new String(zk.getData("/node", false, null)));
}
// ɾ³ý½Úµã
if (zk.exists("/node/sub1", true) != null) {
zk.delete("/node/sub1", -1);
zk.delete("/node", -1);
// ²é¿´¸ù½Úµã
System.out.println("ls / => " + zk.getChildren("/", true));
}
// ¹Ø±ÕÁ¬½Ó
zk.close();
}
}

pom.xml£¬mavenÅäÖÃÎļþ£º

<dependencies>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
<exclusions>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
   
2065 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

ÆóÒµ¼Ü¹¹¡¢TOGAFÓëArchiMate¸ÅÀÀ
¼Ü¹¹Ê¦Ö®Â·-ÈçºÎ×öºÃÒµÎñ½¨Ä££¿
´óÐÍÍøÕ¾µçÉÌÍøÕ¾¼Ü¹¹°¸ÀýºÍ¼¼Êõ¼Ü¹¹µÄʾÀý
ÍêÕûµÄArchimateÊÓµãÖ¸ÄÏ£¨°üÀ¨Ê¾Àý£©
Ïà¹ØÎĵµ

Êý¾ÝÖÐ̨¼¼Êõ¼Ü¹¹·½·¨ÂÛÓëʵ¼ù
ÊÊÓÃArchiMate¡¢EA ºÍ iSpace½øÐÐÆóÒµ¼Ü¹¹½¨Ä£
ZachmanÆóÒµ¼Ü¹¹¿ò¼Ü¼ò½é
ÆóÒµ¼Ü¹¹ÈÃSOAÂ䵨
Ïà¹Ø¿Î³Ì

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù