搭建zookeeper集群

2020-04-23  本文已影响0人  大饼啊饼

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

参考博客

https://juejin.im/post/5ba879ce6fb9a05d16588802#heading-4

上一篇下一篇

猜你喜欢

热点阅读