ZooKeeper集群安裝配置使用
ZooKeeper
Apache
CentOS6.8
單機版的安裝請參看我之前的文章《ZooKeeper單機版安裝配置——集群版後面再發》
1、伺服器說明
伺服器1:192.168.1.101;埠:2181,2881,3881
伺服器2:192.168.1.102;埠:2182,2882,3882
伺服器3:192.168.1.103;埠:2183,2882,3883
2、修改Host
使用root用戶,vi /etc/hosts,在每一台服務的Host配置文件里增加如下內容:
## zookeeper env
192.168.1.101 leo.dis1
192.168.1.102 leo.dis2
192.168.1.103 leo.dis3
3、下載、解壓縮、配置
具體參看《ZooKeeper單機版安裝配置》。注意以下更改:
1)分別將zookeeper目錄改為zk1、zk2、zk3。
2)zoo.cfg裡面clientPort要根據伺服器的不同設置為2181、2182、2183。
3)zoo.cfg裡面增加如下伺服器配置:
server.1=leo.dis1:2881:3881
server.2=leo.dis2:2882:3882
server.3=leo.dis3:2883:3883
4) 根據伺服器的不同,在data目錄下創建myid文件,內容為1、2、3
其他後續操作可參看《ZooKeeper單機版安裝配置》。
6、ZooKeeper選舉機制
ZooKeeper採用Fast Leader Election演算法。
ZooKeeper伺服器共有4個狀態:
LOOKING:尋找Leader狀態。
LEADING:領導者。
FOLLOWING:跟隨者。
OBSERVING:觀察者。
大致的過程就是:
1) 服務啟動之後,先選擇自己作為Leader,廣播通知其他伺服器,並等待接收其他伺服器的發送的選票。
2) 不停地接收其他伺服器發送的選票,根據ZXID和伺服器的ID更新自己的選票。
3) 直到某伺服器的選票過半數,設置為Leader,其他都是Follower。
4) 當Leader已經確定的情況下,新加入的伺服器也只能是Follower。
ZXID:ZooKeeper狀態的每一次改變(每一次請求), 都對應著一個遞增的Transaction id, 該id稱為zxid. 由於zxid的遞增性質, 如果zxid1小於zxid2, 那麼zxid1肯定先於zxid2發生. 創建任意節點, 或者更新任意節點的數據, 或者刪除任意節點, 都會導致Zookeeper狀態發生改變, 從而導致zxid的值增加。
初始狀態,大家的ZXID都一致,那就就選舉ID(myid裡面配置的數字)最大的。
假設有5台伺服器:
1)伺服器1啟動,此時只有它一台伺服器啟動了,它發出去的消息沒有任何響應,所以它的選舉狀態一直是LOOKING狀態。
2)伺服器2啟動,它與最開始啟動的伺服器1進行通信,互相交換自己的選舉結果,由於兩者都沒有歷史數據,所以id值較大的伺服器2勝出,但是由於沒有達到超過半數以上的伺服器都同意選舉它(半數以上是3),所以伺服器1,2還是繼續保持LOOKING狀態。
3)伺服器3啟動,根據前面的理論分析,伺服器3先選自己為Leader,伺服器1、2分別也選它為Leader(ID最大),所以它成為了這次選舉的leader。
4)伺服器4啟動,根據前面的分析,理論上伺服器4應該是伺服器1,2,3,4中最大的,但是由於前面已經有半數以上的伺服器選舉了伺服器3,所以它只能做Follower。
5)伺服器5啟動,同4一樣,當Follower。


※ZooKeeper單機版安裝配置——集群版後面再發
※MySQL5.7主從複製
※Keepalived+Nginx高可用安裝部署(含Nginx+Tomcat負載均衡)
※Redis3.2.9單機版安裝
※基於Redis的消息隊列之生產消費者模式(明天寫發布/訂閱模式)
TAG:Java個人學習心得 |
※快速安裝與配置kubernetes集群搭建
※使用Kubespray部署生產可用的Kubernetes集群
※SpringCloud實現Eureka集群配置
※redis單點、主從、哨兵sentinel,集群cluster配置使用
※Docker Compose搭建MySQL主從複製集群
※Docker環境下搭建DNS LVS(keepAlived) OpenResty伺服器簡易集群
※docker zookeeper 集群搭建
※如何使用Rancher 2.0在Kubernetes集群上部署Istio
※多Kubernetes集群角色管理
※如何在本地數據中心安裝Service Fabric for Windows集群
※集群服務間通信之RoutingMesh
※使用 Artifactory 集群作為文件共享中心
※Docker簡單部署Ceph測試集群
※如何在 Kubernetes 環境中運行 Spark 集群
※Tomcat集群實現Session共享
※ganglia集群版搭建(支持hadoop和spark)
※基於Codis的Redis集群部署
※tomcat集群和session共享
※如何在Kubernetes中管理和操作Kafka集群
※SpringCloud如何實現Eureka集群、HA機制?