前言
记录 Zookeeper 集群搭建的过程!
什么是 Zookeeper ?
ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 Hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
划重点:分布式应用程序协调服务,在分布式系统中,通常需要一个通用的服务注册与发现中心,因此 Zookeeper 就是充当这样的角色,国内非常出名的分布式框架 Dubbo 也建议使用 Zookeeper 作为服务注册与发现中心。
环境准备
准备三台 Linux 虚拟机,前往官网下载 zookeeper 压缩包,如果不知道官网如何下载,可在公众号「张少林同学」回复 Java 工具获取网盘下载链接
| OS | 主机名 | ip | zookeeper/ 端口 | | :——-: | :——-: | :———–: | :————————–: | | centos7 | LIHETEST6 | 192.168.2.216 | zookeeper-3.4.11.tar.gz/2181 | | centos7 | LIHETEST7 | 192.168.2.217 | zookeeper-3.4.11.tar.gz/2181 || centos7 | LIHETEST8 | 192.168.2.218 | zookeeper-3.4.11.tar.gz/2181 |
配置服务器 hosts 映射
在三台服务器分别做以下操作, 这里以 LIHETEST6 为例:
查看本机主机名:hostname
vim /etc/hostname 删除原有内容, 新增主机名:LIHETEST6
设置主机名及 IP 映射 : vim /etc/hosts 在文件尾部添加内容, 格式为: IP 地址 主机名 (中间用空格分割), 保存退出,例如:192.168.2.216 LIHETEST6
重启网络服务:systemctl restart network
单机部署
将 Zookeeper 压缩包上传到服务器后,解压
// 上传压缩包
scp zookeeper-3.4.11.tar.gz root@192.168.2.219:/home/tools
// 登录到服务器目录 解压
tar -zxvf zookeeper-3.4.11.tar.gz
// 进入 zookeeper 主目录
cd zookeeper-3.4.11
解压后看看都有哪些内容:
我们只需要把焦点定位到这两个目录:
bin 目录:脚本执行目录,里面放置一些 Zookeeper 启动脚本等
conf 目录:配置文件目录
执行脚本命令./bin/zkServer.sh start 启动 Zookeeper,结果如下:
提示找不到 ../conf/zoo.cfg 文件,但是最后却打印 STARTED,于是执行./bin/zkServer.sh status 看看当前 Zookeeper 状态,结果如下:
上述结果很清晰明了了,Zookeeper 启动失败,原因是找不到配置文件:./conf/zoo.cfg,./bin/zkServer.sh start 命令启动时,默认会使用此配置文件启动,而初始化时./conf 目录下并无此文件,查看./conf 中存在一个样例配置文件./conf/zoo_sample.cfg,于是执行 cp ./conf/zoo_sample.cfg ./conf/zoo.cfg 复制一份./conf/zoo.cfg 文件出来,再次执行命令启动 Zookeeper,结果如下:
可以看出 Zookeeper 已经启动了,并且是单机模式启动。
再看看启动日志信息 cat zookeeper.out:
zookeeper 启动,绑定在 2181 端口,查看一下进程是否存在:netstat -lntp | grep 2181,结果如下:
tcp6 0 0 :::2181 :::* LISTEN 27201/java
配置文件解析
tickTime:客户端与服务端保持心跳的毫秒数
initLimit:初始容忍的心跳数
syncLimit:等待最大容忍的心跳数
dataDir: 存储快照的目录,这里默认是使用系统临时目录,真实使用时建议自定义目录
clientPort: 暴露给客户端访问的端口
单机伪集群部署
有时候我们会在本机搭建一个伪集群,用于项目代码测试,那么只需要启动三个不同配置的 Zookeeper 即可,只要端口不同,即可视为不同的程序。
在./conf 目录下新增 zoo1.cfg,zoo2.cfg,zoo3.cfg 配置文件,其中 dataDir 目录依次都不同,clientPort 分别配置为 2181,2182,2183。启动 Zookeeper 时,显式指定配置文件,如:./bin/zkServer.sh start conf/zoo3.cfg,依次启动三个 Zookeeper 配置文件。。那么最终执行 netstat -lntp 看下端口监听情况:
可以看到启动了三个监听不同端口的 Zookeeper.
多机集群部署
在真实生产环境中,我们一般会搭建一个多机器集群的,目的很明显,为了提高容错能力。
在三台机器中,每台安装一个 Zookeeper 服务,这三台机器形成一个小规模的集群。
在每台机器中修改./conf/zoo.cfg 配置文件如下:
initLimit=10 // 初始容忍的心跳数
syncLimit=5 // 等待最大容忍的心跳数
dataDir=/home/wwwroot/easywits/tools/zookeeper-3.4.11/data // 数据存储目录
dataLogDir=/home/wwwroot/easywits/tools/zookeeper-3.4.11/logs // 数据日志文件目录
clientPort=2181 //zookeeper 监听端口
server.1=192.168.2.216:2888:3888 // 主机 ip/ 服务间心跳连接端口 / 数据端口
server.2=192.168.2.217:2888:3888
server.3=192.168.2.218:2888:3888
分别在每台服务器 数据目录 /home/wwwroot/easywits/tools/zookeeper-3.4.11/data 中新增名为 myid 文本文件, 内容依次为 0,1,2, 这是集群中每台 Zookeeper 服务的唯一标识,不能重复,以第一台为例:
echo “0” > /home/wwwroot/easywits/tools/zookeeper-3.4.11/data/myid
启动 Zookeeper : ./bin/zkServer.sh start
查看每台服务器中,Zookeeper 状态:./bin/zkServer.sh status,结果分别如下:
Using config: /home/wwwroot/easywits/tools/zookeeper-3.4.11/bin/../conf/zoo.cfg
Mode: follower
Using config: /home/wwwroot/easywits/tools/zookeeper-3.4.11/bin/../conf/zoo.cfg
Mode: leader
Using config: /home/wwwroot/easywits/tools/zookeeper-3.4.11/bin/../conf/zoo.cfg
Mode: follower
可以看到启动模式,第一台与第三台为 follower,而第二台为 leader
注意:Zookeeper 集群规模,机器数量只能是奇数个,在三台机器集群的情况下,最多只能挂掉其中一台,如果主节点挂掉,剩下两台服务会重新选举一台作为主节点。
总结
Zookeeper 启动失败,可以在./zookeeper.out 文件查看异常日志
每台机器的 myid 中内容为服务的唯一标识,不能重复
确保每台机器必须能 ping 通,必要时请先关闭防火墙
在阿里云服务器上,请使用内网 ip 进行配置
确保使用的端口未被占用
Zookeeper 集群机器数量只能是奇数个,详见 https://www.cnblogs.com/LeeSc…
ps: 关于需要用到的工具,可在公众号「张少林同学」回复 Java 工具获取网盘下载链接
最后
记录一波 Zookeeper 搭建过程,后续会不定期更新原创文章,欢迎关注公众号「张少林同学」!