目录
ZooKeeper集群leader+follower模式搭建步骤(示例3台)
Zookeeper集群通常由2n+1台servers组成。
这是为了保证Leader选举(基于Paxos算法的实现)能够得到多数的支持。
一、本地搭建leader+follower模式准备
实际的Zookeeper集群是部署在多台真实服务器上,为节省资源,此次模拟搭建集群采用本地主机配置3台虚拟机进行操作
环境准备(示例1台)
检查jdk配置:
检查时间同步:
确认防火墙全部关闭:
检查主机映射配置:
二、集群搭建
2.1、上传、解压安装包
#安装包存放目录
cd /app/soft
#上传安装包
rz
#解压安装包
tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz -C ../servers/
2.2、修改配置文件:
#修改配置文件名称(默认加载zoo.cfg文件)
cd /app/servers/zookeeper/conf/
mv zoo_sample.cfg zoo.cfg
#修改配置文件
vim zoo.cfg
#添加内容: (2888心跳端口、3888选举端口)
dataDir=/export/data/zkdata
server.1=node01:2888:3888
server.2=node02:2888:3888
server.3=node03:2888:3888
2.3、分发安装包
cd /export/servers
scp -r zookeeper/ node02:$PWD
scp -r zookeeper/ node03:$PWD
2.4、ZK集群创建数据文件夹
#创建zk数据文件夹
mkdir -p /app/data/zkdata
##在zkdata文件夹下新建myid文件,内容对应zk服务的id
#node01
echo 1 > /app/data/zkdata/myid
#node02
echo 2 > /app/data/zkdata/myid
#node03
echo 3 > /app/data/zkdata/myid
#检查
cat /app/data/zkdata/myid
2.5、ZK集群配置环境变量
#编辑
vim /etc/profile
export ZOOKEEPER_HOME=/app/servers/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
#生效
source /etc/profile
2.6、Observer模式
指定节点使用Observer模式,需在对应节点的配置文件添加如下配置:
#修改配置文件
vim zoo.cfg
#添加内容:
peerType=observer
#指定哪些节点被指定为Observer
server.1:node01:2181:3181:observer
三、集群验证
3.1、启动命令
该命令为Zookeeper自带启动命令,启动时需在每台服务器启动一次,从而完成集群的启动。
zkServer.sh start
3.2、批量启动集群脚本
实际的Zookeeper集群起码要涉及几十上百台服务器,所以需要一个一键启动或停止集群的脚本命令。
#编写一个脚本来批量启动所有机器:
vim startZK.sh
#!/bin/bash
for host in node01 node02 node03;
do
ssh $host "source /etc/profile;/app/servers/zookeeper/bin/zkServer.sh start"
done
#编写一个脚本来批量停止所有机器:
vim stopZK.sh
#!/bin/bash
for host in node01 node02 node03;
do
ssh $host "source /etc/profile;/app/servers/zookeeper/bin/zkServer.sh stop"
done
3.3、集群状态
启动时会生成zookeeper.out日志存放详细信息,若不指定日志存放位置,则默认在启动位置。
##查看启动进程
jps
#查看集群状态,主从信息
zkServer.sh status
四、集群参数配置
参数 | 默认值 | 作用 |
---|---|---|
tickTime | 2000(ms) | zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,每个tickTime时间就会发送一个心跳。 |
initLimit | 10 | zookeeper接受客户端(这里所说的客户端不是用户连接zookeeper服务器的客户端,而是zookeeper服务器集群中连接到leader的follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。超过10个心跳的时间(也就是tickTime)长度后 zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20秒。 |
syncLimit | 5 | leader与follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是5*2000=10秒。 |
dataDir | /app/data/zkdata | zookeeper保存数据的目录,默认情况下zookeeper将写数据的日志文件也保存在这个目录里。 |
clientPort | 2181 | 客户端连接Zookeeper服务器的端口,zookeeper会监听这个端口接受客户端的访问请求。 |
server.A | B:C:D | A:是一个数字,表示这个是第几号服务器;B:是这个服务器的IP地址或主机名;C:第一个端口用来集群成员的信息交换,表示这个服务器与集群中的leader服务器交换信息的端口;D:是在leader挂掉时专门用来进行选举leader所用的端口。 |