Zookeeper集群部署安装

Zookeeper介绍

Zookeeper是Apache的一个顶级项目,为分布式应用提供高效、高可用的分布式协调服务,提供了诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知和分布式锁等分布式基础服务。由于Zookeeper便捷的使用方式、卓越的性能和良好的稳定性,被广泛应用于诸如Hadoop、HBase、Kafka和Dubbo等大型分布式系统中。

Zookeeper集群自身采用的是一种轻量级的分布式一致性协议,名为Zab。Zab协议分为两个阶段,领导选举阶段和原子广播阶段。

领导选举阶段:当Zookeeper集群启动的时候,将会选举一个节点为leader,其他的节点为follower。当leader节点出现故障时,会自动选举出新的leader节点,保持整个集群的可用状态,这就是领导选举阶段。

原子广播阶段:领导选举阶段结束后,就进入原子广播阶段,这个阶段会保持leader和follower之间的数据状态同步,所有的写操作都会发送到leader节点,并通过广播的方式将数据同步到其他的follower节点。

Zookeeper服务架构如下图示:

zkservice-cluster.jpgzkservice-cluster.jpg

Zookeeper集群中,只要有半数以上的节点存活,整个集群就是可用状态。所以一般集群的节点为奇数个,例如3,5,7个等。当客户端连接的服务端节点出现故障时,会自动重连到其他的服务端节点。

Zookeeper集群包含三种角色:

  • 领导者(leader):处理读/写请求,负责投票的发起和决议,更新系统状态;集群中只有一个leader。
  • 跟随者(follower):只能处理读请求,同时作为leader的候选节点,即如果leader宕机,follower节点要参与到新的leader选举中,在选举过程中参与投票;
  • 观察者(observer):只能处理读请求,不参与选举,也不参与“过半写成功”策略。在不影响写性能的情况下提升集群的读性能。此角色于zookeeper3.3系列新增的角色;

Zookeeper数据模型

ZooKeeper 的分层命名空间,如下图示:

zookeeper-namespace.jpgzookeeper-namespace.jpg

ZooKeeper 提供的命名空间很像标准文件系统。名称是由斜杠 (/) 分隔的路径元素序列。ZooKeeper命名空间中的每个节点都由路径标识。

Zookeeper集群部署

java和zookeeper安装

(1)准备Java运行环境
安装jdk1.8,并配置JAVA_HOME环境变量。

cd /opt/services/
tar -zxvf jdk-8u181-linux-x64.tar.gz

(2)下载并解压zookeeper
zookeeper下载地址:
https://zookeeper.apache.org/releases.html#download
下载zookeeper最新3.8.0版本:apache-zookeeper-3.8.0-bin.tar.gz

cd /opt/services/
tar -zxvf apache-zookeeper-3.8.0-bin.tar.gz

(3)配置环境变量

vi /etc/profile
JAVA_HOME=/opt/services/jdk1.8.0_181
ZOOKEEPER_HOME=/opt/services/apache-zookeeper-3.8.0-bin
PATH=$PATH:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin
export JAVA_HOME ZOOKEEPER_HOME PATH

// 使环境变量生效
source /etc/profile

// java环境检查
java -version
// zookeeper环境检查
zkServer.sh status

Zookeeper配置

zoo.cfg配置
cd /opt/services/apache-zookeeper-3.8.0-bin/conf
cp zoo_simple.cfg zoo.cfg
zoo.cfg配置如下:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/data/zookeeper
clientPort=2181
server.1=node01:2888:3888
server.2=node02:2888:3888
server.3=node03:2888:3888

参数说明:

tickTime:zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,即每隔tickTime时间就会发送一个心跳;单位:毫秒
dataDir:数据文件目录
clientPort:客户端连接zookeeper的端口,默认端口2181
initLimit:初始化通信时,follower与leader之间初始化连接能容忍的最大心跳数;
syncLimit:同步通信时,follower与leader之间请求和应答之间能容忍的最大心跳数;
server.1=IP1:2888:3888    集群信息,
    格式:server.A=B:C:D,其中:
    A表示服务器编号;
    B服务器IP地址;
    C表示zookeeper服务器之间通信的端口,默认为2888;
    D表示Leader选举的端口,默认为3888;

创建数据目录:
mkdir -p /opt/data/zookeeper/

写入服务器编号:
echo 1 > /opt/data/zookeeper/myid

hosts配置:
vi /etc/hosts

192.168.225.129 node01
192.168.225.130 node02
192.168.225.131 node03

确认防火墙类型:

service iptables status
service firewalld status

防火墙设置(iptables):

iptables -I INPUT -p tcp --dport 2181 -j ACCEPT
iptables -I INPUT -p tcp --dport 2888 -j ACCEPT
iptables -I INPUT -p tcp --dport 3888 -j ACCEPT
iptables-save

防火墙设置(firewall):

firewall-cmd --zone=public --add-port=2181/tcp --permanent
firewall-cmd --zone=public --add-port=2888/tcp --permanent
firewall-cmd --zone=public --add-port=3888/tcp --permanent
firewall-cmd --reload

// 查看是否生效
firewall-cmd --list-ports

其他node02-node03节点安装:

// 拷贝安装文件
scp /opt/services/ node02:/opt/
scp /opt/services/ node03:/opt/
// 配置环境变量
vi /etc/profile
source /etc/profile
// 创建数据和日志目录
mkdir -p /opt/data/zookeeper/
mkdir -p /opt/logs/zookeeper/
// 写入各节点对应id
#node02
echo 2 > /opt/data/zookeeper/myid
#node03
echo 3 > /opt/data/zookeeper/myid

zookeeper启动测试

zkServer.sh help 查看参数命令,结果如下所示:

[root@node01 ~]# zkServer.sh help
ZooKeeper JMX enabled by default
Using config: /opt/services/apache-zookeeper-3.8.0-bin/bin/../conf/zoo.cfg
Usage: /opt/services/apache-zookeeper-3.8.0-bin/bin/zkServer.sh [--config <conf-dir>] {start|start-foreground|stop|version|restart|status|print-cmd}

参数说明:

start:启动zookeeper服务;
start-foreground:前台启动;
stop:关闭zookeeper服务;
version:查看版本信息;
restart:重启zookeeper服务;
status:查看zookeeper服务状态;
print-cmd:打印zookeeper启动命令行参数;

前台启动node01-node03节点:

[root@node01 ~]# zkServer.sh start-foreground
[root@node02 ~]# zkServer.sh start-foreground
[root@node03 ~]# zkServer.sh start-foreground

启动过程如下图示:

zookeeper-start-01.pngzookeeper-start-01.png

查看集群角色:

[root@node01 ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/services/apache-zookeeper-3.8.0-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
[root@node01 ~]#

[root@node02 ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/services/apache-zookeeper-3.8.0-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader
[root@node02 ~]#

[root@node03 ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/services/apache-zookeeper-3.8.0-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
[root@node03 ~]# 

如上所示,我们可以看到在Zookeeper集群中:node02为leader,node01和node03为follower。

(完)

最后修改于:2022年11月29日 09:31

添加新评论