搭建zookeeper集群
Zookeeper是一个高性能,分布式的,开源分布式应用协调服务 。Zookeeper 有三种部署模式:
1. 单机部署:一台集群上运行;
2. 集群部署:多台集群运行;
3. 伪集群部署:一台集群启动多个 Zookeeper 实例运行。
zookeeper集群搭建:
1、准备java环境
https://juejin.im/post/5ba888d4e51d450e8d766cfa
2、下载 解压
下载 zookeeper-3.6.0.tar.gz 到指定目录:
wget -P /usr/local/soft https://archive.apache.org/dist/zookeeper/zookeeper-3.6.0/
3、创建文件目录
cd /usr/local/soft/zookeeper
mkdir data
mkdir logs
4、创建myid文件
cd /usr/local/soft/zookeeper/data
vi myid
5、修改配置
cd /usr/local/soft/zookeeper/apache-zookeeper-3.6.0/conf
将 zookeeper-3.4.12/conf 目录下的 zoo_sample.cfg 文件拷贝一份,命名为 zoo.cfg
cp zoo_sample.cfg zoo.cfg
修改 zoo.cfg 文件配置
dataLogDir=/usr/local/soft/zookeeper/logs
dataDir=/usr/local/soft/zookeeper/data
tickTime=2000
initLimit=10
syncLimit=5
autopurge.snapRetainCount=10
autopurge.purgeInterval=1
clientPort=2181
server.1=IP1:2881:3881
server.2=IP2:2882:3882
server.3=IP3:2883:3883
参数说明:
tickTime=2000
Zookeeper最小时间单元,单位为ms,默认值为3000。也就是Leader与Follower每隔tickTime时间就会发送一个心跳。
initLimit=10
Leader服务器等待Follower启动并完成数据同步的时间,默认值10。当已经超过10*tickTime后,Leader还没有收到Follower的返回信息,那么表明这个Follower连接或同步失败。
syncLimit=5
Leader服务器和Follower之间进行心跳检测的最大延时时间,默认值5,最长不能超过5*tickTime
dataDir=/home/{$user}/zookeeper/zookeeper-3.4.12/data
存放内存数据结构的snapshot,便于快速恢复,默认情况下,事务日志也会存储在这里。建议同时配置参数dataLogDir, 事务日志的写性能直接影响zk性能。
dataLogDir=/home/{$user}/zookeeper/zookeeper-3.4.12/data
dataLogDir事务日志输出目录。为了达到性能最大化,一般建议把dataDir和dataLogDir分到不同的磁盘上,这样就可以充分利用磁盘顺序写的特性。
autopurge.purgeInterval, autopurge.snapRetainCount
客户端在与zookeeper交互过程中会产生非常多的日志,而且zookeeper也会将内存中的数据作为snapshot保存下来,这些数据是不会被自动删除的,这样磁盘中这样的数据就会越来越多。不过可以通过这两个参数来设置,让zookeeper自动删除数据。
autopurge.purgeInterval:指定自动清理快照文件和事务日志文件的时间,单位为h,默认为0表示不自动清理,这个时候可以使用脚本zkCleanup.sh手动清理。如果不清理则磁盘空间占用越来越大。
autopurge.snapRetainCount:用于指定保留快照文件和事务日志文件的个数,默认为3。
不过如果你的集群是一个非常繁忙的集群,然后又碰上这个删除操作,可能会影响zookeeper集群的性能,所以一般会让这个过程在访问低谷的时候进行,但是遗憾的是zookeeper并没有设置在哪个时间点运行的设置,所以有的时候我们会禁用这个自动删除的功能,而在服务器上配置一个cron,然后在凌晨来干这件事。
clientPort=2181
顾名思义,就是客户端连接zookeeper服务的端口。这是一个TCP port。
server.id=IP/Host:port1:port2
id:用来配置ZK集群中的各节点,并建议id的值和myid保持一致。
IP/Host: 服务器的 IP 或者是与 IP 地址做了映射的主机名
port1:Leader和Follower或Observer交换数据使用
port2:用于Leader选举
注意:如果是伪集群的配置方式,不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。
maxClientCnxns
对于一个客户端的连接数限制,默认是60,这在大部分时候是足够了。
但是在我们实际使用中发现,在测试环境经常超过这个数,经过调查发现有的团队将几十个应用全部部署到一台机器上,以方便测试,于是这个数字就超过了
minSessionTimeout, maxSessionTimeout
一般,客户端连接zookeeper的时候,都会设置一个session timeout,如果超过这个时间client没有与zookeeper server有联系,则这个session会被设置为过期(如果这个session上有临时节点,则会被全部删除,这就是实现集群感知的基础,后面的文章会介绍这一点)。
但是这个时间不是客户端可以无限制设置的,服务器可以设置这两个参数来限制客户端设置的范围。
6、开放防火墙端口
在防火墙中打开要用到的端口 2181、2881、3881
参考博客