前言
记录 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, 结果如下:
1tcp6 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 服务的唯一标识, 不能重复, 以第一台为例:
1echo "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/LeeScofiled/p/7390937.html
ps: 关于需要用到的工具, 可在公众号「张少林同学」回复 Java 工具获取网盘下载链接
最后
来源: https://www.cnblogs.com/zhangshaolin/p/10308227.html