zookeeper3.6.1安装配置

zookeeper3.6.1安装配置

在3.5.0发行版之前,Zookeeper新增节点需要重启服务,在此版本之后,支持动态新增节点,不需要整个集群重启了。

下面我们从官网下载最新的zookeeper3.6.1安装并演示如何进行动态新增zk节点

1、本文当使用的软件版本:
vmwareworkstation14.0.0
centos6.5
zookeeper3.6.1(最新稳定版)
jdk1.8.121

2、下载和配置zk
cd /usr/local/src
wget “http://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.6.1/apache-zookeeper-3.6.1-bin.tar.gz”

这里为了避免国外网站下载经常不好使的情况,使用了国内清华大学开源软件站点下载

新建zk需要的数据和日志目录

tar -zxvf apache-zookeeper-3.6.1-bin.tar.gz
mv apache-zookeeper-3.6.1-bin /opt/zookeeper-3.6.1
cd /opt/zookeeper-3.6.1/
mkdir data
cd conf

配置zookeeper
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
dataDir=/opt/zookeeper-3.6.1/data
syncLimit=5
tickTime=2000
initLimit=10
maxClientCnxns=100
reconfigEnabled=true
4lw.commands.whitelist=*
dynamicConfigFile=/opt/zookeeper-3.6.1/conf/zoo.cfg.dynamic

zk配置解析:
tickTime=2000
tickTime这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳。

initLimit=10
initLimit这个配置项是用来配置Zookeeper接受客户端(这里所说的客户端不是用户连接Zookeeper服务器的客户端,而是Zookeeper服务器集群中连接到Leader的Follower 服务器)
初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过10个心跳的时间(也就是tickTime)长度后Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。
总的时间长度就是10*2000=20 秒。

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

dataDir=/opt/zookeeper-3.6.1/data
dataDir顾名思义就是Zookeeper保存数据的目录,默认情况下Zookeeper将写数据的日志文件也保存在这个目录里。

maxClientCnxns=100
单个客户端(由IP地址标识)可以与ZooKeeper集成中的单个成员建立的并发连接数(在套接字级别)限制

reconfigEnabled=true
启用重新配置功能,启用该功能后,zookeeper将可以动态的增加服务器列表。

4lw.commands.whitelist=*
zookeeper可以响应的四个字母单次的命令有哪些,*表示所有四个字母命令

配置动态文件
touch zoo.cfg.dynamic
vi zoo.cfg.dynamic
server.1=192.168.58.131:2888:3888:participant;192.168.58.131:2181
server.2=192.168.58.132:2888:3888:participant;192.168.58.132:2181
server.3=192.168.58.133:2888:3888:participant;192.168.58.133:2181

解释说明:
server.A=B:C:D:E;F:G

  • A是一个数字,表示这个是第几号服务器;
  • B是这个服务器的IP地址(或者是与IP地址做了映射的主机名);
  • C第一个端口用来集群成员的信息交换,表示这个服务器与集群中的Leader服务器交换信息的端口;
  • D是在leader挂掉时专门用来进行选举leader所用的端口。
    注意:如果是伪集群的配置方式,不同的 Zookeeper实例通信端口号不能一样,所以要给它们分配不同的端口号。
  • E是角色,可以为participant也可以为observer
  • F、G分别为客户端连接的IP和端口(注意,F前面是分号不是冒号)

新建myid文件
cd /opt/zookeeper-3.6.1/data
touch myid
vi myid
1

myid里面的数字需要跟zoo.cfg.dynamic中server.后面的数字保持一致
192.168.58.131的myid数字是1
192.168.58.132的myid数字是2
192.168.58.133的myid数字是3

myid的数字不一定是1,2,3,可以自己指定, 但不同的服务器,要唯一

启动zookeeper
cd /opt/zookeeper-3.6.1/bin
./zkServer.sh start

查看zookeeper状态
/opt/zookeeper-3.6.1/bin/zkServer.sh status
在这里插入图片描述
可以看到当前节点为主节点

连接测试zk是否正常
/opt/zookeeper-3.6.1/bin/zkCli.sh -server 192.168.58.131:2181

新增节点测试:
create /myzk “abc”
新增后在其他两个节点查看是否同步成功

config命令查看集群信息:
在这里插入图片描述
这里我们发现集群信息里面有个version=100000000的配置,这是动态配置文件的版本号,在zookeeper的conf文件夹下,你会发现多了一个配置文件:zoo.cfg.dynamic.100000000, 说明zk集群当前使用的是这个配置文件

重新配置集群节点(新增或减少节点):
reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,…]]] | [-add serverId=host:port1:port2;port3[,…]] [-remove serverId[,…]*]

演示动态新增两个节点:
这里我们新增的是58.134和58.135
192.168.58.134
192.168.58.135

这两个节点的zk配置如下

  • 1、将上面的zoo.cfg的内容拷贝过来

  • 2、动态配置文件内容(需要配置五个节点):
    server.1=192.168.58.131:2888:3888:participant;192.168.58.131:2181
    server.2=192.168.58.132:2888:3888:participant;192.168.58.132:2181
    server.3=192.168.58.133:2888:3888:participant;192.168.58.133:2181
    server.4=192.168.58.134:2888:3888:participant;192.168.58.134:2181
    server.5=192.168.58.135:2888:3888:participant;192.168.58.135:2181

  • 3、data/myid文件需要修改,每个服务器不能重复

这里我的58.134的myid是4、58.135的myid是5

配置完毕后,我们启动58.134和58.135两台服务器的zk:
/opt/zookeeper-3.6.1/bin/zkServer.sh start

在58.131上重新配置zk集群,将新配置的两台服务器加入zk集群:
reconfig -add server.4=192.168.58.134:2888:3888:participant;192.168.58.134:2181,server.5=192.168.58.135:2888:3888:participant;192.168.58.135:2181

这时候会提示校验是无效的:
Authentication is not valid :

原因是在3.5.3之前,在重新配置上没有强制的安全机制,因此可以连接到ZooKeeper服务器集成的任何ZooKeeper客户端然后通过重新配置来更改ZooKeeper群集的状态。但是,这么做,一些不受信任的客户端可能会将受感染的服务器添加到集合中,例如添加受感染的服务器或删除合法服务器。此类情况可能是个案性的安全漏洞。
为了解决这个安全问题,zk从3.5.3开始引入了对reconfig的访问控制,这样,只有特定的一组用户才能使用reconfig命令或API,并且需要明确配置这些用户。另外,ZooKeeper群集的设置必须启用身份验证,以便可以对ZooKeeper客户端进行身份验证。但是一般公司都很少这么做,采用的方式比较简答,那就是zk官方提供的另外一种方式:不进行acl校验,在zk启动时,忽略acl校验即可(即上图中增加的配置)

这里我们使用不校验ack的方式,需要改造每台服务器上的bin/zkServer.sh,打开文件搜索大写JAVA字符,在如下内容处,加入
-Dzookeeper.skipACL=yes
在这里插入图片描述

然后重启每个zk节点(如果是线上环境,最好一开始就配置skipACL,这样后期动态加节点就方便了)

再次执行
reconfig -add server.4=192.168.58.134:2888:3888:participant;192.168.58.134:2181,server.5=192.168.58.135:2888:3888:participant;192.168.58.135:2181

节点新增成功:
在这里插入图片描述

在58.131上新建一个节点测试集群是否有效:
create /myzk “abc”
然后再其他几个节点查看数据是否能够同步过去,确保集群搭建是成功的

演示动态删除节点58.134, 58.135:
reconfig -remove 4,5

reconfig可以根据serverID移除(也就是myid中的值), 一次性需要移除多个节点时,每个节点id以英文逗号分隔即可

至此,zk五个节点的集群搭建完毕,赶紧创建一个节点看下把,看看其他节点是否会将数据同步过去

本文档参考连接:
https://zookeeper.apache.org/doc/r3.5.7/zookeeperReconfig.html#sc_reconfig_access_control
https://zookeeper.apache.org/doc/r3.5.7/zookeeperAdmin.html#sc_advancedConfiguration

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值