Zookeeper伪分布式环境搭建:
一、创建集群节点
1. 创建zookeeper-cluster]文件夹
2. 在zookeeper-cluster]文件夹中下载并解压Zookeeper
```
[john@john zookeeper-cluster]$ ls
apache-zookeeper-3.5.5-bin
```
- 1
- 2
- 3
- 4
3. 创建集群节点并创建数据存放路径
创建第一个集群节点node1:
[john@john zookeeper-cluster]$ mv apache-zookeeper-3.5.5-bin ./node1
[john@john zookeeper-cluster]$ mkdir node1/data
- 1
- 2
创建第二个集群节点node2:
[john@john zookeeper-cluster]$ cp -r node1/ node2
[john@john zookeeper-cluster]$ mkdir node2/data
- 1
- 2
创建第三个集群节点node3:
[john@john zookeeper-cluster]$ cp -r node1/ node3
[john@john zookeeper-cluster]$ mkdir node3/data
- 1
- 2
每个节点创建zoo.cfg文件
[john@john zookeeper-cluster]$ mv node1/conf/zoo_sample.cfg zoo.cfg
[john@john zookeeper-cluster]$ mv node2/conf/zoo_sample.cfg zoo.cfg
[john@john zookeeper-cluster]$ mv node3/conf/zoo_sample.cfg zoo.cfg
- 1
- 2
- 3
二、更改每个节点zoo.cfg配置文件:
node1的配置文件:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/john/zookeeper-cluster/node1/data
clientPort=2181
server.1=10.10.14.146:2811:3811
server.2=10.10.14.146:2812:3812
server.3=10.10.14.146:2813:3813
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
node2的配置文件:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/john/zookeeper-cluster/node2/data
clientPort=2182
server.1=10.10.14.146:2811:3811
server.2=10.10.14.146:2812:3812
server.3=10.10.14.146:2813:3813
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
node3的配置文件:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/john/zookeeper-cluster/node3/data
clientPort=2183
server.1=10.10.14.146:2811:3811
server.2=10.10.14.146:2812:3812
server.3=10.10.14.146:2813:3813
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
参数说明:
-
tickTime=2000:
tickTime这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳; -
initLimit=10:
initLimit这个配置项是用来配置Zookeeper接受客户端(这里所说的客户端不是用户连接Zookeeper服务器的客户端,而是Zookeeper服务器集群中连接到Leader的Follower服务器)初始化连接时最长能忍受多少个心跳时间间隔数。
当已经超过10个心跳的时间(也就是tickTime)长度后Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是10*2000=20 秒; -
syncLimit=5:
syncLimit这个配置项标识Leader与Follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是5*2000=10秒; -
dataDir=/home/john/zookeeper-cluster/node1/data
dataDir顾名思义就是Zookeeper保存数据的目录,默认情况下Zookeeper将写数据的日志文件也保存在这个目录里(路径为绝对路径); -
clientPort=2181
clientPort这个端口就是客户端连接Zookeeper服务器的端口,Zookeeper会监听这个端口接受客户端的访问请求; -
server.1=10.10.14.146:2811:3811
server.2=10.10.14.146:2812:3812
server.3=10.10.14.146:2813:3813
server.A=B:C:D:
A:是一个数字,表示这个是第几号服务器,
B:是这个服务器的ip地址
C:第一个端口用来集群成员的信息交换,表示的是这个服务器与集群中的Leader服务器交换信息的端口
D:是在leader挂掉时专门用来进行选举leader所用
三、创建集群标识
除了修改zoo.cfg配置文件,集群模式下还要配置一个文件myid,这个文件在dataDir目录下,这个文件里面就有一个数据就是A的值,在上面配置文件中zoo.cfg中配置的dataDir路径中创建myid文件
[john@john zookeeper-cluster]$ echo "1" > node1/data/myid
[john@john zookeeper-cluster]$ echo "2" > node2/data/myid
[john@john zookeeper-cluster]$ echo "3" > node3/data/myid
- 1
- 2
- 3
四、启动集群
[john@john zookeeper-cluster]$ ./node1/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/john/zookeeper-cluster/node1/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[john@john zookeeper-cluster]$ ./node2/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/john/zookeeper-cluster/node2/bin/…/conf/zoo.cfg
Starting zookeeper … STARTED
[john@john zookeeper-cluster]$ ./node3/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/john/zookeeper-cluster/node3/bin/…/conf/zoo.cfg
Starting zookeeper … STARTED
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
五、检测集群是否启动
[john@john zookeeper-cluster]$ ps aux | grep java
- 1
六、伪集群部署注意事项
在一台机器上部署了3个server;需要注意的是clientPort这个端口,如果在1台机器上部署多个server,那么每个server都要有不同的clientPort.
比如 server.1是2181,server.2是2182,server.3是2183
最后几行唯一需要注意的地方就是
server.X 这个数字就是对应 data/myid中的数字。
附:集群的启动脚本
start_cluster.sh
#!/bin/bash
echo “prepare start zookeeper cluster…”
work_dir=pwd
cd $work_dir
./node1/bin/zkServer.sh start &
if [ $? -eq 0 ]
then
echo “启动node1成功”
else
echo “启动node1失败”
exit 1
fi
./node2/bin/zkServer.sh start &
if [ $? -eq 0 ]
then
echo “启动node2成功”
else
echo “启动node2失败”
exit 1
fi
./node3/bin/zkServer.sh start &
if [ $? -eq 0 ]
then
echo “启动node3成功”
else
echo “启动node3失败”
exit 1
fi
echo “start zookeeper cluster complete…”
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
脚本放置位置:与node1,node2,node3同一个目录
</div>