1.介绍
使用集群的方式避免单点故障时目前分布式应用实现高可用的重要手段,ZooKeeper同样可以搭建集群环境。
2.说明
1)服务器名称与地址:
集群信息(服务器编号,服务器地址,LF通信端口,选举端口);
配置项的格式为:server.N=IP:A:B
N:服务器编号
IP:服务器的IP地址
A:LF通信端口,用来和leader交换信息
B:leader挂掉后选举新leader的端口
注:一般来说,集群中每个服务器的A端口都是一样,每个服务器的B端口也是一样。
2)搭建集群的环境的两种方式:
①同一主机的不同服务;
例:
server.1=127.0.0.1:2018:6008
server.2=127.0.0.1:2017:6007
server.3=127.0.0.1:2019:6009
②不同主机的相同或不同服务
例:
server.1=233.34.9.145:2019:6009
server.2=233.34.9.146:2019:6009
server.3=233.34.9.147:2019:6009
3.搭建步骤
这里以同一主机的不同服务为例。
总体思路为:将原始的zookeeper压缩包解压;将解压复制后的zookeeper01修改一些公共配置,然后再复制两份;最后逐个修改各个服务的配置文件
1)解压,复制
①tar -xzvf zookeeper-3.4.9.tar.gz
②cp -r zookeeper-3.4.9 zookeeper01
2) 创建data数据文件和myid文件(myid文件定位服务)
①cd zookeeper01/
②mkdir data //建数据目录文件
③cd data/
④touch myid //创建myid文件
⑤echo 1 >> myid //将服务器的编号写在这里面
3)修改zookeeper01/conf/下的配置文件
①cp zoo_sample.cfg zoo.cfg
②vim zoo.cfg
将其中的dataDir修改为之前建的data的所在路径;然后再其末尾加上 集群信息(服务器编号,服务器地址,LF通信端口,选举端口)保存退出。如下图:
4)再复制两份
cp -r zookeeper01/ zookeeper02
cp -r zookeeper01/ zookeeper03
5)将复制的修改其中的myid的2和3;
echo 2 > /opt/zookeeper02/data/myid
echo 3 > /opt/zookeeper03/data/myid
6)复制后的再修改zoo.cfg中的dataDir和clientPort对应的值,如图:
4. 分别启动服务
/opt/zookeeper03/bin/zkServer.sh start
/opt/zookeeper02/bin/zkServer.sh start
/opt/zookeeper01/bin/zkServer.sh start
分别查看启动的状态
/opt/zookeeper03/bin/zkServer.sh status
/opt/zookeeper02/bin/zkServer.sh status
/opt/zookeeper01/bin/zkServer.sh status
若其状态为:Mode: follower 或 Mode: leader 表示启动成功。
注意:有时候,执行了启动命令,但是并未真的启动,所以需要查看状态。单个启动一个时可能会报错,需要一起启动其他的服务后,才能正常启动。
5.启动客户端,连接服务器
在 -server 参数中指定要连接的服务器
打开三个终端,分别输入
/opt/zookeeper01/bin/zkCli.sh -server 127.0.0.1:2181
/opt/zookeeper02/bin/zkCli.sh -server 127.0.0.1:2182
/opt/zookeeper03/bin/zkCli.sh -server 127.0.0.1:2183
如下图:
至此,三台服务搭建完成。在任何一台服务器上操作(增删节点,设置、修改节点值),在其他的服务器均能看到同步的数据