Centos7下ZooKeeper集群搭建
引言
ZooKeeper是一个高效的分布式协调服务,它暴露了一些公共服务,比如命令/配置管理/同步控制/群组服务等。我们可以使用zk来实现比如达到共识/集群管理/leader选举等。
ZooKeeper是一个高可用的分布式管理与协调框架,基于ZAB算法(原子消息广播协议)的实现。该框架能够很好地保证分布式环境中数据的一致性。也正是基于这样的特性,使得ZooKeeper成为了解决分布式一致性问题的利器。
- 顺序一致性:从一个客户端发起的事务请求,最终将会严格地按照其发起的顺序被应用到ZooKeeper中去。
- 原子性:所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,也就是说,要么整个集群所有的机器都成功应用了某一事务,要么就没有应用,一定不会出现部分机器应用了该事务,而另一部分没有应用的情况。
- 单一视图:无论客户端连接的是哪一个ZooKeeper服务器,其看到的服务器端数据模型都是一致的。
- 可靠性:一旦服务器成功地应用了一个事务,并完成对客户端的响应,那么该事务所引起的服务器端状态将会被一致保留下来。除非有另外一个事务对其更改。
- 实时性:通常所说的实时性就是指一旦事务被成功应用,那么客户端就能立刻从服务器上获取变更后的新数据,ZooKeeper仅仅能保证在一段时间内,客户端最终一定能从服务器读取最新的数据状态。
ZooKeeper设计目标
- 目标1:简单的数据结构。ZooKeeper就是以简单的数据结构来进行相互协调的(也叫树形名字空间)。
- 目标2:可以构建集群。一般ZooKeeper集群通常由一组机器构成,一般3~5台机器就可以组成一个ZooKeeper集群了。只要集群中超过半数以上的机器能够正常工作,那么整个集群就能够正常对外提供服务。
- 目标3:顺序访问。对于来自每一个客户端的每一个请求,ZooKeeper都会分配一个唯一的递增编号,这个编号反映了所有事务操作的先后顺序,应用程序可以使用ZooKeeper的这个特性来实现更高层次的同步。
- 目标4:高性能。由于ZooKeeper将全量数据存储在内存中,并直接服务于所有的非事务请求,因此尤其是在读操作为主的场景下性能非常突出。在JMater压力测试下(100%读请求场景下),其结果大约在12~13W的QPS。
ZK sERVER根据其身份特性分为三种:Leader,Follower,Observer,其中Follower和Observer又统称Learner(学习者)。
- Leader:负责客户端的writer类型请求。
- Follower:负责客户端的reader类型请求,参与leader选举等。
- Observer:特殊的“Follower”,其可以接受客户端reader请求,但不参与选举。
典型应用场景
- 配置管理
- 集群管理
- 发布与订阅
- 数据库切换
- 分布式日志的收集
- 分布式锁、队列管理等等
准备环境
zk
服务器集群规模不小于3个节点,要求服务器之间系统时间保持一致。本例以三个节点讲解安装:
ZooKeeper
是用Java
编写的,运行在Java
环境上,因此,在部署zk
的机器上需要安装Java
运行环境。为了正常运行zk
,我们需要JRE1.6
或者以上的版本。Centos7下Java环境搭建
服务器IP | 节点别名 |
---|---|
192.168.133.61 | zk-1 |
192.168.133.62 | zk-2 |
192.168.133.63 | zk-3 |
开始安装
以下步骤集群各机器均需操作,保持一致。
1、下载所需要的zk
安装包zookeeper-3.4.10.tar.gz
2、将zookeeper-3.4.10.tar.gz
上传
3、解压zookeeper-3.4.10.tar.gz
[root@localhost software]# tar -zxvf zookeeper-3.4.10.tar.gz -C /usr/local/
解压完成后,会在/usr/local/
目录下多出一个zookeeper-3.4.10
4、zk
重命名:将zookeeper-3.4.10
重命名为zookeeper
[root@localhost software]# mv /usr/local/zookeeper-3.4.10 /usr/local/zookeeper
5、设置环境变量
[root@localhost local]# vim /etc/profile
保存退出后,刷新配置
[root@localhost local]# source /etc/profile
6、到zookeeper
下修改配置文件
[root@localhost local]# cd /usr/local/zookeeper/conf/
[root@localhost local]# mv zoo_sample.cfg zoo.cfg
7、修改conf
,修改两处
[root@localhost conf]# vim zoo.cfg
1)dataDir=/usr/local/zookeeper/data
2)最后面添加
server.0=192.168.133.61::
server.1=192.168.133.62::
server.2=192.168.133.63::
修改后的配置如下:
在这个配置文件中,出现的语句的含义:
initLimit
:此配置表示允许follower连接并同步到leader的初始化时间,它以tickTime的倍数来表示。当超过设置倍数的tickTime时间,则连接失败。syncLimit
:Leader服务器与follower服务器之间信息同步允许的最大时间间隔,如果超过次间隔,默认follower服务器与leader服务器之间断开链接。maxClientCnxns
:限制连接到zookeeper服务器客户端的数量server.A=B:C:D
:其中A是一个数字,代表这是第几号服务器(这个数字必须在集群环境中服务器标识中是唯一的,且大小在1~255之间);B是服务器的IP地址;C表示服务器与群集中的“领导者”交换信息的端口;当领导者失效后,D表示用来执行选举时服务器相互通信的端口。
8、服务器标识配置
1)创建文件夹
[root@localhost conf]# mkdir /usr/local/zookeeper/data/
2)创建文件myid并填写内容
[root@localhost conf]# vi /usr/local/zookeeper/data/myid
192.168.133.61填写内容0
192.168.133.62填写内容1
192.168.133.63填写内容2
9、启动zookeeper
(因为前面配置过环境变量,所以直接敲启动命令就OK)
执行:
zkServer.sh start
(注意这里3台机器都要进行启动)
10、相关知识
脚本路径:/usr/local/zookeeper/bin
执行:zkServer.sh start
(注意这里3台机器都要进行启动)
状态:zkServer.sh status
(在三个节点上检查zk
的Mode
,一个leader
和两个follower
)
11、操作zookeeper
(shell)
zkCli.sh
进入zookeeper
客户端
[root@localhost software]# zkCli.sh
根据提示命令进行操作:
- 查找:
ls /
或ls /zookeeper
- 创建并赋值:
create /hello 123
- 获取:
get /hello
- 设置:
set /hello 456
- 删除指定某个节点:
delete /path/child
- 递归删除节点:
rmr /path
zookeeper
持久节点:该数据节点被创建后,就会一直存在于zookeeper服务器上,直到有删除操作来主动删除这个节点。
zookeeper
临时节点:临时节点的生命周期和客户端会话绑定在一起,客户端会话失效,则这个节点就会被自动清除。