Linux搭建单机多进程zookeeper集群

1.ZooKeeper是什么

ZooKeeper 是一个开放源码的分布式协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

分布式应用程序可以基于 Zookeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。

2.ZooKeeper集群搭建

需要先安装配置好java环境

安装包下载地址https://archive.apache.org/dist/zookeeper/选择stable稳定版本,目前是3.5.8的稳定版本

下载安装包

wget https://archive.apache.org/dist/zookeeper/stable/apache-zookeeper-3.5.8-bin.tar.gz

搭建三个集群节点,即三个ZooKeeper服务,新建三个文件夹

mkdir zookeeper1
mkdir zookeeper2
mkdir zookeeper3

将安装包复制到上述三个文件夹,分别解压

tar -zxvf apache-zookeeper-3.5.8-bin.tar.gz

解压后的目录

bin 执行脚本

conf 配置文件

docs 文档

lib jar包

进入conf目录,ZooKeeper提供了一个配置文件示例zoo_sample.cfg,复制该文件

cp zoo_sample.cfg zoo1.cfg

其余两个zookeeper文件夹中进行同样的操作,文件名改为zoo2.cfg,zoo3.cfg

该配置文件中共5个参数

tickTime​ 通信心跳时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,毫秒级,ZK基本上所有的时间都是这个时间的整数倍。

initLimit​ 初始通信时限,集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数

syncLimit​ 同步通信时限,集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数

dataDir​ 数据文件目录,内存数据库快照存放地址,如果没有指定事务日志存放地址(dataLogDir),默认也是存放在这个 路径下,建议两个地址分开存放到不同的设备上

clientPort 客户端连接端口,zookeeper会监听这个端口,接收客户端的访问请求

需要修改的参数

dataDir数据文件目录,分别使用/tmp/zookeeper1,/tmp/zookeeper2,/tmp/zookeeper3

clientPort客户端连接端口,每个zookeeper服务要启动在不同的端口,避免冲突,分别使用2181,2182,2183

需要增加的配置参数

server.x

server.1=127.0.0.1:3001:4001
server.2=127.0.0.1:3002:4002
server.3=127.0.0.1:3003:4003

这个三行配置在三个zookeeper配置中都是一样的,粘贴过去即可

该项配置的规则如下,格式server.n=A:B:C

      1、统一前缀,"server.";

  2、"server."后面的数字n表示机器的id(序号),不重复,需要在dataDir目录下新建myid文件,写入这个值

  3、A表示集群中zk机器的ip;

  4、B表示Zk集群中,follower与leader通信的端口;

  5、C表示当leader宕机时,各follower选举新leader的通信端口;

配置信息如下

myiddataDir路径clientPortserver通信端口leader选举端口配置文件
1/tmp/zookeeper1218130014001zoo1.cfg
2/tmp/zookeeper2218230024002zoo2.cfg
3/tmp/zookeeper3218330034003zoo3.cfg

按上述表格所示在tmp文件夹下新建zookeeper1,zookeeper2,zookeeper3文件夹,创建myid文件并写入配置文件中server.n中的n的值到该文件

mkdir zookeeper1
touch myid
echo 1 > myid

其余两个做相同操作,myid值分别为2和3

配置完成,三个配置文件的内容

zoo1.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper1
clientPort=2181

server.1=127.0.0.1:3001:4001
server.2=127.0.0.1:3002:4002
server.3=127.0.0.1:3003:4003

zoo2.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper2
clientPort=2182

server.1=127.0.0.1:3001:4001
server.2=127.0.0.1:3002:4002
server.3=127.0.0.1:3003:4003

zoo3.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper3
clientPort=2183

server.1=127.0.0.1:3001:4001
server.2=127.0.0.1:3002:4002
server.3=127.0.0.1:3003:4003

启动zookeeper服务

./zkServer.sh start /usr/zookeeper1/apache-zookeeper-3.5.8-bin/conf/zoo1.cfg
./zkServer.sh start /usr/zookeeper2/apache-zookeeper-3.5.8-bin/conf/zoo2.cfg
./zkServer.sh start /usr/zookeeper3/apache-zookeeper-3.5.8-bin/conf/zoo3.cfg

注意start后面要指定当前使用的配置文件

运行zookeeper命令行客户端

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

查看节点状态

./zkServer.sh status /usr/zookeeper2/apache-zookeeper-3.5.8-bin/conf/zoo2.cfg

2号节点为Leader节点,1,3号节点为follower节点

集群搭建完成

3.zookeeper集群节点个数最好是奇数个

zookeeper有这样一个特性:集群中只要有过半的机器是正常工作的,那么整个集群对外就是可用的。

假设一个集群有n个节点,宕机x个节点,那么要保证整个集群仍然可用就要满足不等式

n -x > n/2,即n > 2x

所以n可以取2x + m (m可以取1,2,3,4,5 .....)

n的最小值是2x + 1

所以最节约服务器资源的配置是奇数个节点

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值