**
ZooKeeper集羣部署
**
一、環境
服務器:
IP地址 | 操作系統 |
---|---|
192.168.241.11 | CentOs7-1804 |
192.168.241.12 | CentOs7-1611 |
192.168.241.13 | CentOs7-1804 |
JDK版本:1.8.0_151
ZooKeeper版本:3.4.12
二、軟件安裝
三臺服務器均需要安裝Java JDK和ZooKeeper,Java JDK的安裝本文不再贅述。
1、下載ZooKeeper
官網下載地址:https://www.apache.org/dyn/closer.cgi/zookeeper/
本文下載到的安裝包名爲:zookeeper-3.4.12.tar.gz
2、將安裝包拷貝到服務器上解壓,本文解壓到了/usr/local/lib目錄下。
三、服務和集羣配置
如無特殊說明,以下配置操作均需要在集羣的所有節點執行相同操作。
1、將/usr/local/lib/zookeeper-3.4.12/conf目錄下的zoo_sample.cfg文件重命名或複製爲zoo.cfg文件,編輯zoo.cfg文件,編輯後文件內容如下:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/usr/local/lib/zookeeper-3.4.12/data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=192.168.241.11:2888:3888
server.2=192.168.241.12:2888:3888
server.3=192.168.241.13:2888:3888
與zoo_sample.cfg相比,修改了dataDir的值,以及增加了最後三行:
server.1=192.168.241.11:2888:3888
server.2=192.168.241.12:2888:3888
server.3=192.168.241.13:2888:3888
這幾行是集羣中所有節點的信息,格式爲:server.A=B:C:D,其中A是節點在集羣中的ID,必須是一個整數,如果用“node1”之類的字符串,啓動zookeeper時會報錯;B是節點的IP地址;C是集羣中節點與leader交換信息所用的端口,實測表明,只有leader節點啓動了這個端口;D是當集羣中的leader節點掛掉時,選舉新leader所用的端口。
zoo.cfg中其他配置項的作用,本文不再贅述,不瞭解的讀者請自行百度。
注意:網上大部分文章都配置了dataLogDir配置項,說是指定zookeeper日誌的輸出目錄,但本文實測時,如果配置了這個目錄,zookeeper就會啓動失敗,原因不詳。本文有其他方法指定zookeeper的日誌輸出路徑,下文會提到。
2、創建標識文件。
此步驟在各節點中的操作略有不同,請讀者注意!
首先需要創建配置文件中dataDir配置項指定的目錄:
mkdir /usr/local/lib/zookeeper-3.4.12/data
然後在dataDir配置項指定的目錄下創建myid文件,文件內容爲當前節點在集羣中的ID,即配置文件zoo.cfg中,配置的節點信息“server.A=B:C:D”中,A的值。如本文有三個節點,根據zoo.cfg中的配置信息:
server.1=192.168.241.11:2888:3888
server.2=192.168.241.12:2888:3888
server.3=192.168.241.13:2888:3888
需要在節點192.168.241.11上執行:
echo "1" > /usr/local/lib/zookeeper-3.4.12/data/myid
在節點192.168.241.12上執行:
echo "2" > /usr/local/lib/zookeeper-3.4.12/data/myid
在節點192.168.241.13上執行:
echo "3" > /usr/local/lib/zookeeper-3.4.12/data/myid
四、ZooKeeper的啓動和停止
使用zookeeper安裝目錄下的bin目錄裏的zkServer.sh文件來啓停zookeeper服務,以本文爲例:
啓動命令
/usr/local/lib/zookeeper-3.4.12/bin/zkServer.sh start
停止命令
/usr/local/lib/zookeeper-3.4.12/bin/zkServer.sh stop
狀態查看命令
/usr/local/lib/zookeeper-3.4.12/bin/zkServer.sh status
注意:需要啓動了兩個節點以後,通過上述命令查看時才能看到正常的狀態。
由於沒有指定日誌輸出目錄,默認會在zookeeper安裝目錄下的bin目錄裏生成日誌文件,名爲zookeeper.out,如果遇到問題,可在日誌文件中查看詳細信息。
五、配置使用systemd啓停ZooKeeper
本文對systemd相關知識不再贅述,不瞭解的讀者請自行百度。
1、創建並編輯/usr/lib/systemd/system/zkServer.service文件,文件內容如下:
[Unit]
Description=ZooKeeper Server
Documentation=https://zookeeper.apache.org/
After=network-online.target
Wants=network-online.target
[Service]
Type=forking
User=zookeeper
Group=zookeeper
WorkingDirectory=/usr/local/lib/zookeeper-3.4.12
Environment=ZOO_LOG_DIR=/usr/local/lib/zookeeper-3.4.12/logs
ExecStart=/usr/local/lib/zookeeper-3.4.12/bin/zkServer.sh start
ExecStop=/usr/local/lib/zookeeper-3.4.12/bin/zkServer.sh stop
Restart=on-failure
RestartSec=10s
[Install]
WantedBy=multi-user.target
配置簡要說明:
Type:這個配置項的值需要設置爲“forking”,我一開始配置爲“notify”,結果無法通過systemd啓動,原因不詳。
User和Group:顯然,這是指定啓動zookeeper的用戶和組,如果不指定,默認使用root用戶啓動。如果設置了用戶和組,需要注意zookeeper相關目錄和文件的權限問題,否則可能導致啓動失敗。
Environment:這個配置項定義環境變量,這裏定義了環境變量“ZOO_LOG_DIR”,這個變量指定了zookeeper運行日誌的輸出目錄。網上有教程說這個配置必須指定,經過實測,不指定也可以正常啓動,也許是因爲我配置了WorkingDirectory的緣故,日誌會生成在WorkingDirectory指定的目錄下。
2、使用systemd啓停zookeeper。
啓動
systemctl start zkServer
停止
systemctl stop zkServer
設置爲開機啓動
systemctl enable zkServer.service