先准備好三台linux(虛擬機)。
1. 先把Java環境配好。我CentOS-7-x86_64-DVD-1708 + jdk1.8.0_161
1.1 先把jdk上傳到系統里面(我利用的Filezilla),我在系統的根目錄建了一個文件夾soft,用來存放需要的安裝包,比如jdk、Zookeeper
1.2 先卸載系統自帶的JDK(切換到root)
[root@localhost /]# rpm -qa|grep java [root@localhost /]# rpm -e java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64 --nodeps [root@localhost /]# rpm -e java-1.8.0-openjdk-headless-1.8.0.131-11.b12.el7.x86_64 --nodeps
1.3 新建一個Java目錄,然后定位到我們安裝包的目錄,再進行解壓
mkdir /usr/local/java cd /soft/ tar -zxvf jdk-8u161-linux-x64.tar.gz -C /usr/local/java/
進入目標目錄:可以看到剛解壓的文件
1.4 配置環境變量
vim /etc/profile
在文件里面加入如下配置
# java export JAVA_HOME=/usr/local/java/jdk1.8.0_161 export JRE_HOME=/usr/local/java/jdk1.8.0_161/jre export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
1.5 最后刷新配置,查看Java是否安裝成功
2. 三台機器,配置Zookeeper
2.1 定位到安裝包文件夾,然后執行解壓(所有操作三台機器一樣)
[root@localhost soft]# tar -zxvf zookeeper-3.4.11.tar.gz -C /usr/local/
可以看到Zookeeper已經存在於/usr/local/目錄下了
2.2 配置一下環境變量(此步驟的目的是:每次啟動服務就不需要定位到Zookeeper的bin目錄了)
vim /etc/profile
# zookeeper export ZK_HOME=/usr/local/zookeeper-3.4.11 export PATH=$ZK_HOME/bin:$PATH
2.3 配置Zookeeper的配置文件
進入zookeeper的conf目錄,修改配置文件名
[root@localhost zookeeper-3.4.11]# cd conf [root@localhost conf]# mv zoo_sample.cfg zoo.cfg [root@localhost conf]# vim zoo.cfg
2.4 具體配置
dataDir=/usr/local/zookeeper-3.4.11/data server.0=192.168.192.128:2888:3888 server.1=192.168.192.129:2888:3888 server.2=192.168.192.130:2888:3888
首先 修改 dataDir,顧名思義就是【數據目錄】了,修改成我們自定義的即可。
然后看下面的三個server:
(1)為什么是三個,因為Zookeeper喜歡奇數不喜歡偶數。
(2)三行server解釋
官方解釋
The entries of the form server.X list the servers that make up the ZooKeeper service. When the server starts up, it knows which server it is by looking for the file myid in the data directory. That file has the contains the server number, in ASCII.
Finally, note the two port numbers after each server name: " 2888" and "3888". Peers use the former port to connect to other peers. Such a connection is necessary so that peers can communicate, for example, to agree upon the order of updates. More specifically, a ZooKeeper server uses this port to connect followers to the leader. When a new leader arises, a follower opens a TCP connection to the leader using this port. Because the default leader election also uses TCP, we currently require another port for leader election. This is the second port in the server entry.
蹩腳翻譯
表單server.X的條目列出構成ZooKeeper服務的服務器。當服務器啟動時,它通過查找數據目錄中的文件myid來知道它是哪個服務器 。該文件包含服務器編號,以ASCII格式顯示。
最后,請注意每個服務器名稱后面的兩個端口號:“2888”和“3888”。對等體使用前端口連接到其他對等體。這樣的連接是必要的,使得對等體可以進行通信,例如,以商定更新的順序。更具體地說,一個ZooKeeper服務器使用這個端口來連接追隨者到領導者。當新的領導者出現時,追隨者使用此端口打開與領導者的TCP連接。因為默認領導選舉也使用TCP,所以我們目前需要另外一個端口進行領導選舉。這是服務器條目中的第二個端口。
大概意思
server.X=A:B:C
X-代表服務器編號
A-代表ip
B和C-代表端口,這個端口用來系統之間通信
2.5 根據dataDir進行X的配置【這里三台服務器不一樣!!!】
找到Zookeeper目錄,新建data文件夾,並且在data文件夾下面創建一個文件,叫myid,並且在文件里寫入server.X對應的X
[root@localhost zookeeper-3.4.11]# mkdir data
然后
cd data vim myid #之后會產生一個新文件,直接在里面寫 X 即可 #比如我配置的三個server,myid里面寫的X就是server.X=ip:2888:3888 中ip所對應的X
server.0=192.168.192.128:2888:3888【192.168.192.128服務器上面的myid填寫0】
server.1=192.168.192.129:2888:3888【192.168.192.129服務器上面的myid填寫1】
server.2=192.168.192.130:2888:3888【192.168.192.130服務器上面的myid填寫2】
2.6 最后啟動服務器
先刷新一下環境變量
source /etc/profile
然后開啟防火牆
[root@localhost zookeeper-3.4.11]# firewall-cmd --zone=public --add-port=2888/tcp --permanent success [root@localhost zookeeper-3.4.11]# firewall-cmd --zone=public --add-port=3888/tcp --permanent success [root@localhost zookeeper-3.4.11]# systemctl restart firewalld
然后
zkServer.sh start
輸出: [root@localhost zookeeper-3.4.11]# zkServer.sh start ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper-3.4.11/bin/../conf/zoo.cfg Starting zookeeper ... STARTED
是否啟動成功,執行以下命令
zkServer.sh status
128
[root@localhost zookeeper-3.4.11]# zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper-3.4.11/bin/../conf/zoo.cfg Mode: follower
129
[root@localhost zookeeper-3.4.11]# zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper-3.4.11/bin/../conf/zoo.cfg Mode: leader
130
[root@localhost zookeeper-3.4.11]# zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper-3.4.11/bin/../conf/zoo.cfg Mode: follower
其實也可以查看啟動過程
zkServer.sh start-foreground
PS:想要用客戶端連接,需要把2181端口打開(防火牆)