zookeeper 集群的搭建

Zookeeper 集群中只要有过半的节点是正常的情况下,那么整个集群对外就是可用的。正是基于这个特性,要将ZK集群的节点数量要为奇数(2n + 1 如 3 5 7 个节点)较为合适。

1、服务器节点

服务器端口
192.168.50.1102181、2881、3881
192.168.50.1112182、2882、3882
192.168.250.1122183、2883、3883

2、下载或者上传zookeeper-3.4.6.tar.gz 到、/usr/local/zookeeper

# cd /usr/local/zookeeper

#wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz

3、解压 zookeeper-3.4.10.tar.gz

# tar -zxvf zookeeper-3.4.10.tar.gz

4、在zookeeper 节点下目录下创建一下目录

# cd  /usr/local/zookeeper-3.4.10

#mkdir data

#mkdir logs

5、将zookeeper-3.4.10/conf目录下的zoo_sample.cfg 文件拷贝一份,命

# cp zoo_sample.cfg zoo.cfg

6、修改 zoo.cfg 配置文件

192.168.50.110的配置    /usr/local/zookeeper-3.4.10/conf/

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-3.4.10/data
dataLogDir=/usr/local/zookeeper-3.4.10/logs
clientPort=2181
server.1=192.168.50.110:2881:3881
server.2=192.168.50.111:2882:3882
server.3=192.168.50.112:2883:3883

192.168.50.111的配置    /usr/local/zookeeper-3.4.10/conf/

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-3.4.10/data
dataLogDir=/usr/local/zookeeper-3.4.10/logs
clientPort=2181
server.1=192.168.50.110:2881:3881
server.2=192.168.50.111:2882:3882
server.3=192.168.50.112:2883:3883

192.168.50.112的配置    /usr/local/zookeeper-3.4.10/conf/

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-3.4.10/data
dataLogDir=/usr/local/zookeeper-3.4.10/logs
clientPort=2181
server.1=192.168.50.110:2881:3881
server.2=192.168.50.111:2882:3882
server.3=192.168.50.112:2883:3883

参数说明: :
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/wusc/zookeeper/node-01/data
dataDir顾名思义就是Zookeeper保存数据的目录,默认情况下Zookeeper将写数据的日志文件也保存在

这个目录里。


clientPort=2181
clientPort 这个端口就是客户端(应用程序)连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端
口接受客户端的访问请求。

server.A=B:C:D

server.1=192.168.50.110:2881:3881
server.2=192.168.50.111:2882:3882
server.3=192.168.50.112:2883:3883
A 是一个数字,表示这个是第几号服务器;
B 是这个服务器的 IP 地址(或者是与 IP 地址做了映射的主机名);
C 第一个端口用来集群成员的信息交换,表示这个服务器与集群中的 Leader 服务器交换信息的端口;
D 是在 leader 挂掉时专门用来进行选举 leader 所用的端口。
注意:如果是伪集群的配置方式,不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不

同的端口号。


7、在 dataDir = /usr/local/zookeeper-3.4.10/conf/data 下创建myid 文件

编辑 myid 文件,并在对应的 IP 的机器上输入对应的编号。如在 192.168.50.110 上,myid 文件内容就是
1,192.168.50.111 上就是 2,192.168.50.113 上就是 3:

$ vi    /usr/local/zookeeper-3.4.10/data/myid   值为1

$ vi    /usr/local/zookeeper-3.4.10/data/myid   值为2

$ vi    /usr/local/zookeeper-3.4.10/data/myid   值为3


8.在防火墙中打开要用到的端口 218X、288X、388X

切换到 root 用户权限,执行以下命令:
# chkconfig iptables on
# service iptables start
编辑/etc/sysconfig/iptables
# vi /etc/sysconfig/iptables
如服务器 01 增加以下 3 行:
## zookeeper

# vi /etc/sysconfig/iptables

# chkconfig iptables on
# service iptables start

-A INPUT -m state --state NEW -m tcp -p tcp --dport 2181 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2881 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3881 -j ACCEPT

重启防火墙:
service iptables restart

查看防火墙端口状态:
# service iptables status
# chkconfig iptables on
# service iptables start
# service iptables restart

9、 启动并测试 zookeeper(要用 wusc 用户启动,不要用 root):
(1) 使用 wusc 用户到 /usr/local/zookeeper-3.4.10/bin 目录中执行:
$ /usr/local/zookeeper-3.4.10/bin/zkServer.sh start
$ /usr/local/zookeeper-3.4.10/bin/zkServer.sh start

$ /usr/local/zookeeper-3.4.10/bin/zkServer.sh start

(2) 输入jps命令查看进程

$jps

1456 QuoruPeerMain

其中,QuorumPeerMain 是 zookeeper 进程,说明启动正常

(3)查看状态

 /usr/local/zookeeper-3.4.10/bin/zkServer.sh status

(4) 查看zookeeper服务输出信息:

服务输出信息输出在 /usr/local/zookeeper-3.4.10/bin/zookeeper.out

$ tail -f -n 1000 zookeeper.out

10、停止zookeeper 进程

$ ./zkServer.sh stop
11、配置 zookeeper 开机使用 root 用户启动:
编辑192.168.50.110、192.168.50.111、192.168.50.112 中的/etc/rc.local 文件,分别加入:
su - root-c '/usr/local/zookeeper-3.4.10//bin/zkServer.sh start'
su - root-c '/usr/local/zookeeper-3.4.10/bin/zkServer.sh start'
su - root-c '/usr/local/zookeeper-3.4.10/bin/zkServer.sh start'

12.zookeeper角色

Leader:

Leader 作为整个 ZooKeeper 集群的主节点,负责响应所有对 ZooKeeper 状态变更的请求。
它会将每个状态更新请求进行排序和编号,以便保证整个集群内部消息处理的 FIFO,写操

作都走 leader。

Follower 
Follower 的逻辑就比较简单了。除了响应本服务器上的读请求外,follower 还要处理
leader 的提议,并在 leader 提交该提议时在本地也进行提交。 另外需要注意的是,
leader 和 follower 构成 ZooKeeper 集群的法定人数,也就是说,只有他们才参与新 leader

的选举、响应 leader 的提议。

Observer 
如果 ZooKeeper 集群的读取负载很高,或者客户端多到跨机房,可以设置一些 observer
服务器,以提高读取的吞吐量。Observer 和 Follower 比较相似,只有一些小区别:首先
observer 不属于法定人数,即不参加选举也不响应提议;其次是 observer 不需要将事务持
久化到磁盘,一旦 observer 被重启,需要从 leader 重新同步整个名字空间。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页