zookeeper3.6.1安装配置

    技术2022-07-12  117

    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也可以为observerF、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

    Processed: 0.010, SQL: 9