在CentOS7上配置Zookeeper 3.4.8集群

背景介绍

本文介绍ZooKeeper-3.4.8版本的分布式安装,力求提供细致、精确的安装指导。本文的安装环境是64位的CentOS 7。

约定

将ZooKeeper安装在/opt/zookeeper目录,其中/opt/zookeeper是指向/opt/zookeeper-3.4.8的软链接。ZooKeeper的数据目录设置为/opt/zookeeper/data。

机器列表

机器IP 主机名
10.160.233.44 zoo1
10.160.233.45 zoo2
10.160.233.46 zoo3

安装前准备

分别登录3台机器进行主机名设置、hosts设置、ssh免密登录设置

### ssh [email protected] 登录到目标机器 ###
[root@zoo1 ~]# hostnamectl set-hostname zoo1
### ssh [email protected] 登录到目标机器 ###
[root@zoo2 ~]# hostnamectl set-hostname zoo2
### ssh [email protected] 登录到目标机器 ###
[root@zoo3 ~]# hostnamectl set-hostname zoo3
### 下面以zoo1为例,实际需要分别在3台机器上进行以下操作 ###
[root@zoo1 ~]# cat /etc/sysconfig/network
[root@zoo1 ~]# cat >> /etc/hosts << EOF

10.160.233.44    zoo1
10.160.233.45    zoo2
10.160.233.46    zoo3
EOF
[root@zoo1 ~]# ssh-keygen -t rsa -P ''
[root@zoo1 ~]# ls -l /root/.ssh/
[root@zoo1 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@zoo2
[root@zoo1 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@zoo3
[root@zoo1 ~]# ssh root@zoo2
[root@zoo1 ~]# ssh root@zoo3

设置myid

在Zookeeper配置文件中dataDir指定的数据目录(/opt/zookeeper/data)下,创建文件myid,文件内容为一个正整数值,用来唯一标识当前机器,因此不同机器的数值不能相同,建议从1开始递增标识,以方便记忆和管理。本文约定如下:

机器IP myid
10.160.233.44 1
10.160.233.45 2
10.160.233.46 3

可以使用echo命令直接写进去

[root@zoo1 ~]# mkdir -p /opt/zookeeper/{data,logs}
[root@zoo1 ~]# ls -ltr /opt/zookeeper/
[root@zoo1 ~]# echo 1 > /opt/zookeeper/data/myid
[root@zoo2 ~]# echo 2 > /opt/zookeeper/data/myid
[root@zoo3 ~]# echo 3 > /opt/zookeeper/data/myid

下载Zookeeper并配置

Zookeeper是java应用,因此需要java运行环境,对于java环境的配置可以参考我以前的文章在CentOS7上用systemctl配置tomcat 8

[root@zoo1 ~]# wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz -P /opt
[root@zoo1 ~]# cd /opt/
[root@zoo1 opt]# scp -r zookeeper-3.4.8.tar.gz root@zoo2:/opt
[root@zoo1 opt]# scp -r zookeeper-3.4.8.tar.gz root@zoo3:/opt
[root@zoo1 opt]# tar -zxvf zookeeper-3.4.8.tar.gz
[root@zoo1 ~]# ln -s /opt/zookeeper-3.4.8 zookeeper
[root@zoo1 opt]# cat > /opt/zookeeper/conf/zoo.cfg << EOF
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper/data
dataLogDir=/opt/zookeeper/logs
clientPort=2181
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
maxClientCnxms=500
minSessionTimeout=30000
maxSessionTimeout=60000
EOF
[root@zoo1 opt]# scp -r /opt/zookeeper/conf/zoo.cfg root@zoo2:/opt/zookeeper/conf
[root@zoo1 opt]# scp -r /opt/zookeeper/conf/zoo.cfg root@zoo3:/opt/zookeeper/conf

说明:
server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。

设置环境变量、启动ZooKeeper集群

### 下面以zoo1为例,实际需要分别在3台机器上进行以下操作 ###
[root@zoo1 opt]# echo -e '\n\nexport PATH=/opt/zookeeper/bin:$PATH\n' >> /etc/profile && source /etc/profile
[root@zoo1 opt]# zkServer.sh start

安装验证

脚本zkServer.sh不但可以用来启动ZooKeeper,还可以用来查看状态、停止。使用方式为带一个status参数、stop参数。

[root@zoo1 opt]# zkServer.sh status
JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: leader

基本命令

[root@zoo1 opt]# zkCli.sh -server localhost:2181
  1. 查看当前节点列表
[zk: localhost:2181(CONNECTED) 1] ls /
[zookeeper]
  • 创建节点
[zk: localhost:2181(CONNECTED) 2] create /test "test"
Created /test
[zk: localhost:2181(CONNECTED) 3] ls /
[zookeeper, test]
  • 查看节点数据
[zk: localhost:2181(CONNECTED) 4] get /test
"test"
cZxid = 0x300000007
ctime = Thu Sep 24 05:54:51 PDT 2015
mZxid = 0x300000007
mtime = Thu Sep 24 05:54:51 PDT 2015
pZxid = 0x300000007
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0
  • 设置节点数据
[zk: localhost:2181(CONNECTED) 7] set /test "111111" 
cZxid = 0x300000007
ctime = Thu Sep 24 05:54:51 PDT 2015
mZxid = 0x300000008
mtime = Thu Sep 24 05:57:40 PDT 2015
pZxid = 0x300000007
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 0
[zk: localhost:2181(CONNECTED) 8] get /test
"111111"
cZxid = 0x300000007
ctime = Thu Sep 24 05:54:51 PDT 2015
mZxid = 0x300000008
mtime = Thu Sep 24 05:57:40 PDT 2015
pZxid = 0x300000007
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 0
  • 删除节点
[zk: localhost:2181(CONNECTED) 9] delete /test
[zk: localhost:2181(CONNECTED) 10] ls /
[zookeeper]

zookeeper四字命令的使用

zookeeper四字命令 功能描述
conf 输出相关服务配置的详细信息
cons 列出所有连接到服务器的客户端的完全的连接 /会话的详细信息。包括“接受 / 发送”的包数量、会话id 、操作延迟、最后的操作执行等等信息。
dump 列出未经处理的会话和临时节点
envi 输出关于服务环境的详细信息(区别于 conf命令)。
reqs 列出未经处理的请求
ruok 测试服务是否处于正确状态。如果确实如此,那么服务返回“imok ”,否则不做任何相应。
stat 输出关于性能和连接的客户端的列表。
wchs 列出服务器 watch的详细信息。
wchc 通过 session列出服务器 watch的详细信息,它的输出是一个与watch相关的会话的列表。
wchp 通过路径列出服务器 watch的详细信息。它输出一个与 session相关的路径。

查看连接到结点上所有的client信息,被选作leader还是 follower

[root@zoo2 ~]# yum -y install nc
[root@zoo2 ~]#  echo stat|nc 127.0.0.1 2181
Zookeeper version: 3.4.8-1, built on 02/06/2016 03:18 GMT
Clients:
 /10.41.51.7:59655[1](queued=0,recved=34413,sent=34417)
 /127.0.0.1:55594[0](queued=0,recved=1,sent=0)
 /10.41.51.7:59603[1](queued=0,recved=34426,sent=34431)
 /10.41.51.7:59436[1](queued=0,recved=34502,sent=34518)
Latency min/avg/max: 0/0/45
Received: 7768148
Sent: 7771067
Connections: 4
Outstanding: 0
Zxid: 0xb0000c4ec
Mode: follower
Node count: 227

结束语

至此,ZooKeeper分布式安装大告成功!更多细节,请浏览官方文档:http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html。

你可能感兴趣的:(在CentOS7上配置Zookeeper 3.4.8集群)