准备zk集群所用的机器

172.22.40.104
172.22.40.105
172.22.40.106

下载安装包

到zookeeper官网上下载:https://zookeeper.apache.org/
这里我们使用:https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz

当然也可以使用wget命令下载:

[root@rabbitmq-1 local]# wget https://dlcdn.apache.org/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz

下载好之后上传到linux服务器

rz上传命令

如果rz上传失败,可以先传到跳板机然后再scp到目标机器上:scp -r ./apache-zookeeper-3.6.3-bin.tar.gz root@172.22.40.106:/usr/local/

进入172.22.40.104机器,解压apache-zookeeper-3.6.3-bin.tar.gz

tar -xzvf apache-zookeeper-3.6.3-bin.tar.gz 

修改文件名

mv apache-zookeeper-3.6.3-bin zookeeper

在根目录(即zookeeper目录下)创建文件夹 data 和文件夹 logs

cd zookeeper && mkdir data && mkdir logs

进入data目录下创建一个myid文件 ,用来存储zookeeper服务的唯一标识

echo 1 > /usr/local/zookeeper/data/myid

在另外两个机器的zookeeper目录里,同样执行以上操作,注意唯一标识要区分开

ssh 172.22.40.105
cd usr/local && tar -xzvf apache-zookeeper-3.6.3-bin.tar.gz
mv apache-zookeeper-3.6.3-bin zookeeper
cd zookeeper && mkdir data && mkdir logs
echo 2 > data/myid
ssh 172.22.40.106
cd usr/local && tar -xzvf apache-zookeeper-3.6.3-bin.tar.gz
mv apache-zookeeper-3.6.3-bin zookeeper
cd zookeeper && mkdir data && mkdir logs
echo 3 > data/myid

修改配置zoo.cfg

cd /usr/local/zookeeper/conf && cp zoo_sample.cfg zoo.cfg

主要修改的配置为:

# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/logs
server.1=172.22.40.104:2888:3888
server.2=172.22.40.105:2888:3888
server.3=172.22.40.106:2888:3888
注意:server. 后面跟的数字就是myid文件内存储的唯一标识

把172.22.40.104机器上的zoo.cfg配置文件copy到另外两台机器

配置环境变量

	vim /etc/profile
	#在最后加上
	export ZK_HOME=/usr/local/zookeeper
	export PATH=$ZK_HOME/bin:$PATH
	#强制生效
	source /etc/profile

分别启动这三个zookeeper

cd /usr/local/zookeeper/bin
./zkServer.sh start

查看是否有2181端口

ps -ef | grep zookeeper
netstat -nplt | grep 2181

分别查看三台机器上zk的运行状态

[root@root-1 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
-------
[root@root-2 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader
-------
[root@root-3 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower

到这可以看出40.105上zookeeper被投票选举为leader(主机) ,其余两个zookeeper为follower(备机)

zookeeper常用命令

1、zookeeper的启动命令

cd /usr/local/zookeeper/bin/
./zkServer.sh start

2、zookeeper的停止命令

./zkServer.sh stop

3、查看状态命令

./zkServer.sh status

4、重启ZK服务

./zkServer.sh restart

5、连接服务器

./zkCli.sh -server 127.0.0.1:2181

zookeeper配置文件说明

主要介绍几个常用的配置:

#这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳。
#是initLimit和syncLimit超时配置的基本单位:毫秒。
#例如对于initLimit,其配置值为10,说明其超时时间为 2000ms * 10 = 20秒。
tickTime=2000

#这个配置项是用来配置Zookeeper接受客户端(这里所说的客户端不是用户连接Zookeeper服务器的客户端,而是Zookeeper 服务器集群中连接到Leader的Follower服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 5个心跳的时间(也就是tickTime)长度后Zookeeper服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。
#zooKeeper集群模式下包含多个zk进程,其中一个进程为leader,余下的进程为follower。
#当follower最初与leader建立连接时,它们之间会传输相当多的数据,尤其是follower的数据落后leader很多。
#initLimit配置follower与leader之间建立连接后进行同步的最长时间。
initLimit=10

#这个配置项标识Leader与Follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime 的时间长度,总的时间长度就是5*2000=10秒
#配置follower和leader之间发送消息,请求和应答的最大时间长度。
syncLimit=5

#dataDir指定的路径是快照日志保存路径,当没有指定dataLogDir路径时,事务日志也会保存在该目录下。
dataDir=/usr/local/zookeeper/data
#dataLogDir指定的路径是事务日志保存路径。
dataLogDir=/usr/local/zookeeper/logs

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

# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3

# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true

#其中server.后面为一个数字,表示zk进程的id,这个id也是dataDir目录下myid文件的内容。
#172.22.40.104为集群里的IP地址,
#第一个端口是leader和follower之间的通信端口,默认是2888,
#第二个端口是leader选举的端口,集群刚启动的时候选举或者leader挂掉之后进行新的选举的端口默认是3888。
server.1=172.22.40.104:2888:3888
server.2=172.22.40.105:2888:3888
server.3=172.22.40.106:2888:3888

重要配置说明

 1. myid文件和server.myid在快照目录下存放的标识本台服务器的文件,他是整个zk集群用来发现彼此的一个重要标识。
 2. zoo.cfg 文件是zookeeper配置文件在conf目录里。
 3. log4j.properties文件是zk的日志输出文件在conf目录里用java写的程序基本上有个共同点日志都用log4j,来进行管理。
 4. zkEnv.sh和zkServer.sh文件 	
 	zkServer.sh 主的管理程序文件 	
 	zkEnv.sh 是主要配置,zookeeper集群启动时配置环境变量的文件

集群测试

启动zookeeper

启动zookeeper服务之后,我们可以使用如下命令连接到zookeeper服务

cd /usr/local/zookeeper/bin
./zkCli.sh -server 172.22.40.104:2181
或
./zkCli.sh -server 127.0.0.1:2181

注意,zookeeper不会主动的清除旧的快照和日志文件,这个是操作者的责任。以下为清除文件的实例脚本:

#!/bin/bash
dataDir=/opt/zookeeper/zkdata/version-2
dataLogDir=/opt/zookeeper/zkdatalog/version-2
count=66
count= [ [ [count+1]
ls -t d a t a L o g D i r / l o g . ∗ ∣ t a i l − n + dataLogDir/log.* | tail -n + dataLogDir/log.tailn+count | xargs rm -f
ls -t d a t a D i r / s n a p s h o t . ∗ ∣ t a i l − n + dataDir/snapshot.* | tail -n + dataDir/snapshot.tailn+count | xargs rm -f
以上这个脚本定义了删除对应两个目录中的文件,保留最新的66个文件,可以将他写到crontab 中,设置为每天凌晨2点执行一次就可以了。

zk客户端命令

命令行工具的一些常用操作命令如下:

1、ls #查看某个目录包含的所有文件,例如:

[zk: 172.22.40.104:2181(CONNECTED) 1] ls /
[zookeeper]

2、create #创建znode,并设置初始内容,例如:

[zk: 172.22.40.104:2181(CONNECTED) 4] create /test "test"
Created /test

3、get #获取znode的数据,如下:

[zk: 172.22.40.104:2181(CONNECTED) 5] get /test
test

4、set #修改znode内容,例如:

[zk: 172.22.40.104:2181(CONNECTED) 6] set /test "testyAz"
[zk: 172.22.40.104:2181(CONNECTED) 7] get /test
testyAz

5、delete – 删除znode,例如:

[zk: 127.0.0.1:2181(CONNECTED) 1] delete /test

6、quit – 退出客户端

7、help – 帮助命令

zookeeper 图形化的客户端工具:ZooInspector

查看Zookeeper中的数据,我们可以通过ZkCli.sh命令客户端查看,但是不太直观,因为Zookeeper本身数据是以树型结构存储组织的。给大家推荐一个实用的界面操作工具**ZooInspector**。
ZooInspector下载地址:https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip

使用方式

#1)解压,进入目录:ZooInspector/build
#2)运行或mac下双击zookeeper-dev-ZooInspector.jar
//执行成功后,会弹出java ui client
java -jar zookeeper-dev-ZooInspector.jar
#3)点击左上角连接按钮,输入Zookeeper服务地址:ip:2181,点击OK,就可以查看Zookeeper节点信息了。
Logo

更多推荐