ÔØÈëÖС£¡£¡£ 'S bLog
 
ÔØÈëÖС£¡£¡£
 
ÔØÈëÖС£¡£¡£
ÔØÈëÖС£¡£¡£
ÔØÈëÖС£¡£¡£
ÔØÈëÖС£¡£¡£
ÔØÈëÖС£¡£¡£
 
ÌîдÄúµÄÓʼþµØÖ·£¬¶©ÔÄÎÒÃǵľ«²ÊÄÚÈÝ£º


 
·Ö²¼Ê½·þÎñ¿ò¼Ü Zookeeper -- ¹ÜÀí·Ö²¼Ê½»·¾³ÖеÄÊý¾Ý
[ 2011/9/27 15:50:00 | By: ÃÎÏè¶ù ]
 

±¾ÎĽéÉÜµÄ Zookeeper ÊÇÒÔ 3.2.2 Õâ¸öÎȶ¨°æ±¾Îª»ù´¡£¬×îеİ汾¿ÉÒÔͨ¹ý¹ÙÍø http://hadoop.apache.org/zookeeper/À´»ñÈ¡£¬Zookeeper µÄ°²×°·Ç³£¼òµ¥£¬ÏÂÃæ½«´Óµ¥»úģʽºÍ¼¯ÈºÄ£Ê½Á½¸ö·½Ãæ½éÉÜ Zookeeper µÄ°²×°ºÍÅäÖá£

µ¥»úģʽ

µ¥»ú°²×°·Ç³£¼òµ¥£¬Ö»Òª»ñÈ¡µ½ Zookeeper µÄѹËõ°ü²¢½âѹµ½Ä³¸öĿ¼È磺/home/zookeeper-3.2.2 Ï£¬Zookeeper µÄÆô¶¯½Å±¾ÔÚ bin Ŀ¼Ï£¬Linux ÏÂµÄÆô¶¯½Å±¾ÊÇ zkServer.sh£¬ÔÚ 3.2.2 Õâ¸ö°æ±¾ Zookeeper ûÓÐÌṩ windows ÏÂµÄÆô¶¯½Å±¾£¬ËùÒÔÒªÏëÔÚ windows ÏÂÆô¶¯ Zookeeper Òª×Ô¼ºÊÖ¹¤Ð´Ò»¸ö£¬ÈçÇåµ¥ 1 Ëùʾ£º


Çåµ¥ 1. Windows Ï Zookeeper Æô¶¯½Å±¾
            setlocal
            set ZOOCFGDIR=%~dp0%..\conf
            set ZOO_LOG_DIR=%~dp0%..
            set ZOO_LOG4J_PROP=INFO,CONSOLE
            set CLASSPATH=%ZOOCFGDIR%
            set CLASSPATH=%~dp0..\*;%~dp0..\lib\*;%CLASSPATH%
            set CLASSPATH=%~dp0..\build\classes;%~dp0..\build\lib\*;%CLASSPATH%
            set ZOOCFG=%ZOOCFGDIR%\zoo.cfg
            set ZOOMAIN=org.apache.zookeeper.server.ZooKeeperServerMain
            java "-Dzookeeper.log.dir=%ZOO_LOG_DIR%" "-Dzookeeper.root.logger=%ZOO_LOG4J_PROP%"
            -cp "%CLASSPATH%" %ZOOMAIN% "%ZOOCFG%" %*
            endlocal
            

ÔÚÄãÖ´ÐÐÆô¶¯½Å±¾Ö®Ç°£¬»¹Óм¸¸ö»ù±¾µÄÅäÖÃÏîÐèÒªÅäÖÃһϣ¬Zookeeper µÄÅäÖÃÎļþÔÚ conf Ŀ¼Ï£¬Õâ¸öĿ¼ÏÂÓÐ zoo_sample.cfg ºÍ log4j.properties£¬ÄãÐèÒª×öµÄ¾ÍÊǽ« zoo_sample.cfg ¸ÄÃûΪ zoo.cfg£¬ÒòΪ Zookeeper ÔÚÆô¶¯Ê±»áÕÒÕâ¸öÎļþ×÷ΪĬÈÏÅäÖÃÎļþ¡£ÏÂÃæÏêϸ½éÉÜһϣ¬Õâ¸öÅäÖÃÎļþÖи÷¸öÅäÖÃÏîµÄÒâÒå¡£

 tickTime=2000
            dataDir=D:/devtools/zookeeper-3.2.2/build
            clientPort=2181
            

  • tickTime£ºÕâ¸öʱ¼äÊÇ×÷Ϊ Zookeeper ·þÎñÆ÷Ö®¼ä»ò¿Í»§¶ËÓë·þÎñÆ÷Ö®¼äά³ÖÐÄÌøµÄʱ¼ä¼ä¸ô£¬Ò²¾ÍÊÇÿ¸ö tickTime ʱ¼ä¾Í»á·¢ËÍÒ»¸öÐÄÌø¡£
  • dataDir£º¹ËÃû˼Òå¾ÍÊÇ Zookeeper ±£´æÊý¾ÝµÄĿ¼£¬Ä¬ÈÏÇé¿öÏ£¬Zookeeper ½«Ð´Êý¾ÝµÄÈÕÖ¾ÎļþÒ²±£´æÔÚÕâ¸öĿ¼Àï¡£
  • clientPort£ºÕâ¸ö¶Ë¿Ú¾ÍÊǿͻ§¶ËÁ¬½Ó Zookeeper ·þÎñÆ÷µÄ¶Ë¿Ú£¬Zookeeper »á¼àÌýÕâ¸ö¶Ë¿Ú£¬½ÓÊܿͻ§¶ËµÄ·ÃÎÊÇëÇó¡£

µ±ÕâЩÅäÖÃÏîÅäÖúúó£¬ÄãÏÖÔھͿÉÒÔÆô¶¯ Zookeeper ÁË£¬Æô¶¯ºóÒª¼ì²é Zookeeper ÊÇ·ñÒѾ­ÔÚ·þÎñ£¬¿ÉÒÔͨ¹ý netstat ¨C ano ÃüÁî²é¿´ÊÇ·ñÓÐÄãÅäÖÃµÄ clientPort ¶Ë¿ÚºÅÔÚ¼àÌý·þÎñ¡£

¼¯ÈºÄ£Ê½

Zookeeper ²»½ö¿ÉÒÔµ¥»úÌṩ·þÎñ£¬Í¬Ê±Ò²Ö§³Ö¶à»ú×é³É¼¯ÈºÀ´Ìṩ·þÎñ¡£Êµ¼ÊÉÏ Zookeeper »¹Ö§³ÖÁíÍâÒ»ÖÖα¼¯ÈºµÄ·½Ê½£¬Ò²¾ÍÊÇ¿ÉÒÔÔÚһ̨ÎïÀí»úÉÏÔËÐжà¸ö Zookeeper ʵÀý£¬ÏÂÃæ½«½éÉܼ¯ÈºÄ£Ê½µÄ°²×°ºÍÅäÖá£

Zookeeper µÄ¼¯ÈºÄ£Ê½µÄ°²×°ºÍÅäÖÃÒ²²»ÊǺܸ´ÔÓ£¬ËùÒª×öµÄ¾ÍÊÇÔö¼Ó¼¸¸öÅäÖÃÏî¡£¼¯ÈºÄ£Ê½³ýÁËÉÏÃæµÄÈý¸öÅäÖÃÏҪÔö¼ÓÏÂÃæ¼¸¸öÅäÖÃÏ

 initLimit=5
            syncLimit=2
            server.1=192.168.211.1:2888:3888
            server.2=192.168.211.2:2888:3888
            

  • initLimit£ºÕâ¸öÅäÖÃÏîÊÇÓÃÀ´ÅäÖà Zookeeper ½ÓÊܿͻ§¶Ë£¨ÕâÀïËù˵µÄ¿Í»§¶Ë²»ÊÇÓû§Á¬½Ó Zookeeper ·þÎñÆ÷µÄ¿Í»§¶Ë£¬¶øÊÇ Zookeeper ·þÎñÆ÷¼¯ÈºÖÐÁ¬½Óµ½ Leader µÄ Follower ·þÎñÆ÷£©³õʼ»¯Á¬½Óʱ×ÄÜÈÌÊܶàÉÙ¸öÐÄÌøÊ±¼ä¼ä¸ôÊý¡£µ±ÒѾ­³¬¹ý 10 ¸öÐÄÌøµÄʱ¼ä£¨Ò²¾ÍÊÇ tickTime£©³¤¶Èºó Zookeeper ·þÎñÆ÷»¹Ã»ÓÐÊÕµ½¿Í»§¶ËµÄ·µ»ØÐÅÏ¢£¬ÄÇô±íÃ÷Õâ¸ö¿Í»§¶ËÁ¬½Óʧ°Ü¡£×ܵÄʱ¼ä³¤¶È¾ÍÊÇ 5*2000=10 Ãë
  • syncLimit£ºÕâ¸öÅäÖÃÏî±êʶ Leader Óë Follower Ö®¼ä·¢ËÍÏûÏ¢£¬ÇëÇóºÍÓ¦´ðʱ¼ä³¤¶È£¬×²»Äܳ¬¹ý¶àÉÙ¸ö tickTime µÄʱ¼ä³¤¶È£¬×ܵÄʱ¼ä³¤¶È¾ÍÊÇ 2*2000=4 Ãë
  • server.A=B£ºC£ºD£ºÆäÖÐ A ÊÇÒ»¸öÊý×Ö£¬±íʾÕâ¸öÊǵڼ¸ºÅ·þÎñÆ÷£»B ÊÇÕâ¸ö·þÎñÆ÷µÄ ip µØÖ·£»C ±íʾµÄÊÇÕâ¸ö·þÎñÆ÷Ó뼯ȺÖÐµÄ Leader ·þÎñÆ÷½»»»ÐÅÏ¢µÄ¶Ë¿Ú£»D ±íʾµÄÊÇÍòÒ»¼¯ÈºÖÐµÄ Leader ·þÎñÆ÷¹ÒÁË£¬ÐèÒªÒ»¸ö¶Ë¿ÚÀ´ÖØÐ½øÐÐÑ¡¾Ù£¬Ñ¡³öÒ»¸öÐ嵀 Leader£¬¶øÕâ¸ö¶Ë¿Ú¾ÍÊÇÓÃÀ´Ö´ÐÐÑ¡¾Ùʱ·þÎñÆ÷Ï໥ͨÐŵĶ˿ڡ£Èç¹ûÊÇα¼¯ÈºµÄÅäÖ÷½Ê½£¬ÓÉÓÚ B ¶¼ÊÇÒ»Ñù£¬ËùÒÔ²»Í¬µÄ Zookeeper ʵÀýͨÐŶ˿ںŲ»ÄÜÒ»Ñù£¬ËùÒÔÒª¸øËüÃÇ·ÖÅ䲻ͬµÄ¶Ë¿ÚºÅ¡£

³ýÁËÐÞ¸Ä zoo.cfg ÅäÖÃÎļþ£¬¼¯ÈºÄ£Ê½Ï»¹ÒªÅäÖÃÒ»¸öÎļþ myid£¬Õâ¸öÎļþÔÚ dataDir Ŀ¼Ï£¬Õâ¸öÎļþÀïÃæ¾ÍÓÐÒ»¸öÊý¾Ý¾ÍÊÇ A µÄÖµ£¬Zookeeper Æô¶¯Ê±»á¶ÁÈ¡Õâ¸öÎļþ£¬Äõ½ÀïÃæµÄÊý¾ÝÓë zoo.cfg ÀïÃæµÄÅäÖÃÐÅÏ¢±È½Ï´Ó¶øÅжϵ½µ×ÊÇÄǸö server¡£

Êý¾ÝÄ£ÐÍ

Zookeeper »áά»¤Ò»¸ö¾ßÓвã´Î¹ØÏµµÄÊý¾Ý½á¹¹£¬Ëü·Ç³£ÀàËÆÓÚÒ»¸ö±ê×¼µÄÎļþϵͳ£¬Èçͼ 1 Ëùʾ£º


ͼ 1 Zookeeper Êý¾Ý½á¹¹
 

Zookeeper ÕâÖÖÊý¾Ý½á¹¹ÓÐÈçÏÂÕâÐ©ÌØµã£º

  1. ÿ¸ö×ÓĿ¼ÏîÈç NameService ¶¼±»³Æ×÷Ϊ znode£¬Õâ¸ö znode ÊDZ»ËüËùÔڵķ¾¶Î¨Ò»±êʶ£¬Èç Server1 Õâ¸ö znode µÄ±êʶΪ /NameService/Server1
  2. znode ¿ÉÒÔÓÐ×Ó½ÚµãĿ¼£¬²¢ÇÒÿ¸ö znode ¿ÉÒÔ´æ´¢Êý¾Ý£¬×¢Òâ EPHEMERAL ÀàÐ͵ÄĿ¼½Úµã²»ÄÜÓÐ×Ó½ÚµãĿ¼
  3. znode ÊÇÓа汾µÄ£¬Ã¿¸ö znode Öд洢µÄÊý¾Ý¿ÉÒÔÓжà¸ö°æ±¾£¬Ò²¾ÍÊÇÒ»¸ö·ÃÎÊ·¾¶ÖпÉÒÔ´æ´¢¶à·ÝÊý¾Ý
  4. znode ¿ÉÒÔÊÇÁÙʱ½Úµã£¬Ò»µ©´´½¨Õâ¸ö znode µÄ¿Í»§¶ËÓë·þÎñÆ÷ʧȥÁªÏµ£¬Õâ¸ö znode Ò²½«×Ô¶¯É¾³ý£¬Zookeeper µÄ¿Í»§¶ËºÍ·þÎñÆ÷ͨÐŲÉÓó¤Á¬½Ó·½Ê½£¬Ã¿¸ö¿Í»§¶ËºÍ·þÎñÆ÷ͨ¹ýÐÄÌøÀ´±£³ÖÁ¬½Ó£¬Õâ¸öÁ¬½Ó״̬³ÆÎª session£¬Èç¹û znode ÊÇÁÙʱ½Úµã£¬Õâ¸ö session ʧЧ£¬znode Ò²¾Íɾ³ýÁË
  5. znode µÄĿ¼Ãû¿ÉÒÔ×Ô¶¯±àºÅ£¬Èç App1 ÒѾ­´æÔÚ£¬ÔÙ´´½¨µÄ»°£¬½«»á×Ô¶¯ÃüÃûΪ App2
  6. znode ¿ÉÒÔ±»¼à¿Ø£¬°üÀ¨Õâ¸öĿ¼½ÚµãÖд洢µÄÊý¾ÝµÄÐ޸ģ¬×Ó½ÚµãĿ¼µÄ±ä»¯µÈ£¬Ò»µ©±ä»¯¿ÉÒÔ֪ͨÉèÖÃ¼à¿ØµÄ¿Í»§¶Ë£¬Õâ¸öÊÇ Zookeeper µÄºËÐÄÌØÐÔ£¬Zookeeper µÄºÜ¶à¹¦Äܶ¼ÊÇ»ùÓÚÕâ¸öÌØÐÔʵÏֵģ¬ºóÃæÔÚµäÐ͵ÄÓ¦Óó¡¾°ÖлáÓÐʵÀý½éÉÜ

ÈçºÎʹÓÃ

Zookeeper ×÷Ϊһ¸ö·Ö²¼Ê½µÄ·þÎñ¿ò¼Ü£¬Ö÷ÒªÓÃÀ´½â¾ö·Ö²¼Ê½¼¯ÈºÖÐÓ¦ÓÃϵͳµÄÒ»ÖÂÐÔÎÊÌ⣬ËüÄÜÌṩ»ùÓÚÀàËÆÓÚÎļþϵͳµÄĿ¼½ÚµãÊ÷·½Ê½µÄÊý¾Ý´æ´¢£¬µ«ÊÇ Zookeeper ²¢²»ÊÇÓÃÀ´×¨ÃÅ´æ´¢Êý¾ÝµÄ£¬ËüµÄ×÷ÓÃÖ÷ÒªÊÇÓÃÀ´Î¬»¤ºÍ¼à¿ØÄã´æ´¢µÄÊý¾ÝµÄ״̬±ä»¯¡£Í¨¹ý¼à¿ØÕâЩÊý¾Ý״̬µÄ±ä»¯£¬´Ó¶ø¿ÉÒÔ´ïµ½»ùÓÚÊý¾ÝµÄ¼¯Èº¹ÜÀí£¬ºóÃæ½«»áÏêϸ½éÉÜ Zookeeper Äܹ»½â¾öµÄһЩµäÐÍÎÊÌ⣬ÕâÀïÏȽéÉÜһϣ¬Zookeeper µÄ²Ù×÷½Ó¿ÚºÍ¼òµ¥Ê¹ÓÃʾÀý¡£

³£ÓýӿÚÁбí

¿Í»§¶ËÒªÁ¬½Ó Zookeeper ·þÎñÆ÷¿ÉÒÔͨ¹ý´´½¨ org.apache.zookeeper. ZooKeeper µÄÒ»¸öʵÀý¶ÔÏó£¬È»ºóµ÷ÓÃÕâ¸öÀàÌṩµÄ½Ó¿ÚÀ´ºÍ·þÎñÆ÷½»»¥¡£

Ç°ÃæËµÁË ZooKeeper Ö÷ÒªÊÇÓÃÀ´Î¬»¤ºÍ¼à¿ØÒ»¸öĿ¼½ÚµãÊ÷Öд洢µÄÊý¾ÝµÄ״̬£¬ËùÓÐÎÒÃÇÄܹ»²Ù×÷ ZooKeeper µÄÒ²ºÍ²Ù×÷Ŀ¼½ÚµãÊ÷´óÌåÒ»Ñù£¬Èç´´½¨Ò»¸öĿ¼½Úµã£¬¸øÄ³¸öĿ¼½ÚµãÉèÖÃÊý¾Ý£¬»ñȡij¸öĿ¼½ÚµãµÄËùÓÐ×ÓĿ¼½Úµã£¬¸øÄ³¸öĿ¼½ÚµãÉèÖÃȨÏÞºÍ¼à¿ØÕâ¸öĿ¼½ÚµãµÄ״̬±ä»¯¡£

ÕâЩ½Ó¿ÚÈçϱíËùʾ£º


±í 1 org.apache.zookeeper. ZooKeeper ·½·¨Áбí
·½·¨Ãû ·½·¨¹¦ÄÜÃèÊö
String create(String path, byte[] data, List<ACL> acl,CreateMode createMode) ´´½¨Ò»¸ö¸ø¶¨µÄĿ¼½Úµã path, ²¢¸øËüÉèÖÃÊý¾Ý£¬CreateMode ±êʶÓÐËÄÖÖÐÎʽµÄĿ¼½Úµã£¬·Ö±ðÊÇ PERSISTENT£º³Ö¾Ã»¯Ä¿Â¼½Úµã£¬Õâ¸öĿ¼½Úµã´æ´¢µÄÊý¾Ý²»»á¶ªÊ§£»PERSISTENT_SEQUENTIAL£ºË³Ðò×Ô¶¯±àºÅµÄĿ¼½Úµã£¬ÕâÖÖĿ¼½Úµã»á¸ù¾Ýµ±Ç°Òѽü´æÔڵĽڵãÊý×Ô¶¯¼Ó 1£¬È»ºó·µ»Ø¸ø¿Í»§¶ËÒѾ­³É¹¦´´½¨µÄĿ¼½ÚµãÃû£»EPHEMERAL£ºÁÙʱĿ¼½Úµã£¬Ò»µ©´´½¨Õâ¸ö½ÚµãµÄ¿Í»§¶ËÓë·þÎñÆ÷¶Ë¿ÚÒ²¾ÍÊÇ session ³¬Ê±£¬ÕâÖÖ½Úµã»á±»×Ô¶¯É¾³ý£»EPHEMERAL_SEQUENTIAL£ºÁÙʱ×Ô¶¯±àºÅ½Úµã
Stat exists(String path, boolean watch) ÅжÏij¸ö path ÊÇ·ñ´æÔÚ£¬²¢ÉèÖÃÊÇ·ñ¼à¿ØÕâ¸öĿ¼½Úµã£¬ÕâÀïµÄ watcher ÊÇÔÚ´´½¨ ZooKeeper ʵÀýʱָ¶¨µÄ watcher£¬exists·½·¨»¹ÓÐÒ»¸öÖØÔØ·½·¨£¬¿ÉÒÔÖ¸¶¨Ìض¨µÄ watcher
Stat exists(String path,Watcher watcher) ÖØÔØ·½·¨£¬ÕâÀï¸øÄ³¸öĿ¼½ÚµãÉèÖÃÌØ¶¨µÄ watcher£¬Watcher ÔÚ ZooKeeper ÊÇÒ»¸öºËÐŦÄÜ£¬Watcher ¿ÉÒÔ¼à¿ØÄ¿Â¼½ÚµãµÄÊý¾Ý±ä»¯ÒÔ¼°×ÓĿ¼µÄ±ä»¯£¬Ò»µ©ÕâЩ״̬·¢Éú±ä»¯£¬·þÎñÆ÷¾Í»á֪ͨËùÓÐÉèÖÃÔÚÕâ¸öĿ¼½ÚµãÉ쵀 Watcher£¬´Ó¶øÃ¿¸ö¿Í»§¶Ë¶¼ºÜ¿ìÖªµÀËüËù¹Ø×¢µÄĿ¼½ÚµãµÄ״̬·¢Éú±ä»¯£¬¶ø×ö³öÏàÓ¦µÄ·´Ó¦
void delete(String path, int version) ɾ³ý path ¶ÔÓ¦µÄĿ¼½Úµã£¬version Ϊ -1 ¿ÉÒÔÆ¥ÅäÈκΰ汾£¬Ò²¾Íɾ³ýÁËÕâ¸öĿ¼½ÚµãËùÓÐÊý¾Ý
List<String>getChildren(String path, boolean watch) »ñȡָ¶¨ path ϵÄËùÓÐ×ÓĿ¼½Úµã£¬Í¬Ñù getChildren·½·¨Ò²ÓÐÒ»¸öÖØÔØ·½·¨¿ÉÒÔÉèÖÃÌØ¶¨µÄ watcher ¼à¿Ø×Ó½ÚµãµÄ״̬
Stat setData(String path, byte[] data, int version) ¸ø path ÉèÖÃÊý¾Ý£¬¿ÉÒÔÖ¸¶¨Õâ¸öÊý¾ÝµÄ°æ±¾ºÅ£¬Èç¹û version Ϊ -1 Ôõ¿ÉÒÔÆ¥ÅäÈκΰ汾
byte[] getData(String path, boolean watch, Stat stat) »ñÈ¡Õâ¸ö path ¶ÔÓ¦µÄĿ¼½Úµã´æ´¢µÄÊý¾Ý£¬Êý¾ÝµÄ°æ±¾µÈÐÅÏ¢¿ÉÒÔͨ¹ý stat À´Ö¸¶¨£¬Í¬Ê±»¹¿ÉÒÔÉèÖÃÊÇ·ñ¼à¿ØÕâ¸öĿ¼½ÚµãÊý¾ÝµÄ״̬
voidaddAuthInfo(String scheme, byte[] auth) ¿Í»§¶Ë½«×Ô¼ºµÄÊÚȨÐÅÏ¢Ìá½»¸ø·þÎñÆ÷£¬·þÎñÆ÷½«¸ù¾ÝÕâ¸öÊÚȨÐÅÏ¢ÑéÖ¤¿Í»§¶ËµÄ·ÃÎÊȨÏÞ¡£
Stat setACL(String path,List<ACL> acl, int version) ¸øÄ³¸öĿ¼½ÚµãÖØÐÂÉèÖ÷ÃÎÊȨÏÞ£¬ÐèҪעÒâµÄÊÇ Zookeeper ÖеÄĿ¼½ÚµãȨÏÞ²»¾ßÓд«µÝÐÔ£¬¸¸Ä¿Â¼½ÚµãµÄȨÏÞ²»ÄÜ´«µÝ¸ø×ÓĿ¼½Úµã¡£Ä¿Â¼½Úµã ACL ÓÉÁ½²¿·Ö×é³É£ºperms ºÍ id¡£
Perms ÓÐ ALL¡¢READ¡¢WRITE¡¢CREATE¡¢DELETE¡¢ADMIN ¼¸ÖÖ 
¶ø id ±êʶÁË·ÃÎÊĿ¼½ÚµãµÄÉí·ÝÁÐ±í£¬Ä¬ÈÏÇé¿öÏÂÓÐÒÔÏÂÁ½ÖÖ£º
ANYONE_ID_UNSAFE = new Id("world", "anyone") ºÍ AUTH_IDS = new Id("auth", "") ·Ö±ð±íʾÈκÎÈ˶¼¿ÉÒÔ·ÃÎʺʹ´½¨ÕßÓµÓзÃÎÊȨÏÞ¡£
List<ACL>getACL(String path,Stat stat) »ñȡij¸öĿ¼½ÚµãµÄ·ÃÎÊȨÏÞÁбí

³ýÁËÒÔÉÏÕâЩÉϱíÖÐÁгöµÄ·½·¨Ö®Í⻹ÓÐÒ»Ð©ÖØÔØ·½·¨£¬Èç¶¼ÌṩÁËÒ»¸ö»Øµ÷ÀàµÄÖØÔØ·½·¨ÒÔ¼°¿ÉÒÔÉèÖÃÌØ¶¨ Watcher µÄÖØÔØ·½·¨£¬¾ßÌåµÄ·½·¨¿ÉÒԲο¼ org.apache.zookeeper. ZooKeeper ÀàµÄ API ˵Ã÷¡£

»ù±¾²Ù×÷

ÏÂÃæ¸ø³ö»ù±¾µÄ²Ù×÷ ZooKeeper µÄʾÀý´úÂ룬ÕâÑùÄã¾ÍÄÜ¶Ô ZooKeeper ÓÐÖ±¹ÛµÄÈÏʶÁË¡£ÏÂÃæµÄÇåµ¥°üÀ¨ÁË´´½¨Óë ZooKeeper ·þÎñÆ÷µÄÁ¬½ÓÒÔ¼°×î»ù±¾µÄÊý¾Ý²Ù×÷£º


Çåµ¥ 2. ZooKeeper »ù±¾µÄ²Ù×÷ʾÀý
            // ´´½¨Ò»¸öÓë·þÎñÆ÷µÄÁ¬½Ó
            ZooKeeper zk = new ZooKeeper("localhost:" + CLIENT_PORT,
            ClientBase.CONNECTION_TIMEOUT, new Watcher() {
            // ¼à¿ØËùÓб»´¥·¢µÄʼþ
            public void process(WatchedEvent event) {
            System.out.println("ÒѾ­´¥·¢ÁË" + event.getType() + "ʼþ£¡");
            }
            });
            // ´´½¨Ò»¸öĿ¼½Úµã
            zk.create("/testRootPath", "testRootData".getBytes(), Ids.OPEN_ACL_UNSAFE,
            CreateMode.PERSISTENT);
            // ´´½¨Ò»¸ö×ÓĿ¼½Úµã
            zk.create("/testRootPath/testChildPathOne", "testChildDataOne".getBytes(),
            Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
            System.out.println(new String(zk.getData("/testRootPath",false,null)));
            // È¡³ö×ÓĿ¼½ÚµãÁбí
            System.out.println(zk.getChildren("/testRootPath",true));
            // ÐÞ¸Ä×ÓĿ¼½ÚµãÊý¾Ý
            zk.setData("/testRootPath/testChildPathOne","modifyChildDataOne".getBytes(),-1);
            System.out.println("Ŀ¼½Úµã״̬£º["+zk.exists("/testRootPath",true)+"]");
            // ´´½¨ÁíÍâÒ»¸ö×ÓĿ¼½Úµã
            zk.create("/testRootPath/testChildPathTwo", "testChildDataTwo".getBytes(),
            Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
            System.out.println(new String(zk.getData("/testRootPath/testChildPathTwo",true,null)));
            // ɾ³ý×ÓĿ¼½Úµã
            zk.delete("/testRootPath/testChildPathTwo",-1);
            zk.delete("/testRootPath/testChildPathOne",-1);
            // ɾ³ý¸¸Ä¿Â¼½Úµã
            zk.delete("/testRootPath",-1);
            // ¹Ø±ÕÁ¬½Ó
            zk.close();
            

Êä³öµÄ½á¹ûÈçÏ£º

ÒѾ­´¥·¢ÁË None ʼþ£¡
            testRootData
            [testChildPathOne]
            Ŀ¼½Úµã״̬£º[5,5,1281804532336,1281804532336,0,1,0,0,12,1,6]
            ÒѾ­´¥·¢ÁË NodeChildrenChanged ʼþ£¡
            testChildDataTwo
            ÒѾ­´¥·¢ÁË NodeDeleted ʼþ£¡
            ÒѾ­´¥·¢ÁË NodeDeleted ʼþ£¡
            

µ±¶ÔĿ¼½Úµã¼à¿Ø×´Ì¬´ò¿ªÊ±£¬Ò»µ©Ä¿Â¼½ÚµãµÄ״̬·¢Éú±ä»¯£¬Watcher ¶ÔÏóµÄ process ·½·¨¾Í»á±»µ÷Óá£

ZooKeeper µäÐ͵ÄÓ¦Óó¡¾°

Zookeeper ´ÓÉè¼ÆÄ£Ê½½Ç¶ÈÀ´¿´£¬ÊÇÒ»¸ö»ùÓÚ¹Û²ìÕßģʽÉè¼ÆµÄ·Ö²¼Ê½·þÎñ¹ÜÀí¿ò¼Ü£¬Ëü¸ºÔð´æ´¢ºÍ¹ÜÀí´ó¼Ò¶¼¹ØÐĵÄÊý¾Ý£¬È»ºó½ÓÊܹ۲ìÕßµÄ×¢²á£¬Ò»µ©ÕâЩÊý¾ÝµÄ״̬·¢Éú±ä»¯£¬Zookeeper ¾Í½«¸ºÔð֪ͨÒѾ­ÔÚ Zookeeper ÉÏ×¢²áµÄÄÇЩ¹Û²ìÕß×ö³öÏàÓ¦µÄ·´Ó¦£¬´Ó¶øÊµÏÖ¼¯ÈºÖÐÀàËÆ Master/Slave ¹ÜÀíģʽ£¬¹ØÓÚ Zookeeper µÄÏêϸ¼Ü¹¹µÈÄÚ²¿Ï¸½Ú¿ÉÒÔÔĶÁ Zookeeper µÄÔ´Âë

ÏÂÃæÏêϸ½éÉÜÕâЩµäÐ͵ÄÓ¦Óó¡¾°£¬Ò²¾ÍÊÇ Zookeeper µ½µ×ÄܰïÎÒÃǽâ¾öÄÇЩÎÊÌ⣿ÏÂÃæ½«¸ø³ö´ð°¸¡£

ͳһÃüÃû·þÎñ£¨Name Service£©

·Ö²¼Ê½Ó¦ÓÃÖУ¬Í¨³£ÐèÒªÓÐÒ»Ì×ÍêÕûµÄÃüÃû¹æÔò£¬¼ÈÄܹ»²úÉúΨһµÄÃû³ÆÓÖ±ãÓÚÈËʶ±ðºÍ¼Çס£¬Í¨³£Çé¿öÏÂÓÃÊ÷ÐεÄÃû³Æ½á¹¹ÊÇÒ»¸öÀíÏëµÄÑ¡Ôñ£¬Ê÷ÐεÄÃû³Æ½á¹¹ÊÇÒ»¸öÓвã´ÎµÄĿ¼½á¹¹£¬¼È¶ÔÈËÓѺÃÓÖ²»»áÖØ¸´¡£Ëµµ½ÕâÀïÄã¿ÉÄÜÏëµ½ÁË JNDI£¬Ã»´í Zookeeper µÄ Name Service Óë JNDI Äܹ»Íê³ÉµÄ¹¦ÄÜÊDz¶àµÄ£¬ËüÃǶ¼Êǽ«Óвã´ÎµÄĿ¼½á¹¹¹ØÁªµ½Ò»¶¨×ÊÔ´ÉÏ£¬µ«ÊÇ Zookeeper µÄ Name Service ¸ü¼ÓÊ**ã·ºÒâÒåÉϵĹØÁª£¬Ò²ÐíÄã²¢²»ÐèÒª½«Ãû³Æ¹ØÁªµ½Ìض¨×ÊÔ´ÉÏ£¬Äã¿ÉÄÜÖ»ÐèÒªÒ»¸ö²»»áÖØ¸´Ãû³Æ£¬¾ÍÏñÊý¾Ý¿âÖвúÉúÒ»¸öΨһµÄÊý×ÖÖ÷¼üÒ»Ñù¡£

Name Service ÒѾ­ÊÇ Zookeeper ÄÚÖõŦÄÜ£¬ÄãÖ»Òªµ÷Óà Zookeeper µÄ API ¾ÍÄÜʵÏÖ¡£Èçµ÷Óà create ½Ó¿Ú¾Í¿ÉÒÔºÜÈÝÒ×´´½¨Ò»¸öĿ¼½Úµã¡£

ÅäÖùÜÀí£¨Configuration Management£©

ÅäÖõĹÜÀíÔÚ·Ö²¼Ê½Ó¦Óû·¾³Öкܳ£¼û£¬ÀýÈçͬһ¸öÓ¦ÓÃϵͳÐèÒª¶ą̀ PC Server ÔËÐУ¬µ«ÊÇËüÃÇÔËÐеÄÓ¦ÓÃϵͳµÄijЩÅäÖÃÏîÊÇÏàͬµÄ£¬Èç¹ûÒªÐÞ¸ÄÕâЩÏàͬµÄÅäÖÃÏÄÇô¾Í±ØÐëͬʱÐÞ¸Äÿ̨ÔËÐÐÕâ¸öÓ¦ÓÃϵͳµÄ PC Server£¬ÕâÑù·Ç³£Âé·³¶øÇÒÈÝÒ׳ö´í¡£

ÏñÕâÑùµÄÅäÖÃÐÅÏ¢ÍêÈ«¿ÉÒÔ½»¸ø Zookeeper À´¹ÜÀí£¬½«ÅäÖÃÐÅÏ¢±£´æÔÚ Zookeeper µÄij¸öĿ¼½ÚµãÖУ¬È»ºó½«ËùÓÐÐèÒªÐ޸ĵÄÓ¦ÓûúÆ÷¼à¿ØÅäÖÃÐÅÏ¢µÄ״̬£¬Ò»µ©ÅäÖÃÐÅÏ¢·¢Éú±ä»¯£¬Ã¿Ì¨Ó¦ÓûúÆ÷¾Í»áÊÕµ½ Zookeeper µÄ֪ͨ£¬È»ºó´Ó Zookeeper »ñȡеÄÅäÖÃÐÅÏ¢Ó¦Óõ½ÏµÍ³ÖС£


ͼ 2. ÅäÖùÜÀí½á¹¹Í¼
 

¼¯Èº¹ÜÀí£¨Group Membership£©

Zookeeper Äܹ»ºÜÈÝÒ×µÄʵÏÖ¼¯Èº¹ÜÀíµÄ¹¦ÄÜ£¬ÈçÓжą̀ Server ×é³ÉÒ»¸ö·þÎñ¼¯Èº£¬ÄÇô±ØÐëÒªÒ»¸ö¡°×ܹܡ±ÖªµÀµ±Ç°¼¯ÈºÖÐÿ̨»úÆ÷µÄ·þÎñ״̬£¬Ò»µ©ÓлúÆ÷²»ÄÜÌṩ·þÎñ£¬¼¯ÈºÖÐÆäËü¼¯Èº±ØÐëÖªµÀ£¬´Ó¶ø×ö³öµ÷ÕûÖØÐ·ÖÅä·þÎñ²ßÂÔ¡£Í¬Ñùµ±Ôö¼Ó¼¯ÈºµÄ·þÎñÄÜÁ¦Ê±£¬¾Í»áÔö¼Óһ̨»ò¶ą̀ Server£¬Í¬ÑùÒ²±ØÐëÈá°×ܹܡ±ÖªµÀ¡£

Zookeeper ²»½öÄܹ»°ïÄãά»¤µ±Ç°µÄ¼¯ÈºÖлúÆ÷µÄ·þÎñ״̬£¬¶øÇÒÄܹ»°ïÄãÑ¡³öÒ»¸ö¡°×ܹܡ±£¬ÈÃÕâ¸ö×ܹÜÀ´¹ÜÀí¼¯Èº£¬Õâ¾ÍÊÇ Zookeeper µÄÁíÒ»¸ö¹¦ÄÜ Leader Election¡£

ËüÃǵÄʵÏÖ·½Ê½¶¼ÊÇÔÚ Zookeeper ÉÏ´´½¨Ò»¸ö EPHEMERAL ÀàÐ͵ÄĿ¼½Úµã£¬È»ºóÿ¸ö Server ÔÚËüÃÇ´´½¨Ä¿Â¼½ÚµãµÄ¸¸Ä¿Â¼½ÚµãÉϵ÷ÓàgetChildren(String path, boolean watch) ·½·¨²¢ÉèÖà watch Ϊ true£¬ÓÉÓÚÊÇ EPHEMERAL Ŀ¼½Úµã£¬µ±´´½¨ËüµÄ Server ËÀÈ¥£¬Õâ¸öĿ¼½ÚµãÒ²ËæÖ®±»É¾³ý£¬ËùÒÔ Children ½«»á±ä»¯£¬Õâʱ getChildrenÉ쵀 Watch ½«»á±»µ÷Óã¬ËùÒÔÆäËü Server ¾ÍÖªµÀÒѾ­ÓÐij̨ Server ËÀÈ¥ÁË¡£ÐÂÔö Server Ò²ÊÇͬÑùµÄÔ­Àí¡£

Zookeeper ÈçºÎʵÏÖ Leader Election£¬Ò²¾ÍÊÇÑ¡³öÒ»¸ö Master Server¡£ºÍÇ°ÃæµÄÒ»Ñùÿ̨ Server ´´½¨Ò»¸ö EPHEMERAL Ŀ¼½Úµã£¬²»Í¬µÄÊÇËü»¹ÊÇÒ»¸ö SEQUENTIAL Ŀ¼½Úµã£¬ËùÒÔËüÊǸö EPHEMERAL_SEQUENTIAL Ŀ¼½Úµã¡£Ö®ËùÒÔËüÊÇ EPHEMERAL_SEQUENTIAL Ŀ¼½Úµã£¬ÊÇÒòΪÎÒÃÇ¿ÉÒÔ¸øÃ¿Ì¨ Server ±àºÅ£¬ÎÒÃÇ¿ÉÒÔÑ¡Ôñµ±Ç°ÊÇ×îС±àºÅµÄ Server Ϊ Master£¬¼ÙÈçÕâ¸ö×îС±àºÅµÄ Server ËÀÈ¥£¬ÓÉÓÚÊÇ EPHEMERAL ½Úµã£¬ËÀÈ¥µÄ Server ¶ÔÓ¦µÄ½ÚµãÒ²±»É¾³ý£¬ËùÒÔµ±Ç°µÄ½ÚµãÁбíÖÐÓÖ³öÏÖÒ»¸ö×îС±àºÅµÄ½Úµã£¬ÎÒÃǾÍÑ¡ÔñÕâ¸ö½ÚµãΪµ±Ç° Master¡£ÕâÑù¾ÍʵÏÖÁ˶¯Ì¬Ñ¡Ôñ Master£¬±ÜÃâÁË´«Í³ÒâÒåÉϵ¥ Master ÈÝÒ׳öÏÖµ¥µã¹ÊÕϵÄÎÊÌâ¡£


ͼ 3. ¼¯Èº¹ÜÀí½á¹¹Í¼
 

Õⲿ·ÖµÄʾÀý´úÂëÈçÏ£¬ÍêÕûµÄ´úÂëÇë¿´¸½¼þ£º


Çåµ¥ 3. Leader Election ¹Ø¼ü´úÂë
            void findLeader() throws InterruptedException {
            byte[] leader = null;
            try {
            leader = zk.getData(root + "/leader", true, null);
            } catch (Exception e) {
            logger.error(e);
            }
            if (leader != null) {
            following();
            } else {
            String newLeader = null;
            try {
            byte[] localhost = InetAddress.getLocalHost().getAddress();
            newLeader = zk.create(root + "/leader", localhost,
            ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
            } catch (Exception e) {
            logger.error(e);
            }
            if (newLeader != null) {
            leading();
            } else {
            mutex.wait();
            }
            }
            }
            

¹²ÏíËø£¨Locks£©

¹²ÏíËøÔÚͬһ¸ö½ø³ÌÖкÜÈÝÒ×ʵÏÖ£¬µ«ÊÇÔÚ¿ç½ø³Ì»òÕßÔÚ²»Í¬ Server Ö®¼ä¾Í²»ºÃʵÏÖÁË¡£Zookeeper È´ºÜÈÝÒ×ʵÏÖÕâ¸ö¹¦ÄÜ£¬ÊµÏÖ·½Ê½Ò²ÊÇÐèÒª»ñµÃËøµÄ Server ´´½¨Ò»¸ö EPHEMERAL_SEQUENTIAL Ŀ¼½Úµã£¬È»ºóµ÷ÓàgetChildren·½·¨»ñÈ¡µ±Ç°µÄĿ¼½ÚµãÁбíÖÐ×îСµÄĿ¼½ÚµãÊDz»ÊǾÍÊÇ×Ô¼º´´½¨µÄĿ¼½Úµã£¬Èç¹ûÕýÊÇ×Ô¼º´´½¨µÄ£¬ÄÇôËü¾Í»ñµÃÁËÕâ¸öËø£¬Èç¹û²»ÊÇÄÇôËü¾Íµ÷ÓÃexists(String path, boolean watch) ·½·¨²¢¼à¿Ø Zookeeper ÉÏĿ¼½ÚµãÁбíµÄ±ä»¯£¬Ò»Ö±µ½×Ô¼º´´½¨µÄ½ÚµãÊÇÁбíÖÐ×îС±àºÅµÄĿ¼½Úµã£¬´Ó¶ø»ñµÃËø£¬ÊÍ·ÅËøºÜ¼òµ¥£¬Ö»ÒªÉ¾³ýÇ°ÃæËü×Ô¼ºËù´´½¨µÄĿ¼½Úµã¾ÍÐÐÁË¡£


ͼ 4. Zookeeper ʵÏÖ Locks µÄÁ÷³Ìͼ
 

ͬ²½ËøµÄʵÏÖ´úÂëÈçÏ£¬ÍêÕûµÄ´úÂëÇë¿´¸½¼þ£º


Çåµ¥ 4. ͬ²½ËøµÄ¹Ø¼ü´úÂë
            void getLock() throws KeeperException, InterruptedException{
            List<String> list = zk.getChildren(root, false);
            String[] nodes = list.toArray(new String[list.size()]);
            Arrays.sort(nodes);
            if(myZnode.equals(root+"/"+nodes[0])){
            doAction();
            }
            else{
            waitForLock(nodes[0]);
            }
            }
            void waitForLock(String lower) throws InterruptedException, KeeperException {
            Stat stat = zk.exists(root + "/" + lower,true);
            if(stat != null){
            mutex.wait();
            }
            else{
            getLock();
            }
            }
            

¶ÓÁйÜÀí

Zookeeper ¿ÉÒÔ´¦ÀíÁ½ÖÖÀàÐ͵ĶÓÁУº

  1. µ±Ò»¸ö¶ÓÁеijÉÔ±¶¼¾ÛÆëʱ£¬Õâ¸ö¶ÓÁвſÉÓ㬷ñÔòÒ»Ö±µÈ´ýËùÓгÉÔ±µ½´ï£¬ÕâÖÖÊÇͬ²½¶ÓÁС£
  2. ¶ÓÁа´ÕÕ FIFO ·½Ê½½øÐÐÈë¶ÓºÍ³ö¶Ó²Ù×÷£¬ÀýÈçʵÏÖÉú²úÕߺÍÏû·ÑÕßÄ£ÐÍ¡£

ͬ²½¶ÓÁÐÓà Zookeeper ʵÏÖµÄʵÏÖ˼·ÈçÏ£º

´´½¨Ò»¸ö¸¸Ä¿Â¼ /synchronizing£¬Ã¿¸ö³ÉÔ±¶¼¼à¿Ø±êÖ¾£¨Set Watch£©Î»Ä¿Â¼ /synchronizing/start ÊÇ·ñ´æÔÚ£¬È»ºóÿ¸ö³ÉÔ±¶¼¼ÓÈëÕâ¸ö¶ÓÁУ¬¼ÓÈë¶ÓÁеķ½Ê½¾ÍÊÇ´´½¨ /synchronizing/member_i µÄÁÙʱĿ¼½Úµã£¬È»ºóÿ¸ö³ÉÔ±»ñÈ¡ / synchronizing Ŀ¼µÄËùÓÐĿ¼½Úµã£¬Ò²¾ÍÊÇ member_i¡£ÅÐ¶Ï i µÄÖµÊÇ·ñÒѾ­ÊdzÉÔ±µÄ¸öÊý£¬Èç¹ûСÓÚ³ÉÔ±¸öÊýµÈ´ý /synchronizing/start µÄ³öÏÖ£¬Èç¹ûÒѾ­ÏàµÈ¾Í´´½¨ /synchronizing/start¡£

ÓÃÏÂÃæµÄÁ÷³Ìͼ¸üÈÝÒ×Àí½â£º


ͼ 5. ͬ²½¶ÓÁÐÁ÷³Ìͼ
 

ͬ²½¶ÓÁеĹؼü´úÂëÈçÏ£¬ÍêÕûµÄ´úÂëÇë¿´¸½¼þ£º


Çåµ¥ 5. ͬ²½¶ÓÁÐ
            void addQueue() throws KeeperException, InterruptedException{
            zk.exists(root + "/start",true);
            zk.create(root + "/" + name, new byte[0], Ids.OPEN_ACL_UNSAFE,
            CreateMode.EPHEMERAL_SEQUENTIAL);
            synchronized (mutex) {
            List<String> list = zk.getChildren(root, false);
            if (list.size() < size) {
            mutex.wait();
            } else {
            zk.create(root + "/start", new byte[0], Ids.OPEN_ACL_UNSAFE,
            CreateMode.PERSISTENT);
            }
            }
            }
            

µ±¶ÓÁÐûÂúÊǽøÈë wait()£¬È»ºó»áÒ»Ö±µÈ´ý Watch µÄ֪ͨ£¬Watch µÄ´úÂëÈçÏ£º

 public void process(WatchedEvent event) {
            if(event.getPath().equals(root + "/start") &&
            event.getType() == Event.EventType.NodeCreated){
            System.out.println("µÃµ½Í¨Öª");
            super.process(event);
            doAction();
            }
            }
            

FIFO ¶ÓÁÐÓà Zookeeper ʵÏÖ˼·ÈçÏ£º

ʵÏÖµÄ˼·Ҳ·Ç³£¼òµ¥£¬¾ÍÊÇÔÚÌØ¶¨µÄĿ¼Ï´´½¨ SEQUENTIAL ÀàÐ͵Ä×ÓĿ¼ /queue_i£¬ÕâÑù¾ÍÄܱ£Ö¤ËùÓгÉÔ±¼ÓÈë¶ÓÁÐʱ¶¼ÊÇÓбàºÅµÄ£¬³ö¶ÓÁÐʱͨ¹ý getChildren( ) ·½·¨¿ÉÒÔ·µ»Øµ±Ç°ËùÓеĶÓÁÐÖеÄÔªËØ£¬È»ºóÏû·ÑÆäÖÐ×îСµÄÒ»¸ö£¬ÕâÑù¾ÍÄܱ£Ö¤ FIFO¡£

ÏÂÃæÊÇÉú²úÕߺÍÏû·ÑÕßÕâÖÖ¶ÓÁÐÐÎʽµÄʾÀý´úÂ룬ÍêÕûµÄ´úÂëÇë¿´¸½¼þ£º


Çåµ¥ 6. Éú²úÕß´úÂë
            boolean produce(int i) throws KeeperException, InterruptedException{
            ByteBuffer b = ByteBuffer.allocate(4);
            byte[] value;
            b.putInt(i);
            value = b.array();
            zk.create(root + "/element", value, ZooDefs.Ids.OPEN_ACL_UNSAFE,
            CreateMode.PERSISTENT_SEQUENTIAL);
            return true;
            }
            


Çåµ¥ 7. Ïû·ÑÕß´úÂë
            int consume() throws KeeperException, InterruptedException{
            int retvalue = -1;
            Stat stat = null;
            while (true) {
            synchronized (mutex) {
            List<String> list = zk.getChildren(root, true);
            if (list.size() == 0) {
            mutex.wait();
            } else {
            Integer min = new Integer(list.get(0).substring(7));
            for(String s : list){
            Integer tempValue = new Integer(s.substring(7));
            if(tempValue < min) min = tempValue;
            }
            byte[] b = zk.getData(root + "/element" + min,false, stat);
            zk.delete(root + "/element" + min, 0);
            ByteBuffer buffer = ByteBuffer.wrap(b);
            retvalue = buffer.getInt();
            return retvalue;
            }
            }
            }
            }
            

×ܽá

Zookeeper ×÷Ϊ Hadoop ÏîÄ¿ÖеÄÒ»¸ö×ÓÏîÄ¿£¬ÊÇ Hadoop ¼¯Èº¹ÜÀíµÄÒ»¸ö±Ø²»¿ÉÉÙµÄÄ£¿é£¬ËüÖ÷ÒªÓÃÀ´¿ØÖƼ¯ÈºÖеÄÊý¾Ý£¬ÈçËü¹ÜÀí Hadoop ¼¯ÈºÖÐµÄ NameNode£¬»¹ÓÐ Hbase ÖÐ Master Election¡¢Server Ö®¼ä״̬ͬ²½µÈ¡£

±¾ÎĽéÉÜµÄ Zookeeper µÄ»ù±¾ÖªÊ¶£¬ÒÔ¼°½éÉÜÁ˼¸¸öµäÐ͵ÄÓ¦Óó¡¾°¡£ÕâЩ¶¼ÊÇ Zookeeper µÄ»ù±¾¹¦ÄÜ£¬×îÖØÒªµÄÊÇ Zoopkeeper ÌṩÁËÒ»Ì׺ܺõķֲ¼Ê½¼¯Èº¹ÜÀíµÄ»úÖÆ£¬¾ÍÊÇËüÕâÖÖ»ùÓÚ²ã´ÎÐ͵ÄĿ¼Ê÷µÄÊý¾Ý½á¹¹£¬²¢¶ÔÊ÷ÖÐµÄ½Úµã½øÐÐÓÐЧ¹ÜÀí£¬´Ó¶ø¿ÉÒÔÉè¼Æ³ö¶àÖÖ¶àÑùµÄ·Ö²¼Ê½µÄÊý¾Ý¹ÜÀíÄ£ÐÍ£¬¶ø²»½ö½ö¾ÖÏÞÓÚÉÏÃæÌáµ½µÄ¼¸¸ö³£ÓÃÓ¦Óó¡¾°¡£


http://jarit.iteye.com/blog/1058171

ÆäËü²Î¿¼£º

http://varsoft.iteye.com/blog/873569

http://www.iteye.com/topic/365111

 
 
  • ±êÇ©£ºZookeeper 
  • ·¢±íÆÀÂÛ£º
    ÔØÈëÖС£¡£¡£

     
     
     

    ÃÎÏè¶ùÍøÕ¾ ÃηÉÏèµÄµØ·½ http://www.dreamflier.net
    ÖлªÈËÃñ¹²ºÍ¹úÐÅÏ¢²úÒµ²¿TCP/IPϵͳ ±¸°¸ÐòºÅ£ºÁÉICP±¸09000550ºÅ

    Powered by Oblog.