Centos下Zookeeper的安装部署

一 安装jdk

zookeeper是采用java开发的,所以需要依赖jdk环境,我们需要先安装jdk,最便捷的方式就是采用yum,但是yum的官方源速度很慢,我们可以先更换yum源;

#备份初始源 
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
#下载新的CentOS-Base.repo 源文件 
cd /etc/yum.repos.d
curl -O http://mirrors.aliyun.com/repo/Centos-7.repo
mv Centos-7.repo CentOS-Base.repo
#更新缓存
yum clean all
yum makecache

ok现在我们就可以使用yum安装需要的jdk了

yum -y install java-1.8.0-openjdk-demo.x86_64
#验证一下  
java -version

二 安装zookeeper

#下载二进制压缩包
wget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.6.1/apache-zookeeper-3.6.1-bin.tar.gz

#解压缩
tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz
#移动至local下
mv apache-zookeeper-3.5.7-bin /usr/local
# 创建软连接
ln -s /usr/local/apache-zookeeper-3.5.7-bin /usr/local/zookeeper
# 添加至环境变量
echo export PATH=\"\$PATH:/usr/local/zookeeper/bin\" >> ~/.bashrc
source ~/.bashrc

目录结构:

image-20200507153419750

配置文件模板:

image-20200507153439527

主要配置项:

image-20200507153454381

三 启动与访问

#在启动前需要先提供 一个dataDir,在安装目录下创建名为data的目录
#该目录默认指向tmp必须修改,用于存储zookeeper持久化数据和日志文件;
cd /usr/local/zookeeper
mkdir data

#复制配置模板更名为zoo.cfg
cd /usr/local/zookeeper/conf
cp zoo_sample.cfg  zoo.cfg

#修改zoo.cfg中的dataDir指向新建的data目录
#dataDir=/usr/local/zookeeper/data

#启动
zkServer.sh start

客户端访问

zkCli.sh
#当服务器不在当前机器上时通过 -server参数指定主机地址 
zkCli.sh -server 10.211.55.3:2181

四 集群搭建

集群搭建准备

在开始搭建集群之前我们需要先了解一下概念:

三种角色:

为了避免 Zookeeper 的单点问题,zk 也是以集群的形式出现的。zk 集群中的角色主要有 以下三类:

  • Leader 集群的主节点,可以处理写请求,并将数据同步至从节点

  • Follower 从节点,跟随者,决策者,学习者,仅可以处理读请求,收到写请求是自动转发给leader,具备选举权,被选举权,决策权

  • Observer 学习者 仅可处理读请求,且不具备选举权,被选举权和决策权

    由于选举leader的过程使用的是paxos算法,参与选举的节点越多则选举过程越慢,且选举过程中节点不可对外服务,Observe可以缩短leader选举过程所需的时间; 减少集群不可用;

法定人数

zookeeper服务器运行于两种模式:独立模式和集群模式。集群模式下,会复制所有服务器的 数据树。但如果让客户端等待所有复制完成,延迟太高。这里引入法定人数概念,指为了使zookeeper 集群正常工作,必须有效运行的服务器数量。同时也是服务器通知客户端保存成功前,必须保存数据的 服务器最小数。例如我们有一个5台服务器的zookeeper集群,法定人数为3,只要任何3个服务器保存了数据,客户端就会收到确认。

image-20200606132424972

另外当法定人数为3时,集群中只要有3台服务器存活,整个zookeeper集群就是可用的。

image-20200606132648464

注意:observer不算在法定人数内

集群应有奇数个节点

zookeeper节点数量因当是大于1的奇数,因为zookeeper集群必须在大多数节点都可用的情况下才能正常提供访问,若节点为3个则运行宕机1个,若节点为4个同样只允许宕机1个,偶数个节点的允许宕机的节点占比更低;

集群搭建

ip配置

通常虚拟机会以dhcp的方式获得ip,ip可能会发生变化,造成无法连接服务器,所以我们先对克隆得到的虚拟机,进行静态ip配置,同时修改hostname,保证集群中所有服务器的主机名和地址都是不同的

#修改主机名称  zk1 是新的主机名
echo zk1 > /etc/hostname
#修改 ip配置
vim /etc/sysconfig/network-scripts/ifcfg-eth0

修改后的文件内容:

image-20200507153513399

只修改标注的内容,其他的保持原样

防火墙设置:

为了使服务器之间能互相访问,需要开放对应端口,或是停止防火墙(仅限测试环境),相关 指令 如下:

#1.禁止firewall开机启动
systemctl disable firewalld
#2.设置开机启动防火墙
systemctl enable firewalld.service

zookeeper集群部署

zookeeper节点数量因当是大于1的奇数,因为zookeeper集群必须在大多数节点都可用的情况下才能正常提供访问,若节点为3个则运行宕机1个,若节点为4个同样只允许宕机1个,偶数个节点的允许宕机的节点占比更低;

1.在配置文件中配置节点信息

image-20200507153528178

注意:若是在一台机器上做测试,则需要需改clientPort,以及每个节点的通信端口和选举端口,保证不与其他节点冲突

2.在dataDir目录下创建myid

该文件用于存储集群中各个zookeeper节点的编号

创建myid文件:

touch /usr/local/zookeeper/data/myid
#文件内容为当前zookeeper的节点编号与配置文件对应
echo 1 > /usr/local/zookeeper/data/myid

注意:若data目录下有其他文件则需要删除,在创建集群前要保持zookeeper是空的

3.克隆当前虚拟机

1.逐个启动新的虚拟机并修改ip地址(按照上面的方法)

2.修改myid文件中的节点id与配置文件匹配

3.逐个启动每个虚拟机上的zookeeper服务

zkServer.sh start
#启动完成后可以通过以下指令查看当前zookeeper的状态
zkServer.sh status

可以发现此时有一个leader和两个follower表示集群已正常运行

Observer

为什么需要Observer:

为了提高zookeeper的吞吐量,我们可以为其添加更多的follower,但是更多的follower会导致投票过程变得更慢,而客户端的响应时间变长(因为投票过程zookeeper不能响应),因此zookeeper设计了Observer节点

什么是Observer:

Observer与普通的 follower仅有一个区别: Observer不参与 投票环节; 但是提议 和commit同样会发送给Observer,这意味着Observer中的数据也是一致的,既提高了整个集群的性能同时避免了,投票带来的延迟;

配置方法:

只需要在 节点后面 添加observer关键字即可将节点作为Observer

echo server.4=10.211.55.9:28888:38888:observer >> /usr/local/zookeeper/conf/zoo.cfg
#添加后的内容:
server.1=10.211.55.5:28888:38888
server.2=10.211.55.6:28888:38888
server.3=10.211.55.7:28888:38888
server.4=10.211.55.8:28888:38888:observer

启动集群后通过status查看节点状态:

zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: observer

但要注意Observer不能算在法定人数内;

posted @ 2020-06-06 23:44  CoderJerry  阅读(1312)  评论(0编辑  收藏  举报