背景介绍
本文介绍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 root@10.160.233.44 登录到目标机器 ###
[root@zoo1 ~]# hostnamectl set-hostname zoo1
### ssh root@10.160.233.45 登录到目标机器 ###
[root@zoo2 ~]# hostnamectl set-hostname zoo2
### ssh root@10.160.233.46 登录到目标机器 ###
[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
- 查看当前节点列表
[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。
网友评论