CentOS8 安装配置zookeeper3.6,单机版,伪集群版,集群版,自启动

环境:

JDK 8

CentOS8 安装JDK8 jdk-8u192-linux-x64.tar.gz
https://blog.youkuaiyun.com/haveqing/article/details/105305083

一、下载

http://zookeeper.apache.org/releases.html

https://downloads.apache.org/zookeeper/zookeeper-3.6.0/apache-zookeeper-3.6.0-bin.tar.gz

二、文档

http://zookeeper.apache.org/doc/current/index.html

http://zookeeper.apache.org/doc/current/zookeeperAdmin.html

http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_clusterOptions

三、安装

http://zookeeper.apache.org/doc/current/zookeeperStarted.html

上传apache-zookeeper-3.6.0-bin.tar.gz至/opt下

[root@dev1 ~]# cd /opt
[root@dev1 opt]# tar -zxvf apache-zookeeper-3.6.0-bin.tar.gz
[root@dev1 opt]# mv apache-zookeeper-3.6.0-bin zookeeper-3.6.0

1.配置

[root@dev1 opt]# cd zookeeper-3.6.0/
[root@dev1 zookeeper-3.6.0]# cd conf
[root@dev1 conf]# cp zoo_sample.cfg zoo.cfg
[root@dev1 conf]# vim zoo.cfg

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=/tmp/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

最简单的就是把dataDir改了就行

[root@dev1 conf]# vim zoo.cfg
dataDir=/opt/zookeeper-3.6.0/data

配置说明

zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是说每个tickTime时间就会发送一个心跳。
tickTime=2000
集群中的follower服务器与leader服务器之间初始连接时的超时时间(tickTime的倍数)
initLimit=10
follower和leader之间发送消息,请求和应答的最大时间长度。(tickTime的倍数)
syncLimit=5
存储快照的目录,如果没有配置dataLogDir,那么事务日志也会存储在此目录。
集群模式myid文件也存储在这里
dataDir=/opt/zookeeper-3.6.0-1/data
客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
clientPort=2181

为了获得较低的更新延迟,拥有专用的事务日志目录非常重要。 默认情况下,事务日志与数据快照和myid文件放在同一目录中。 dataLogDir参数指示用于事务日志的其他目录。

比如:dataLogDir=/opt/zookeeper-3.6.0-1/dataLog

2.启动

[root@dev1 conf]# cd ../bin
[root@dev1 bin]# ./zkServer.sh
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.6.0/bin/../conf/zoo.cfg
Usage: ./zkServer.sh [--config <conf-dir>] {start|start-foreground|stop|version|restart|status|print-cmd}

[root@dev1 bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.6.0/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

3.查看状态

[root@dev1 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.6.0/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone

查看进程
[root@dev1 bin]# ps -ef|grep zookeeper
root       3361      1  0 02:10 pts/0    00:00:01 /opt/jdk1.8.0_192/bin/java -Dzookeeper.log.dir=/opt/zookeeper-3.6.0/bin/../logs -Dzookeeper.log.file=zookeeper-root-server-dev1.log -Dzookeeper.root.logger=INFO,CONSOLE -XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError=kill -9 %p -cp /opt/zookeeper-3.6.0/bin/../zookeeper-server/target/classes:/opt/zookeeper-3.6.0/bin/../build/classes:/opt/zookeeper-3.6.0/bin/../zookeeper-server/target/lib/*.jar:/opt/zookeeper-3.6.0/bin/../build/lib/*.jar:/opt/zookeeper-3.6.0/bin/../lib/zookeeper-prometheus-metrics-3.6.0.jar:/opt/zookeeper-3.6.0/bin/../lib/zookeeper-jute-3.6.0.jar:/opt/zookeeper-3.6.0/bin/../lib/zookeeper-3.6.0.jar:/opt/zookeeper-3.6.0/bin/../lib/snappy-java-1.1.7.jar:/opt/zookeeper-3.6.0/bin/../lib/slf4j-log4j12-1.7.25.jar:/opt/zookeeper-3.6.0/bin/../lib/slf4j-api-1.7.25.jar:/opt/zookeeper-3.6.0/bin/../lib/simpleclient_servlet-0.6.0.jar:/opt/zookeeper-3.6.0/bin/../lib/simpleclient_hotspot-0.6.0.jar:/opt/zookeeper-3.6.0/bin/../lib/simpleclient_common-0.6.0.jar:/opt/zookeeper-3.6.0/bin/../lib/simpleclient-0.6.0.jar:/opt/zookeeper-3.6.0/bin/../lib/netty-transport-native-unix-common-4.1.45.Final.jar:/opt/zookeeper-3.6.0/bin/../lib/netty-transport-native-epoll-4.1.45.Final.jar:/opt/zookeeper-3.6.0/bin/../lib/netty-transport-4.1.45.Final.jar:/opt/zookeeper-3.6.0/bin/../lib/netty-resolver-4.1.45.Final.jar:/opt/zookeeper-3.6.0/bin/../lib/netty-handler-4.1.45.Final.jar:/opt/zookeeper-3.6.0/bin/../lib/netty-common-4.1.45.Final.jar:/opt/zookeeper-3.6.0/bin/../lib/netty-codec-4.1.45.Final.jar:/opt/zookeeper-3.6.0/bin/../lib/netty-buffer-4.1.45.Final.jar:/opt/zookeeper-3.6.0/bin/../lib/metrics-core-3.2.5.jar:/opt/zookeeper-3.6.0/bin/../lib/log4j-1.2.17.jar:/opt/zookeeper-3.6.0/bin/../lib/json-simple-1.1.1.jar:/opt/zookeeper-3.6.0/bin/../lib/jline-2.11.jar:/opt/zookeeper-3.6.0/bin/../lib/jetty-util-9.4.24.v20191120.jar:/opt/zookeeper-3.6.0/bin/../lib/jetty-servlet-9.4.24.v20191120.jar:/opt/zookeeper-3.6.0/bin/../lib/jetty-server-9.4.24.v20191120.jar:/opt/zookeeper-3.6.0/bin/../lib/jetty-security-9.4.24.v20191120.jar:/opt/zookeeper-3.6.0/bin/../lib/jetty-io-9.4.24.v20191120.jar:/opt/zookeeper-3.6.0/bin/../lib/jetty-http-9.4.24.v20191120.jar:/opt/zookeeper-3.6.0/bin/../lib/javax.servlet-api-3.1.0.jar:/opt/zookeeper-3.6.0/bin/../lib/jackson-databind-2.9.10.3.jar:/opt/zookeeper-3.6.0/bin/../lib/jackson-core-2.9.10.jar:/opt/zookeeper-3.6.0/bin/../lib/jackson-annotations-2.9.10.jar:/opt/zookeeper-3.6.0/bin/../lib/commons-lang-2.6.jar:/opt/zookeeper-3.6.0/bin/../lib/commons-cli-1.2.jar:/opt/zookeeper-3.6.0/bin/../lib/audience-annotations-0.5.0.jar:/opt/zookeeper-3.6.0/bin/../zookeeper-*.jar:/opt/zookeeper-3.6.0/bin/../zookeeper-server/src/main/resources/lib/*.jar:/opt/zookeeper-3.6.0/bin/../conf: -Xmx1000m -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain /opt/zookeeper-3.6.0/bin/../conf/zoo.cfg
root       3476   3059  0 02:15 pts/0    00:00:00 grep --color=auto zookeeper

5.停止

[root@dev1 bin]# ./zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.6.0/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED

好了,最简单的单机版搭完了。

四、集群版(单机伪集群)

复制zookeeper-3.6.0出三份,zookeeper-3.6.0单机版的保留备用

zookeeper-3.6.0-1,zookeeper-3.6.0-2,zookeeper-3.6.0-3

1.配置zoo.cfg

分别编辑3份配置文件

server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888

格式:server.X=host:port1:port2
其中X表示zookeeper服务器ID,
host表示服务器的机器名或IP地址,
port1表示该服务器与集群中的leader交换的信息的端口。
port2为选举端口,表示选举新leader时服务器间相互通信的端口(当leader挂掉时,其余服务器会相互通信,选择出新的leader)。
一般来说,集群中每个服务器的A端口都是一样,每个服务器的B端口也是一样。但是当所采用的为伪集群时,IP地址都一样,只能是A端口和B端口不一样。

[root@dev1 opt]# vim zookeeper-3.6.0-1/conf/zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper-3.6.0-1/data
clientPort=2181

server.1=192.168.0.201:2888:3888
server.2=192.168.0.201:2889:3889
server.3=192.168.0.201:2890:3890

[root@dev1 opt]# vim zookeeper-3.6.0-2/conf/zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper-3.6.0-2/data
clientPort=2182

server.1=192.168.0.201:2888:3888
server.2=192.168.0.201:2889:3889
server.3=192.168.0.201:2890:3890

[root@dev1 opt]# vim zookeeper-3.6.0-3/conf/zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper-3.6.0-3/data
clientPort=2183

server.1=192.168.0.201:2888:3888
server.2=192.168.0.201:2889:3889
server.3=192.168.0.201:2890:3890

 

2.配置myid文件

[root@dev1 opt]# echo 1 > zookeeper-3.6.0-1/data/myid
[root@dev1 opt]# echo 2 > zookeeper-3.6.0-2/data/myid
[root@dev1 opt]# echo 3 > zookeeper-3.6.0-3/data/myid

3.启动3个服务

[root@dev1 opt]# zookeeper-3.6.0-1/bin/zkServer.sh start
[root@dev1 opt]# zookeeper-3.6.0-2/bin/zkServer.sh start
[root@dev1 opt]# zookeeper-3.6.0-3/bin/zkServer.sh start

4.查看服务状态

谁是leader是随机的。

[root@dev1 opt]# zookeeper-3.6.0-1/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.6.0-1/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
[root@dev1 opt]# zookeeper-3.6.0-2/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.6.0-2/bin/../conf/zoo.cfg
Client port found: 2182. Client address: localhost.
Mode: leader
[root@dev1 opt]# zookeeper-3.6.0-3/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.6.0-3/bin/../conf/zoo.cfg
Client port found: 2183. Client address: localhost.
Mode: follower

查看进程

[root@dev1 opt]# ps -ef|grep zookeeper
有三个zookeeper进程

5.客户端连接

[root@dev1 opt]# zookeeper-3.6.0-3/bin/zkCli.sh -server 192.168.0.201:2181,192.168.0.201:2182,192.168.0.201:2183
Connecting to 192.168.0.201:2181,192.168.0.201:2182,192.168.0.201:2183
2020-04-06 03:21:50,073 [myid:] - INFO  [main:Environment@98] - Client environment:zookeeper.version=3.6.0--b4c89dc7f6083829e18fae6e446907ae0b1f22d7, built on 02/25/2020 14:38 GMT
2020-04-06 03:21:50,076 [myid:] - INFO  [main:Environment@98] - Client environment:host.name=dev1
2020-04-06 03:21:50,076 [myid:] - INFO  [main:Environment@98] - Client environment:java.version=1.8.0_192
2020-04-06 03:21:50,078 [myid:] - INFO  [main:Environment@98] - Client environment:java.vendor=Oracle Corporation
2020-04-06 03:21:50,078 [myid:] - INFO  [main:Environment@98] - Client environment:java.home=/opt/jdk1.8.0_192/jre
2020-04-06 03:21:50,078 [myid:] - INFO  [main:Environment@98] - Client environment:java.class.path=/opt/zookeeper-3.6.0-3/bin/../zookeeper-server/target/classes:/opt/zookeeper-3.6.0-3/bin/../build/classes:/opt/zookeeper-3.6.0-3/bin/../zookeeper-server/target/lib/*.jar:/opt/zookeeper-3.6.0-3/bin/../build/lib/*.jar:/opt/zookeeper-3.6.0-3/bin/../lib/zookeeper-prometheus-metrics-3.6.0.jar:/opt/zookeeper-3.6.0-3/bin/../lib/zookeeper-jute-3.6.0.jar:/opt/zookeeper-3.6.0-3/bin/../lib/zookeeper-3.6.0.jar:/opt/zookeeper-3.6.0-3/bin/../lib/snappy-java-1.1.7.jar:/opt/zookeeper-3.6.0-3/bin/../lib/slf4j-log4j12-1.7.25.jar:/opt/zookeeper-3.6.0-3/bin/../lib/slf4j-api-1.7.25.jar:/opt/zookeeper-3.6.0-3/bin/../lib/simpleclient_servlet-0.6.0.jar:/opt/zookeeper-3.6.0-3/bin/../lib/simpleclient_hotspot-0.6.0.jar:/opt/zookeeper-3.6.0-3/bin/../lib/simpleclient_common-0.6.0.jar:/opt/zookeeper-3.6.0-3/bin/../lib/simpleclient-0.6.0.jar:/opt/zookeeper-3.6.0-3/bin/../lib/netty-transport-native-unix-common-4.1.45.Final.jar:/opt/zookeeper-3.6.0-3/bin/../lib/netty-transport-native-epoll-4.1.45.Final.jar:/opt/zookeeper-3.6.0-3/bin/../lib/netty-transport-4.1.45.Final.jar:/opt/zookeeper-3.6.0-3/bin/../lib/netty-resolver-4.1.45.Final.jar:/opt/zookeeper-3.6.0-3/bin/../lib/netty-handler-4.1.45.Final.jar:/opt/zookeeper-3.6.0-3/bin/../lib/netty-common-4.1.45.Final.jar:/opt/zookeeper-3.6.0-3/bin/../lib/netty-codec-4.1.45.Final.jar:/opt/zookeeper-3.6.0-3/bin/../lib/netty-buffer-4.1.45.Final.jar:/opt/zookeeper-3.6.0-3/bin/../lib/metrics-core-3.2.5.jar:/opt/zookeeper-3.6.0-3/bin/../lib/log4j-1.2.17.jar:/opt/zookeeper-3.6.0-3/bin/../lib/json-simple-1.1.1.jar:/opt/zookeeper-3.6.0-3/bin/../lib/jline-2.11.jar:/opt/zookeeper-3.6.0-3/bin/../lib/jetty-util-9.4.24.v20191120.jar:/opt/zookeeper-3.6.0-3/bin/../lib/jetty-servlet-9.4.24.v20191120.jar:/opt/zookeeper-3.6.0-3/bin/../lib/jetty-server-9.4.24.v20191120.jar:/opt/zookeeper-3.6.0-3/bin/../lib/jetty-security-9.4.24.v20191120.jar:/opt/zookeeper-3.6.0-3/bin/../lib/jetty-io-9.4.24.v20191120.jar:/opt/zookeeper-3.6.0-3/bin/../lib/jetty-http-9.4.24.v20191120.jar:/opt/zookeeper-3.6.0-3/bin/../lib/javax.servlet-api-3.1.0.jar:/opt/zookeeper-3.6.0-3/bin/../lib/jackson-databind-2.9.10.3.jar:/opt/zookeeper-3.6.0-3/bin/../lib/jackson-core-2.9.10.jar:/opt/zookeeper-3.6.0-3/bin/../lib/jackson-annotations-2.9.10.jar:/opt/zookeeper-3.6.0-3/bin/../lib/commons-lang-2.6.jar:/opt/zookeeper-3.6.0-3/bin/../lib/commons-cli-1.2.jar:/opt/zookeeper-3.6.0-3/bin/../lib/audience-annotations-0.5.0.jar:/opt/zookeeper-3.6.0-3/bin/../zookeeper-*.jar:/opt/zookeeper-3.6.0-3/bin/../zookeeper-server/src/main/resources/lib/*.jar:/opt/zookeeper-3.6.0-3/bin/../conf:
2020-04-06 03:21:50,079 [myid:] - INFO  [main:Environment@98] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2020-04-06 03:21:50,079 [myid:] - INFO  [main:Environment@98] - Client environment:java.io.tmpdir=/tmp
2020-04-06 03:21:50,079 [myid:] - INFO  [main:Environment@98] - Client environment:java.compiler=<NA>
2020-04-06 03:21:50,079 [myid:] - INFO  [main:Environment@98] - Client environment:os.name=Linux
2020-04-06 03:21:50,079 [myid:] - INFO  [main:Environment@98] - Client environment:os.arch=amd64
2020-04-06 03:21:50,079 [myid:] - INFO  [main:Environment@98] - Client environment:os.version=4.18.0-147.el8.x86_64
2020-04-06 03:21:50,079 [myid:] - INFO  [main:Environment@98] - Client environment:user.name=root
2020-04-06 03:21:50,079 [myid:] - INFO  [main:Environment@98] - Client environment:user.home=/root
2020-04-06 03:21:50,080 [myid:] - INFO  [main:Environment@98] - Client environment:user.dir=/opt
2020-04-06 03:21:50,080 [myid:] - INFO  [main:Environment@98] - Client environment:os.memory.free=51MB
2020-04-06 03:21:50,083 [myid:] - INFO  [main:Environment@98] - Client environment:os.memory.max=228MB
2020-04-06 03:21:50,083 [myid:] - INFO  [main:Environment@98] - Client environment:os.memory.total=57MB
2020-04-06 03:21:50,090 [myid:] - INFO  [main:ZooKeeper@1005] - Initiating client connection, connectString=192.168.0.201:2181,192.168.0.201:2182,192.168.0.201:2183 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@1175e2db
2020-04-06 03:21:50,095 [myid:] - INFO  [main:X509Util@77] - Setting -D jdk.tls.rejectClientInitiatedRenegotiation=true to disable client-initiated TLS renegotiation
2020-04-06 03:21:50,106 [myid:] - INFO  [main:ClientCnxnSocket@239] - jute.maxbuffer value is 1048575 Bytes
2020-04-06 03:21:50,114 [myid:] - INFO  [main:ClientCnxn@1703] - zookeeper.request.timeout value is 0. feature enabled=false
Welcome to ZooKeeper!
2020-04-06 03:21:50,122 [myid:192.168.0.201:2181] - INFO  [main-SendThread(192.168.0.201:2181):ClientCnxn$SendThread@1154] - Opening socket connection to server dev1/192.168.0.201:2181.
2020-04-06 03:21:50,122 [myid:192.168.0.201:2181] - INFO  [main-SendThread(192.168.0.201:2181):ClientCnxn$SendThread@1156] - SASL config status: Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2020-04-06 03:21:50,215 [myid:192.168.0.201:2181] - INFO  [main-SendThread(192.168.0.201:2181):ClientCnxn$SendThread@986] - Socket connection established, initiating session, client: /192.168.0.201:41946, server: dev1/192.168.0.201:2181
2020-04-06 03:21:50,258 [myid:192.168.0.201:2181] - INFO  [main-SendThread(192.168.0.201:2181):ClientCnxn$SendThread@1420] - Session establishment complete on server dev1/192.168.0.201:2181, session id = 0x1000095d3530000, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: 192.168.0.201:2181,192.168.0.201:2182,192.168.0.201:2183(CONNECTED) 0]

已经连上集群了,随机连上了3号服务

6.测试故障转移

停止leader服务

[root@dev1 opt]# zookeeper-3.6.0-2/bin/zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.6.0-2/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED

查看服务状态,3号服务已成为leader
[root@dev1 opt]# zookeeper-3.6.0-1/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.6.0-1/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
[root@dev1 opt]# zookeeper-3.6.0-3/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.6.0-3/bin/../conf/zoo.cfg
Client port found: 2183. Client address: localhost.
Mode: leader

再次启动2号服务,变成follower

[root@dev1 opt]# zookeeper-3.6.0-2/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.6.0-2/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@dev1 opt]# zookeeper-3.6.0-2/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.6.0-2/bin/../conf/zoo.cfg
Client port found: 2182. Client address: localhost.
Mode: follower

五、真集群配置

3台机器(或奇数个)上的配置文件是一样的,只是data/myid内的id不同(说明自己是几号server)

192.168.0.11 dev11

192.168.0.12 dev12

192.168.0.13 dev13

1.配置zoo.cfg和myid文件

在3台服务器配置zoo.cfg,内容一样

[root@dev11 opt]# vim zookeeper-3.6.0/conf/zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper-3.6.0/data
clientPort=2181

server.1=host1:2888:3888
server.2=host2:2888:3888
server.3=host3:2888:3888

格式:server.X=host:port1:port2
其中X表示zookeeper服务器ID,
host表示服务器的机器名或IP地址,
port1表示该服务器与集群中的leader交换的信息的端口。
port2为选举端口,表示选举新leader时服务器间相互通信的端口(当leader挂掉时,其余服务器会相互通信,选择出新的leader)。
一般来说,集群中每个服务器的A端口都是一样,每个服务器的B端口也是一样。但是当所采用的为伪集群时,IP地址都一样,只能是A端口和B端口不一样。

分别配置myid文件内容为1,2,3

[root@dev11 opt]# echo 1 > zookeeper-3.6.0/data/myid
[root@dev12 opt]# echo 2 > zookeeper-3.6.0/data/myid
[root@dev13 opt]# echo 3 > zookeeper-3.6.0/data/myid

防火墙配置...

2.分别启动服务

[root@dev11 opt]# zookeeper-3.6.0-1/bin/zkServer.sh start
[root@dev12 opt]# zookeeper-3.6.0-2/bin/zkServer.sh start
[root@dev13 opt]# zookeeper-3.6.0-3/bin/zkServer.sh start

3.查看状态

谁是leader是随机的。

[root@dev11 opt]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.6.0/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower

[root@dev12 opt]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.6.0/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader

[root@dev13 opt]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.6.0/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower

4.客户端连接

[root@dev11 opt]# zkCli.sh -server 192.168.0.11:2181,192.168.0.12:2181,192.168.0.13:2181

[zk: 192.168.0.11:2181,192.168.0.12:2181,192.168.0.13:2181(CONNECTED) 0]

已经连上集群了,随机连上了3号服务

5.测试故障转移

停止leader服务

[root@dev12 opt]# zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.6.0/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED

[root@dev11 opt]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.6.0/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower

[root@dev13 opt]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.6.0/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader

3号服务升级为leader

启动2号服务,变为follower

[root@dev12 opt]# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.6.0/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@dev12 opt]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.6.0/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower

六、配置开机自启动

CentOS8 zookeeper 开机自启动

七、ZooKeeper命令

输入"help",显示所有命令

[zk: 192.168.0.201:2181,192.168.0.201:2182,192.168.0.201:2183(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
    addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE
    addauth scheme auth
    close 
    config [-c] [-w] [-s]
    connect host:port
    create [-s] [-e] [-c] [-t ttl] path [data] [acl]
    delete [-v version] path
    deleteall path [-b batch size]
    delquota [-n|-b] path
    get [-s] [-w] path
    getAcl [-s] path
    getAllChildrenNumber path
    getEphemerals path
    history 
    listquota path
    ls [-s] [-w] [-R] path
    printwatches on|off
    quit 
    reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
    redo cmdno
    removewatches path [-c|-d|-a] [-l]
    set [-s] [-v version] path data
    setAcl [-s] [-v version] [-R] path acl
    setquota -n|-b val path
    stat [-w] path
    sync path
    version 
Command not found: Command not found help

常用命令

ls

查看指定路径下包含的节点
[zk: 192.168.0.201:2181,192.168.0.201:2182,192.168.0.201:2183(CONNECTED) 1] ls /
[zookeeper]

create

创建一个节点,创建一个/zk节点,且其内容为myData
[zk: 192.168.0.201:2181,192.168.0.201:2182,192.168.0.201:2183(CONNECTED) 2] create /zk mydata
Created /zk

get

显示指定路径下节点的信息,例如,我们检查一下上面的/zk节点最否创建成功
[zk: 192.168.0.201:2181,192.168.0.201:2182,192.168.0.201:2183(CONNECTED) 3] get /zk
mydata

set

设置节点的内容
[zk: 192.168.0.201:2181,192.168.0.201:2182,192.168.0.201:2183(CONNECTED) 4] set /zk anotherData
[zk: 192.168.0.201:2181,192.168.0.201:2182,192.168.0.201:2183(CONNECTED) 5] get /zk
anotherData

delete

删除一个节点
[zk: 192.168.0.201:2181,192.168.0.201:2182,192.168.0.201:2183(CONNECTED) 6] delete /zk
[zk: 192.168.0.201:2181,192.168.0.201:2182,192.168.0.201:2183(CONNECTED) 7] get /zk
org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /zk

八、ZooKeeper四字命令(运维)

命令         示例描述
confecho conf | nc localhost 2181

(New in 3.3.0)输出相关服务配置的详细信息。比如端口、zk数据及日志配置路径、最大连接数,

session超时时间、serverId等

consecho cons | nc localhost 2181

(New in 3.3.0)列出所有连接到这台服务器的客户端连接/会话的详细信息。包括“接受/发送”的包数量、

session id 、操作延迟、最后的操作执行等信息。

crstecho crst | nc localhost 2181(New in 3.3.0)重置当前这台服务器所有连接/会话的统计信息
dumpecho dump | nc localhost 2181列出未经处理的会话和临时节点(只在leader上有效)。
enviecho envi | nc localhost 2181

输出关于服务器的环境详细信息(不同于conf命令),比如host.name、java.version、java.home、

user.dir=/data/zookeeper-3.4.6/bin之类信息

ruokecho ruok | nc localhost 2181测试服务是否处于正确运行状态。如果正常返回"imok",否则返回空。
srstecho srst | nc localhost 2181重置服务器的统计信息
srvrecho srvr | nc localhost 2181

(New in 3.3.0)输出服务器的详细信息。zk版本、接收/发送包数量、连接数、

模式(leader/follower)、节点总数。

statecho stat | nc localhost 2181

输出服务器的详细信息:接收/发送包数量、连接数、模式(leader/follower)、节点总数

、延迟。 所有客户端的列表。

wchsecho wchs | nc localhost 2181(New in 3.3.0)列出服务器watches的简洁信息:连接总数、watching节点总数和watches总数
wchcecho wchc | nc localhost 2181

(New in 3.3.0)通过session分组,列出watch的所有节点,它的输出是一个与 watch 相关的

会话的节点列表。如果watches数量很大的话,将会产生很大的开销,会影响性能,小心使用。

dirsecho dirs | nc localhost 2181

(New in 3.5.1)显示快照和日志文件的总大小(字节)

wchpecho wchp | nc localhost 2181

(New in 3.3.0)通过路径分组,列出所有的 watch 的session id信息。它输出一个与 session

相关的路径。如果watches数量很大的话,将会产生很大的开销,会影响性能,小心使用。

mntrecho mntr | nc localhost 2181

(New in 3.4.0)列出集群的健康状态。包括“接受/发送”的包数量、操作延迟、

当前服务模式(leader/follower)、节点总数、watch总数、临时节点总数。

 

想使用4字命令,需要在zoo.cfg添加配置,要不会报错:conf is not executed because it is not in the whitelist.

4lw.commands.whitelist=*  (打开所有)

4lw.commands.whitelist=stat, ruok, conf, isro (打开部分)

1、使用telnet

[root@dev1 ~]# telnet 192.168.0.201 2181
Trying 192.168.0.201...
Connected to 192.168.0.201.
Escape character is '^]'.
conf
clientPort=2181
secureClientPort=-1
dataDir=/opt/zookeeper-3.6.0-1/data/version-2
dataDirSize=201327556
dataLogDir=/opt/zookeeper-3.6.0-1/data/version-2
dataLogSize=201327556
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
clientPortListenBacklog=-1
serverId=1
initLimit=10
syncLimit=5
electionAlg=3
electionPort=3888
quorumPort=2888
peerType=0
membership: 
server.1=192.168.0.201:2888:3888:participant
server.2=192.168.0.201:2889:3889:participant
server.3=192.168.0.201:2890:3890:participant
version=0Connection closed by foreign host.
 

2、使用nc

[root@dev1 ~]# echo conf | nc 192.168.0.201 2181
clientPort=2181
secureClientPort=-1
dataDir=/opt/zookeeper-3.6.0-1/data/version-2
dataDirSize=201327556
dataLogDir=/opt/zookeeper-3.6.0-1/data/version-2
dataLogSize=201327556
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
clientPortListenBacklog=-1
serverId=1
initLimit=10
syncLimit=5
electionAlg=3
electionPort=3888
quorumPort=2888
peerType=0
membership: 
server.1=192.168.0.201:2888:3888:participant
server.2=192.168.0.201:2889:3889:participant
server.3=192.168.0.201:2890:3890:participant

参考:

ZooKeeper的安装与部署
https://www.cnblogs.com/jimcsharp/p/8358271.html

Getting Started: Coordinating Distributed Applications with ZooKeeper

http://zookeeper.apache.org/doc/current/zookeeperStarted.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值