## Zookeeper * [1.Zookeeperæåªäºèç¹ç±»åï¼](#1zookeeperæåªäºèç¹ç±»å) * [2.äºè§£è¿ZookeeperçZABåè®®åï¼](#2äºè§£è¿zookeeperçzabåè®®å) * [3.Zookeeperæä¹å®ç°åå¸å¼éï¼](#3zookeeperæä¹å®ç°åå¸å¼é) * [4.Zookeeperæ¯æä¹ä¿è¯æ°æ®ä¸è´æ§çï¼](#4zookeeperæ¯æä¹ä¿è¯æ°æ®ä¸è´æ§ç) * [5.Zookeeper Leaderé举è¿ç¨æ¯ææ ·çï¼](#5zookeeper-leaderé举è¿ç¨æ¯ææ ·ç) * [6.Zookeeperæä¹å®ç°æå¡æ³¨åï¼](#6zookeeperæä¹å®ç°æå¡æ³¨å) * [7.ZooKeeperæ¯ä»ä¹ï¼](#7zookeeperæ¯ä»ä¹) * [8.ZooKeeperæä¾äºä»ä¹ï¼](#8zookeeperæä¾äºä»ä¹) * [9.Zookeeperæä»¶ç³»ç»](#9zookeeperæä»¶ç³»ç») * [10.Zookeeper Watcher æºå¶](#10zookeeper-watcher-æºå¶) * [11.客æ·ç«¯æ³¨åWatcherå®ç°](#11客æ·ç«¯æ³¨åwatcherå®ç°) * [12.æå¡ç«¯å¤çWatcherå®ç°](#12æå¡ç«¯å¤çwatcherå®ç°) * [13.ACLæéæ§å¶æºå¶](#13aclæéæ§å¶æºå¶) * [14.æå¡å¨è§è²](#14æå¡å¨è§è²) * [15.Zookeeper ä¸ Serverå·¥ä½ç¶æ](#15zookeeper-ä¸-serverå·¥ä½ç¶æ) * [16.æ°æ®åæ¥](#16æ°æ®åæ¥) * [17.zookeeperæ¯å¦ä½ä¿è¯äºå¡ç顺åºä¸è´æ§çï¼](#17zookeeperæ¯å¦ä½ä¿è¯äºå¡ç顺åºä¸è´æ§ç) * [18.åå¸å¼é群ä¸ä¸ºä»ä¹ä¼æMasterï¼](#18åå¸å¼é群ä¸ä¸ºä»ä¹ä¼æmaster) * [19.zkèç¹å®æºå¦ä½å¤çï¼](#19zkèç¹å®æºå¦ä½å¤ç) * [20.Zookeeperæåªå ç§é¨ç½²æ¨¡å¼ï¼](#20zookeeperæåªå ç§é¨ç½²æ¨¡å¼) * [21.é群æå°è¦å å°æºå¨ï¼é群è§åæ¯ææ ·ç?](#21é群æå°è¦å å°æºå¨é群è§åæ¯ææ ·ç) * [22.éç¾¤æ¯æå¨ææ·»å æºå¨åï¼](#22éç¾¤æ¯æå¨ææ·»å æºå¨å) * [23.Zookeeper对èç¹çwatchçå¬éç¥æ¯æ°¸ä¹ çåï¼ä¸ºä»ä¹ä¸æ¯æ°¸ä¹ ç?](#23zookeeper对èç¹çwatchçå¬éç¥æ¯æ°¸ä¹ çå为ä»ä¹ä¸æ¯æ°¸ä¹ ç) * [24.ZABåPaxosç®æ³çèç³»ä¸åºå«ï¼](#24zabåpaxosç®æ³çèç³»ä¸åºå«) * [25.Zookeeperçå ¸ååºç¨åºæ¯](#25zookeeperçå ¸ååºç¨åºæ¯) * [26.Zookeeper å Dubbo çå ³ç³»ï¼](#26zookeeper-å-dubbo-çå ³ç³») * [27.zookeeperè´è½½åè¡¡ånginxè´è½½åè¡¡åºå«](#27zookeeperè´è½½åè¡¡ånginxè´è½½åè¡¡åºå«) * [åèèµæ](#åèèµæ) #### 1.Zookeeperæåªäºèç¹ç±»åï¼ PERSISTENT-æä¹ èç¹ é¤éæå¨å é¤ï¼å¦åèç¹ä¸ç´åå¨äºZookeeperä¸ EPHEMERAL-临æ¶èç¹ ä¸´æ¶èç¹ççå½å¨æä¸å®¢æ·ç«¯ä¼è¯ç»å®ï¼ä¸æ¦å®¢æ·ç«¯ä¼è¯å¤±æï¼å®¢æ·ç«¯ä¸zookeeperè¿æ¥æå¼ä¸ä¸å®ä¼è¯å¤±æï¼ï¼é£ä¹è¿ä¸ªå®¢æ·ç«¯åå»ºçææä¸´æ¶èç¹é½ä¼è¢«ç§»é¤ã PERSISTENT_SEQUENTIAL-æä¹ 顺åºèç¹ åºæ¬ç¹æ§åæä¹ èç¹ï¼åªæ¯å¢å äºé¡ºåºå±æ§ï¼èç¹ååè¾¹ä¼è¿½å ä¸ä¸ªç±ç¶èç¹ç»´æ¤çèªå¢æ´åæ°åã EPHEMERAL_SEQUENTIAL-临æ¶é¡ºåºèç¹ åºæ¬ç¹æ§å临æ¶èç¹ï¼å¢å äºé¡ºåºå±æ§ï¼èç¹ååè¾¹ä¼è¿½å ä¸ä¸ªç±ç¶èç¹ç»´æ¤çèªå¢æ´åæ°åã #### 2.äºè§£è¿ZookeeperçZABåè®®åï¼ ZABåè®®æ¯ä¸ºåå¸å¼åè°æå¡Zookeeperä¸é¨è®¾è®¡çä¸ç§æ¯æå´©æºæ¢å¤çåå广æåè®®ã ZABåè®®å æ¬ä¸¤ç§åºæ¬ç模å¼ï¼å´©æºæ¢å¤åæ¶æ¯å¹¿æã 彿´ä¸ªzookeeperé群ååå¯å¨æè Leaderæå¡å¨å®æºãé坿è ç½ç»æ é导è´ä¸åå¨è¿åçæå¡å¨ä¸Leaderæå¡å¨ä¿ææ£å¸¸éä¿¡æ¶ï¼ææè¿ç¨ï¼æå¡å¨ï¼è¿å ¥å´©æºæ¢å¤æ¨¡å¼ï¼é¦å éä¸¾äº§çæ°çLeaderæå¡å¨ï¼ç¶åé群ä¸Followeræå¡å¨å¼å§ä¸æ°çLeaderæå¡å¨è¿è¡æ°æ®åæ¥ï¼å½é群ä¸è¶ è¿åæ°æºå¨ä¸è¯¥Leaderæå¡å¨å®ææ°æ®åæ¥ä¹åï¼éåºæ¢å¤æ¨¡å¼è¿å ¥æ¶æ¯å¹¿ææ¨¡å¼ï¼Leaderæå¡å¨å¼å§æ¥æ¶å®¢æ·ç«¯çäºå¡è¯·æ±çæäºç©ææ¡æ¥è¿è¡äºå¡è¯·æ±å¤çã #### 3.Zookeeperæä¹å®ç°åå¸å¼éï¼ æäºzookeeperçä¸è´æ§æä»¶ç³»ç»ï¼éçé®é¢åå¾å®¹æãéæå¡å¯ä»¥å为两类ï¼ä¸ä¸ªæ¯ä¿æç¬å ï¼å¦ä¸ä¸ªæ¯æ§å¶æ¶åºã 对äºç¬¬ä¸ç±»ï¼æä»¬å°zookeeperä¸çä¸ä¸ªznodeç使¯ä¸æéï¼éè¿createznodeçæ¹å¼æ¥å®ç°ãææå®¢æ·ç«¯é½å»å建 /distribute_lock èç¹ï¼æç»æåå建çé£ä¸ªå®¢æ·ç«¯ä¹å³æ¥æäºè¿æéãç¨å®å 餿èªå·±å建çdistribute_lock èç¹å°±éæ¾åºéã 对äºç¬¬äºç±»ï¼ /distribute_lock å·²ç»é¢å åå¨ï¼ææå®¢æ·ç«¯å¨å®ä¸é¢å建临æ¶é¡ºåºç¼å·ç®å½èç¹ï¼åémaster䏿 ·ï¼ç¼å·æå°çè·å¾éï¼ç¨å®å é¤ï¼ä¾æ¬¡æ¹ä¾¿ã #### 4.Zookeeperæ¯æä¹ä¿è¯æ°æ®ä¸è´æ§çï¼ è¯¦è§ï¼https://blog.csdn.net/liuchang19950703/article/details/111406622 #### 5.Zookeeper Leaderé举è¿ç¨æ¯ææ ·çï¼ è¯¦è§ï¼https://blog.csdn.net/liuchang19950703/article/details/111406622 #### 6.Zookeeperæä¹å®ç°æå¡æ³¨åï¼ è¯¦è§ï¼https://segmentfault.com/a/1190000019670015 #### 7.ZooKeeperæ¯ä»ä¹ï¼ ZooKeeperæ¯ä¸ä¸ªå¼æ¾æºç çåå¸å¼åè°æå¡ï¼å®æ¯é群ç管çè ï¼çè§çé群ä¸å个èç¹çç¶ææ ¹æ®èç¹æäº¤çåé¦è¿è¡ä¸ä¸æ¥åçæä½ãæç»ï¼å°ç®åæç¨çæ¥å£åæ§è½é«æãåè½ç¨³å®çç³»ç»æä¾ç»ç¨æ·ã åå¸å¼åºç¨ç¨åºå¯ä»¥åºäºZookeeperå®ç°è¯¸å¦æ°æ®åå¸/订é ãè´è½½åè¡¡ãå½åæå¡ãåå¸å¼åè°/éç¥ãé群管çãMasteré举ãåå¸å¼éååå¸å¼éåçåè½ã Zookeeperä¿è¯äºå¦ä¸åå¸å¼ä¸è´æ§ç¹æ§ï¼ 顺åºä¸è´æ§ ååæ§ åä¸è§å¾ å¯é æ§ å®æ¶æ§ï¼æç»ä¸è´æ§ï¼ 客æ·ç«¯ç读请æ±å¯ä»¥è¢«é群ä¸çä»»æä¸å°æºå¨å¤çï¼å¦æè¯»è¯·æ±å¨èç¹ä¸æ³¨åäºçå¬å¨ï¼è¿ä¸ªçå¬å¨ä¹æ¯ç±æè¿æ¥çzookeeperæºå¨æ¥å¤çã对äºå请æ±ï¼è¿äºè¯·æ±ä¼åæ¶åç»å ¶ä»zookeeperæºå¨å¹¶ä¸è¾¾æä¸è´åï¼è¯·æ±æä¼è¿åæåãå æ¤ï¼éçzookeeperçé群æºå¨å¢å¤ï¼è¯»è¯·æ±çåå伿é«ä½æ¯å请æ±çååä¼ä¸éã æåºæ§æ¯zookeeperä¸é常éè¦çä¸ä¸ªç¹æ§ï¼ææçæ´æ°é½æ¯å ¨å±æåºçï¼æ¯ä¸ªæ´æ°é½æä¸ä¸ªå¯ä¸çæ¶é´æ³ï¼è¿ä¸ªæ¶é´æ³ç§°ä¸ºzxidï¼Zookeeper Transaction Idï¼ãè读请æ±åªä¼ç¸å¯¹äºæ´æ°æåºï¼ä¹å°±æ¯è¯»è¯·æ±çè¿åç»æä¸ä¼å¸¦æè¿ä¸ªzookeeperææ°çzxidã #### 8.ZooKeeperæä¾äºä»ä¹ï¼ 1ãæä»¶ç³»ç» 2ãéç¥æºå¶ #### 9.Zookeeperæä»¶ç³»ç» Zookeeperæä¾ä¸ä¸ªå¤å±çº§çèç¹å½å空é´ï¼èç¹ç§°ä¸ºznodeï¼ãä¸æä»¶ç³»ç»ä¸åçæ¯ï¼è¿äºèç¹é½å¯ä»¥è®¾ç½®å ³èçæ°æ®ï¼èæä»¶ç³»ç»ä¸åªææä»¶èç¹å¯ä»¥åæ¾æ°æ®èç®å½èç¹ä¸è¡ã Zookeeper为äºä¿è¯é«åååä½å»¶è¿ï¼å¨å åä¸ç»´æ¤äºè¿ä¸ªæ ç¶çç®å½ç»æï¼è¿ç§ç¹æ§ä½¿å¾Zookeeperä¸è½ç¨äºåæ¾å¤§éçæ°æ®ï¼æ¯ä¸ªèç¹çåæ¾æ°æ®ä¸é为1Mã #### 10.Zookeeper Watcher æºå¶ Zookeeperå 许客æ·ç«¯åæå¡ç«¯çæä¸ªZnode注åä¸ä¸ªWatcherçå¬ï¼å½æå¡ç«¯çä¸äºæå®äºä»¶è§¦åäºè¿ä¸ªWatcherï¼æå¡ç«¯ä¼åæå®å®¢æ·ç«¯åéä¸ä¸ªäºä»¶éç¥æ¥å®ç°åå¸å¼çéç¥åè½ï¼ç¶å客æ·ç«¯æ ¹æ®Watcheréç¥ç¶æåäºä»¶ç±»åååºä¸å¡ä¸çæ¹åã 工使ºå¶ï¼ 客æ·ç«¯æ³¨åwatcher æå¡ç«¯å¤çwatcher 客æ·ç«¯åè°watcher Watcherç¹æ§æ»ç»ï¼ 䏿¬¡æ§ æ è®ºæ¯æå¡ç«¯è¿æ¯å®¢æ·ç«¯ï¼ä¸æ¦ä¸ä¸ªWatcher被触åï¼Zookeeperé½ä¼å°å ¶ä»ç¸åºçåå¨ä¸ç§»é¤ãè¿æ ·ç设计ææçåè½»äºæå¡ç«¯çååï¼ä¸ç¶å¯¹äºæ´æ°é常é¢ç¹çèç¹ï¼æå¡ç«¯ä¼ä¸æçå客æ·ç«¯åéäºä»¶éç¥ï¼æ 论对äºç½ç»è¿æ¯æå¡ç«¯çååé½é常大ã 客æ·ç«¯ä¸²è¡æ§è¡ 客æ·ç«¯Watcheråè°çè¿ç¨æ¯ä¸ä¸ªä¸²è¡åæ¥çè¿ç¨ã è½»é Watcheréç¥é常ç®åï¼åªä¼åè¯å®¢æ·ç«¯åçäºäºä»¶ï¼èä¸ä¼è¯´æäºä»¶çå ·ä½å 容ã 客æ·ç«¯åæå¡ç«¯æ³¨åWatcherçæ¶åï¼å¹¶ä¸ä¼æå®¢æ·ç«¯çå®çWatcher对象å®ä½ä¼ éå°æå¡ç«¯ï¼ä» ä» æ¯å¨å®¢æ·ç«¯è¯·æ±ä¸ä½¿ç¨booleanç±»å屿§è¿è¡äºæ è®°ã watcher event弿¥åéwatcherçéç¥äºä»¶ä»serveråéå°clientæ¯å¼æ¥çï¼è¿å°±åå¨ä¸ä¸ªé®é¢ï¼ä¸åç客æ·ç«¯åæå¡å¨ä¹é´éè¿socketè¿è¡éä¿¡ï¼ç±äºç½ç»å»¶è¿æå ¶ä»å ç´ å¯¼è´å®¢æ·ç«¯å¨ä¸éçæ¶å»çå¬å°äºä»¶ï¼ç±äºZookeeperæ¬èº«æä¾äºordering guaranteeï¼å³å®¢æ·ç«¯çå¬äºä»¶åï¼æä¼æç¥å®æçè§znodeåçäºååãæä»¥æä»¬ä½¿ç¨Zookeeperä¸è½ææè½å¤çæ§å°èç¹æ¯æ¬¡çååãZookeeperåªè½ä¿è¯æç»çä¸è´æ§ï¼èæ æ³ä¿è¯å¼ºä¸è´æ§ã 注åwatcher getDataãexistsãgetChildren 触åwatcher createãdeleteãsetData å½ä¸ä¸ªå®¢æ·ç«¯è¿æ¥å°ä¸ä¸ªæ°çæå¡å¨ä¸æ¶ï¼watchå°ä¼è¢«ä»¥ä»»æä¼è¯äºä»¶è§¦åãå½ä¸ä¸ä¸ªæå¡å¨å¤±å»è¿æ¥çæ¶åï¼æ¯æ æ³æ¥æ¶å°watchçãèå½clientéæ°è¿æ¥æ¶ï¼å¦æéè¦çè¯ï¼ææå åæ³¨åè¿çwatchï¼é½ä¼è¢«éæ°æ³¨åãéå¸¸è¿æ¯å®å ¨éæçãåªæå¨ä¸ä¸ªç¹æ®æ åµä¸ï¼watchå¯è½ä¼ä¸¢å¤±ï¼å¯¹äºä¸ä¸ªæªå建çznodeçexist watchï¼å¦æå¨å®¢æ·ç«¯æå¼è¿æ¥æé´è¢«å建äºï¼å¹¶ä¸éåå¨å®¢æ·ç«¯è¿æ¥ä¸ä¹ååå é¤äºï¼è¿ç§æ åµä¸ï¼è¿ä¸ªwatchäºä»¶å¯è½ä¼è¢«ä¸¢å¤±ã #### 11.客æ·ç«¯æ³¨åWatcherå®ç° è°ç¨getData()/getChildren()/exist()ä¸ä¸ªAPIï¼ä¼ å ¥Watcher对象 æ 记请æ±requestï¼å°è£ Watcherå°WatchRegistration å°è£ æPacket对象ï¼åæå¡ç«¯åérequest æ¶å°æå¡ç«¯ååºåï¼å°Watcher注åå°ZKWatcherManagerä¸è¿è¡ç®¡ç 请æ±è¿åï¼å®ææ³¨åã #### 12.æå¡ç«¯å¤çWatcherå®ç° 1ï¼æå¡ç«¯æ¥æ¶Watcherå¹¶åå¨ æ¥æ¶å°å®¢æ·ç«¯è¯·æ±ï¼å¤ç请æ±å¤ææ¯å¦éè¦æ³¨åWatcherï¼éè¦çè¯å°æ°æ®èç¹çèç¹è·¯å¾åServerCnxnï¼ServerCnxn代表ä¸ä¸ªå®¢æ·ç«¯åæå¡ç«¯çè¿æ¥ï¼å®ç°äºWatcherçprocessæ¥å£ï¼æ¤æ¶å¯ä»¥çæä¸ä¸ªWatcher对象ï¼åå¨å¨WatcherManagerçWatchTableåwatch2Pathsä¸å»ã 2ï¼Watcher触å 以æå¡ç«¯æ¥æ¶å° setData() äºå¡è¯·æ±è§¦åNodeDataChangedäºä»¶ä¸ºä¾ï¼ å°è£ WatchedEvent å°éç¥ç¶æï¼SyncConnectedï¼ãäºä»¶ç±»åï¼NodeDataChangedï¼ä»¥åèç¹è·¯å¾å°è£ æä¸ä¸ªWatchedEvent对象 æ¥è¯¢Watcher ä»WatchTable䏿 ¹æ®èç¹è·¯å¾æ¥æ¾Watcher 没æ¾å°ï¼è¯´ææ²¡æå®¢æ·ç«¯å¨è¯¥æ°æ®èç¹ä¸æ³¨åè¿Watcher æ¾å°ï¼æåå¹¶ä»WatchTableåWatch2Pathsä¸å é¤å¯¹åºWatcherï¼ä»è¿éå¯ä»¥çåºWatcher卿å¡ç«¯æ¯ä¸æ¬¡æ§çï¼è§¦å䏿¬¡å°±å¤±æäºï¼ 3ï¼è°ç¨processæ¹æ³æ¥è§¦åWatcher è¿éprocess主è¦å°±æ¯éè¿ServerCnxn对åºçTCPè¿æ¥åéWatcheräºä»¶éç¥ã #### 13.ACLæéæ§å¶æºå¶ 1ï¼UGOï¼User/Group/Othersï¼ ç®åå¨Linux/Unixæä»¶ç³»ç»ä¸ä½¿ç¨ï¼ä¹æ¯ä½¿ç¨æå¹¿æ³çæéæ§å¶æ¹å¼ãæ¯ä¸ç§ç²ç²åº¦çæä»¶ç³»ç»æéæ§å¶æ¨¡å¼ã 2ï¼ACLï¼Access Control Listï¼è®¿é®æ§å¶å表 å æ¬ä¸ä¸ªæ¹é¢ï¼ æé模å¼ï¼Schemeï¼ IPï¼ä»IPå°åç²åº¦è¿è¡æéæ§å¶ Digestï¼æå¸¸ç¨ï¼ç¨ç±»ä¼¼äº username:password çæéæ è¯æ¥è¿è¡æéé ç½®ï¼ä¾¿äºåºåä¸ååºç¨æ¥è¿è¡æéæ§å¶ Worldï¼æå¼æ¾çæéæ§å¶æ¹å¼ï¼æ¯ä¸ç§ç¹æ®çdigest模å¼ï¼åªæä¸ä¸ªæéæ è¯âworld:anyoneâ Superï¼è¶ çº§ç¨æ· ææå¯¹è±¡ ææå¯¹è±¡æçæ¯æéèµäºçç¨æ·æä¸ä¸ªæå®å®ä½ï¼ä¾å¦IPå°åææ¯æºå¨ç¯ã æé Permission CREATEï¼æ°æ®èç¹å建æéï¼å 许ææå¯¹è±¡å¨è¯¥Znodeä¸å建åèç¹ DELETEï¼åèç¹å 餿éï¼å 许ææå¯¹è±¡å é¤è¯¥æ°æ®èç¹çåèç¹ READï¼æ°æ®èç¹ç读åæéï¼å 许ææå¯¹è±¡è®¿é®è¯¥æ°æ®èç¹å¹¶è¯»åå ¶æ°æ®å 容æåèç¹å表ç WRITEï¼æ°æ®èç¹æ´æ°æéï¼å 许ææå¯¹è±¡å¯¹è¯¥æ°æ®èç¹è¿è¡æ´æ°æä½ ADMINï¼æ°æ®èç¹ç®¡çæéï¼å 许ææå¯¹è±¡å¯¹è¯¥æ°æ®èç¹è¿è¡ACLç¸å ³è®¾ç½®æä½ #### 14.æå¡å¨è§è² Leader äºå¡è¯·æ±çå¯ä¸è°åº¦åå¤çè ï¼ä¿è¯é群äºå¡å¤ççé¡ºåºæ§ é群å é¨åæå¡çè°åº¦è Follower å¤ç客æ·ç«¯çéäºå¡è¯·æ±ï¼è½¬åäºå¡è¯·æ±ç»Leaderæå¡å¨ åä¸äºå¡è¯·æ±Proposalçæç¥¨ åä¸Leaderé举æç¥¨ Observer 3.3.0çæ¬ä»¥åå¼å ¥çä¸ä¸ªæå¡å¨è§è²ï¼å¨ä¸å½±åé群äºå¡å¤çè½åçåºç¡ä¸æåé群çéäºå¡å¤çè½å å¤ç客æ·ç«¯çéäºå¡è¯·æ±ï¼è½¬åäºå¡è¯·æ±ç»Leaderæå¡å¨ ä¸åä¸ä»»ä½å½¢å¼çæç¥¨ #### 15.Zookeeper ä¸ Serverå·¥ä½ç¶æ æå¡å¨å ·æåç§ç¶æï¼å嫿¯LOOKINGãFOLLOWINGãLEADINGãOBSERVINGã LOOKINGï¼å¯»æ¾Leaderç¶æã彿å¡å¨å¤äºè¯¥ç¶ææ¶ï¼å®ä¼è®¤ä¸ºå½åéç¾¤ä¸æ²¡æLeaderï¼å æ¤éè¦è¿å ¥Leaderéä¸¾ç¶æã FOLLOWINGï¼è·éè ç¶æã表æå½åæå¡å¨è§è²æ¯Followerã LEADINGï¼é¢å¯¼è ç¶æã表æå½åæå¡å¨è§è²æ¯Leaderã OBSERVINGï¼è§å¯è ç¶æã表æå½åæå¡å¨è§è²æ¯Observerã #### 16.æ°æ®åæ¥ æ´ä¸ªéç¾¤å®æLeaderé举ä¹åï¼Learnerï¼FolloweråObserverçç»ç§°ï¼ååLeaderæå¡å¨è¿è¡æ³¨åãå½Learneræå¡å¨æ³Leaderæå¡å¨å®ææ³¨ååï¼è¿å ¥æ°æ®åæ¥ç¯èã æ°æ®åæ¥æµç¨ï¼ï¼åä»¥æ¶æ¯ä¼ éçæ¹å¼è¿è¡ï¼ i. LearneråLearder注å ii. æ°æ®åæ¥ iii. åæ¥ç¡®è®¤ Zookeeperçæ°æ®åæ¥é常å为åç±»ï¼ ç´æ¥å·®å¼å忥ï¼DIFFåæ¥ï¼ å åæ»åå·®å¼å忥ï¼TRUNC+DIFFåæ¥ï¼ ä» åæ»åæ¥ï¼TRUNCåæ¥ï¼ å ¨é忥ï¼SNAPåæ¥ï¼ å¨è¿è¡æ°æ®åæ¥åï¼Leaderæå¡å¨ä¼å®ææ°æ®åæ¥åå§åï¼ peerLastZxidï¼ä»learneræå¡å¨æ³¨åæ¶åéçACKEPOCHæ¶æ¯ä¸æålastZxidï¼è¯¥Learneræå¡å¨æåå¤ççZXIDï¼ minCommittedLogï¼Leaderæå¡å¨Proposalç¼åéåcommittedLog䏿å°ZXID maxCommittedLogï¼Leaderæå¡å¨Proposalç¼åéåcommittedLog䏿大ZXID ç´æ¥å·®å¼å忥ï¼DIFFåæ¥ï¼ åºæ¯ï¼peerLastZxidä»äºminCommittedLogåmaxCommittedLogä¹é´ å åæ»åå·®å¼å忥ï¼TRUNC+DIFFåæ¥ï¼ åºæ¯ï¼å½æ°çLeaderæå¡å¨åç°æä¸ªLearneræå¡å¨å å«äºä¸æ¡èªå·±æ²¡æçäºå¡è®°å½ï¼é£ä¹å°±éè¦è®©è¯¥Learneræå¡å¨è¿è¡äºå¡åæ»--åæ»å°Leaderæå¡å¨ä¸åå¨çï¼åæ¶ä¹æ¯ææ¥è¿äºpeerLastZxidçZXID ä» åæ»åæ¥ï¼TRUNCåæ¥ï¼ åºæ¯ï¼peerLastZxid å¤§äº maxCommittedLog å ¨é忥ï¼SNAPåæ¥ï¼ åºæ¯ä¸ï¼peerLastZxid å°äº minCommittedLog åºæ¯äºï¼Leaderæå¡å¨ä¸æ²¡æProposalç¼åéåä¸peerLastZxidä¸çäºlastProcessZxid #### 17.zookeeperæ¯å¦ä½ä¿è¯äºå¡ç顺åºä¸è´æ§çï¼ zookeeperéç¨äºå ¨å±éå¢çäºå¡Idæ¥æ è¯ï¼ææçproposalï¼æè®®ï¼é½å¨è¢«æåºçæ¶åå ä¸äºzxidï¼zxidå®é 䏿¯ä¸ä¸ª64ä½çæ°åï¼é«32使¯epochï¼æ¶æ; 纪å ; ä¸; æ°æ¶ä»£ï¼ç¨æ¥æ è¯leader卿ï¼å¦æææ°çleader产çåºæ¥ï¼epochä¼èªå¢ï¼ä½32ä½ç¨æ¥éå¢è®¡æ°ã彿°äº§çproposalçæ¶åï¼ä¼ä¾æ®æ°æ®åºç䏤鶿®µè¿ç¨ï¼é¦å ä¼åå ¶ä»çserverååºäºå¡æ§è¡è¯·æ±ï¼å¦æè¶ è¿åæ°çæºå¨é½è½æ§è¡å¹¶ä¸è½å¤æåï¼é£ä¹å°±ä¼å¼å§æ§è¡ã #### 18.åå¸å¼é群ä¸ä¸ºä»ä¹ä¼æMasterï¼ å¨åå¸å¼ç¯å¢ä¸ï¼æäºä¸å¡é»è¾åªéè¦é群ä¸çæä¸å°æºå¨è¿è¡æ§è¡ï¼å ¶ä»çæºå¨å¯ä»¥å ±äº«è¿ä¸ªç»æï¼è¿æ ·å¯ä»¥å¤§å¤§åå°éå¤è®¡ç®ï¼æé«æ§è½ï¼äºæ¯å°±éè¦è¿è¡leaderé举ã #### 19.zkèç¹å®æºå¦ä½å¤çï¼ Zookeeperæ¬èº«ä¹æ¯éç¾¤ï¼æ¨èé ç½®ä¸å°äº3个æå¡å¨ãZookeeperèªèº«ä¹è¦ä¿è¯å½ä¸ä¸ªèç¹å®æºæ¶ï¼å ¶ä»èç¹ä¼ç»§ç»æä¾æå¡ã 妿æ¯ä¸ä¸ªFollower宿ºï¼è¿æ2å°æå¡å¨æä¾è®¿é®ï¼å 为Zookeeperä¸çæ°æ®æ¯æå¤ä¸ªå¯æ¬çï¼æ°æ®å¹¶ä¸ä¼ä¸¢å¤±ï¼ 妿æ¯ä¸ä¸ªLeader宿ºï¼Zookeeperä¼éä¸¾åºæ°çLeaderã ZKéç¾¤çæºå¶æ¯åªè¦è¶ è¿åæ°çèç¹æ£å¸¸ï¼éç¾¤å°±è½æ£å¸¸æä¾æå¡ãåªæå¨ZKèç¹æå¾å¤ªå¤ï¼åªå©ä¸åæä¸å°ä¸åèç¹è½å·¥ä½ï¼é群æå¤±æã æä»¥ 3个èç¹çclusterå¯ä»¥ææ1个èç¹(leaderå¯ä»¥å¾å°2票>1.5) 2个èç¹çclusterå°±ä¸è½ææä»»ä½1个èç¹äº(leaderå¯ä»¥å¾å°1票<=1) #### 20.Zookeeperæåªå ç§é¨ç½²æ¨¡å¼ï¼ åæºæ¨¡å¼ã伪é群模å¼ãé群模å¼ã #### 21.é群æå°è¦å å°æºå¨ï¼é群è§åæ¯ææ ·ç? é群è§å为2N+1å°ï¼N>0ï¼å³3å°ã #### 22.éç¾¤æ¯æå¨ææ·»å æºå¨åï¼ å ¶å®å°±æ¯æ°´å¹³æ©å®¹äºï¼Zookeeperå¨è¿æ¹é¢ä¸å¤ªå¥½ãä¸¤ç§æ¹å¼ï¼ å ¨é¨éå¯ï¼å ³éææZookeeperæå¡ï¼ä¿®æ¹é ç½®ä¹åå¯å¨ãä¸å½±åä¹å客æ·ç«¯çä¼è¯ã é个éå¯ï¼å¨è¿ååæ´»å³å¯ç¨çååä¸ï¼ä¸å°æºå¨éå¯ä¸å½±åæ´ä¸ªéç¾¤å¯¹å¤æä¾æå¡ãè¿æ¯æ¯è¾å¸¸ç¨çæ¹å¼ã 3.5çæ¬å¼å§æ¯æå¨ææ©å®¹ã #### 23.Zookeeper对èç¹çwatchçå¬éç¥æ¯æ°¸ä¹ çåï¼ä¸ºä»ä¹ä¸æ¯æ°¸ä¹ ç? 䏿¯ã宿¹å£°æï¼ä¸ä¸ªWatchäºä»¶æ¯ä¸ä¸ªä¸æ¬¡æ§ç触åå¨ï¼å½è¢«è®¾ç½®äºWatchçæ°æ®åçäºæ¹åçæ¶åï¼åæå¡å¨å°è¿ä¸ªæ¹ååéç»è®¾ç½®äºWatchç客æ·ç«¯ï¼ä»¥ä¾¿éç¥å®ä»¬ã 为ä»ä¹ä¸æ¯æ°¸ä¹ çï¼ä¸¾ä¸ªä¾åï¼å¦ææå¡ç«¯åå¨é¢ç¹ï¼èçå¬ç客æ·ç«¯å¾å¤æ åµä¸ï¼æ¯æ¬¡åå¨é½è¦éç¥å°ææç客æ·ç«¯ï¼ç»ç½ç»åæå¡å¨é æå¾å¤§ååã ä¸è¬æ¯å®¢æ·ç«¯æ§è¡getData(â/èç¹Aâ,true)ï¼å¦æèç¹Aåçäºåæ´æå é¤ï¼å®¢æ·ç«¯ä¼å¾å°å®çwatchäºä»¶ï¼ä½æ¯å¨ä¹åèç¹Aååçäºåæ´ï¼è客æ·ç«¯å没æè®¾ç½®watchäºä»¶ï¼å°±ä¸åç»å®¢æ·ç«¯åéã å¨å®é åºç¨ä¸ï¼å¾å¤æ åµä¸ï¼æä»¬ç客æ·ç«¯ä¸éè¦ç¥éæå¡ç«¯çæ¯ä¸æ¬¡åå¨ï¼æåªè¦ææ°çæ°æ®å³å¯ã #### 24.ZABåPaxosç®æ³çèç³»ä¸åºå«ï¼ ç¸åç¹ï¼ 两è é½åå¨ä¸ä¸ªç±»ä¼¼äºLeaderè¿ç¨çè§è²ï¼ç±å ¶è´è´£åè°å¤ä¸ªFollowerè¿ç¨çè¿è¡ Leaderè¿ç¨é½ä¼çå¾ è¶ è¿åæ°çFollowerååºæ£ç¡®çåé¦åï¼æä¼å°ä¸ä¸ªææ¡è¿è¡æäº¤ ZABåè®®ä¸ï¼æ¯ä¸ªProposalä¸é½å å«ä¸ä¸ª epoch 弿¥ä»£è¡¨å½åçLeader卿ï¼Paxosä¸åå为Ballot ä¸åç¹ï¼ ZABç¨æ¥æå»ºé«å¯ç¨çåå¸å¼æ°æ®ä¸»å¤ç³»ç»ï¼Zookeeperï¼ï¼Paxosæ¯ç¨æ¥æå»ºåå¸å¼ä¸è´æ§ç¶ææºç³»ç»ã #### 25.Zookeeperçå ¸ååºç¨åºæ¯ æ°æ®åå¸/订é è´è½½åè¡¡ å½åæå¡ åå¸å¼åè°/éç¥ é群管ç Masteré举 åå¸å¼é åå¸å¼éå #### 26.Zookeeper å Dubbo çå ³ç³»ï¼ Zookeeperçä½ç¨ï¼ zookeeperç¨æ¥æ³¨åæå¡åè¿è¡è´è½½åè¡¡ï¼åªä¸ä¸ªæå¡ç±åªä¸ä¸ªæºå¨æ¥æä¾å¿ é让è°ç¨è ç¥éï¼ç®åæ¥è¯´å°±æ¯ipå°ååæå¡åç§°ç对åºå ³ç³»ãå½ç¶ä¹å¯ä»¥éè¿ç¡¬ç¼ç çæ¹å¼æè¿ç§å¯¹åºå ³ç³»å¨è°ç¨æ¹ä¸å¡ä»£ç ä¸å®ç°ï¼ä½æ¯å¦ææä¾æå¡çæºå¨ææè°ç¨è æ æ³ç¥æï¼å¦æä¸æ´æ¹ä»£ç ä¼ç»§ç»è¯·æ±ææçæºå¨æä¾æå¡ãzookeeperéè¿å¿è·³æºå¶å¯ä»¥æ£æµææçæºå¨å¹¶å°æææºå¨çipåæå¡å¯¹åºå ³ç³»ä»å表ä¸å é¤ãè³äºæ¯æé«å¹¶åï¼ç®åæ¥è¯´å°±æ¯æ¨ªåæ©å±ï¼å¨ä¸æ´æ¹ä»£ç çæ åµéè¿æ·»å æºå¨æ¥æé«è¿ç®è½åãéè¿æ·»å æ°çæºå¨åzookeeper注åæå¡ï¼æå¡çæä¾è å¤äºè½æå¡ç客æ·å°±å¤äºã dubboï¼ æ¯ç®¡çä¸é´å±çå·¥å ·ï¼å¨ä¸å¡å±å°æ°æ®ä»åºé´æé叏夿å¡çæ¥å ¥åæå¡æä¾è éè¦è°åº¦ï¼dubboæä¾ä¸ä¸ªæ¡æ¶è§£å³è¿ä¸ªé®é¢ã 注æè¿éçdubboåªæ¯ä¸ä¸ªæ¡æ¶ï¼è³äºä½ æ¶å䏿¾ä»ä¹æ¯å®å ¨åå³äºä½ çï¼å°±åä¸ä¸ªæ±½è½¦éª¨æ¶ï¼ä½ éè¦é ä½ çè½®å弿ãè¿ä¸ªæ¡æ¶ä¸è¦å®æè°åº¦å¿ é¡»è¦æä¸ä¸ªåå¸å¼ç注åä¸å¿ï¼å¨åæææå¡çå æ°æ®ï¼ä½ å¯ä»¥ç¨zkï¼ä¹å¯ä»¥ç¨å«çï¼åªæ¯å¤§å®¶é½ç¨zkã zookeeperådubboçå ³ç³»ï¼ Dubbo çå°æ³¨åä¸å¿è¿è¡æ½è±¡ï¼å®å¯ä»¥å¤æ¥ä¸åçåå¨åªä»ç»æ³¨åä¸å¿æä¾æå¡ï¼æ ZooKeeperï¼Memcachedï¼Redis çã å¼å ¥äº ZooKeeper ä½ä¸ºåå¨åªä»ï¼ä¹å°±æ ZooKeeper çç¹æ§å¼è¿æ¥ãé¦å æ¯è´è½½åè¡¡ï¼å注åä¸å¿çæ¿è½½è½åæ¯æéçï¼å¨æµéè¾¾å°ä¸å®ç¨åº¦çæ¶ åå°±éè¦åæµï¼è´è½½åè¡¡å°±æ¯ä¸ºäºåæµèåå¨çï¼ä¸ä¸ª ZooKeeper 群é åç¸åºç Web åºç¨å°±å¯ä»¥å¾å®¹æè¾¾å°è´è½½åè¡¡ï¼èµæºåæ¥ï¼ååæè´è½½åè¡¡è¿ä¸ å¤ï¼èç¹ä¹é´çæ°æ®åèµæºéè¦åæ¥ï¼ZooKeeper é群就天ç¶å ·å¤æè¿æ ·çåè½ï¼å½åæå¡ï¼å°æ ç¶ç»æç¨äºç»´æ¤å ¨å±çæå¡å°ååè¡¨ï¼æå¡æä¾è å¨å¯å¨ çæ¶åï¼å ZooKeeper ä¸çæå®èç¹ /dubbo/${serviceName}/providers ç®å½ä¸åå ¥èªå·±ç URL å°åï¼è¿ä¸ªæä½å°±å®æäºæå¡çåå¸ã å ¶ä»ç¹æ§è¿æ Mast é举ï¼åå¸å¼éçã #### 27.zookeeperè´è½½åè¡¡ånginxè´è½½åè¡¡åºå« zookeeper ä¸åå¨åç¹é®é¢ï¼zabæºå¶ä¿è¯åç¹æ éå¯éæ°é举ä¸ä¸ªleader åªè´è´£æå¡ç注åä¸åç°ï¼ä¸è´è´£è½¬åï¼åå°ä¸æ¬¡æ°æ®äº¤æ¢ï¼æ¶è´¹æ¹ä¸æå¡æ¹ç´æ¥éä¿¡ï¼ éè¦èªå·±å®ç°ç¸åºçè´è½½åè¡¡ç®æ³ nginx åå¨åç¹é®é¢ï¼åç¹è´è½½é«æ°æ®é大,éè¦éè¿KeepAlived+LVS夿ºå®ç°é«å¯ç¨ æ¯æ¬¡è´è½½ï¼é½å å½ä¸æ¬¡ä¸é´äººè½¬åè§è²ï¼å¢å ç½ç»è´è½½éï¼æ¶è´¹æ¹ä¸æå¡æ¹é´æ¥éä¿¡ï¼ èªå¸¦è´è½½åè¡¡ç®æ³ ### åèèµæ https://www.cnblogs.com/lanqiu5ge/p/9405601.html https://blog.csdn.net/weixin_43122090/article/details/103645642 https://www.cnblogs.com/liulong99/p/13036794.html https://zhuanlan.zhihu.com/p/94146775 https://segmentfault.com/a/1190000014479433