伪分布式集群:在一台Server中,启动多个ZooKeeper的实例。
下面来看看zookeeper怎么进行安装的吧。
下载
选择一个稳定版本进行下载,我这里下载的是zookeeper-3.4.6版本。
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
解压
tar -zxvf zookeeper-3.4.6.tar.gz
# 3个实例,复制三份 zk1,zk2,zk3
cp -r zookeeper-3.4.6 zk1
cp -r zookeeper-3.4.6 zk2
cp -r zookeeper-3.4.6 zk3
创建实例配置文件
cd zookeeper-3.4.6/conf
cp zoo_sample.cfg zoo1.cfg
cp zoo_sample.cfg zoo2.cfg
cp zoo_sample.cfg zoo3.cfg
修改配置
tickTime=2000
dataLogDir=/opt/zk1/log
dataDir=/opt/zk1/data
clientPort=2181
initLimit=10
syncLimit=5
server.1=127.0.0.1:2881:3881
server.2=127.0.0.1:2882:3882
server.3=127.0.0.1:2883:3883
- 分别配置三个实例的clientPort端口为2181, 2182, 2183
- 分别配置是哪个实例的dataDir目录为
/opt/zk1/data
,/opt/zk2/data
,/opt/zk3/data
,并创建这三个目录,没有创建该目录会启动出错 - 定义zookeeper集群的各个实例的ip和端口,server.1=127.0.0.1:2881:3881 ,server.2=127.0.0.1:2882:3882,server.3=127.0.0.1:2883:3883
解释:
-
dataDir定义zookeeper实例存储持久出具的本地文件系统位置
-
clientPort定义zookeeper客户端连接zookeeper服务端时使用的端口
-
server定义zookeeper集群的各个实例的ip和端口
-
tickTime
指定了zookeeper中的基本时间单元(以毫秒为单位)
zookeeper集群中,每个服务器都有一个id(数字),服务器id在集群中是唯一的,并且取值范围是1~255,通过一个名为myid的纯文本设置,这个文件保存在dataDir中
-
server.n=hostname:port:portn是服务器id,第一个port是follower用来连接leader的端口,第二个port是用于leader选举
-
clientPort监听client连接的端口号
-
initLimit设定了所有follower与leader进行连接并同步的时间范围。如果在设定的时间段内,半数以上的follower跟随者未能完成同步,leader会宣布放弃领导地位,然后进行另外一次leader选举,如果这种情况经常发生,则表明设定的值太小
-
syncLimit设定了允许一个follower与leader这进行同步的时间。如果在设定的时间段内,一个follower未能完成同步,会自己重启,所有关联到follower的客户端将连接到另一个follower
创建dataDir和实例id文件
mkdir -p /opt/zk1/data
mkdir -p /opt/zk2/data
mkdir -p /opt/zk3/data
echo 1 > /opt/zk1/data/myid
echo 2 > /opt/zk2/data/myid
echo 3 > /opt/zk3/data/myid
启动zookeeper服务
bin/zkServer.sh start zoo1.cfg
bin/zkServer.sh start zoo2.cfg
bin/zkServer.sh start zoo3.cfg
查看是否启动成功
jps
看到类似下面的进程就表示3个实例均启动成功
13419 QuorumPeerMain
13460 QuorumPeerMain
13561 Jps
13392 QuorumPeerMain
如果未成功启动,可以到zookeeper.out文件中查看启动失败的日志信息。
客户端连接
./zkCli.sh -server 127.0.0.1:2181
关闭zookeeper
bin/zkServer.sh stop
检验,在三个节点上分别执行命令zkServer.sh status,从下面的图中我们会发现zk2和zk3为Follower,zk1为Leader。
7.服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口)
这个配置项的书写格式比较特殊,规则如下:
server.N=YYY:A:B
其中N表示服务器编号,YYY表示服务器的IP地址,A为LF通信端口,表示该服务器与集群中的leader交换的信息的端口。B为选举端口,表示选举新leader时服务器间相互通信的端口(当leader挂掉时,其余服务器会相互通信,选择出新的leader)。一般来说,集群中每个服务器的A端口都是一样,每个服务器的B端口也是一样。但是当所采用的为伪集群时,IP地址都一样,只能时A端口和B端口不一样。
下面是一个非伪集群的例子: server.1=233.34.9.145:2008:6008
server.2=233.34.9.146:2008:6008
server.3=233.34.9.147:2008:6008
server.N=YYY:A:B
server.1=233.34.9.145:2008:6008
server.2=233.34.9.146:2008:6008
server.3=233.34.9.147:2008:6008