去官网下载 Zookeeper 的安装包, 这里我们直接使用 3.4.13 的 bin 包. 下载
解压并设置好环境变量
export ZOOKEEPER_HOME=/opt/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
在 $ZOOKEEPER_HOME/conf
下创建 zoo.cfg
文件, (可以参考 zoo_sample.cfg),添加配置
# 缓存文件目录
dataDir=/opt/tmp/zookeeper
# 日志目录
dataLogDir=/opt/logs/zookeeper
# 集群设置
server.1=Master:2888:3888
server.2=Slave2:2888:3888
# 端口
clientPort=2181
# 心跳时间
tickTime=2000
initLimit=10
syncLimit=5
如果需要调整 ZK 的 jvm 参数, 可以在该目录下创建 java.env
文件, 写入相关配置
export JVMFLAGS="-Xms512m -Xmx512m $JVMFLAGS"
注意在集群模式下的时候。(ZooKeeper 需要部署奇数个节点, 在生产环境上最少部署3个)
需要将对应 节点的 ServerID 写到 dataDir 目录下 在zoo.cfg文件中配置的dataDir路径中创建myid文件, 这个文件里面有一个数据就是A的值(该A就是zoo.cfg文件中server.A=B:C:D中的A。(只能用数字)
在集群模式下每一台都去启动和关闭指令, 注意使用的用户必须是 zookeeper 用户
zkServer.sh start
zkServer.sh stop
zkServer.sh restart
zkServer.sh status
通过以下命令 [zkCli.sh](<http://zkcli.sh/>) -server Master
测试是否能够连接上对应的 zookeeper, 看到 Welcome 则表示成功
如上图, 通过使用 Observer, 可以保证, 在跨区域的ZK集群中, 只有必要的写请求(forward) 和写入成功通知 (inform, 并更新本地数据) 才会发生跨区域访问
在普通的配置基础上, 在 zoo.cfg 文件中添加的 server 信息如下
server.4=Slave2:2888:3888:observer
然后启动即可
通过动态配置, 可以实现 ZK 集群配置的热更新, 而无需停止 ZK 服务
<aside> 💡 ZK 3.5.0 以上才支持, 使用动态配置, ZK 集群必须启用 Authentication
</aside>