Linux 下 ZooKeeper 安装与运维

Apache ZooKeeper 是一个分布式的、开源的程序协调服务,是 Hadoop 项目下的一个子项目。ZooKeeper 主要应用场景包括集群管理、配置中心、分布式锁、注册中心等。实际项目中,为了保证高可用,ZooKeeper 都是以分布式集群的方式进行安装的,至少需要三个节点。

ZooKeeper 包含主从节点以及心跳机制(选举模式),假设 master 节点挂了之后,ZooKeeper 会通过选举模式在 slave 节点选举出一个新的 master。

这里 Linux 选择 CentOS 7.2。

1.ZooKeeper安装

# wget -P /usr/local http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
# cd /usr/local
# tar -zxvf zookeeper-3.4.13.tar.gz
# vim /etc/rc.d/rc.local                             //配置开启自启动

追加如下配置即可(oracle jdk 对应的 JAVA_HOME 为 export JAVA_HOME=/usr/java/jdk):

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64
/usr/local/zookeeper-3.4.13/bin/zkServer.sh start

我们在三台不同的服务器上各部署一个 ZooKeeper 进程,以构成一个 ZooKeeper 集群。三个 ZooKeeper 进程均使用相同的 zoo.cfg 配置:

# cd /usr/local/zookeeper-3.4.13/conf
# mkdir -p /export/data/zookeeper                    //递归创建目录
# mkdir -p /export/logs/zookeeper
# cp zoo_sample.cfg zoo.cfg                          //拷贝配置文件
# vim zoo.cfg

修改配置如下:

# 配置存储快照文件的目录
dataDir=/export/data/zookeeper
# 配置存储日志文件的目录
dataLogDir=/export/logs/zookeeper
# zk服务进程监听的TCP端口
clientPort=2181
# 2888:ZooKeeper服务之间通信的端口,3888:ZooKeeper与其他应用程序通信的端口
# server.1:表示这是第几号服务器
server.1=192.168.20.11:2888:3888
server.2=192.168.20.12:2888:3888
server.3=192.168.20.13:2888:3888

然后在三台服务器 dataDir 目录下,分别创建一个 myid 文件,其内容分别为1,2,3。然后分别在这三台机器上启动 ZooKeeper 进程,这样我们便将 ZooKeeper 集群启动了起来。如下:

# cd /export/data/zookeeper
# echo 1 >>myid                                          //创建myid文件并写入1
# cd /usr/local/zookeeper-3.4.13/bin
# ./zkServer.sh start                        //后台启动ZooKeeper

还有一些其他命令如下:

# ./zkServer.sh restart                    //重启ZooKeeper
# ./zkServer.sh stop                       //关闭ZooKeeper
# ./zkServer.sh status                    //查看服务状态,其中Mode参数:leader表示master节点,follower表示slave节点
# ./zkServer.sh start-foreground    //前台启动

2.ZooKeeper运维

1.zk目录结构

目录说明
zookeeper/bin主要的一些运行命令
zookeeper/conf存放配置文件
zookeeper/contrib附加的一些功能
zookeeper/dist-mavenmvn 编译后的目录
zookeeper/docs文档
zookeeper/lib需要依赖的 jar 包
zookeeper/recipes案例 demo 代码
zookeeper/src源码

2.zoo_sample.cfg配置文件

配置项默认值说明
tickTime2000用于计算的时间单元,单位毫秒,比如 session 超时: N * tickTime
initLimit10用于集群,允许从节点连接并同步到 master 节点的初始化连接时间,以 tickTime 的倍数来表示
syncLimit5用于集群,master 主节点与从节点之间发送消息,请求和应答时间长度(心跳机制)
dataDir必须配置,配置存储快照文件的目录
dataLogDir配置存储日志文件的目录,如果没有配置则会和 dataDir 共用同一个目录
clientPort2181zk 服务进程监听的TCP端口

3.基于Linux的zk客户端命令行

# cd /usr/local/zookeeper/bin
# ./zkCli.sh                         //打开zk的客户端进入命令行后台

[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]

[zk: localhost:2181(CONNECTED) 0] stat /
cZxid = 0x0                  //表示创建之后 zk 为此节点分配的 id
ctime = Thu Jan 01 08:00:00 HKT 1970           //创建时间
mZxid = 0x0                  //表示修改后 zk 分配的id
mtime = Thu Jan 01 08:00:00 HKT 1970          //修改时间
pZxid = 0xd                  //表示子节点的 id,
cversion = 5                 //表示子节点的版本号,
dataVersion = 0              //表示当前节点数据的版本号,
aclVersion = 0               //表示当前节点权限的版本号,
ephemeralOwner = 0x0         //表示与该节点绑定的session id,
dataLength = 0               //表示数据长度,
numChildren = 1              //表示子节点有几个

基于 Linux 的 zk 客户端命令:

命令说明
help打开帮助
ls path [watch]例如 ls /configCenter,表示显示 /configCenter 下的节点;可选参数 [watch] 表示当前命令可以设置 watcher 事件,例如 ls /configCenter watch,表示为 /config 设置 watcher 事件
ls2 path [watch]例如 ls2 /configCenter,比 ls 命令多输出一些状态信息,等价于 ls 命令 + stat 命令
get path [watch]例如 get /configCenter,把当前指定节点的数据取出来,状态信息也会输出
stat path [watch]例如 stat /configCenter,输出状态信息
create [-s] [-e] path data acl例如 create -s /configCenter/search 0,表示创建 /configCenter/search 节点,节点数据为 0
set path data [version]version 参数如果设置的话,必须设置为指定节点最新的 version 才会去更新,起到乐观锁的效果
delete path [version]version 参数如果设置的话,必须设置为指定节点最新的 version 才会去删除,起到乐观锁的效果
getAcl path获取某个节点的acl权限信息
setAcl path acl设置某个节点的acl权限信息,例如 setAcl /configCenter world:anyone:crwa
addauth scheme auth输入认证授权信息,注册时输入明文密码 (登录),但是在 zk 的系统中,密码是以加密的形式存在的

4.zk四字命令

zk 可以通过它自身提供的简写命令来和服务器进行交互。

# yum install nc                      //安装nc命令

zk 四字命令 (Four Letter Words):echo [commond] | nc [ip] [port]

# echo stat | nc localhost 2181       //查看zk的状态信息,以及是否mode(集群还是单机)
Zookeeper version: 
Clients:
Latency min/avg/max: 0/0/1
Received: 7
Sent: 6
Connections: 1
Outstanding: 0
Zxid: 0x1da
Mode: standalone
Node count: 9

# echo ruok | nc localhost 2181      //查看当前zkServer是否启动,返回imok
imok

# echo dump | nc localhost 2181      //列出未经处理的会话和临时节点
SessionTracker dump:
Session Sets (0):
ephemeral nodes dump:
Sessions with Ephemerals (0):

# echo conf | nc localhost 2181      //查看服务器配置
clientPort=2181
dataDir=
dataLogDir=
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=0

# echo cons | nc localhost 2181      //展示连接到服务器的客户端信息
/0:0:0:0:0:0:0:1:58070[0](queued=0,recved=1,sent=0)

# echo envi | nc localhost 2181      //查看环境变量
Environment:
host.name=
java.version= ...

# echo mntr | nc localhost 2181      //监控zk健康信息
zk_version
zk_avg_latency 1
zk_max_latency 28 ...

# echo wchs | nc localhost 2181      //展示watch的信息
1 connections watching 1 paths
Total watches:1

# echo wchc | nc localhost 2181      //session与watch信息

# echo wchp | nc localhost 2181      //path与watch信息

5.zk迁移数据

找到原先配置中的数据保存地址,可以在 /usr/local/zookeeper-3.4.13/conf/zoo.cfg 配置文件中查看,例如 dataDir=/data/zookeeper/data

# cd /data/zookeeper/data/version-2
# ls -alh

找到最新的日志文件和快照文件,例如 log.ab0002cfd1 和 snapshot.1f0006b6eb,日志文件存放 ZooKeeper 全部数据记录 ,快照文件则是内存增量文件。

拷贝数据到新的 ZooKeeper 集群节点下,重启 ZooKeeper 服务,查看节点数据是否正常:

# scp log.ab0002cfd1 snapshot.1f0006b6eb root@192.168.90.200:/data/zookeeper2
  • 13
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值