ZooKeeper集群

ZooKeeper 是 Apache 的一個(gè)頂級(jí)項(xiàng)目,為分布式應(yīng)用提供高效、高可用的分布式協(xié)調(diào)服務(wù),提供了諸如數(shù)據(jù)發(fā)布/訂閱、負(fù)載均衡、命名服務(wù)、分布式協(xié)調(diào)/通知和分布式鎖等分布式基礎(chǔ)服務(wù)。由于 ZooKeeper 便捷的使用方式、卓越的性能和良好的穩(wěn)定性,被廣泛地應(yīng)用于諸如 Hadoop、HBase、Kafka 和 Dubbo 等大型分布式系統(tǒng)中。

一個(gè) ZooKeeper 集群通常由一組機(jī)器組成,一般 3 臺(tái)以上就可以組成一個(gè)可用的 ZooKeeper 集群了。
組成 ZooKeeper 集群的每臺(tái)機(jī)器都會(huì)在內(nèi)存中維護(hù)當(dāng)前的服務(wù)器狀態(tài),并且每臺(tái)機(jī)器之間都會(huì)互相保持通信。
重要的一點(diǎn)是,只要集群中存在超過(guò)一半的機(jī)器能夠正常工作,那么整個(gè)集群就能夠正常對(duì)外服務(wù)。
ZooKeeper 的客戶端程序會(huì)選擇和集群中的任意一臺(tái)服務(wù)器創(chuàng)建一個(gè) TCP 連接,而且一旦客戶端和服務(wù)器斷開(kāi)連接,客戶端就會(huì)自動(dòng)連接到集群中的其他服務(wù)器。

集群節(jié)點(diǎn):

server.1=10.4.4.151    Zookeeper節(jié)點(diǎn)標(biāo)識(shí)文件myid值為1
server.2=10.4.4.152    Zookeeper節(jié)點(diǎn)標(biāo)識(shí)文件myid值為2
server.3=10.4.4.153    Zookeeper節(jié)點(diǎn)標(biāo)識(shí)文件myid值為3

一. 準(zhǔn)備 Java 運(yùn)行環(huán)境

1、下載安裝jdk

$ sudo useradd -g users -u 200 user_00
$ sudo mkdir /usr/local/services/src -p
$ sudo chown user_00.users  /usr/local/services -R
$ sudo su - user_00
$ cd /usr/local/services/src
$ wget http://10.40.6.64/src/jdk-8u91-linux-x64.tar.gz
$ tar xvf jdk-8u91-linux-x64.tar.gz -C ../

2、配置 JAVA_HOME環(huán)境變量

$ cat /etc/profile.d/java.sh
export JAVA_HOME="/usr/local/services/jdk1.8.0_91"
export CLASS_PATH="$JAVA_HOME/lib:$JAVA_HOME/jre/lib"
export CLASSPATH="$JAVA_HOME/lib:$JAVA_HOME/jre/lib"
export PATH="$JAVA_HOME/bin:$PATH"

$ source /etc/profile
$ java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)

二. ZooKeeper 包下載、安裝及配置

1、下載安裝

$ cd /usr/local/services/src
$ wget https://apache.org/dist/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
$ tar xvf zookeeper-3.4.13.tar.gz -C ../

2、配置

(1)、創(chuàng)建相關(guān)目錄

$ mkdir /data/zookeeper/sa/data -p
$ mkdir /data/zookeeper/sa/datalog -p
$ chown user_00.users /data/zookeeper/ -R
$ chown user_00.users /data/zookeeper/ -R

(2)、zoo.cfg 文件是zookeeper配置文件 在conf目錄里。

$ cat zoo.cfg
tickTime=2000 #Zookeeper最小時(shí)間單元,單位毫秒(ms),默認(rèn)值為3000
initLimit=10 #Leader服務(wù)器等待Follower啟動(dòng)并完成數(shù)據(jù)同步的時(shí)間,默認(rèn)值10,表示tickTime的10倍
syncLimit=5 #Leader服務(wù)器和Follower之間進(jìn)行心跳檢測(cè)的最大延時(shí)時(shí)間,默認(rèn)值5,表示tickTime的5倍
dataDir=/data/zookeeper/sa/data   #Zookeeper服務(wù)器存儲(chǔ)快照文件的目錄,必須配置
dataLogDir=/data/zookeeper/sa/datalog  #Zookeeper事物日志的存儲(chǔ)路徑,如果不配置這個(gè)那么事物日志會(huì)默認(rèn)存儲(chǔ)到dataDir制定的目錄,這樣會(huì)嚴(yán)重影響zk的性能,當(dāng)zk吞吐量較大的時(shí)候,產(chǎn)生的事物日志、快照日志太多
clientPort=2181      #服務(wù)器對(duì)外服務(wù)端口,一般設(shè)置為2181
server.1=10.4.4.151:2888:3888
server.2=10.4.4.152:2888:3888
server.3=10.4.4.153:2888:3888

集群模式的配置: server.id=host:port1:port2 。
其中,id 被稱為 Server ID,用來(lái)標(biāo)識(shí)該機(jī)器在集群中的機(jī)器序號(hào)(在每臺(tái)機(jī)器的 dataDir 目錄下創(chuàng)建 myid 文件,文件內(nèi)容即為該機(jī)器對(duì)應(yīng)的 Server ID 數(shù)字)。host 為機(jī)器 IP,port1 用于指定 Follower 服務(wù)器與 Leader 服務(wù)器進(jìn)行通信和數(shù)據(jù)同步的端口,port2 用于進(jìn)行 Leader 選舉過(guò)程中的投票通信。注意節(jié)點(diǎn)端口防火墻配置。

(3)、myid文件和server.myid 在快照目錄下存放的標(biāo)識(shí)本臺(tái)服務(wù)器的文件,他是整個(gè)zk集群用來(lái)發(fā)現(xiàn)彼此的一個(gè)重要標(biāo)識(shí)。

#10.4.4.151
$ echo "1" > /data/zookeeper/sa/data/myid
#10.4.4.152
$ echo "2" > /data/zookeeper/sa/data/myid
10.4.4.153
$ echo "3" > /data/zookeeper/sa/data/myid

(4)、log4j.properties文件是zk的日志輸出文件 在conf目錄里用java寫的程序基本上有個(gè)共同點(diǎn)日志都用log4j,來(lái)進(jìn)行管理。

$ cat log4j.properties
# Define some default values that can be overridden by system properties
zookeeper.root.logger=INFO, CONSOLE #日志級(jí)別
zookeeper.console.threshold=INFO #使用下面的console來(lái)打印日志
zookeeper.log.dir=. #日志打印目錄,是啟動(dòng)zookeeper的目錄(建議設(shè)置統(tǒng)一的日志目錄路徑)
         ....

(5)、zkEnv.sh和zkServer.sh文件:
zkServer.sh 主的管理程序文件
zkEnv.sh 是主要配置,zookeeper集群?jiǎn)?dòng)時(shí)配置環(huán)境變量的文件

$ cat zookeeper-env.sh 
#ZOO_LOG4J_PROP=INFO,ROLLINGFILE
source /etc/profile
export ZOO_LOG_DIR=/usr/local/services/zookeeper-3.4.13/logs
export ZOOPIDFILE="${ZOO_LOG_DIR}"/zookeeper-server.pid
export JVMFLAGS="-Xms3072m -Xmx3072m $JVMFLAGS"

三、配置系統(tǒng)服務(wù)啟動(dòng)

$ cat  /lib/systemd/system/zookeeper-sa.service
[Unit]
Description=Apache Zookeeper sa
After=network.target

[Service]
Type=forking
User=user_00
Group=users
ExecStart=/usr/local/services/zookeeper-3.4.13/bin/zkServer.sh start
ExecStop=/usr/local/services/zookeeper-3.4.13/bin/zkServer.sh stop
Restart=always
RestartSec=20

[Install]
WantedBy=multi-user.target

四、查看節(jié)點(diǎn)狀態(tài)

節(jié)點(diǎn)1
$ /usr/local/services/zookeeper-3.4.13/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/services/zookeeper-3.4.13/bin/../conf/zoo.cfg
Mode: leader

節(jié)點(diǎn)2
/usr/local/services/zookeeper-3.4.13/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/services/zookeeper-3.4.13/bin/../conf/zoo.cfg
Mode: follower

節(jié)點(diǎn)3
/usr/local/services/zookeeper-3.4.13/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/services/zookeeper-3.4.13/bin/../conf/zoo.cfg
Mode: follower

zk集群一般只有一個(gè)leader,多個(gè)follower,主一般是相應(yīng)客戶端的讀寫請(qǐng)求,而從主同步數(shù)據(jù),當(dāng)主掛掉之后就會(huì)從follower里投票選舉一個(gè)leader出來(lái)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容