- GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯系小編并注明來源,
- GreatSQL是MySQL的國產分支版本,使用上與MySQL一致,
- 作者:蟹黃瓜子
- 文章來源:GreatSQL社區投稿
1.Zookeeper概述
Zookeeper對于很多人開始可能都有所耳聞,他的使用場景也很多,可以以節點的形式存盤持久化資料,也可以使用這一特性來作為微服務的服務注冊中心,簡單來說,Zookeeper 是一個開源的分布式的,為分布式框架提供協調服務的 Apache 專案,
Zookeeper從設計模式角度來理解,是一個基于觀察者模式設計的分布式服務管理框架,是一個檔案系統,負責存盤和管理大家都關心的資料,然后接受觀察者的注冊;也是一種通知機制,一旦這些資料的狀態發生變化,Zookeeper就將負責通知已經在Zookeeper上注冊的那些觀察者做出相應的反應,
2.Zookeeper的應用場景和一些注意事項
ZooKeeper 資料模型的結構與 Unix 檔案系統很類似,整體上可以看作是一棵樹,每個節點稱做一個 ZNode,每一個 ZNode 默認能夠存盤 1MB 的資料,每個 ZNode 都可以通過其路徑唯一標識,
Zookeeper的應用場景有許多,比如統一的配置管理,在許多分布式環境中,通常一個服務集群的組態檔資訊是一致的,如果需要修改配置資訊內容,不可能逐個對每個服務做修改,而是希望修改一次配置資訊就可以同步給所有服務節點,Zookeeper就可以實作這個業務,十分簡單,可以將服務的配置資訊寫入ZooKeeper上的一個Znode中,讓每個集群節點的服務器都去監聽這個Znode,一旦資料被修改,ZooKeeper將通知各個服務器,達到同步的效果,還可以做統一的集群管理、服務器的動態上下線、以及軟負載均衡的效果,
在實踐Zookeeper前還需要注意的內容:
- Zookeeper:一個領導者(Leader),多個跟隨者(Follower)組成的集群,
- 集群正常運行的前提條件是集群節點大于半數,因此集群節點數最好采用奇數個,
- 全域資料一致:每個Server保存一份相同的資料副本,Client無論連接到哪個Server,資料都是一致的,
- 更新請求順序執行,來自同一個Client的更新請求按其發送順序依次執行,
- 資料更新原子性,一次資料更新要么成功,要么失敗,
- 實時性,在一定時間范圍內,Client能讀到最新資料,
3.簡單部署Zookeeper集群
官網地址:https://zookeeper.apache.org/,本文采用VMware創建3臺虛擬機構建集群,XShell工具連接虛擬機進行操作:
首先為機子安裝jdk,采用yum源安裝,注意設定yum,靜等安裝成功出現“Complete”即可:
[root@localhost ~]# yum install -y java-1.8.0-openjdk.x86_64
- 進入
/usr/local/目錄,將提前準備好的“zookeeper-3.4.5.tar.gz”檔案傳入目錄,并解壓:
[root@localhost ~]# cd /usr/local/
[root@localhost local]# tar zxvf zookeeper-3.4.5.tar.gz
- 修改檔案名為“zookeeper”:
[root@localhost local]# mv zookeeper-3.4.5 zookeeper
- 修改環境變數:
[root@localhost local]# vi /etc/profile
# 進入insert模式后在上方添加一下內容后保存退出
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
- 重新編譯“/etc/profile”:
[root@localhost zookeeper]# source /etc/profile
- 進入conf目錄下,將“zoo_sample.cfg”拷貝生成“zoo.cfg”檔案作為zookeeper的組態檔:
[root@localhost zookeeper]# cd conf/
[root@localhost conf]# cp zoo_sample.cfg zoo.cfg
-
修改“zoo.cfg”檔案:
-
- 組態檔中主要要配置資料存放路徑和日志路徑,zookeeper默認的資料存放路徑為"dataDir=/tmp/zookeeper",為臨時資料,會過期,本文將重新指定相關位置,存放在“自己”的路徑下,當然也可以根據需要建立單獨路徑進行存放,
# 將組態檔中的dataDir替換為此路徑
dataDir=/usr/local/zookeeper/data
# 在組態檔中添加以下配置,ip地址根據規劃
# 其中server.1代表集群的第幾胎集群,后續會配置myid檔案,myid檔案內容和對應的數字保存一致,例如1.131這臺機器myid就是1
# ip地址為集群的三臺機器,也可以配置host使用主機名,兩個埠號心跳埠和資料埠
dataLogDir=/usr/local/zookeeper/log
server.1=192.168.1.11:2888:3888
server.2=192.168.1.12:2888:3888
server.3=192.168.1.13:2888:3888
-
簡單解釋下集群配置:
-
- server.A=B:C:D
- A 是一個數字,表示這個是第幾號服務器;集群模式下配置一個檔案 myid,這個檔案在 dataDir 目錄下,這個檔案里面有一個資料就是 A 的值,Zookeeper 啟動時讀取此檔案,拿到里面的資料與 zoo.cfg 里面的配置資訊比較從而判斷到底是哪個 server,
- B 是這個服務器的地址;
- C 是這個服務器 Follower 與集群中的 Leader 服務器交換資訊的埠;
- D 是萬一集群中的 Leader 服務器掛了,需要一個埠來重新進行選舉,選出一個新的Leader,而這個埠就是用來執行選舉時服務器相互通信的埠,
-
回到”zookeeper“目錄下,創建組態檔中提到的兩個路徑并賦予權限:
[root@localhost conf]# cd ..
[root@localhost zookeeper]# mkdir -m 755 data
[root@localhost zookeeper]# mkdir -m 755 log
- 來到“data/”路徑下,創建myid檔案,并給相應值
1:
[root@localhost zookeeper]# cd data/
[root@localhost data]# vi myid
- 此刻對于集群節點的第一臺機器就配置完成了,另外兩臺機器需要在準備好環境并設定好環境變數的前提下進行
- 通過第一臺機器將配置好的zookeeper及集群配置下發到另外兩臺機器上,注意修改對應機器的myid:
[root@localhost data]# scp -r /usr/local/zookeeper [email protected]:/usr/local/
[root@localhost data]# scp -r /usr/local/zookeeper [email protected]:/usr/local/
- 修改myid值為2和3后,集群部署完畢,
- 進入到01機器的zookeeper目錄下,啟動zookeeper:
[root@localhost zookeeper]# bin/zkServer.sh start
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@localhost zookeeper]# bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
- 此時集群沒辦法起來,因為目前只有一個節點開啟
- 當第二臺啟動以后,集群節點超過半數,第二臺機器就會選舉成為leader
[root@localhost zookeeper]# bin/zkServer.sh start
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@localhost zookeeper]# bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: leader
[root@localhost zookeeper]#
- 第一臺就變成follower了
[root@localhost zookeeper]# bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower
- 開啟第三臺后,第二臺機器已經是leader了,除非機器宕機會觸發重新選舉
- 關于zookeeper的操作可以通過啟動啟動客戶端:
[root@localhost zookeeper]# bin/zkCli.sh
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]
- 至此測驗完成,zookeeper集群部署完畢,更多zookeeper操作可以參照zookeeper官方檔案,
Enjoy GreatSQL ??
關于 GreatSQL
GreatSQL是由萬里資料庫維護的MySQL分支,專注于提升MGR可靠性及性能,支持InnoDB并行查詢特性,是適用于金融級應用的MySQL分支版本,
相關鏈接: GreatSQL社區 Gitee GitHub Bilibili
GreatSQL社區:
捉蟲活動詳情:https://greatsql.cn/thread-97-1-1.html
社區博客有獎征稿詳情:https://greatsql.cn/thread-100-1-1.html

技術交流群:
微信:掃碼添加
GreatSQL社區助手微信好友,發送驗證資訊加群,

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/541316.html
標籤:MySQL
