普通集群安装

  1. 去官网下载 Zookeeper 的安装包, 这里我们直接使用 3.4.13 的 bin 包. 下载

  2. 解压并设置好环境变量

    export ZOOKEEPER_HOME=/opt/zookeeper
    export PATH=$PATH:$ZOOKEEPER_HOME/bin
    
  3. $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"
    
  4. 注意在集群模式下的时候。(ZooKeeper 需要部署奇数个节点, 在生产环境上最少部署3个)

    需要将对应 节点的 ServerID 写到 dataDir 目录下 在zoo.cfg文件中配置的dataDir路径中创建myid文件, 这个文件里面有一个数据就是A的值(该A就是zoo.cfg文件中server.A=B:C:D中的A。(只能用数字)

  5. 在集群模式下每一台都去启动和关闭指令, 注意使用的用户必须是 zookeeper 用户

    zkServer.sh start
    zkServer.sh stop
    zkServer.sh restart
    zkServer.sh status
    
  6. 通过以下命令 [zkCli.sh](<http://zkcli.sh/>) -server Master 测试是否能够连接上对应的 zookeeper, 看到 Welcome 则表示成功

通过ZKObserver实现跨区域部署

如上图, 通过使用 Observer, 可以保证, 在跨区域的ZK集群中, 只有必要的写请求(forward) 和写入成功通知 (inform, 并更新本地数据) 才会发生跨区域访问

在普通的配置基础上, 在 zoo.cfg 文件中添加的 server 信息如下

server.4=Slave2:2888:3888:observer

然后启动即可

动态配置

通过动态配置, 可以实现 ZK 集群配置的热更新, 而无需停止 ZK 服务

<aside> 💡 ZK 3.5.0 以上才支持, 使用动态配置, ZK 集群必须启用 Authentication

</aside>

集群 Authentication 配置