一串前、環(huán)境準備
操作系統:CentOS Linux release 7.2.1511 (Core)
JDK版本:1.8.0_121(open jdk 也可)
三臺服務器:106.12.204.214跛溉、39.106.87.20根吁、152.136.159.168
二柄慰、下載zookeeper
下載地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/
選擇適配系統環(huán)境的版本
三踢械、安裝
1奸晴、上傳+解壓
#此處我上傳到opt目錄下(可自行選擇安裝目錄)
[root@localhost /]# cd /opt/
[root@localhost zookeeper3.4.14]# tar zxvf zookeeper-3.4.14.tar.gz
2贱枣、配置zookeeper
(1)創(chuàng)建數據目錄
下面zoo.cfg配置文件的dataDir將會使用這個目錄
[root@localhost zookeeper]# cd /opt/zookeeper3.4.14/
[root@localhost zookeeper]# mkdir data
(2)修改配置文件
[root@localhost zookeeper]# cd conf
[root@localhost conf]# cp zoo_sample.cfg zoo.cfg
[root@localhost conf]# vi zoo.cfg
先把dataDir=/tmp/zookeeper注釋,然后將下面四行代碼添加到文件末尾
dataDir=/usr/local/zookeeper/data
#以下配置的sever.n和后續(xù)的myid必須一致颤专,本機ip配置0.0.0.0
server.3=0.0.0.0:2888:3888
server.2=39.106.87.20:2888:3888
server.1=152.136.159.168:2888:3888
如圖:
(3)創(chuàng)建myid文件
[root@localhost conf]# cd ../data
#另外兩臺依次修改為2和3
[root@localhost data]# echo "1" > myid
3纽哥、開啟zookeeper端口
開啟2888、3888栖秕、2181端口(或者直接關閉防火墻也可)
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
4春塌、配置環(huán)境變量
vi /etc/profile
添加以下信息
export ZOOKEEPER_INSTALL=/opt/zookeeper-3.4.14
export PATH=$PATH:$ZOOKEEPER_INSTALL/bin
備注:三臺機器依次操作2、3簇捍、4步驟(可以配置完其中一臺只壳,然后scp,再進行相應修改)
5暑塑、啟動zookeeper
(1)啟動(每臺機器都要啟動)
[root@localhost bin]# zkServer.sh start
如果輸出以下內容吼句,表示啟動成功
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
(2)查看狀態(tài)
[root@localhost data]# zkServer.sh status
192.168.1.91:
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: follower
192.168.1.92:
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: leader
192.168.1.93:
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: follower
由此我們看出192.168.1.92這臺機器被自動選舉為leader了
四、驗證
在Zookeeper安裝的任何一個節(jié)點執(zhí)行客戶端連接命令:
zkCli.sh -server 192.168.1.1:2181
能夠連接表示成功
常見問題:
1事格、zookeeper啟動后惕艳,查看狀態(tài)顯示
[root@iZ2ze06fzsvx84ds11gda1Z zookeeper-3.4.14]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.14/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
這種情況一般表示zookeeper集群啟動失敗,請根據日志進行排查(仔細分析日志)分蓖,一般由以下原因造成:
(1)防火墻未正常配置或者沒有關閉
(2)端口占用(netstat -apn | grep 2181尔艇、2888尔许、3888)
(3)myid沒有配置或者與server.id不一致
(4)網絡問題么鹤,通過機器之間互ping ip排查
(5)本機的server.id的配置行的ip沒有配置為0.0.0.0
說明:
網上還有其他說法,比如配置/etc/hosts 文件味廊,配置集群機器ip蒸甜,刪除/etc/hosts中的127.0.0.1的配置,本人親測余佛,不影響zookeeper集群啟動柠新。
本人遇到“It is probably not running.”,通過上面(1)至(5)各自場景排查辉巡,均沒有解決問題恨憎,然后仔細分析日志zookeeper.out的內容:
2019-05-31 15:20:51,075 [myid:1] - WARN? [QuorumPeer[myid=1]/0.0.0.0:2181:Learner@237] - Unexpected exception, tries=1, connecting to /39.106.87.20:2888
java.net.SocketTimeoutException: connect timed out
發(fā)現另外兩臺機器都報connecting to /39.106.87.20:2888超時的問題,因此懷疑機器39.106.87.20限制了外來訪問(但我已經排查了防火墻和網絡問題)郊楣,由于該機器是阿里云的ECS憔恳,我聯想到當初自建MySQL無法遠程登陸的問題,才想起來阿里云ECS默認安全組是只開放了ssh 22等基本訪問端口净蚤,因此新增了安全組钥组,集群正常啟動,因此加上第(6)條:機器安全組設置(云服務器)