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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
CoreOS ʵս£ºÆÊÎö etcd
 
×÷Õߣº¹ðÑô À´Ô´£ºinfoq ·¢²¼ÓÚ 2015-1-20
  2393  次浏览      50
 

¡¾±àÕß°´¡¿CoreOSÊÇÒ»¸ö»ùÓÚDockerµÄÇáÁ¿¼¶ÈÝÆ÷»¯Linux·¢Ðа棬רΪ´óÐÍÊý¾ÝÖÐÐĶøÉè¼Æ£¬Ö¼ÔÚͨ¹ýÇáÁ¿µÄϵͳ¼Ü¹¹ºÍÁé»îµÄÓ¦ÓóÌÐò²¿ÊðÄÜÁ¦¼ò»¯Êý¾ÝÖÐÐĵÄά»¤³É±¾ºÍ¸´ÔÓ¶È¡£

CoreOS×÷ΪDockerÉú̬ȦÖеÄÖØÒªÒ»Ô±£¬ÈÕÒæµÃµ½¸÷´óÔÆ·þÎñÉ̵ÄÖØÊÓ£¬Ä¿Ç°ÒѾ­Íê³ÉÁËAÂÖÈÚ×Ê£¬·¢Õ¹·çÍ·Õý¾¢¡£

1. ¸ÅÊö

etcd ÊÇÒ»¸öÓ¦ÓÃÔÚ·Ö²¼Ê½»·¾³Ï嵀 key/value ´æ´¢·þÎñ¡£ÀûÓà etcd µÄÌØÐÔ£¬Ó¦ÓóÌÐò¿ÉÒÔÔÚ¼¯ÈºÖй²ÏíÐÅÏ¢¡¢ÅäÖûò×÷·þÎñ·¢ÏÖ£¬

etcd »áÔÚ¼¯ÈºµÄ¸÷¸ö½ÚµãÖи´ÖÆÕâЩÊý¾Ý²¢±£Ö¤ÕâЩÊý¾ÝʼÖÕÕýÈ·¡£etcd ÎÞÂÛÊÇÔÚ CoreOS »¹ÊÇ Kubernetes ÌåϵÖж¼ÊDz»¿É»òȱµÄÒ»»·¡£

±ÊÕßÓÉÓÚÏîÄ¿µÄÔ­Òò¶Ô etcd ½øÐÐÁËһЩÁ˽⣬ҲÒѾ­Ê¹ÓÃÁËÒ»¶Îʱ¼ä¡£Í¬Ê±ÔÚÓëͬÐеĽ»Á÷Öг£±»Îʵ½ etcd ÊÇʲô¡¢Óë ZooKeeper ÓÐʲô²»Í¬¡£

ÄÇô½è×Å etcd 0.5.0 ¼´½«·¢²¼µÄ»ú»á£¬Ïò¸ÐÐËȤµÄ¶ÁÕß½éÉÜһϠetcd£¬Ï£Íû¿ÉÒÔ°ïÖú¶ÁÕßÁ˽â etcd µÄ¹¤×÷Ô­ÀíÒÔ¼°¾ßÌåʵÏÖ£¬Í¬Ê±Ò²×÷Ϊ CoreOS ʵսµÄµÚ¶þ²¿·ÖÄÚÈÝΪºóÃæÏà¹ØµÄ²¿·Ö½øÐÐÆÌµæ¡£

Ëæ×Å etcd 0.5.0 alpha £¨±¾ÎÄÍê¸åʱΪ etcd 0.5.0 alpha.3£©°æ·¢²¼£¬etcd ½«ÔÚδÀ´¼¸ÖÜÄÚÓ­À´Ò»´ÎÖØÒªµÄ¸üС£

ÔÚ 0.5.0 °æÀï³ýÁËÐÞ¸´ÏÖÓÐÎȶ¨°æÖеÄһϵÁÐ Bug Ö®Í⣬һЩеÄÌØÐԺͱä¸üÒ²½«ËæÖ®·¢²¼¡£ÕâЩ±ä»¯½«ÌáÉý etcd ·þÎñ°²È«ÐÔ¡¢¿É¿¿ÐԺͿÉά»¤ÐÔ¡£

еÄÌØÐÔ°üÀ¨

1.¹æ·¶´Ê»ã±í£»

2.Ð嵀 raft Ë㷨ʵÏÖ£»

3.ÐÂÔö etcd node Éí·Ý±ê¼Ç£»

4.WAL (Write-ahead logging) Ôö¼Ó CRC УÑ飻

5.API ÖÐÐÂÔö member {list, add, remove} ½Ó¿Ú£¬Ô­À´µÄ list machines ½Ó¿Ú½«±»ÒƳý£¬Î´À´ etcd ¼¯ÈºÖн«²»´æÔÚ machine µÄ³Æºô£»

6.Á½¸öÖ÷Òª¶Ë¿Ú±ä¸üΪ 2379 (for client) Óë 2380 (for peer/raft) ²¢³ÉΪ IANA µÄ×¢²á¶Ë¿Ú¡£

ÖØÒªµÄ±ä¸ü°üÀ¨

1.ÔËÐÐÊ±ÖØ¹¹ (runtime reconfiguration)¡£Óû§²»ÐèÒªÖØÆô etcd ·þÎñ¼´¿ÉʵÏÖ¶Ô etcd ¼¯Èº½á¹¹½øÐбä¸ü¡£

2.ÞðÆúͨ¹ýÅäÖÃÎļþÅäÖà etcd ÊôÐԵķ½Ê½£¬×ª¶øÒÔ CLI (command-line interface) flags »ò»·¾³±äÁ¿µÄ·½Ê½ÊµÏÖ etcd ½ÚµãµÄÅäÖá£

3.ÿ¸ö½Úµã¿É¼àÌý¶à¸ö¹ã²¥µØÖ·¡£¼àÌýµÄµØÖ·ÓÉÔ­À´µÄÒ»¸öÀ©Õ¹µ½¶à¸ö£¬Óû§¿ÉÒÔ¸ù¾ÝÐèÇóʵÏÖ¸ü¼Ó¸´Ôӵļ¯Èº»·¾³£¬Èç´î½¨Ò»¸ö»ìºÏÁË˽ÓÐÔÆÓ빫ÓÐÔÆ·þÎñµÄ etcd ¼¯Èº¡£

4.ÐÂÔö proxy mode¡£

2. ¹æ·¶´Ê»ã±í

etcd 0.5.0 °æÊ×´Î¶Ô etcd ´úÂë¡¢Îĵµ¼° CLI ÖÐʹÓõÄÊõÓï½øÐÐÁ˶¨Òå¡£

2.1. node

node Ö¸Ò»¸ö raft ״̬»úʵÀý¡£Ã¿¸ö node ¶¼¾ßÓÐΨһµÄ±êʶ£¬²¢ÔÚ´¦ÓÚ leader ״̬ʱ¼Ç¼ÆäËü½ÚµãµÄ²½½øÊý¡£

2.2. member

member Ö¸Ò»¸ö etcd ʵÀý¡£member ÔËÐÐÔÚÿ¸ö node ÉÏ£¬²¢ÏòÕâÒ» node ÉÏµÄÆäËüÓ¦ÓóÌÐòÌṩ·þÎñ¡£

2.3. Cluster

Cluster Óɶà¸ö member ×é³É¡£Ã¿¸ö member ÖÐµÄ node ×ñÑ­ raft ¹²Ê¶Ð­ÒéÀ´¸´ÖÆÈÕÖ¾¡£Cluster ½ÓÊÕÀ´×Ô member µÄÌá°¸ÏûÏ¢£¬½«ÆäÌá½»²¢´æ´¢ÓÚ±¾µØ´ÅÅÌ¡£

2.4. Peer

ͬһ Cluster ÖÐµÄÆäËü member¡£

2.5. Client

Client Ö¸µ÷Óà Cluster API µÄ¶ÔÏó¡£

3. Raft ¹²Ê¶Ëã·¨

etcd ¼¯ÈºµÄ¹¤×÷Ô­Àí»ùÓÚ raft ¹²Ê¶Ëã·¨ (The Raft Consensus Algorithm)¡£

etcd ÔÚ 0.5.0 °æ±¾ÖÐÖØÐÂʵÏÖÁË raft Ëã·¨£¬¶ø·ÇÏñ֮ǰÄÇÑùÒÀÀµÓÚµÚÈý·½¿â go-raft ¡£

raft ¹²Ê¶Ëã·¨µÄÓŵãÔÚÓÚ¿ÉÒÔÔÚ¸ßЧµÄ½â¾ö·Ö²¼Ê½ÏµÍ³Öи÷¸ö½ÚµãÈÕÖ¾ÄÚÈÝÒ»ÖÂÐÔÎÊÌâµÄͬʱ£¬Ò²Ê¹µÃ¼¯Èº¾ß±¸Ò»¶¨µÄÈÝ´íÄÜÁ¦¡£

¼´Ê¹¼¯ÈºÖгöÏÖ²¿·Ö½Úµã¹ÊÕÏ¡¢ÍøÂç¹ÊÕϵÈÎÊÌ⣬ÈԿɱ£Ö¤ÆäÓà´ó¶àÊý½ÚµãÕýÈ·µÄ²½½ø¡£

ÉõÖÁµ±¸ü¶àµÄ½Úµã£¨Ò»°ãÀ´Ëµ³¬¹ý¼¯Èº½Úµã×ÜÊýµÄÒ»°ë£©³öÏÖ¹ÊÕ϶øµ¼Ö¼¯Èº²»¿ÉÓÃʱ£¬ÒÀÈ»¿ÉÒÔ±£Ö¤½ÚµãÖеÄÊý¾Ý²»»á³öÏÖ´íÎóµÄ½á¹û¡£

3.1. ¼¯Èº½¨Á¢Óë״̬»ú

raft ¼¯ÈºÖеÄÿ¸ö½Úµã¶¼¿ÉÒÔ¸ù¾Ý¼¯ÈºÔËÐеÄÇé¿öÔÚÈýÖÖ״̬¼äÇл»£ºfollower, candidate Óë leader¡£leader Ïò follower ͬ²½ÈÕÖ¾£¬follower Ö»´Ó leader ´¦»ñÈ¡ÈÕÖ¾¡£

ÔÚ½Úµã³õʼÆô¶¯Ê±£¬½ÚµãµÄ raft ״̬»ú½«´¦ÓÚ follower ״̬²¢±»É趨һ¸ö election timeout£¬Èç¹ûÔÚÕâһʱ¼äÖÜÆÚÄÚûÓÐÊÕµ½À´×Ô leader µÄ heartbeat£¬

½Úµã½«·¢ÆðÑ¡¾Ù£º½ÚµãÔÚ½«×Ô¼ºµÄ״̬Çл»Îª candidate Ö®ºó£¬Ïò¼¯ÈºÖÐÆäËü follower ½Úµã·¢ËÍÇëÇó£¬Ñ¯ÎÊÆäÊÇ·ñÑ¡¾Ù×Ô¼º³ÉΪ leader¡£

µ±ÊÕµ½À´×Ô¼¯ÈºÖйý°ëÊý½ÚµãµÄ½ÓÊÜͶƱºó£¬½Úµã¼´³ÉΪ leader£¬¿ªÊ¼½ÓÊÕ±£´æ client µÄÊý¾Ý²¢ÏòÆäËüµÄ follower ½Úµãͬ²½ÈÕÖ¾¡£

leader ½ÚµãÒÀ¿¿¶¨Ê±Ïò follower ·¢ËÍ heartbeat À´±£³ÖÆäµØÎ»¡£

ÈκÎʱºòÈç¹ûÆäËü follower ÔÚ election timeout ÆÚ¼ä¶¼Ã»ÓÐÊÕµ½À´×Ô leader µÄ heartbeat£¬Í¬Ñù»á½«×Ô¼ºµÄ״̬Çл»Îª candidate ²¢·¢ÆðÑ¡¾Ù¡£

ÿ³É¹¦Ñ¡¾ÙÒ»´Î£¬Ð leader µÄ²½½øÊý¶¼»á±È֮ǰ leader µÄ²½½øÊý´ó1¡£

ͼ 3-1 raft ״̬Çл»Ê¾Òâͼ

3.2. Ñ¡¾Ù

3.2.1. Ò»¸ö candidate ³ÉΪ leader ÐèÒª¾ß±¸Èý¸öÒªËØ£º

  • »ñµÃ¼¯Èº¶àÊý½ÚµãµÄͬÒ⣻
  • ¼¯ÈºÖв»´æÔÚ±È×Ô¼º²½½øÊý¸ü¸ßµÄ candidate£»
  • ¼¯ÈºÖв»´æÔÚÆäËû leader¡£

3.2.2. ÏÂÃæÎªÒ»¸ö etcd ¼¯ÈºÑ¡¾Ù¹ý³ÌµÄ¼òµ¥ÃèÊö£º

1.³õʼ״̬ϼ¯ÈºÖеÄËùÓнڵ㶼´¦ÓÚ follower ״̬¡£

2.ijһʱ¿Ì£¬ÆäÖеÄÒ»¸ö follower ÓÉÓÚûÓÐÊÕµ½ leader µÄ heartbeat ÂÊÏÈ·¢Éú election timeout ½ø¶ø·¢ÆðÑ¡¾Ù¡£

3.Ö»Òª¼¯ÈºÖг¬¹ý°ëÊýµÄ½Úµã½ÓÊÜͶƱ£¬candidate ½Úµã½«³ÉΪ¼´Çл» leader ״̬¡£

4.³ÉΪ leader ½ÚµãÖ®ºó£¬leader ½«¶¨Ê±Ïò follower ½Úµãͬ²½ÈÕÖ¾²¢·¢ËÍ heartbeat¡£

3.3. ½ÚµãÒì³£

¼¯ÈºÖи÷¸ö½ÚµãµÄ×´Ì¬ËæÊ±¶¼ÓпÉÄÜ·¢Éú±ä»¯¡£´Óʵ¼ÊµÄ±ä»¯ÉÏÀ´·ÖÀàµÄ»°£¬½ÚµãµÄÒì³£´óÖ¿ÉÒÔ·ÖΪËÄÖÖÀàÐÍ£º

  • leader ²»¿ÉÓã»
  • follower ²»¿ÉÓã»
  • ¶à¸ö candidate »ò¶à¸ö leader£»
  • нڵã¼ÓÈ뼯Ⱥ¡£

3.3.1. leader ²»¿ÉÓÃ

ÏÂÃæ½«ËµÃ÷µ±¼¯ÈºÖÐµÄ leader ½Úµã²»¿ÉÓÃʱ£¬raft ¼¯ÈºÊÇÈçºÎÓ¦¶ÔµÄ¡£

1.Ò»°ãÇé¿öÏ£¬leader ½Úµã¶¨Ê±·¢ËÍ heartbeat µ½ follower ½Úµã¡£

2.ÓÉÓÚijЩÒì³£µ¼Ö leader ²»ÔÙ·¢ËÍ heartbeat £¬»ò follower ÎÞ·¨ÊÕµ½ heartbeat ¡£

3.µ±Ä³Ò» follower ·¢Éú election timeout ʱ£¬Æä״̬±ä¸üΪ candidate£¬²¢ÏòÆäËû follower ·¢ÆðͶƱ¡£

4.µ±³¬¹ý°ëÊýµÄ follower ½ÓÊÜͶƱºó£¬ÕâÒ»½Úµã½«³ÉΪÐ嵀 leader£¬leader µÄ²½½øÊý¼Ó1²¢¿ªÊ¼Ïò follower ͬ²½ÈÕÖ¾¡£

5.µ±Ò»¶Îʱ¼äÖ®ºó£¬Èç¹û֮ǰµÄ leader ÔٴμÓÈ뼯Ⱥ£¬ÔòÁ½¸ö leader ±È½Ï±Ë´ËµÄ²½½øÊý£¬²½½øÊýµÍµÄ leader ½«Çл»×Ô¼ºµÄ״̬Ϊ follower¡£

6.½ÏÔçǰ leader Öв»Ò»ÖµÄÈÕÖ¾½«±»Çå³ý£¬²¢ÓëÏÖÓÐ leader ÖеÄÈÕÖ¾±£³ÖÒ»Ö¡£

3.3.2. follower ½Úµã²»¿ÉÓÃ

follower ½Úµã²»¿ÉÓõÄÇé¿öÏà¶ÔÈÝÒ×½â¾ö¡£ÒòΪ¼¯ÈºÖеÄÈÕÖ¾ÄÚÈÝʼÖÕÊÇ´Ó leader ½Úµãͬ²½µÄ£¬Ö»ÒªÕâÒ»½ÚµãÔٴμÓÈë¼¯ÈºÊ±ÖØÐÂ´Ó leader ½Úµã´¦¸´ÖÆÈÕÖ¾¼´¿É¡£

1.¼¯ÈºÖеÄij¸ö follower ½Úµã·¢ÉúÒì³££¬²»ÔÙͬ²½ÈÕÖ¾ÒÔ¼°½ÓÊÕ heartbeat¡£

2. ¾­¹ýÒ»¶Îʱ¼äÖ®ºó£¬Ô­À´µÄ follower ½ÚµãÖØÐ¼ÓÈ뼯Ⱥ¡£

3.ÕâÒ»½ÚµãµÄÈÕÖ¾½«´Óµ±Ê±µÄ leader ´¦Í¬²½¡£

3.3.3. ¶à¸ö candidate »ò¶à¸ö leader

ÔÚ¼¯ÈºÖгöÏÖ¶à¸ö candidate »ò¶à¸ö leader ͨ³£ÊÇÓÉÓÚÊý¾Ý´«Êä²»³©Ôì³ÉµÄ¡£³öÏÖ¶à¸ö leader µÄÇé¿öÏà¶ÔÉÙ¼û£¬µ«¶à¸ö candidate ±È½ÏÈÝÒ׳öÏÖÔÚ¼¯Èº½ÚµãÆô¶¯³õÆÚÉÐδѡ³ö leader µÄ“»ìãç”ʱÆÚ¡£

1.³õʼ״̬ϼ¯ÈºÖеÄËùÓнڵ㶼´¦ÓÚ follower ״̬¡£

2.Á½¸ö½Úµãͬʱ³ÉΪ candidate ·¢ÆðÑ¡¾Ù¡£

3.Á½¸ö candidate ¶¼Ö»µÃµ½ÁËÉÙ²¿·Ö follower µÄ½ÓÊÜͶƱ¡£

4.candidate ¼ÌÐøÏòÆäËûµÄ follower ѯÎÊ¡£

5.ÓÉÓÚһЩ follower ÒѾ­Í¶¹ýƱÁË£¬ËùÒÔ¾ù·µ»Ø¾Ü¾ø½ÓÊÜ¡£

6.candidate Ò²¿ÉÄÜÏòÒ»¸ö candidate ѯÎÊͶƱ¡£

7.ÔÚ²½½øÊýÏàͬµÄÇé¿öÏ£¬candidate ½«¾Ü¾ø½ÓÊÜÁíÒ»¸ö candidate µÄÇëÇó¡£

8.ÓÉÓÚµÚÒ»´Îδѡ³ö leader£¬candidate ½«Ëæ»úÑ¡ÔñÒ»¸öµÈ´ý¼ä¸ô£¨150ms ~ 300ms£©Ôٴη¢ÆðͶƱ¡£

9.Èç¹ûµÃµ½¼¯ÈºÖаëÊýÒÔÉ쵀 follower µÄ½ÓÊÜ£¬ÕâÒ» candidate ½«³ÉΪ leader¡£

10.ÉÔºóÁíÒ»¸ö candidate Ò²½«Ôٴη¢ÆðͶƱ¡£

11.ÓÉÓÚ¼¯ÈºÖÐÒѾ­Ñ¡³ö leader£¬candidate ½«ÊÕµ½¾Ü¾ø½ÓÊܵÄͶƱ¡£

12.ÔÚ±»¶àÊý½Úµã¾Ü¾øÖ®ºó£¬²¢ÒÑÖª¼¯ÈºÖÐÒÑ´æÔÚ leader ºó£¬ÕâÒ» candidate ½Úµã½«ÖÕֹͶƱÇëÇó¡¢Çл»Îª follower£¬´Ó leader ½Úµãͬ²½ÈÕÖ¾¡£

3.4. ÈÕÖ¾

3.4.1. ¸´ÖÆ

ÔÚ raft ¼¯ÈºÖУ¬ËùÓÐÈÕÖ¾¶¼±ØÐëÊ×ÏÈÌá½»ÖÁ leader ½Úµã¡£leader ÔÚÿ¸ö heartbeat Ïò follower ͬ²½ÈÕÖ¾£¬follower ÔÚÊÕµ½ÈÕÖ¾Ö®ºóÏò leader ·´À¡½á¹û£¬leader ÔÚÈ·ÈÏÈÕÖ¾ÄÚÈÝÕýÈ·Ö®ºó½«´ËÌõÄ¿Ìá½»²¢´æ´¢ÓÚ±¾µØ´ÅÅÌ¡£

1.Ê×ÏÈÓÐÒ»Ìõ uncommitted µÄÈÕÖ¾ÌõÄ¿Ìá½»ÖÁ leader ½Úµã¡£

2.ÔÚÏÂÒ»¸ö heartbeat£¬leader ½«´ËÌõÄ¿¸´ÖƸøËùÓÐµÄ follower¡£

3.µ±´ó¶àÊý½Úµã¼Ç¼´ËÌõĿ֮ºó£¬leader ½ÚµãÈ϶¨´ËÌõÄ¿ÓÐЧ£¬½«´ËÌõÄ¿É趨ΪÒÑÌá½»²¢´æ´¢ÓÚ±¾µØ´ÅÅÌ¡£

4.ÔÚÏÂÒ»¸ö heartbeat£¬leader ֪ͨËùÓÐ follower Ìá½»ÕâÒ»ÈÕÖ¾ÌõÄ¿²¢´æ´¢ÓÚ¸÷×ԵĴÅÅÌÄÚ¡£

3.4.2. ÈÝ´í

Èç¹ûÓÉÓÚÍøÂçµÄ¸ô¶Ï£¬Ôì³É¼¯ÈºÖжàÊýµÄ½ÚµãÔÚÒ»¶Îʱ¼äÄÚÎÞ·¨·ÃÎʵ½ leader ½Úµã¡£°´ÕÕ raft ¹²Ê¶Ëã·¨£¬Ã»ÓÐ leader µÄÄÇÒ»×鼯Ⱥ½«»áͨ¹ýÑ¡¾ÙͶƱ³öÐ嵀 leader£¬ÉõÖÁ»áÔÚÁ½¸ö¼¯ÈºÄÚ²úÉú²»Ò»ÖµÄÈÕÖ¾ÌõÄ¿¡£ÔÚ¼¯ÈºÖØÐÂÍêÕûÁ¬Í¨Ö®ºó£¬Ô­À´µÄ leader ÈԻᰴÕÕ raft ¹²Ê¶Ëã·¨´Ó²½½øÊý¸ü¸ßµÄ leader ͬ²½ÈÕÖ¾²¢½«×Ô¼ºÇл»Îª follower¡£

1. ¼¯ÈºµÄÀíÏë״̬¡£

2. ÍøÂç¼ä¸ôÔì³É´ó¶àÊýµÄ½ÚµãÎÞ·¨·ÃÎÊ leader ½Úµã¡£

3. еÄÈÕÖ¾ÌõÄ¿Ìí¼Óµ½ leader ÖС£

4. leader ½Úµã½«´ËÌõÈÕ־ͬ²½ÖÁÄܹ»·ÃÎʵ½ leader µÄ½Úµã¡£

5. follower È·ÈÏÈÕÖ¾±»¼Ç¼£¬µ«ÊÇÈ·ÈϼǼÈÕÖ¾µÄ follower ÊýÁ¿Ã»Óг¬¹ý¼¯Èº½ÚµãµÄ°ëÊý£¬leader ½Úµã²¢²»½«´ËÌõÈÕÖ¾´æµµ¡£

6. ÔÚ±»¸ô¶ÏµÄÕⲿ·Ö½Úµã£¬ÔÚ election timeout Ö®ºó£¬followers ÖвúÉú candidate ²¢·¢ÆðÑ¡¾Ù¡£

7. ¶àÊý½Úµã½ÓÊÜͶƱ֮ºó£¬candidate ³ÉΪ leader¡£

8. Ò»¸öÈÕÖ¾ÌõÄ¿±»Ìí¼Óµ½Ð嵀 leader¡£

9. ÈÕÖ¾±»¸´ÖƸøÐ leader µÄ follower¡£

10. ¶àÊý½ÚµãÈ·ÈÏÖ®ºó£¬leader ½«ÈÕÖ¾ÌõÄ¿Ìá½»²¢´æ´¢¡£

11. ÔÚÏÂÒ»¸ö heartbeat£¬leader ֪ͨ follower ¸÷×ÔÌá½»²¢±£´æÔÚ±¾µØ´ÅÅÌ¡£

12. ¾­¹ýÒ»¶Îʱ¼äÖ®ºó£¬¼¯ÈºÖØÐÂÁ¬Í¨µ½Ò»Æð£¬¼¯ÈºÖгöÏÖÁ½¸ö leader ²¢ÇÒ´æÔÚ²»Ò»ÖµÄÈÕÖ¾ÌõÄ¿¡£

13. Ð嵀 leader ÔÚÏÂÒ»´Î heartbeat timeout ʱÏòËùÓеĽڵ㷢ËÍÒ»´Î heartbeat¡£

14. #1 leader ÔÚÊÕµ½²½½øÊý¸ü¸ßµÄ #2 leader heartbeat ʱ·ÅÆú leader µØÎ»²¢Çл»µ½ follower ״̬¡£

15. ½ÚµãÖÐËùÓÐδ´æµµµÄÈÕÖ¾ÌõÄ¿¶¼½«±»¶ªÆú¡£

16. δ±»¸´ÖƵÄÈÕÖ¾ÌõÄ¿½«»á±»Í¬²½¸øËùÓÐµÄ follower¡£

ͨ¹ýÕâÖÖ·½Ê½£¬Ö»Òª¼¯ÈºÖÐÓÐЧÁ¬½ÓµÄ½Úµã³¬¹ý×ÜÊýµÄÒ»°ë£¬¼¯Èº½«Ò»Ö±ÒÔÕâÖÖ¹æÔòÔËÐÐÏÂÈ¥²¢Ê¼ÖÕÈ·±£¸÷¸ö½ÚµãÖеÄÊý¾ÝʼÖÕÒ»Ö¡£

4. ʵÏÖ

4.1. etcd ½á¹¹

Ò»¸ö etcd ½ÚµãµÄºËÐÄÓÉÈý²¿·Ö×é³É£º

  • Raft£ºraft ״̬»úÊÇ¶Ô raft ¹²Ê¶Ëã·¨µÄʵÏÖ
  • WAL£ºraft ÈÕÖ¾´æ´¢
  • Storage£ºÊý¾ÝµÄ´æ´¢ÓëË÷Òý

WAL (Write-ahead logging)£¬ÊÇÓÃÓÚÏòϵͳÌṩԭ×ÓÐԺͳ־ÃÐÔµÄһϵÁм¼Êõ¡£ÔÚʹÓà WAL µÄϵÌṩÖУ¬ËùÓеÄÐÞ¸ÄÔÚÌύ֮ǰ¶¼ÒªÏÈдÈë log ÎļþÖС£etcd µÄ WAL ÓÉÈÕÖ¾´æ´¢Óë¿ìÕÕ´æ´¢Á½²¿·Ö×é³É£¬ÆäÖÐ Entry ¸ºÔð´æ´¢¾ßÌåÈÕÖ¾µÄÄÚÈÝ£¬¶ø Snapshot ¸ºÔðÔÚÈÕÖ¾ÄÚÈÝ·¢Éú±ä»¯µÄʱºò±£´æ raft µÄ״̬¡£WAL »áÔÚ±¾µØ´ÅÅ̵ÄÒ»¸öÖ¸¶¨Ä¿Â¼Ï·ֱðÈÕÖ¾ÌõÄ¿Óë¿ìÕÕÄÚÈÝ¡£

4.2. ·þÎñ

4.2.1. Clients

ÔÚĬÈÏÉ趨Ï£¬etcd ͨ¹ýÖ÷»úµÄ 2379 ¶Ë¿ÚÏò Client Ìṩ·þÎñ¡£ÈçÏÂͼ£º

ÿ¸öÖ÷»úÉϵÄÓ¦ÓóÌÐò¶¼¿ÉÒÔͨ¹ýÖ÷»úµÄ 2379 ÒÔ HTTP + JSON µÄ·½Ê½Ïò etcd ¶ÁдÊý¾Ý¡£Ð´ÈëµÄÊý¾Ý»áÓÉ etcd ͬ²½µ½¼¯ÈºµÄÆäËü½ÚµãÖС£

4.2.2. Peers

ÔÚĬÈÏÉ趨Ï£¬etcd ͨ¹ýÖ÷»úµÄ 2380 ¶Ë¿ÚÔÚ¸÷¸ö½ÚµãÖÐͬ²½ raft ״̬¼°Êý¾Ý¡£

5. ´´½¨

´Ó·½·¨ÉÏÀ´»®·Ö£¬´´½¨ etcd ¼¯ÈºµÄ·½Ê½·ÖΪÁ½ÖÖ£ºStatic £¨Í¨¹ýÖÆ¶¨ peers µÄ IP ºÍ¶Ë¿Ú´´½¨£©Óë Discovery £¨Í¨¹ýÒ»¸ö·¢ÏÖ·þÎñ´´½¨£©¡£

Static ·½Ê½ÐèÒªÔ¤ÏÈÖªµÀ¼¯ÈºËùÓнڵãµÄ IP£¬ËùÒÔÊʺÏС¹æÄ£µÄ¼¯Èº»òÕߴһ¸öÁÙʱµÄ¿ª·¢Óë²âÊÔ»·¾³¡£

Discovery ·½Ê½²»ÐèÒªÔ¤ÏÈÁ˽âÆäËû½ÚµãµÄ IP¡£Æô¶¯Ê± etcd ͨ¹ý·ÃÎÊÒ»¸ö Discovery URL À´×¢²á×Ô¼º²¢»ñÈ¡ÆäËû½ÚµãµÄÐÅÏ¢¡£

ÕâÖÖ·½Ê½Í¨³£ÊʺϽ« etcd ²¿ÊðÔÚij¸öÔÆ·þÎñƽ̨»òÊÇÒ»¸ö DHCP »·¾³ÖС£

ÆäÖÐ Discovery ·þÎñ¿ÉÒÔʹÓà CoreOS ÌṩµÄÒ»¸ö¹«¹²µØÖ· https://discovery.etcd.io/new À´ÉêÇëÒ»¸ö token£¬»òÕß×Ô¼º´î½¨Ò»¸öÕâÑùµÄ·þÎñ²¢É趨һ¸ö token¡£

³öÓÚ°²È«µÄ¿¼ÂÇ£¬Õâ¸ö token Ó¦¸ÃÖ»ÔÚ¼¯Èº³õʼÒýµ¼Ê±¶ÌÔÝ´æÔÚ£¬ÒòΪ¼¯Èº½¨Á¢Ö®ºó½«²»ÔÙÐèÒªÕâÒ»µØÖ·£¬¶ø¼¯ÈºÖнڵãµÄ±ä¸ü¿ÉÒÔͨ¹ý etcd ÔËÐÐÊ±ÖØ¹¹µÄÄÜÁ¦À´½øÐÐÅäÖá£

6. ÔËÐÐ

ÏÂÃæÎÒÃdz¢ÊÔʹÓà etcd 0.5.0 ÒÔ discovery ·½Ê½´´½¨Ò»¸ö CoreOS ¼¯Èº¡£

µ±È»ÓÉÓÚ etcd 0.5.0 ÉÐδÕýʽ·¢²¼£¬ËùÒÔÎÒÃÇĿǰ»¹ÎÞ·¨´Ó¹Ù·½ÇþµÀ»ñµÃ´ò°ü etcd 0.5.0 µÄ CoreOS ¾µÏñ£¬

µ«ÊÇÎÒÃÇ¿ÉÒÔÐÞ¸ÄÒýµ¼Îļþ£¬ÔÚ CoreOS Æô¶¯Ê±½« etcd 0.5.0 ÏÂÔØÖÁϵͳÀï½øÐÐÅäÖò¢Æô¶¯¡£

CoreOS ¹Ù·½ÌṩÁËÒ»¸öʹÓà vagrant + virtualbox ÏîÄ¿£¬¹©Óû§ÔÚ±¾µØµçÄÔÖд´½¨Ò»¸ö΢ÐÍ CoreOS ¼¯Èº¡£ÎÒÃÇ¿ÉÒÔÔÚÕâ¸öÏîÄ¿µÄ»ù´¡ÉϽøÐÐÐÞ¸ÄÀ´ÊµÏÖÎÒÃǵÄÐèÇó¡£

6.1. Clone ÏîÄ¿µ½±¾µØ

git clone 
https://github.com/coreos/coreos-vagrant.git
cd coreos-vagrant
cp config.rb.sample config.rb
cp user-data.sample user-data

6.2. ͨ¹ý CoreOS ÌṩµÄ¹«¹² discovery ·þÎñÉêÇë token

curl https://discovery.etcd.io/new?size=3

https://discovery.etcd.io/780456e1317eb2db312b62ba1cb9a4f7

size = 3 ±íʾÕâ¸ö¼¯Èº½Úµã×ÜÊýΪ 3 ¸ö¡£

6.3. ÐÞ¸Ä config.rb Îļþ

# Size of the CoreOS cluster created by Vagrant
$num_instances=3

½«Æô¶¯µÄ CoreOS ʵÀýÊýÁ¿¶¨Îª 3 ¸ö

6.4. ÐÞ¸Ä user-data Îļþ

6.4.1. ÐÞ¸Ä etcd ²ÎÊý£º

etcd:
    discovery: https://discovery.etcd.io/780456e1317eb2db312b62ba1cb9a4f7
    advertise-client-urls: http://$public_ipv4:2379
    initial-advertise-peer-urls: http://$public_ipv4:2380
    listen-client-urls: http://$public_ipv4:2379
    listen-peer-urls: http://$public_ipv4:2380

6.4.2. ÐÞ¸Ä etcd ·þÎñÄÚÈÝ

name: etcd.service
      command: start
      content: |
        [Unit]
        After=network-online.target
        Requires=network-online.target
        
        [Service]
        ExecStartPre=/usr/bin/wget -N -P /opt/bin https://github.com/coreos/etcd/releases/
download/v0.5.0-alpha.3/etcd-v0.5.0-alpha.3-linux-amd64.tar.gz
        ExecStartPre=/usr/bin/tar -C /opt/bin -xvf /opt/bin/etcd-v0.5.0-alpha.3-linux-amd64.tar.gz
        ExecStartPre=/usr/bin/chmod +x /opt/bin/etcd-v0.5.0-alpha.3-linux-amd64/etcd
        ExecStart=/opt/bin/etcd-v0.5.0-alpha.3-linux-amd64/etcd

        [Install]
        WantedBy=multi-user.target

Ð޸ĵIJ¿·ÖÈÃÎÒÃÇÖØÐ¶¨ÖÆÁË etcd ·þÎñµÄÄÚÈÝ¡£ÔÚϵͳÆô¶¯Ê±£¬ÏȽ« etcd 0.5.0 µÄ´ò°üÎļþÏÂÔØÖÁÖ¸¶¨Ä¿Â¼²¢ÔÚÉÔºó½«ÆäÆô¶¯¡£

6.4.3. ʹÓà vagrant Æô¶¯¼¯Èº

vagrant up

ÉÔºó vagrant ½«°ïÖúÎÒÃÇÔÚ VirtualBox Öд´½¨Èý¸ö CoreOS ʵÀý¡£

6.4.4. µÇ¼µ½ CoreOS

µÇ¼µ½ÆäÖеÄÒ»¸ö½Úµã

vagrant ssh core-01

²é¿´Ò»Ï etcd.service µÄ״̬£¬ÊäÈ룺

systemctl status etcd.service

²»³öÒâÍâµÄ»°£¬¿ÉÒÔ¿´µ½Æä״̬Ϊ active (running)

etcd.service
   Loaded: loaded (/etc/systemd/system/etcd.service; disabled)
  Drop-In: /run/systemd/system/etcd.service.d
           ©¸©¤20-cloudinit.conf
   Active: active (running) since Sun 2014-11-16 13:10:59 UTC; 12min ago
  Process: 894 ExecStartPre=/usr/bin/chmod +x /opt/bin/etcd-v0.5.0-alpha.3-
linux-amd64/etcd (code=exited, status=0/SUCCESS)
  Process: 890 ExecStartPre=/usr/bin/tar -C /opt/bin -xvf /opt/bin/etcd-
v0.5.0-alpha.3-linux-amd64.tar.gz (code=exited, status=0/SUCCESS)
  Process: 857 ExecStartPre=/usr/bin/wget -N -P /opt/bin 
https://github.com/coreos/etcd/releases/download/v0.5.0-alpha.3/etcd-v0.5.0
-alpha.3-linux-amd64.tar.gz (code=exited, status=0/SUCCESS)
 Main PID: 896 (etcd)
   CGroup: /system.slice/etcd.service
           ©¸©¤896 /opt/bin/etcd-v0.5.0-alpha.3-linux-amd64/etcd

6.4.5. ͨ¹ý etcdctl ²éѯ¼¯Èº×´Ì¬

etcdctl ¿ÉÒÔ°ïÖúÎÒÃDzéѯһϼ¯ÈºÖнڵãÐÅÏ¢£¬ÊäÈ룺

ÕâÀïÓеãÒªÌØ±ð˵Ã÷µÄµØ·½

/opt/bin/etcd-v0.5.0-alpha.3-linux-amd64/etcdctl --peers 172.17.8.101:2379 member list

Æô¶¯²ÎÊý --peers 172.17.8.101:2379 ±íʾͨ¹ý±¾½ÚµãµÄ 2379 ¶Ë¿Ú·ÃÎÊ etcd ½Ó¿Ú£¬Óû§¿ÉÒÔ¸ù¾Ý×Ô¼ºµÄʵ¼ÊÇé¿ö¶Ô IP µØÖ·½øÐÐÐÞÕý¡£

Õý³£Çé¿öÏ¿ɿ´µ½ÈçÏÂÊä³ö£º

b4f4d25ed56d7a44: name=b74c24773df147e1be8e1e35defaad38 peerURLs=
http://172.17.8.101:2380 clientURLs=http://172.17.8.101:2379
b7404cc414e7affa: name=001db0fc02184af5b293e2cb21c86a11 peerURLs=
http://172.17.8.102:2380 clientURLs=http://172.17.8.102:2379
f609956c55a6809e: name=2840dc331d224360a097b781c876c9e5 peerURLs=
http://172.17.8.103:2380 clientURLs=http://172.17.8.103:2379

ÕâÑù£¬ÎÒÃǾÍÔÚ±¾µØ´´½¨ÁËÒ»¸ö»ùÓÚ etcd 0.5.0 µÄ CoreOS ¼¯Èº¡£

   
2393 ´Îä¯ÀÀ       50
Ïà¹ØÎÄÕ Ïà¹ØÎĵµ Ïà¹Ø¿Î³Ì



Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]

»ùÓÚÄ£Ð͵ÄÕû³µµç×ÓµçÆø¼Ü¹¹Éè¼Æ
ǶÈëʽÉ豸É쵀 Linux ϵͳ¿ª·¢
Linux µÄ²¢·¢¿É¹ÜÀí¹¤×÷¶ÓÁÐ
ARMǶÈëʽϵͳµÄÎÊÌâ×ܽá·ÖÎö
ǶÈëʽϵͳÉè¼ÆÓëʵÀý¿ª·¢
WinCE6.0µÄEBOOT¸ÅÒª


UML +RoseRealtime+ǶÈëʽ
C++ǶÈëʽϵͳ¿ª·¢
ǶÈëʽ°×ºÐ²âÊÔ
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
ǶÈëʽ²Ù×÷ϵͳVxWorks


Öйúº½¿Õ ǶÈëʽC¸ßÖÊÁ¿±à³Ì
ʹÓÃEAºÍUML½øÐÐǶÈëʽϵͳ·ÖÎöÉè¼Æ
»ùÓÚSysMLºÍEAµÄǶÈëʽϵͳ½¨Ä£
ÉϺ£Æû³µ ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
±±¾© ǶÈëʽC¸ßÖÊÁ¿±à³Ì
±±¾© ¸ßÖʸßЧǶÈëʽ¿ª·¢
Nagra linuxÄÚºËÓëÉ豸Çý¶¯Ô­Àí