1、机器列表及相关设计
服务器编号 | 服务器 IP 地址 | LF 通信端口 | LF 选举端口 | 客户端端口 |
1 | 192.168.229.131 | 2010 | 6008 | 2180 |
2 | 192.168.229.134 | 2010 | 6008 | 2180 |
3 | 192.168.229.133 | 2010 | 6008 | 2180 |
由于是在三台不同的服务器上搭建的集群,为了操作方便,所以每台机器上创建的文件夹都是相同路径,相同名称的
2、将 zookeeper-3.4.14.tar.gz 分别上传到三台服务器上,每台服务器上分别使用命令解压得 zookeeper-3.4.14 文件夹
// 解压 zookeeper 的压缩包
tar -zxvf zookeeper-3.4.14.tar.gz
3、分别在三台服务器的 zookeeper-3.4.14 文件夹下,新建文件夹 mylog、mydata,用于存放 zookeeper 的日志和数据
4、进入 zookeeper-3.4.14 下的 conf 文件夹下,复制 zoo_sample.cfg 并且命名为 zoo.cfg
5、编辑 zoo.cfg (由于我们这里不是伪集群,是在三台不同的服务器上进行的集群,所以三台机器的配置文件是一样的)
# tickTime:客户端与服务器、服务器与服务器之间维持心跳的时间间隔,也就是每一个 tickTime 会发送一次心跳,单位为毫秒
tickTime=2000
# initLimit:集群中 Leader 和 Follow 初始化连接时最多能容忍的心跳数
# 也就是初始化过程中,如果 Leader 和 Follow 在 (10*tickTime)ms的时间内还没有连接上,则认为连接失败
initLimit=10
# syncLimit:同步通信实现, Leader 和 Follow 服务器之间发送请求和接收应答最多能容忍的心跳数
# 也就是 Leader 和 Follow 如果发送的请求在 (5*tickTime)的时间没没有应答,那么就认为 Leader 和 Follow 之间连接失败
syncLimit=5
# 自定义的 zookeeper 数据存放目录
dataDir=/usr/local/zookeeper/zookeeper-3.4.14/mydata
# 自定义的 zookeeper 的日志存放目录
dataLogDir=/usr/local/zookeeper/zookeeper-3.4.14/mylog
# 客户端连接的端口
clientPort=2180
# Zookeeper集群中节点个数一般为奇数个(>=3),若集群中 Master 挂掉,剩余节点个数在半数以上时,就可以推举新的主节点,继续对外提供服务
# Zookeeper集群配置项的格式比较特殊,具体规则如下: server:N=YYYY:A:B
# N:表示服务器编号,例如 0、1、2......
# YYYY:表示服务器的IP地址.
# A:为LF的通信端口,表示该服务器与集群中的 Leader 交换信息的端口
# B:为选举端口,表示选举新 Leader 时,服务器之间相互通信的端口(当 Leader 挂掉时,其它的服务器会相互通信,选择出新的 Leader)
# 一般来说,集群中的 A 和 B 都是一样的,只有伪集群的时候 A 和 B 才不一样
server.1=192.168.229.131:2010:6008
server.2=192.168.229.134:2010:6008
server.3=192.168.229.133:2010:6008
6、在 zookeeper-3.4.14 的 mydata 文件下下面新建 myid 文件,并编辑 myid 文件,并且在里面写入对应的 server 的数字
// 进入 mydata 目录下
cd /usr/local/zookeeper/zookeeper-3.4.14/mydata
// 新建文件 myid
touch myid
7、分别查看三台机器的防火墙是否关闭,如果未关闭,请先关闭防火墙
// 查看防火墙状态
[root@CentOS002 bin]# sudo service iptables status
表格:filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
// 关闭防火墙
[root@CentOS002 bin]# sudo service iptables stop
iptables:将链设置为政策 ACCEPT:filter [确定]
iptables:清除防火墙规则: [确定]
iptables:正在卸载模块: [确定]
// 再次查看防火墙状态,发现防火墙已经关闭了
[root@CentOS002 bin]# sudo service iptables status
iptables:未运行防火墙。
8、同时启动三台服务器上的 zookeeper 服务,并且三台服务器的角色信息如下
启动服务的时候需要注意,一定要等全部启动完成之后再去查看状态,可能稍微有一点点延迟,如果启动一台或者两台使用 ./zkServer.sh status 去查看状态的话,会有 Error conftacting service,It is probably not running 的报错信息,如果不能正常启动,去 zookeeper.out 文件中查看不能启动的原因.
9、连接客户端,由于集群之后连接客户端的命令不再是 ./zkCli.sh 了
// 连接 zookeeper 客户端,端口我在 zoo.cfg 中修改成了 2180
./zkCli.sh -server 192.168.229.131:2180
10、测试
在 131 这台机器上创建一个节点 /xiaomaomao
在 134 这台机器上查看,看节点以及数据是否已经同步了,如果节点和数据能够正常同步,那么 zookeeper 集群搭建就完成了