1.安装jdk
zookeeper是采用java开发的,所以需要依赖jdk环境,我们需要先安装jdk,最便捷的方式就是采用yum,但是yum的官方源速度很慢,我们可以先更换yum源;
#备份初始源
#备份初始源配置
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
#下载新的阿里镜像源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#清理和重建索引
yum clean all
yum makecache
ok现在我们就可以使用yum安装需要的jdk了
yum -y install java-1.8.0-openjdk-demo.x86_64
#验证一下是否安装成功
java -version
2.安装zookeeper
#下载二进制压缩包
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.6.1/apache-zookeeper-3.6.1-bin.tar.gz
#解压缩
tar -zxvf apache-zookeeper-3.6.1-bin.tar.gz
#移动至local下
mv apache-zookeeper-3.6.1-bin /usr/local
# 为了操作方便,创建软连接
ln -s /usr/local/apache-zookeeper-3.6.1-bin /usr/local/zookeeper
# 添加至环境变量
echo export PATH=\"\$PATH:/usr/local/zookeeper/bin\" >> ~/.bashrc
#更新环境变量
source ~/.bashrc
目录结构:
注意:在bin目录下有两种执行文件,以.sh
结尾是lunix执行文件,以.cmd
结尾是windows执行文件,为了方便我们可以使用rm -rf *.cmd
删除windows执行文件。
配置文件模板:
zookeeper给的有模板文件,我们需要复制一份命名为zoo.cfg
:
#复制配置模板更名为zoo.cfg
cd /usr/local/zookeeper/conf
cp zoo_sample.cfg zoo.cfg
主要配置项:
修改配置文件vim zoo.cfg
修改zoo.cfg中的dataDir指向新建的data目录
#修改zoo.cfg中的dataDir指向新建的data目录
#dataDir=/usr/local/zookeeper/data
上面储存目录需要修改,需要自己创建目录。
#提供 一个dataDir,在安装目录下创建名为data的目录
#该目录默认指向tmp必须修改,用于存储zookeeper持久化数据和日志文件;
cd /usr/local/zookeeper
mkdir data
3.相关操作
启动
#启动
zkServer.sh start
#查询是否启动成功
ps aux|grep zoo
查询出来的进程,因为带有很多参数,所以很长
客户端访问
zkCli.sh
#当服务器不在当前机器上时通过 -server参数指定主机地址
zkCli.sh -server 192.168.74.128:2181
关闭
#关闭
zkServer.sh stop
查看状态
zkServer.sh status
查看目录下的节点
#先连接
zkCli.sh
#查看节点信息
ls / (这是查看根目录下的节点,其他相似)
创建节点
#先连接
zkCli.sh
#创建节点
create /test 123 (节点必须以“/”根目录开头,后面可以跟数据,也可以不跟)
#创建临时节点
create /test_temp 123 (当服务端和客户端断开或服务器重启之后,就会自动消失)
查看数据
get 节点 #get /test
设置数据
set 节点 数据 #set /test abc
删除
#删除某个节点
delete 节点名 #delete /test
#删除所有节点
deleteall
4.搭建集群
准备
在开始搭建集群之前我们需要先了解一下概念:
三种角色
为了避免 Zookeeper 的单点问题,zk 也是以集群的形式出现的。zk 集群中的角色主要有 以下三类:
-
Leader 集群的主节点,可以处理写请求,并将数据同步至从节点
-
Follower 从节点,跟随者,决策者,学习者,仅可以处理读请求,收到写请求是自动转发给leader,具备选举权,被选举权,决策权
-
Observer 学习者 仅可处理读请求,且不具备选举权,被选举权和决策权
由于选举leader的过程使用的是paxos算法,参与选举的节点越多则选举过程越慢,且选举过程中节点不可对外服务,Observe可以缩短leader选举过程所需的时间; 减少集群不可用;
法定人数
zookeeper服务器运行于两种模式:独立模式和集群模式。
集群模式下,会复制所有服务器的 数据树。但如果让客户端等待所有复制完成,延迟太高。这里引入法定人数概念,指为了使zookeeper 集群正常工作,必须有效运行的服务器数量。同时也是服务器通知客户端保存成功前,必须保存数据的 服务器最小数。例如我们有一个5台服务器的zookeeper集群,法定人数为3,只要任何3个服务器保存了数据,客户端就会收到确认。
另外当法定人数为3时,集群中只要有3台服务器存活,整个zookeeper集群就是可用的
注意:observer不算在法定人数内
集群应该有奇数个节点
zookeeper节点数量因当是大于1的奇数,因为zookeeper集群必须在大多数节点都可用的情况下才能正常提供访问,若节点为3个则运行宕机1个,若节点为4个同样只允许宕机1个,偶数个节点的允许宕机的节点占比更低;
集群搭建
对于不同的系统,要通过ip地址访问,所以我们要固定lunix的ip地址:操作连接
防火墙设置
#1.禁止firewall开机启动
systemctl disable firewalld
#2.设置开机启动防火墙
systemctl enable firewalld.service
zookeeper集群部署
zookeeper节点数量因当是大于1的奇数,因为zookeeper集群必须在大多数节点都可用的情况下才能正常提供访问,若节点为3个则运行宕机1个,若节点为4个同样只允许宕机1个,偶数个节点的允许宕机的节点占比更低;
1.在配置文件配置节点信息
在zoo.cfg里面写入下面节点信息:
#server.节点编号=ip地址:节点通讯端口:选举端口
server.1 = 192.168.74.129:28888:38888
server.2 = 192.168.74.130:28888:38888
server.3 = 192.168.74.131:28888:38888
注意:若是在一台机器上做测试,则需要需改clientPort,以及每个节点的通信端口和选举端口,保证不与其他节点冲突。
2.在/usr/local/zookeeper/data/
下创建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服务
查看zookeeper状态:
zkServer.sh start
#启动完成后可以通过以下指令查看当前zookeeper的状态
zkServer.sh status
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