一、下载
https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/
二、安装
前提:安装jdk
解压缩 zookeeper 安装包
mkdir zookeeper
cd zookeeper/
tar -zxvf apache-zookeeper-3.6.1-bin.tar.gz
进入conf目录,cp生成一个zk能识别的配置文件名:zoo.cfg
cd apache-zookeeper-3.6.1-bin/conf/
cp zoo_sample.cfg zoo.cfg
修改配置文件zoo.cfg
vi zoo.cfg
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/data/zookeeper
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true
三、启动Zookeeper
3.1、启动节点
默认会到同级目录conf中寻找zoo.cfg文件,所以默认不用加配置文件
./zkServer.sh start
如果启动报错,提示
: 找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain
zookeeper在3.5.5之后在下载的时候应该下载带bin的文件,而之前的普通的tar.gz的包里面是只是源码的包无法直接使用。
3.2、查看节点状态
./zkServer.sh status
3.2、关闭节点
./zkServer.sh stop
四、集群安装Zookeeper
Zookeeper节点部署越多,服务的可靠性越高,建议部署奇数个节点,因为zookeeper集群是以
宕机个数过半才会让整个集群宕机的。
ip | myid | 节点 |
---|---|---|
192.168.1.200 | 1 | 节点1 |
192.168.1.201 | 2 | 节点2 |
192.168.1.202 | 3 | 节点3 |
分别在三台服务器上安装Zookeeper服务,步骤按照上述即可
4.1、修改配置文件zoo.cfg
三台zoo.cfg文件内容一致
server.1=192.168.1.200:2888:3888
server.2=192.168.1.201:2889:3889
server.3=192.168.1.202:2890:3890
4.2、添加myid文件
集群模式下需要添加myid
文件,保存路径为zoo.cfg文件下dataDir=/data/zookeeper
路径下
myid文件内容为zoo.cfg文件中server.x,即对应(1,2,3),zookeeper会根据myid文件内容,判断那个是server(节点)
cd /data/zookeeper/
分别为1,2,3
vi myid
1
vi myid
2
vi myid
3
4.3、启动集群
三台zk服务器分别执行启动命令
cd /usr/local/zookeeper/apache-zookeeper-3.6.1-bin/bin/
./zkServer.sh start
查看日志,发现启动失败
cd ..
tail -f logs/zookeeper-root-server-192.168.1.200.out
2020-06-14 21:54:44,540 [myid:2] - WARN [QuorumConnectionThread-[myid=2]-2:QuorumCnxManager@400] - Cannot open channel to 3 at election address /192.168.1.202:3890
java.net.NoRouteToHostException: 没有到主机的路由 (Host unreachable)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.initiateConnection(QuorumCnxManager.java:383)
at org.apache.zookeeper.server.quorum.QuorumCnxManager$QuorumConnectionReqThread.run(QuorumCnxManager.java:457)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
原因,防火墙未关闭导致
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
查看节点状态
./zkServer.sh status
200服务器
#从节点
Mode: follower
201服务器
#从节点
Mode: follower
202服务器
#主节点
Mode: leader
五、zookeeper角色、状态介绍
在zookeeper的集群中,节点具有3种角色、4种状态
角色:leader,follower,observer
状态:leading,following,observing,looking
leading:当前Server即为选举出来的leader。
following:已经选举出来,当前Server与之同步。
observing:的行为在大多数情况下与follower完全一致,但是他们不参加选举和投票,而仅仅接受(observing)选举和投票的结果。
looking:当前Server不知道leader是谁,正在搜寻。
六、设置开机自启
cd /etc/rc.d/init.d/
#创建zookeeper文件
vi zookeeper
编写脚本
#!/bin/bash
#chkconfig: 2345 80 90
#description:zookeeper
#processname:zookeeper
export JAVA_HOME=/usr/java/jdk1.8.0_191
case $1 in
start) su root /usr/local/zookeeper/apache-zookeeper-3.6.1-bin/bin/zkServer.sh start;;
stop) su root /usr/local/zookeeper/apache-zookeeper-3.6.1-bin/bin/zkServer.sh stop;;
status) su root /usr/local/zookeeper/apache-zookeeper-3.6.1-bin/bin/zkServer.sh status;;
restart) su root /usr/local/zookeeper/apache-zookeeper-3.6.1-bin/bin/zkServer.sh restart;;
*) echo "require start|stop|status|restart" ;;
esac
#给文件添加权限
chmod +x zookeeper
#配置开机启动项
chkconfig --add zookeeper
#查看zk配置是否成功
chkconfig --list
#重启服务器测试是否成功
reboot