Zookeeper 部署

1、简介

ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services. All of these kinds of services are used in some form or another by distributed applications. Each time they are implemented there is a lot of work that goes into fixing the bugs and race conditions that are inevitable. Because of the difficulty of implementing these kinds of services, applications initially usually skimp on them, which make them brittle in the presence of change and difficult to manage. Even when done correctly, different implementations of these services lead to management complexity when the applications are deployed.

2、单机部署

[root@localhost ~]# cd /usr/src
[root@localhost src]# wget https://downloads.apache.org/zookeeper/zookeeper-3.6.1/apache-zookeeper-3.6.1-bin.tar.gz
[root@localhost src]# tar zxvf apache-zookeeper-3.6.1-bin.tar.gz 
[root@localhost src]# mv apache-zookeeper-3.6.1-bin /usr/local/zookeeper
[root@localhost src]# cd /usr/local/zookeeper/
[root@localhost zookeeper]# ll
总用量 32
drwxr-xr-x 2 zabbix zabbix   289 2月  25 22:36 bin
drwxr-xr-x 2 zabbix zabbix    77 2月  25 22:36 conf
drwxr-xr-x 5 zabbix zabbix  4096 2月  25 22:37 docs
drwxr-xr-x 2 root   root    4096 4月  30 10:09 lib
-rw-r--r-- 1 zabbix zabbix 11358 2月  25 22:36 LICENSE.txt
-rw-r--r-- 1 zabbix zabbix   432 2月  25 22:36 NOTICE.txt
-rw-r--r-- 1 zabbix zabbix  1963 2月  25 22:36 README.md
-rw-r--r-- 1 zabbix zabbix  3166 2月  25 22:36 README_packaging.md

[root@localhost zookeeper]# cd conf/
[root@localhost conf]# cp zoo_sample.cfg zoo_sample.cfg.bak
[root@localhost conf]# mv zoo_sample.cfg zoo.cfg

启动服务

[root@localhost bin]# ll
总用量 64
-rwxr-xr-x 1 zabbix zabbix  232 2月  25 22:36 README.txt
-rwxr-xr-x 1 zabbix zabbix 2066 2月  25 22:36 zkCleanup.sh
-rwxr-xr-x 1 zabbix zabbix 1158 2月  25 22:36 zkCli.cmd
-rwxr-xr-x 1 zabbix zabbix 1620 2月  25 22:36 zkCli.sh
-rwxr-xr-x 1 zabbix zabbix 1843 2月  25 22:36 zkEnv.cmd
-rwxr-xr-x 1 zabbix zabbix 3690 2月  25 22:36 zkEnv.sh
-rwxr-xr-x 1 zabbix zabbix 1286 2月  25 22:36 zkServer.cmd
-rwxr-xr-x 1 zabbix zabbix 4559 2月  25 22:36 zkServer-initialize.sh
-rwxr-xr-x 1 zabbix zabbix 9515 2月  25 22:36 zkServer.sh
-rwxr-xr-x 1 zabbix zabbix  988 2月  25 22:36 zkSnapShotToolkit.cmd
-rwxr-xr-x 1 zabbix zabbix 1377 2月  25 22:36 zkSnapShotToolkit.sh
-rwxr-xr-x 1 zabbix zabbix  996 2月  25 22:36 zkTxnLogToolkit.cmd
-rwxr-xr-x 1 zabbix zabbix 1385 2月  25 22:36 zkTxnLogToolkit.sh

[root@localhost bin]# sh zkServer.sh start &
[1] 9237
[root@localhost bin]# ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

# 服务端名称 QuorumPeerMain
[root@localhost bin]# jps
9255 QuorumPeerMain
9303 Jps

# 启动状态 standalone
[root@localhost bin]# sh zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone

CLI 访问

[root@localhost bin]# sh zkCli.sh -server localhost:2181
...
Welcome to ZooKeeper!
JLine support is enabled
...
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] 

CLI 退出

[zk: localhost:2181(CONNECTED) 0] quit
[root@localhost bin]# 

停止服务

[root@localhost bin]# sh zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED

3、集群部署

准备三台机器分别部署zookeeper:

server.1=10.0.0.147:2188:2888
server.2=10.0.0.149:2188:2888
server.3=10.0.0.150:2188:2888

echo “1”>/tmp/zookeeper/myid
echo “2”>/tmp/zookeeper/myid
echo “3”>/tmp/zookeeper/myid

10.0.0.147部署

# 添加以下配置
[root@localhost bin]# vim /usr/local/zookeeper/conf/zoo.cfg 

server.1=10.0.0.147:2188:2888
server.2=10.0.0.149:2188:2888
server.3=10.0.0.150:2188:2888

[root@localhost bin]# mkdir /tmp/zookeeper/
[root@localhost bin]# touch /tmp/zookeeper/myid
[root@localhost bin]# echo "1">/tmp/zookeeper/myid

[root@localhost bin]# sh zkServer.sh start &
[1] 12072
[root@localhost bin]# ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

10.0.0.149部署

# 添加以下配置
[root@localhost bin]# vim /usr/local/zookeeper/conf/zoo.cfg 

server.1=10.0.0.147:2188:2888
server.2=10.0.0.149:2188:2888
server.3=10.0.0.150:2188:2888

[root@localhost bin]# mkdir /tmp/zookeeper/
[root@localhost bin]# touch /tmp/zookeeper/myid
[root@localhost bin]# echo "2">/tmp/zookeeper/myid

[root@localhost bin]# sh zkServer.sh start &
[1] 6506
[root@localhost bin]# ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

10.0.0.150部署

# 添加以下配置
[root@localhost bin]# vim /usr/local/zookeeper/conf/zoo.cfg 

server.1=10.0.0.147:2188:2888
server.2=10.0.0.149:2188:2888
server.3=10.0.0.150:2188:2888

[root@localhost bin]# mkdir /tmp/zookeeper/
[root@localhost bin]# touch /tmp/zookeeper/myid
[root@localhost bin]# echo "3">/tmp/zookeeper/myid

[root@localhost bin]# sh zkServer.sh start &
[1] 12072
[root@localhost bin]# ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

10.0.0.147查看状态为leader

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

10.0.0.149查看状态为follower

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

10.0.0.150查看状态为follower

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

集群访问

[root@localhost bin]# sh zkCli.sh -server 10.0.0.147:2181;10.0.0.149:2181;10.0.0.150:2181
...
[zk: 10.0.0.147:2181(CONNECTED) 0] ls /
[zookeeper]

如果出现NoRouteToHostException异常,请查看防火墙和Selinux,ConnectException也会在单节点刚启动时出现,由于其他集群节点尚未启动,故无法与集群其他节点进行连接。

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.connectOne(QuorumCnxManager.java:677)
	at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:748)
	at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:776)
	at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:958)
	at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:1425)

java.net.ConnectException: 拒绝连接 (Connection refused)
	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.connectOne(QuorumCnxManager.java:677)
	at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:748)
	at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:776)
	at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:958)
	at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:1425)

4、配置文件解析

# 默认2000
tickTime=2000 
# 接受客户端连接zk初始化的最长等待心跳时长=initLimit*tickTime
initLimit=10 
# Leader和Follower之间的通讯时长最长不超过syncLimit*tickTime
syncLimit=5 
# 数据目录
dataDir=/tmp/zookeeper 
# 服务端暴露端口号
clientPort=2181 
# 集群第一台服务器的IP=10.0.0.147,Leader和Follower之间通信端口为2188,集群通过2888端口进行Leader选举
server.1=10.0.0.147:2188:2888 
server.2=10.0.0.149:2188:2888 
server.3=10.0.0.150:2188:2888 

5、命令详解

ls     查看某个目录包含的所有文件
ls -s  查看某个目录包含的所有文件,可以查看到time、version等信息
create   创建znode,并设置初始内容
get    获取znode的数据
set     修改znode内容
delete   删除znode
quit   退出客户端
help   帮助命令
rmr   递归删除
[zk: 10.0.0.147:2181(CONNECTED) 6] create /cluo 666
Created /cluo
[zk: 10.0.0.147:2181(CONNECTED) 7] ls /
[cluo, zookeeper]
[zk: 10.0.0.147:2181(CONNECTED) 8] get /cluo
666
[zk: 10.0.0.147:2181(CONNECTED) 9] set /cluo 777
[zk: 10.0.0.147:2181(CONNECTED) 10] get /cluo
777

[zk: 10.0.0.147:2181(CONNECTED) 15] ls -s /cluo
[]
cZxid = 0x100000002
ctime = Thu Apr 30 14:12:36 CST 2020
mZxid = 0x100000004
mtime = Thu Apr 30 14:13:35 CST 2020
pZxid = 0x100000002
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值