01.ZooKeeper入门

一、准备工作

  1. 安装虚拟机软件Virtual Box
  2. Virtual Box准备三台(或以上)虚拟机node0node1node2 ,操作系统为CentOS 6.9,IP设置为192.168.3.180192.168.3.181192.168.3.182(参考Nginx环境搭建 的准备工作部分)
  3. 每台虚拟机安装jdk1.8(参考CentOS 安装JDK)
  4. 下载 ZooKeeper

二、安装与配置

1、将zookeeper文件上传到3个节点(在真实机器操作,我使用系统的是Ubuntu

user@linux:~$ scp zookeeper-3.4.14.tar.gz  root@192.168.3.180:/root/test
user@linux:~$ scp zookeeper-3.4.14.tar.gz  root@192.168.3.181:/root/test
user@linux:~$ scp zookeeper-3.4.14.tar.gz  root@192.168.3.182:/root/test

2、在node0中操作,解压缩文件并放到指定的目录

[root@localhost java]# cd ~/test
[root@localhost test]# tar -zxvf zookeeper-3.4.14.tar.gz 
[root@localhost test]# mv zookeeper-3.4.14 /usr/local/java/

3、配置zookeeper

[root@localhost test]# cd /usr/local/java/zookeeper-3.4.14/conf/
[root@localhost conf]# cp zoo_sample.cfg zoo.cfg 
[root@localhost conf]# ls
configuration.xsl  log4j.properties  zoo.cfg  zoo_sample.cfg
[root@localhost conf]# vim zoo.cfg 
zoo.cfg配置如下
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
clientPort=2181
#maxClientCnxns=60
...
...
  • tickTime: 指定了ZooKeeper的基本时间单位(以毫秒为单位);
  • initLimit: 指定了启动zookeeper时,zookeeper实例中的随从实例同步到领导实例的初始化连接时间限制,超出时间限制则连接失败(以tickTime为时间单位);
  • syncLimit: 指定了zookeeper正常运行时,主从节点之间同步数据的时间限制,若超过这个时间限制,那么随从实例将会被丢弃;
  • dataDir: zookeeper存放数据的目录;
  • clientPort: 用于连接客户端的端口。

在文件的最后加上集群的服务器信息

server.1=192.168.3.180:2888:3888
server.2=192.168.3.181:2888:3888
server.3=192.168.3.182:2888:3888

4、创建zookeeper数据的存储目录,也就是上面配置的dataDir目录

[root@localhost bin]# mkdir /tmp/zookeeper

5、在zookeeper数据的存储目录中创建文件myid

[root@localhost bin]# cd /tmp/zookeeper
[root@localhost bin]# touch myid

6、在node1node2中重复执行步骤2到5

7、编辑node*中的myid文件

node0 中执行:

[root@localhost bin]# echo -n "1">/tmp/zookeeper/myid 

node1中执行

[root@localhost bin]# echo -n "2">/tmp/zookeeper/myid 

node2中执行

[root@localhost bin]# echo -n "3">/tmp/zookeeper/myid 

上面的myid设置主要是设置zoo.cfgserver.xx中的xx,例如node0是集群服务器的server.1,那么node1中的myid设置为1

8、3个节点都启动zookeeper

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

9、查看zookeeper运行状态

[root@localhost bin]# jps
15601 QuorumPeerMain
15666 Jps

存在QuorumPeerMainzookeeper已成功启动

[root@localhost bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/java/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: follower

看到zookeeper的状态为Mode: follower或者Mode: leader,集群服务已经成功。

10、关闭zookeeper服务

[root@localhost bin]# ./zkServer.sh stop

11、重启zookeeper服务

[root@localhost bin]# ./zkServer.sh restart

三、Web界面

四、异常解决

问题1. zookeeper启动后,jps命令看不到进程QuorumPeerMain

查看日志:

[root@localhost bin]# cat /usr/local/java/zookeeper-3.4.14/bin/zookeeper.out 
2019-05-19 19:46:55,928 [myid:] - INFO  [main:QuorumPeerConfig@136] - Reading configuration from: /usr/local/java/zookeeper-3.4.14/bin/../conf/zoo.cfg
2019-05-19 19:46:55,934 [myid:] - ERROR [main:QuorumPeerConfig@217] - 192.168.3.180 does not have the form host:port or host:port:port  or host:port:port:type
2019-05-19 19:46:55,935 [myid:] - ERROR [main:QuorumPeerMain@92] - Unexpected exception, exiting abnormally
java.lang.ArrayIndexOutOfBoundsException: 1
    at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:223)
    at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:152)
    at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:104)
    at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:81)

说明是server.xx配置出了问题,配置格式应为host:porthost:port:porthost:port:port:type,配置为如下即可。

server.1=192.168.3.180:2888:3888
server.2=192.168.3.181:2888:3888
server.3=192.168.3.182:2888:3888

问题2. 所有节点成功启动后,查看ZooKeeper的运行状态,报以下错误信息

[root@localhost bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/java/zookeeper-3.4.14/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.

解决方法:
先查看日志

[root@localhost bin]#  cat /usr/local/java/zookeeper-3.4.14/bin/zookeeper.out
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:558)
    at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:610)
    at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:838)
    at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:958)
2019-05-19 17:41:17,553 [myid:2] - INFO  [QuorumPeer[myid=2]/0:0:0:0:0:0:0:0:2181:QuorumPeer$QuorumServer@185] - Resolved hostname: 192.168.3.182 to address: /192.168.3.182
2019-05-19 17:41:17,553 [myid:2] - INFO  [QuorumPeer[myid=2]/0:0:0:0:0:0:0:0:2181:FastLeaderElection@847] - Notification time out: 60000

日志中有一个异常信息没有到主机的路由,也就是服务器之间通讯有问题。

  • 尝试ping一下,相互能ping通,那服务器节点的IP设置没有问题,如果不能通,先把IP设置好。
  • 查看防火墙是否开启
[root@localhost bin]# service iptables status
表格:filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80 
6    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination    
  • 尝试关闭防火墙,然后重启zookeeper
[root@localhost bin]# service iptables stop
iptables:将链设置为政策 ACCEPT:filter                    [确定]
iptables:清除防火墙规则:                                 [确定]
iptables:正在卸载模块:                                   [确定]
[root@localhost bin]# ./zkServer.sh restart
ZooKeeper JMX enabled by default
Using config: /usr/local/java/zookeeper-3.4.14/bin/../conf/zoo.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/java/zookeeper-3.4.14/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
ZooKeeper JMX enabled by default
Using config: /usr/local/java/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@localhost bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/java/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: follower

看到zookeeper的状态为Mode: follower或者Mode: leader,那么问题就已经解决,多说一句,这里解决问题是把防火墙关了,生产环境不能这么干,应该是配置防火墙信息,一般由运维来负责。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容