其中的 server.N = hostname : port1 : port2:
- N(1,2,3): “必须”是一个数字(表示这是第几号server),否则报错 java.lang.NumberFormatException: For input string: "xxx"
- 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
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
(编辑:西安站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|