ZooKeeper 原理与服务器集群部署( 二 )

  • hostname(localhost): 是该 server 所在的域名或IP地址,为了通用,可替换为域名zk{n}.company.com 并在 hosts 里配置;
  • port1(2281,2282,2283): 当前 server 是 leader 时,监听此端口接受 followers 的连接,注意followers不会监听此端口(直到它升级为 leader)
  • port2(2291,2292,2293): 是选举 leader 时所使用的端口 。
  • 必须生成文件 $ZOOKEEPER_HOME/data/%n/myid,其内容为 zoo.cnf 中的 N(服务器ID), 否则抛出异常 java.lang.IllegalArgumentException: $ZOOKEEPER_HOME/data/{n}/myid file is missing
    【ZooKeeper 原理与服务器集群部署】2.4 服务的配置并启动
    ## sudo vim /usr/lib/systemd/system/zookeeper@.service ## 其中的 %i 将来会被替换为具体的 1/2/3 [Unit] Description=ZooKeeper After=syslog.target network.target[Service] Type=forking Environment="ZOOCFG=zoo-%i.cfg" ExecStart=/opt/zookeeper-3.4.11/bin/zkServer.sh start ExecStop=/opt/zookeeper-3.4.11/bin/zkServer.sh stop[Install] WantedBy=multi-user.target 配置为自动启动,并立即启动:
    sudo systemctl daemon-reload sudo systemctl enable zookeeper@{1,2,3} sudo systemctl start zookeeper@{1,2,3} sudo netstat -natp | grep LISTEN | grep -E "218|228|229" # sudo systemctl stop zookeeper@{1,2,3} 2.5 防火墙放行
    如果非本机应用需要连接 ZooKeeper,必须把所有 clientPort 端口放行 。
    ### sudo vim /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 2181 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 2182 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 2183 -j ACCEPT ### 重启生效: sudo systemctl restart iptables 2.6 客户端验证
    zkCli.sh -server localhost:2181 ## 进入命令行状态 help ## 显示所有命令格式 quit ## 退出命令行状态 history ## 显示历史命令ls path [watch] createpath data acl delete path [version] set path data [version] get path [watch] stat path [watch] sync pathlistquota path setquota -n|-b val path delquota [-n|-b] pathaddauth scheme auth setAcl path acl getAcl pathprintwatches on|off redo cmdno 也可集连接和命令于一行:
    zkCli.sh -server localhost:2181 ls / 2.7 清空数据【慎用】
    sudo systemctl stop zookeeper@{1,2,3} sudo rm -rf $ZOOKEEPER_HOME/{logs,data}/{1,2,3}/version-* sudo systemctl start zookeeper@{1,2,3} 2.8 卸载服务【慎用】
    sudo systemctl stop zookeeper@{1,2,3} sudo systemctl disable zookeeper@{1,2,3} sudo rm -rf $ZOOKEEPER_HOME 3.Windows 下安装(可用于开发)
    3.1 下载
    https://archive.apache.org/dist/zookeeper/
    https://archive.apache.org/dist/zookeeper/zookeeper-3.4.11/
    https://archive.apache.org/dist/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz
    3.2 安装
    3.2.1 解压
    3.2.2 修改系统环境变量
    set ZOOKEEPER_HOME={???}zookeeper-3.4.11 set PATH=%ZOOKEEPER_HOME%bin 3.2.3 修改 confzoo-%n.cfg
    cd/d %ZOOKEEPER_HOME% del /q bin*.sh rd/s/q data logs for %n in (1,2,3) do @mkdir logs%n for %n in (1,2,3) do @mkdir data%n for %n in (1,2,3) do @echo %n> data%nmyid for %n in (1,2,3) do @copy/b confzoo_sample.cfg confzoo-%n.cfg 修改文件 confzoo-%n.cfg 如下(分别替换其中的 %n 为 1,2,3):
    tickTime=2000 initLimit=10 syncLimit=5 clientPort=218%n dataDir=D:/Software/Architecture/zookeeper-3.4.11/data/%n dataLogDir=D:/Software/Architecture/zookeeper-3.4.11/logs/%n server.1=localhost:2281:2291 server.2=localhost:2282:2292 server.3=localhost:2283:2293 参数说明与 Linux 中相关内容一样 。
    3.2.4 修改脚本
    删除 binzkEnv.cmd 中的 set ZOOCFG=%ZOOCFGDIR%zoo.cfg 一行;
    for %n in (1,2,3) do @copy/b binzkServer.cmd binzkServer%n.cmd 修改各个文件 zkServer%n.cmd 在 call "%~dp0zkEnv.cmd" 之前加一行:
    set ZOOCFG=%~dp0%..confzoo-%n.cfg,注意替换 %n 分别为 1/2/3
    3.3 启动服务
    zkServer1.cmd zkServer2.cmd zkServer3.cmd 3.4 客户端验证
    zkCli.cmd -server centos:2181 ## 连接 Linux 上服务 zkCli.cmd -server localhost:2181 ## 连接本机上服务 ## 更多内容参见前面 Linux 中相应部分 4.集群部署(生产环境)
    管理员指南: https://zookeeper.apache.org/doc/current/zookeeperAdmin.html
    • 要求至少为三台 ZooKeeper 服务器,最好是奇数个服务器(以便多数正常机器处理少数机器的故障),通常三台足够了,如果想更可靠,可增加至五台;
    • 为避免各服务器同时发生故障,最好部署在不同机器、不同网络交换机(电路、冷却系统等)、甚至不同机房;
    • 为避免内存交换,要设置足够大的 JVM 堆,比如 4G 机器可指定 3G;




    推荐阅读