zookeeper伪集群模式安装和配置

伪分布式集群:在一台Server中,启动多个ZooKeeper的实例。
下面来看看zookeeper怎么进行安装的吧。

下载

选择一个稳定版本进行下载,我这里下载的是zookeeper-3.4.6版本。

1
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz

解压

1
2
3
4
5
6
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

创建实例配置文件

1
2
3
4
cd zookeeper-3.4.6/conf
cp zoo_sample.cfg zoo1.cfg
cp zoo_sample.cfg zoo2.cfg
cp zoo_sample.cfg zoo3.cfg

修改配置

1
2
3
4
5
6
7
8
tickTime=2000  
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
  1. 分别配置三个实例的clientPort端口为2181, 2182, 2183
  2. 分别配置是哪个实例的dataDir目录为/opt/zk1/data/opt/zk2/data/opt/zk3/data,并创建这三个目录,没有创建该目录会启动出错
  3. 定义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:port
    n是服务器id,第一个port是follower用来连接leader的端口,第二个port是用于leader选举

  • clientPort
    监听client连接的端口号

  • initLimit
    设定了所有follower与leader进行连接并同步的时间范围。如果在设定的时间段内,半数以上的follower跟随者未能完成同步,leader会宣布放弃领导地位,然后进行另外一次leader选举,如果这种情况经常发生,则表明设定的值太小

  • syncLimit
    设定了允许一个follower与leader这进行同步的时间。如果在设定的时间段内,一个follower未能完成同步,会自己重启,所有关联到follower的客户端将连接到另一个follower

创建dataDir和实例id文件
1
2
3
4
5
6
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服务

1
2
3
bin/zkServer.sh start zoo1.cfg
bin/zkServer.sh start zoo2.cfg
bin/zkServer.sh start zoo3.cfg

查看是否启动成功

1
jps

看到类似下面的进程就表示3个实例均启动成功
13419 QuorumPeerMain
13460 QuorumPeerMain
13561 Jps
13392 QuorumPeerMain
如果未成功启动,可以到zookeeper.out文件中查看启动失败的日志信息。

客户端连接

1
./zkCli.sh -server 127.0.0.1:2181

关闭zookeeper

1
bin/zkServer.sh stop

重启zookeeper

1
bin/zkServer.sh restart