## zookeeper分布式集群部署
**主機分配**
- 192.168.214.143
- 192.168.214.152
- 192.168.214.153
**各節(jié)點時間同步**
```
[root@Ansible ~]# ansible zk -m shell -a 'ntpdate gudaoyufu.com'
```
**關閉selinux**
```
[root@Ansible ~]# ansible zk -m shell -a "sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config"
[root@Ansible ~]# ansible zk -m shell -a "setenforce 0"
```
**關閉防火墻**
```
[root@Ansible ~]# ansible zk -m shell -a "systemctl disable firewalld"
[root@Ansible ~]# ansible zk -m shell -a "systemctl stop firewalld"
```
### 安裝JDK
**各節(jié)點上傳安裝包**
```
[root@Ansible ~]# ansible zk -m shell -a 'tar zxf jdk-8u181-linux-x64.tar.gz -C /usr/local/src'
```
```
[root@Ansible ~]# ansible zk -m shell -a 'ln -s /usr/local/src/jdk1.8.0_181 /usr/local/jdk'
```
```
[root@Ansible ~]# ansible zk -m copy -a 'src=/home/.bashrc dest=/root/.bashrc'
#ansible 遠程執(zhí)行指令的使用到的環(huán)境變量不在/etc/profile中每币,在.bashrc中要注意
```
- bashrc中配置java環(huán)境變量
```
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then
? ? ? ? . /etc/bashrc
fi
export JAVA_HOME=/usr/local/jdk
export JAVA_BIN=$JAVA_HOME/bin:$JAVA_HOME:/jre/bin
export JAVA_CLASS=$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME:$JAVA_BIN:$JAVA_CLASS
```
- 測試java指令
```
[root@Ansible ~]# ansible zk -m shell -a 'java -version'
```
### 安裝zookeeper
- 各節(jié)點上傳安裝包
```
[root@Ansible ~]# ansible zk -m shell -a 'mkdir /data'
```
- 解壓
```
[root@Ansible ~]# ansible zk -m shell -a 'tar zxf zookeeper-3.4.12.tar.gz -C /data'
```
- 修改目錄名稱
```
[root@Ansible ~]# ansible zk -m shell -a 'mv /data/zookeeper-3.4.12 /data/zookeeper'
```
- 創(chuàng)建zoo.cfg配置文件
```
[root@Ansible ~]# ansible zk -m shell -a 'cp /data/zookeeper/conf/zoo_sample.cfg /data/zookeeper/conf/zoo.cfg'
```
- 將zookeeper配置文件復制一份到ansible進行修改配置內容如下:
```
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper/datadir? ? ? #各節(jié)點創(chuàng)建相應目錄
dataLogDir=/opt/zookeeper/logdir
clientPort=2181
server.1 192.168.214.143:2888:3888? #各節(jié)點配置相同
server.2 192.168.214.152:2889:3889
server.3 192.168.214.153:2890:3890
```
- 復制配置文件到各節(jié)點
```
[root@Ansible ~]# ansible zk -m copy -a 'src=/home/zoo.cfg dest=/data/zookeeper/conf/'
```
- 創(chuàng)建各節(jié)點數據存放目錄
```
[root@Ansible ~]# ansible zk -m shell -a 'mkdir -pv /opt/zookeeper/{datadir,logdir}'
```
- 給個節(jié)點添加節(jié)點ID
```
[root@zookeeper1 ~]# echo 1 >? /opt/zookeeper/datadir/myid
[root@zookeeper2 ~]# echo 2 >? /opt/zookeeper/datadir/myid
[root@zookeeper3 ~]# echo 3 >? /opt/zookeeper/datadir/myid
```
```
[root@Ansible ~]# ansible zk -m shell -a "cat /opt/zookeeper/datadir/myid"
192.168.214.152 | SUCCESS | rc=0 >>
2
192.168.214.153 | SUCCESS | rc=0 >>
3
192.168.214.143 | SUCCESS | rc=0 >>
1
```
- 啟動集群
```
[root@Ansible ~]# ansible zk -m shell -a "/data/zookeeper/bin/zkServer.sh start"
```
```
[root@Ansible ~]# ansible zk -m shell -a "/data/zookeeper/bin/zkServer.sh status"
192.168.214.143 | SUCCESS | rc=0 >>
Mode: followerZooKeeper JMX enabled by default
Using config: /data/zookeeper/bin/../conf/zoo.cfg
192.168.214.152 | SUCCESS | rc=0 >>
Mode: followerZooKeeper JMX enabled by default
Using config: /data/zookeeper/bin/../conf/zoo.cfg
192.168.214.153 | SUCCESS | rc=0 >>
Mode: leaderZooKeeper JMX enabled by default
Using config: /data/zookeeper/bin/../conf/zoo.cfg
#第一行Mode后面就是節(jié)點的角色
```
### 測試同步
- 在leader節(jié)點創(chuàng)建一個數據節(jié)點test2,到follower節(jié)點查看
```
[zk: localhost:2181(CONNECTED) 1] create /test2 'test2 node'
Created /test2
#follower節(jié)點查看
[zk: localhost:2181(CONNECTED) 5] get /test2
test2 node
cZxid = 0x100000004
ctime = Sun Sep 02 14:38:22 CST 2018
mZxid = 0x100000004
mtime = Sun Sep 02 14:38:22 CST 2018
pZxid = 0x100000004
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 10
numChildren = 0
```
- 測試故障leader轉移
```
[root@Ansible ~]# ansible zk -m shell -a "/data/zookeeper/bin/zkServer.sh status"
192.168.214.152 | SUCCESS | rc=0 >>
Mode: followerZooKeeper JMX enabled by default
Using config: /data/zookeeper/bin/../conf/zoo.cfg
192.168.214.153 | SUCCESS | rc=0 >>
Mode: leaderZooKeeper JMX enabled by default
Using config: /data/zookeeper/bin/../conf/zoo.cfg
192.168.214.143 | FAILED | rc=1 >>
Error contacting service. It is probably not running.ZooKeeper JMX enabled by default
Using config: /data/zookeeper/bin/../conf/zoo.cfgnon-zero return code
```
可以看到原來的leader節(jié)點掛了以后另一153節(jié)點獲得leader身份