5.ZooKeeper集群搭建「第二章 ZooKeeper使用」「架构之路ZooKeeper理论和实战」

在前面的章节中,我们的zk还是单节点的,在生产环境如果挂掉了,那么还是很危险的,所以我们这一节看下zk的集群环境如何搭建。

一、ZooKeeper集群概念

1.1 ZooKeeper集群介绍

       最典型集群模式: Master/Slave 模式(主备模式)。在这种模式中,通常 Master服务器作为主服务器提供写服务,其他的 Slave 服务器从服务器通过异步复制的方式获取 Master 服务器最新的数据提供读服务。

       但是,在 ZooKeeper 中没有选择传统的 Master/Slave 概念,而是引入了Leader、Follower 和 Observer 三种角色。如下图所示:

(1)Leader:负责进行投票的发起和决议,更新系统状态,Leader 是由选举产生;

(2)Follower: 用于接受客户端请求并向客户端返回结果,在选主过程中参与投票;

(3)Observer:可以接受客户端连接,接受读写请求,写请求转发给 Leader,但 Observer 不参加投票过程,只同步 Leader 的状态,Observer 的目的是为了扩展系统,提高读取速度。

二、ZooKeeper集群搭建

       接下来我们看下具体的搭建,一个leader、两个follow,一个observer,那么需要启动4个zk server。

对于集群的搭建,我们看下整体的步骤:

(1)创建zkdata目录以及子目录zk1、zk2、zk3、zk4:用于配置dataDir。

(2)在zk[1-4]分别创建myid,写入相应的id值[1-4]:用于各个集群的标识。

(3)编写配置文件(4个配置文件):核心就是配置每台的端口号和集群的信息。

(4)启动集群:启动集群的每个节点。

(5)客户端连接到集群。

2.1 创建存放数据的目录zkdata

在zk的安装目录下,创建目录zkdata:

创建子目录zk[1-4]:mkdir zkdata/zk1








2.2
创建myid

创建myid : [1-4]:echo 1 > zkdata/zk1/myid

 




      用于配置集群每个节点对应的id。

2.3 编写配置文件

编写配置文件:

       进入conf,复制一份zoo_sample.cfg的配置:

cp zoo_sample.cfg  zoo1.cfg

编辑zoo1.cfg:

       其中一个地方就是dataDir:

dataDir=/Users/linxiangxian/soft/zookeeper/apache-zookeeper-3.6.2-bin/zkdata/zk1

注意:根据自己本地的zkdata的路径进行配置。

       其次就是配置集群信息:

server.1=127.0.0.1:2001:3001

server.2=127.0.0.1:2002:3002

server.3=127.0.0.1:2003:3003

server.4=127.0.0.1:2004:3004:observer

       server.A=B:C:D:E 其中 A(这里的例子是[1-4]) 是一个数字,表示这个是第几号服务器;B(这里的例子是127.0.0.1) 是这个服务器的 ip 地址;C(这里例子是[2001-2004]) 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D (这里例子就是[3001-3004])表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。

zoo2.cfg,zoo3.cfg,zoo4.cfg配置信息都是一样的,不一样的地方就是dataDir指向不同的路径zk2,zk3,zk4即可。

       另外就是端口号要修改clientPort,分别为:2182,2183,2184。

       我们直接看下zoo4.cfg的配置,其它文件同理:

dataDir=/Users/linxiangxian/soft/zookeeper/apache-zookeeper-3.6.2-bin/zkdata/zk4

clientPort=2184

server.1=127.0.0.1:2001:3001

server.2=127.0.0.1:2002:3002

server.3=127.0.0.1:2003:3003

server.4=127.0.0.1:2004:3004:observer

2.4 启动集群

启动集群:

bin/zkServer.sh  start conf/zoo1.cfg

       使用jps看下当前的进程:

       状态查询:bin/zkServer.sh status conf/zoo1.cfg






2.5 客户端连接到集群

       客户端连接到集群:

bin/zkCli.sh  -server 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183,127.0.0.1:2184

       实际只会随机从中选择一台进行连接。

三、ZooKeeper集群动态配置:3.5新特性

       Zookeeper 3.5.0 以前,Zookeeper集群角色要发生改变的话,只能通过停掉所有的Zookeeper服务,修改集群配置,重启服务来完成,这样集群服务将有一段不可用的状态,为了应对高可用需求,Zookeeper 3.5.0 提供了支持动态扩容/缩容的 新特性。但是通过客户端API可以变更服务端集群状态是件很危险的事情,所以在zookeeper 3.5.3 版本要用动态配置,需要开启超级管理员身份验证模式 ACLs。如果是在一个安全的环境也可以通过配置 系统参数 -Dzookeeper.skipACL=yes 来避免配置维护acl 权限配置。

       我们看下具体的一个步骤:

(1)配置一个超级管理员:为了权限的安全性。

(2)修改配置文件:修改配置,主要指向集群信息文件。

(3)集群信息文件:集群的信息。

(4)启动集群。

(5)查看配置信息。

(6)修改集群节点信息。

3.1 配置一个超级管理员

       先配置一个超级管理员(如果不配管理员,也可以设置系统参数 -Dzookeeper.skipACL=yes):如:

在zookeeper启动脚本中添加 超级管理员授权模式,具体步骤如下:

(1)生成base64加密的SHA1加密的密码:

echo -n admin:123456 | openssl dgst -binary -sha1 | openssl base64

       输出结果是:0uek/hZ/V9fgiM35b0Z2226acMQ=

(2)修改vim bin/zkServer.sh文件,添加JVM的系统参数:

-Dzookeeper.DigestAuthenticationProvider.superDigest=admin:0uek/hZ/V9fgiM35b0Z2226acMQ=

3.2 修改配置文件

       修改配置 zoo1.cfg ,去除端口号clientPort,然后添加如下两个参数:

reconfigEnabled:  设置为true 开启动态配置

dynamicConfigFile: 指定动态配置文件的路径

       另外之前的server.[num] 这个配置也可以注释掉了。

dataDir=/Users/linxiangxian/soft/zookeeper/apache-zookeeper-3.6.2-bin/zkdata/zk1

reconfigEnabled=true

dynamicConfigFile=/Users/linxiangxian/soft/zookeeper/apache-zookeeper-3.6.2-bin/conf/zoo_replicated1.cfg.dynamic

3.3 集群信息文件 zoo_replicated1.cfg.dynamic

       创建文件zoo_replicated1.cfg.dynamic,写入如下的数据:

server.1=127.0.0.1:2001:3001:participant;127.0.0.1:2181

server.2=127.0.0.1:2002:3002:participant;127.0.0.1:2182

server.3=127.0.0.1:2003:3003:participant;127.0.0.1:2183

server.4=127.0.0.1:2003:3004:observer;127.0.0.1:2184

依次配置其他服务 zoo2.cfg ,zoo3.cfg注意数据文件的路径

3.4 启动集群

       启动集群:

bin/zkServer.sh  start conf/zoo1.cfg

       查看集群的状态:

bin/zkServer.sh  status  conf/zoo2.cfg

       查看集群的状态:

bin/zkServer.sh  status  conf/zoo2.cfg

3.5 查看配置信息

       连接上任意一台:

bin/zkCli.sh -server 127.0.0.1:2181

       使用config查看集群信息:

       也可以直接查看/zookeeper/config的目录的信息:

3.6 修改集群节点信息

       首先需要授权登录:

addauth digest admin:123456

       删除节点(移除serverId为 3 的机器):

reconfig -remove 3

       把对应的机器添加进来:

reconfig -add server.3=127.0.0.1:2003:3003:participant;127.0.0.1:2183



购买完整视频,请前往:http://www.mark-to-win.com/TeacherV2.html?id=287