zookeeper 叢集搭建
zookeeper 叢集搭建
透過 VMware ,我們安裝了三臺虛擬機器,用來搭建 zookeeper 叢集,虛擬機器網路地址如下:
hostname ipaddress subnet mask geteway
1、 master 192.168.146.200 255.255.255.0 192.168.146.2
2、 slave1 192.168.146.201 255.255.255.0 192.168.146.2
3、 slave2 192.168.146.202 255.255.255.0 192.168.146.2
在搭建 zookeeper 叢集之前,我們首先要明白為什麼要選擇三臺機器搭建,2臺不可以嗎?4臺不可以嗎?
zookeeper 叢集通常是用來對使用者的分散式應用程式提供協調服務的,為了保證資料的一致性,對 zookeeper 叢集進行了這樣三種角色劃分:leader、follower、observer分別對應著總統、議員和觀察者。
總統(leader):負責進行投票的發起和決議,更新系統狀態。
議員(follower):用於接收客戶端請求並向客戶端返回結果以及在選舉過程中參與投票。
觀察者(observer):也可以接收客戶端連線,將寫請求轉發給leader節點,但是不參與投票過程,只同步leader的狀態。通常對查詢操作做負載。
1、為什麼zookeeper節點是奇數?
我們知道,在每臺機器資料保持一致的情況下,zookeeper叢集可以保證,客戶端發起的每次查詢操作,叢集節點都能返回同樣的結果。
但是對於客戶端發起的修改、刪除等能改變資料的操作呢?叢集中那麼多臺機器,你修改你的,我修改我的,最後返回叢集中哪臺機器的資料呢?
這就是一盤散沙,需要一個領導,於是在zookeeper叢集中,leader的作用就體現出來了,只有leader節點才有權利發起修改資料的操作,而follower節點即使接收到了客戶端發起的修改操作,也要將其轉交給leader來處理,leader接收到修改資料的請求後,會向所有follower廣播一條訊息,讓他們執行某項操作,follower 執行完後,便會向 leader 回覆執行完畢。當 leader 收到半數以上的 follower 的確認訊息,便會判定該操作執行完畢,然後向所有 follower 廣播該操作已經生效。
所以zookeeper叢集中leader是不可缺少的,但是 leader 節點是怎麼產生的呢?其實就是由所有follower 節點選舉產生的,講究民主嘛,而且leader節點只能有一個,畢竟一個國家不能有多個總統。
這個時候回到我們的小標題,為什麼 zookeeper 節點數是奇數,我們下面來一一來說明:
①、容錯率
首先從容錯率來說明:(需要保證叢集能夠有半數進行投票)
2臺伺服器,至少2臺正常執行才行(2的半數為1,半數以上最少為2),正常執行1臺伺服器都不允許掛掉,但是相對於 單節點伺服器,2臺伺服器還有兩個單點故障,所以直接排除了。
3臺伺服器,至少2臺正常執行才行(3的半數為1.5,半數以上最少為2),正常執行可以允許1臺伺服器掛掉
4臺伺服器,至少3臺正常執行才行(4的半數為2,半數以上最少為3),正常執行可以允許1臺伺服器掛掉
5臺伺服器,至少3臺正常執行才行(5的半數為2.5,半數以上最少為3),正常執行可以允許2臺伺服器掛掉
②、防腦裂
腦裂叢集的腦裂通常是發生在節點之間通訊不可達的情況下,叢集會分裂成不同的小叢集,小叢集各自選出自己的leader節點,導致原有的叢集出現多個leader節點的情況,這就是腦裂。
3臺伺服器,投票選舉半數為1.5,一臺服務裂開,和另外兩臺伺服器無法通行,這時候2臺伺服器的叢集(2票大於半數1.5票),所以可以選舉出leader,而 1 臺伺服器的叢集無法選舉。
4臺伺服器,投票選舉半數為2,可以分成 1,3兩個叢集或者2,2兩個叢集,對於 1,3叢集,3叢集可以選舉;對於2,2叢集,則不能選擇,造成沒有leader節點。
5臺伺服器,投票選舉半數為2.5,可以分成1,4兩個叢集,或者2,3兩叢集,這兩個叢集分別都只能選舉一個叢集,滿足zookeeper叢集搭建數目。
以上分析,我們從容錯率以及防止腦裂兩方面說明了3臺伺服器是搭建叢集的最少數目,4臺發生腦裂時會造成沒有leader節點的錯誤。
2、下載 zookeeper
官網下載地址:
3、安裝JDK
由於zookeeper叢集的執行需要Java執行環境,所以需要首先安裝 JDK,關於安裝步驟,我在前面部落格介紹過: https://www.cnblogs.com/ysocean/p/6952166.html
4、解壓 zookeeper
在 /usr/local 目錄下新建 software 目錄,然後將 zookeeper 壓縮檔案上傳到該目錄中,然後透過如下命令解壓。
tar -zxvf zookeeper-3.6.2.tar.gz
6、修改配置檔案 zoo.cfg
將zookeeper壓縮檔案解壓後,我們進入到 conf 目錄:
將 zoo_sample.cfg 檔案複製並重新命名為 zoo.cfg 檔案。
cp zoo_sample.cfg zoo.cfg
然後透過 vim zoo.cfg 命令對該檔案進行修改:
上面紅色框住的內容即是我們修改的內容:
①、tickTime:基本事件單元,這個時間是作為Zookeeper伺服器之間或客戶端與伺服器之間維持心跳的時間間隔,每隔tickTime時間就會傳送一個心跳;最小 的session過期時間為2倍tickTime
②、dataDir:儲存記憶體中資料庫快照的位置,除非另有說明,否則指向資料庫更新的事務日誌。注意:應該謹慎的選擇日誌存放的位置,使用專用的日誌儲存裝置能夠大大提高系統的效能,如果將日誌儲存在比較繁忙的儲存裝置上,那麼將會很大程度上影像系統效能。
③、client:監聽客戶端連線的埠。
④、initLimit:允許follower連線並同步到Leader的初始化連線時間,以tickTime為單位。當初始化連線時間超過該值,則表示連線失敗。
⑤、syncLimit:表示Leader與Follower之間傳送訊息時,請求和應答時間長度。如果follower在設定時間內不能與leader通訊,那麼此follower將會被丟棄。
⑥、server.A=B:C:D
A:其中 A 是一個數字,表示這個是伺服器的編號;
B:是這個伺服器的 ip 地址;
C:Leader選舉的埠;
D:Zookeeper伺服器之間的通訊埠。
我們需要修改的第一個是 dataDir ,在指定的位置處建立好目錄。
第二個需要新增的是 server.A=B:C:D 配置,其中 A 對應下面我們即將介紹的myid 檔案。B是叢集的各個IP地址,C:D 是埠配置。
7、建立 myid 檔案
在 上一步 dataDir 指定的目錄下,建立 myid 檔案。
然後在該檔案新增上一步 server 配置的對應 A 數字。
比如我們上面的配置:
dataDir=/usr/local/software/zookeeper-3.3.6/data
- dataDir 記憶體資料庫快照存放地址,如果沒有指定事務日誌存放地址(dataLogDir),預設也是存放在這個路徑下,建議兩個地址分開存放到不同的裝置上。
- tickTime 心跳基本時間單位,毫秒級,ZK基本上所有的時間都是這個時間的整數倍。
高階配置(可選,有的需要直接透過系統屬性進行設定)
- dataLogDir 將事務日誌儲存在該路徑下,比較重要,這個日誌儲存的裝置效率會影響ZK的寫吞吐量。
然後下面配置是:
server.0=192.168.146.200:2888:3888server.1=192.168.146.201:2888:3888server.2=192.168.146.202:2888:3888
那麼就必須在 192.168.146.200 機器的的 /usr/local/software/zookeeper-3.6.2/data 目錄下建立 myid 檔案,然後在該檔案中寫上 0 即可。
後面的機器依次在相應目錄建立myid檔案,寫上相應配置數字即可。
8、配置環境變數
為了能夠在任意目錄啟動zookeeper叢集,我們需要配置環境變數。
ps:你也可以不配,這不是搭建叢集的必要操作,只不過如果你不配置環境變數,那麼每次啟動zookeeper需要到安裝檔案的 bin 目錄下去啟動。
首先進入到 /etc/profile 目錄,新增相應的配置資訊:
#set zookeeper environment export ZK_HOME=/usr/local/software/zookeeper-3.3.6 export PATH=$PATH:$ZK_HOME/bin
然後透過如下命令使得環境變數生效:
source /etc/profile
9、啟動zookeeper服務
啟動命令:
zkServer.sh start
停止命令:
zkServer.sh stop
重啟命令:
zkServer.sh restart
檢視叢集節點狀態:
zkServer.sh status
我們分別對叢集三臺機器執行啟動命令。執行完畢後,分別檢視叢集節點狀態:
出現如下即是叢集搭建成功:
三臺機器,slave1 成功的透過了選舉稱為了leader,而剩下的兩臺成為了 follower。這時候,如果你將slave1關掉,會發現剩下兩臺又會有一臺變成了 leader節點。
jps檢視執行情況
10、搭建問題
如果沒有出現上面的狀態,說明搭建過程出了問題,那麼解決問題的首先就是檢視日誌檔案:
zookeeper 日誌檔案目錄在:
dataDir 配置的目錄下,檔名稱為: zookeeper.out。透過檢視日誌來解決相應的問題。下面是兩種常見的問題:
①、防火牆
防火牆開三個埠:
3個埠的作用
1、2181:對cline端提供服務
2、3888:選舉leader使用
3、2888:叢集內機器通訊使用(Leader監聽此埠)
firewall-cmd --zone=public --add-port=2888/tcp --permanent
firewall-cmd --zone=public --add-port=3888/tcp --permanent
firewall-cmd --zone=public --add-port=2181/tcp --permanent
firewall-cmd --reload
②、dataDir 配置的目錄沒有建立
在 zoo.cfg 檔案中,會有對 dataDir 的一項配置,需要建立該目錄,並且注意要在該目錄下建立 myid 檔案,裡面的配置和 zoo.cfg 的server.x 配置保持一致。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25469263/viewspace-2723453/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 搭建zookeeper叢集(偽叢集)
- Zookeeper叢集搭建
- 搭建 zookeeper 叢集
- zookeeper叢集及kafka叢集搭建Kafka
- ZooKeeper 搭建 solr 叢集Solr
- zookeeper叢集的搭建
- zookeeper 高可用叢集搭建
- Zookeeper 叢集環境搭建
- zookeeper偽叢集模式搭建模式
- linux下搭建ZooKeeper叢集(偽叢集)Linux
- Linux下搭建ZooKeeper叢集Linux
- Zookeeper簡介與叢集搭建
- Kafka學習之(五)搭建kafka叢集之Zookeeper叢集搭建Kafka
- 面試官:Zookeeper叢集怎麼搭建?面試
- Zookeeper叢集搭建和簡介(二)
- Zookeeper叢集 + Kafka叢集Kafka
- 基於 ZooKeeper 搭建 Spark 高可用叢集Spark
- ZooKeeper學習筆記一:叢集搭建筆記
- 基於zookeeper+leveldb搭建activemq叢集MQ
- 基於 ZooKeeper 搭建 Hadoop 高可用叢集Hadoop
- 分散式協調服務☞zookeeper叢集搭建分散式
- ZooKeeper 系列(二)—— Zookeeper單機環境和叢集環境搭建
- Mac 使用 docker 搭建 kafka 叢集 + Zookeeper + kafka-managerMacDockerKafka
- Hadoop叢集之 ZooKeeper和Hbase環境搭建Hadoop
- 使用 Docker 一步搞定 ZooKeeper 叢集的搭建Docker
- Zookeeper叢集 + Kafka叢集 + KafkaOffsetMonitor 監控薦Kafka
- ActiveMQ+ZooKeeper 叢集整合MQ
- 叢集搭建
- ActiveMQ+ZooKeeper 偽叢集整合MQ
- 安裝Zookeeper和Kafka叢集Kafka
- zookeeper叢集崩潰處理
- K8S 搭建 Kafka:2.13-2.6.0 和 Zookeeper:3.6.2 叢集K8SKafka
- DevOpsSOP 基於阿里雲VPC搭建Storm+Kafka+Zookeeper叢集dev阿里ORMKafka
- Redis系列:搭建Redis叢集(叢集模式)Redis模式
- redis叢集搭建Redis
- nacos 叢集搭建
- kafka叢集搭建Kafka
- Ambari叢集搭建