官网:https://zookeeper.apache.org/index.html
下载地址:https://zookeeper.apache.org/releases.html
tar -xvf apache-zookeeper-3.9.1-bin.tar.gz
mv apache-zookeeper-3.9.1-bin zookeeper
cd zookeeper
mkdir data_zookeeper
cd data_zookeeper
mkdir zk1 zk2 zk3
echo 1 >> /data/soft/zookeeper/data_zookeeper/zk1/myid
echo 2 >> /data/soft/zookeeper/data_zookeeper/zk2/myid
echo 3 >> /data/soft/zookeeper/data_zookeeper/zk3/myid
cd ../conf/
cp zoo_sample.cfg zoo1.cfg
以下为在同一服务器模拟3个节点(伪分布式)
修改配置文件
vim zoo1.cfg
:%s#/tmp/zookeeper#/data/soft/zookeeper/data_zookeeper/zk1#g
添加节点例子:
#######################cluster##########################
server.1=192.168.30.136:2888:3888
server.2=192.168.30.136:2889:3889
server.3=192.168.30.136:2890:3890
配置参数解读 server.A=B:C:D。
参数 | 描述 |
---|---|
A | 一个数字,表示第几号服务器。集群模式下配置的/opt/zookeeper/zkData/myid文件里面的数据就是A的值 |
B | 服务器的IP地址 |
C | 与集群中Leader服务器交换信息的端口 |
D | 选举时专用端口,万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口 |
效果如下:
cat zoo1.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/soft/zookeeper/data_zookeeper/zk1
clientPort=2181
#######################cluster##########################
server.1=192.168.30.136:2888:3888
server.2=192.168.30.136:2889:3889
server.3=192.168.30.136:2890:3890
cat zoo2.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/soft/zookeeper/data_zookeeper/zk2
clientPort=2182
#######################cluster##########################
server.1=192.168.30.136:2888:3888
server.2=192.168.30.136:2889:3889
server.3=192.168.30.136:2890:3890
cat zoo3.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/soft/zookeeper/data_zookeeper/zk3
clientPort=2183
#######################cluster##########################
server.1=192.168.30.136:2888:3888
server.2=192.168.30.136:2889:3889
server.3=192.168.30.136:2890:3890
启动第1台Zookeeper服务器
cd /data/soft/zookeeper/bin
./zkServer.sh start /data/soft/zookeeper/conf/zoo1.cfg
查看Zookeeper状态
cd /data/soft/zookeeper/bin
./zkServer.sh status /data/soft/zookeeper/conf/zoo1.cfg
#因为没有超过半数以上的服务器被启动,所以第一台服务器启动后查看服务状态,发现集群失败 (如果防火墙没有关闭,也会导致集群失败)
再依次启动第2、3台Zookeeper服务器
cd /data/soft/zookeeper/bin
./zkServer.sh start /data/soft/zookeeper/conf/zoo2.cfg
./zkServer.sh start /data/soft/zookeeper/conf/zoo3.cfg
最终,检查整个Zookeeper集群状态
cd /data/soft/zookeeper/bin
./zkServer.sh status /data/soft/zookeeper/conf/zoo1.cfg
./zkServer.sh status /data/soft/zookeeper/conf/zoo2.cfg
./zkServer.sh status /data/soft/zookeeper/conf/zoo3.cfg
关闭Zookeeper集群
cd /data/soft/zookeeper/bin
./zkServer.sh stop /data/soft/zookeeper/conf/zoo1.cfg
./zkServer.sh stop /data/soft/zookeeper/conf/zoo2.cfg
./zkServer.sh stop /data/soft/zookeeper/conf/zoo3.cfg
启动效果如下所示
[root@m01 bin]# ./zkServer.sh start /data/soft/zookeeper/conf/zoo1.cfg
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /data/soft/zookeeper/conf/zoo1.cfg
Starting zookeeper ... STARTED
[root@m01 bin]#
[root@m01 bin]# ./zkServer.sh status /data/soft/zookeeper/conf/zoo1.cfg
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /data/soft/zookeeper/conf/zoo1.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Error contacting service. It is probably not running.
[root@m01 bin]#
[root@m01 bin]# ./zkServer.sh start /data/soft/zookeeper/conf/zoo2.cfg
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /data/soft/zookeeper/conf/zoo2.cfg
Starting zookeeper ... STARTED
[root@m01 bin]# ./zkServer.sh status /data/soft/zookeeper/conf/zoo1.cfg
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /data/soft/zookeeper/conf/zoo1.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
[root@m01 bin]#
[root@m01 bin]# ./zkServer.sh status /data/soft/zookeeper/conf/zoo2.cfg
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /data/soft/zookeeper/conf/zoo2.cfg
Client port found: 2182. Client address: localhost. Client SSL: false.
Mode: leader
[root@m01 bin]# ./zkServer.sh start /data/soft/zookeeper/conf/zoo3.cfg
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /data/soft/zookeeper/conf/zoo3.cfg
Starting zookeeper ... STARTED
[root@m01 bin]#
[root@m01 bin]# ./zkServer.sh status /data/soft/zookeeper/conf/zoo3.cfg
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /data/soft/zookeeper/conf/zoo3.cfg
Client port found: 2183. Client address: localhost. Client SSL: false.
Mode: follower
[root@m01 bin]#
#最后检查状态
[root@m01 bin]# ./zkServer.sh status /data/soft/zookeeper/conf/zoo1.cfg
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /data/soft/zookeeper/conf/zoo1.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
[root@m01 bin]# ./zkServer.sh status /data/soft/zookeeper/conf/zoo2.cfg
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /data/soft/zookeeper/conf/zoo2.cfg
Client port found: 2182. Client address: localhost. Client SSL: false.
Mode: leader
[root@m01 bin]# ./zkServer.sh status /data/soft/zookeeper/conf/zoo3.cfg
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /data/soft/zookeeper/conf/zoo3.cfg
Client port found: 2183. Client address: localhost. Client SSL: false.
Mode: follower
[root@m01 bin]#
#结果:
查看第1台的状态:Mode: follower
查看第2台的状态:Mode: leader
查看第3台的状态:Mode: follower
真分布式只需要在zoo1.cfg、zoo2.cfg、zoo3.cfg上将cluster信息改成真实值就好,其他默认暂不需改动
真分布必须是奇数台,因为必须满足n/2+1=m,m必须大于部署zk机器数的一半(n/2)可用才认为集群可用,而且奇数台更节省资源
2/2+1=2 一台不能坏
3/2+1=2 可以坏掉一台
4/2+1=3 只能坏一台
5/2+1=3 可以坏2台