初识zookeeper(一)之zookeeper的安装及配置

1、简要介绍

  zookeeper是一个分布式的应用程序协调服务,是Hadoop和Hbase的重要组件,是一个树型的目录服务,支持变更推送。除此还可以用作dubbo服务的注册中心。

2、安装

  2.1 下载安装

wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
tar -zxvf zookeeper-3.4.6.tar.gz
cd zookeeper-3.4.6
cp conf/zoo_sample.cfg conf/zoo.cfg

  2.2 配置

    2.2.1 单点方式

    (1)修改zoo.cfg,如果没有特殊要求,全部默认也可以,主要修改的地方就是dataDir 和 clientPort,如下:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/app/soft/zookeeper-3.4.6/data (换成真实输出目录)
clientPort=2181
#tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳,以毫秒为单位。
#initLimit:LF初始通信时限,集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)
#syncLimit:集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)。
#dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
#clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。   
#dataLogDir:日志文件目录,Zookeeper保存日志文件的目录
#服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口),规则如:server.N=yyy:A:B
#其中N表示服务器编号,YYY表示服务器的IP地址,A为LF通信端口,表示该服务器与集群中的leader交换的信息的端口。B为选举端口,表示选举新leader时服务器间相互通信的端口(当leader挂掉时,其余服务器会相互通信,选择出新的leader)。一般来说,集群中每个服务器的A端口都是一样,每个服务器的B端口也是一样。但是当所采用的为伪集群时,IP地址都一样,只能时A端口和B端口不一样。

    (2)启动:bin/zkServer.sh start

    (3)查看是否成功:bin/zkServer.sh status

    (4)查看日志:vi zooKeeper.out

 

    2.2.2 集群方式(单IP多节点)

    (1)拷贝3份zookeeper-3.4.6.tar.gz,如zookeeper_node1、zookeeper_node2、zookeeper_node3,结构如下:

      
    (2)进入zookeeper_node1--->conf,修改zoo.cfg,如下:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/app/soft/zookeeper_node1/data (换成真实输出目录)
clientPort=2181
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890

    (3)然后在上面dataDir对应的目录下创建myid文件,如下:

mkdir data
vi myid

    myid指明自己的id,对应上面zoo.cfg中"server."后的数字,第一台的内容为1,第二台的内容为2,第三台的内容为3,内容如下:

1

    (4)依次类推,调整2、3节点的地址及端口,如下:

节点2:      

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/app/soft/zookeeper_node2/data (换成真实输出目录)
clientPort=2182
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890

节点3:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/app/soft/zookeeper_node3/data (换成真实输出目录)
clientPort=2183
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:389

    (5),修改节点2、3的myid;      

    (6)启动服务,如下:  

[root@localhost soft]# zookeeper_node1/bin/zkServer.sh start
JMX enabled by default
Using config: /app/soft/zookeeper_node1/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@localhost soft]# vi zookeeper.out 2015-06-25 05:43:13,252 [myid:] - INFO [main:QuorumPeerConfig@103] - Reading configuration from: /app/soft/zookeeper_nod
2015-06-25 05:43:13,257 [myid:] - INFO [main:QuorumPeerConfig@340] - Defaulting to majority quorums
2015-06-25 05:43:13,260 [myid:1] - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3
2015-06-25 05:43:13,260 [myid:1] - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 0
2015-06-25 05:43:13,262 [myid:1] - INFO [main:DatadirCleanupManager@101] - Purge task is not scheduled.
2015-06-25 05:43:13,273 [myid:1] - INFO [main:QuorumPeerMain@127] - Starting quorum peer
2015-06-25 05:43:13,285 [myid:1] - INFO [main:NIOServerCnxnFactory@94] - binding to port 0.0.0.0/0.0.0.0:2181
2015-06-25 05:43:13,312 [myid:1] - INFO [main:QuorumPeer@959] - tickTime set to 2000
2015-06-25 05:43:13,312 [myid:1] - INFO [main:QuorumPeer@979] - minSessionTimeout set to -1
2015-06-25 05:43:13,312 [myid:1] - INFO [main:QuorumPeer@990] - maxSessionTimeout set to -1
2015-06-25 05:43:13,315 [myid:1] - INFO [main:QuorumPeer@1005] - initLimit set to 10
2015-06-25 05:43:13,359 [myid:1] - INFO [Thread-1:QuorumCnxManager$Listener@504] - My election bind port: /127.0.0.1:388
2015-06-25 05:43:13,371 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumPeer@714] - LOOKING
2015-06-25 05:43:13,374 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:FastLeaderElection@815] - New election.
2015-06-25 05:43:13,252 [myid:] - INFO [main:QuorumPeerConfig@103] - Reading configuration from: /app/soft/zookeeper_node1/bin/../conf/zoo.cfg
2015-06-25 05:43:13,257 [myid:] - INFO [main:QuorumPeerConfig@340] - Defaulting to majority quorums
2015-06-25 05:43:13,260 [myid:1] - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3
2015-06-25 05:43:13,260 [myid:1] - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 0
2015-06-25 05:43:13,262 [myid:1] - INFO [main:DatadirCleanupManager@101] - Purge task is not scheduled.
2015-06-25 05:43:13,273 [myid:1] - INFO [main:QuorumPeerMain@127] - Starting quorum peer
2015-06-25 05:43:13,285 [myid:1] - INFO [main:NIOServerCnxnFactory@94] - binding to port 0.0.0.0/0.0.0.0:2181
2015-06-25 05:43:13,312 [myid:1] - INFO [main:QuorumPeer@959] - tickTime set to 2000
2015-06-25 05:43:13,312 [myid:1] - INFO [main:QuorumPeer@979] - minSessionTimeout set to -1
2015-06-25 05:43:13,312 [myid:1] - INFO [main:QuorumPeer@990] - maxSessionTimeout set to -1
2015-06-25 05:43:13,315 [myid:1] - INFO [main:QuorumPeer@1005] - initLimit set to 10
2015-06-25 05:43:13,359 [myid:1] - INFO [Thread-1:QuorumCnxManager$Listener@504] - My election bind port: /127.0.0.1:3888
2015-06-25 05:43:13,371 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumPeer@714] - LOOKING
2015-06-25 05:43:13,374 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:FastLeaderElection@815] - New election. My id = 1, proposed zxid=0x2
2015-06-25 05:43:13,376 [myid:1] - INFO [WorkerReceiver[myid=1]:FastLeaderElection@597] - Notification: 1 (message format version), 1 (n.leader), 0x2 (n.zxid), 0x1 (n.round), LOOKING (n.state), 1 (n.sid), 0x1 (n.peerEpoch) LOOKING (my state)
2015-06-25 05:43:13,379 [myid:1] - WARN [WorkerSender[myid=1]:QuorumCnxManager@382] - Cannot open channel to 2 at election address /127.0.0.1:3889
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:579)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:368)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:341)
at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.process(FastLeaderElection.java:449)
at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.run(FastLeaderElection.java:430)
at java.lang.Thread.run(Thread.java:745)
2015-06-25 05:43:13,385 [myid:1] - WARN [WorkerSender[myid=1]:QuorumCnxManager@382] - Cannot open channel to 3 at election address /127.0.0.1:3890
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)

    发现报错,是因为2、3节点服务还未启动。按照节点1的启动方式,依次启动2、3节点,再次查看日志,发现服务正常。

    查看日志命令:vi zookeeper.out

    (7)查看服务状态,如下:    

[root@localhost soft]# zookeeper_node1/bin/zkServer.sh status
JMX enabled by default
Using config: /app/soft/zookeeper_node1/bin/../conf/zoo.cfg
Mode: follower
[root@localhost soft]# zookeeper_node2/bin/zkServer.sh status
JMX enabled by default
Using config: /app/soft/zookeeper_node2/bin/../conf/zoo.cfg
Mode: leader
[root@localhost soft]# zookeeper_node3/bin/zkServer.sh status
JMX enabled by default
Using config: /app/soft/zookeeper_node3/bin/../conf/zoo.cfg
Mode: follower

      可以看出1是follower,2是leader,3是follower。

Zookeeper部署中的坑

坑之一

Error contacting service. It is probably not running

在配置完zookeeper集群后,三个节点,分别启动三个节点如下:

[root@master bin]# zkServer.sh start

JMX enabled by default

Using config: /usr/local/zk/bin/../conf/zoo.cfg

Starting zookeeper … STARTED

在查看zookeeper状态时遇到

[root@master bin]# zkServer.sh status

JMX enabled by default

Using config: /usr/local/zk/bin/../conf/zoo.cfg

Error contacting service. It is probably not running.

而其他两个节点却是现实正常;

分析原因并解决:

分析方法:

先stop 掉原zk

zkServer.sh stop

然后以start-foreground方式启动,会看到启动日志

zkServer.sh start-foreground

本文地址:http://www.paymoon.com:8001/index.php/2015/06/04/zookeeper-building/

一些常见原因:

原因之一

其原因是在编辑zoo.cfg配置文件时,指定了log的输出目录,但是却未创建。

因此需要按照里面指定的目录进行创建。

mkdir /tmp/zookeeper/log

原因之二

最后检查配置zoo.cfg配置发现是该节点的主机名写错了;先停止三个节点zookeeper服务,逐一的修改节点上zoo.cfg配置文件,在逐一的启动 ,结果显示正常;

PS: zk类的安装搭建过程中, 如果报错, 一定要把status中的错误贴出来, 其它的信息不容易找到答案.

原因之三

 
 
 
 
 

Java

 
1
Caused by: java.lang.IllegalArgumentException: ./zookeeper/myid file is missing

初识zookeeper(1)之zookeeper的安装及配置的更多相关文章

  1. zookeeper学习(一)安装、配置、运行

    说明:zookeeper完全可以standalone,也可以伪集群形式,当然生产中都是集群形式.另外,也可以在windows下运行. 如果只是研究用,完全可以在windows下使用standalone ...

  2. zookeeper学习记录第二篇-----安装、配置、启动

    搭建zk集群,起码保证3台虚拟机的配置,本人使用的虚拟机环境为wm14+centos7+jdk1.8 下载地址 zk的tar包下载地址:http://mirror.bit.edu.cn/apache/ ...

  3. ZooKeeper的安装、配置、启动和使用(一)——单机模式

    ZooKeeper的安装.配置.启动和使用(一)——单机模式 ZooKeeper的安装非常简单,它的工作模式分为单机模式.集群模式和伪集群模式,本博客旨在总结ZooKeeper单机模式下如何安装.配置 ...

  4. ZooKeeper安装与配置

    一. 单机安装.配置: 1. 下载zookeeper二进制安装包下载地址:http://apache.dataguru.cn/zookeeper/zookeeper-3.4.3/zookeeper-3 ...

  5. 决战大数据之三-Apache ZooKeeper Standalone及复制模式安装及测试

    决战大数据之三-Apache ZooKeeper Standalone及复制模式安装及测试 [TOC] Apache ZooKeeper 单机模式安装 创建hadoop用户&赋予sudo权限, ...

  6. ZooKeeper伪分布集群安装及使用 RMI+ZooKeeper实现远程调用框架

    使用 RMI + ZooKeeper 实现远程调用框架,包括ZooKeeper伪集群安装和代码实现两部分.  一.ZooKeeper伪集群安装: 1>获取ZooKeeper安装包 下载地址:ht ...

  7. (转)ZooKeeper伪分布式集群安装及使用

    转自:http://blog.fens.me/hadoop-zookeeper-intro/ 前言 ZooKeeper是Hadoop家族的一款高性能的分布式协作的产品.在单机中,系统协作大都是进程级的 ...

  8. Zookeeper安装和配置

    Zookeeper的安装和配置,可以配置成单机模式.伪集群模式.集群模式. 参考http://coolxing.iteye.com/blog/1871009 一. 单机模式 (1)zookeeper下 ...

  9. zookeeper系列(一)安装

    zookeeper是一个分布式应用协调服务,主要用来解决分布式应用配置项的管理.同步服务.集群管理等,它由Java语言编写,但它支持Java和C两种编程语言接口:   环境部署 操作系统:centos ...

随机推荐

  1. Expm 8_1 区间划分问题

      [问题描述] 给定一组报告,其中的每个报告设置了一个开始时间si和结束时间fi.设计与实现一个算法,对这组报告分配最少数量的教室,使得这些报告能无冲突的举行. package org.xiu68. ...

  2. P3660 【[USACO17FEB]Why Did the Cow Cross the Road III G】

    题外话:维护区间交集子集的小套路 开两个树状数组,一个维护进入区间,一个维护退出区间 $Query:$ 给定询问区间$l,r$和一些其他区间,求其他区间中与$[l,r]$交集非空的区间个数 用上面维护 ...

  3. hdu2838树状数组解逆序

    离散化和排序后的序号问题搞得我实在是头痛 不过树状数组解逆序和偏序一类问题真的好用 更新:hdu的数据弱的真实,我交上去错的代价也对了.. 下面的代码是错的 /* 每个点的贡献度=权值*在这个点之前的 ...

  4. 性能测试三十五:jvm垃圾回收-GC

    垃圾回收-GC 三个问题 哪些内存需要回收? 什么时候回收? 如何回收? YoungGC和FullGC: 新生代引发的GC叫YoungGC 老年代引发的GC叫FullGC FullGC会引起整个Jvm ...

  5. git push origin master出错:error: failed to push some refs to

    1.输入git push origin master 出错:error: failed to push some refs to 那是因为本地没有update到最新版本的项目(git上有README. ...

  6. Excel学习笔记:if({1,0})用法

    一.if函数 判断是否满足条件,满足则返回第2个参数,不满足则返回第3个参数. 使用格式:=if(A1>0,"正","负") 二.if({1,0})用法 ...

  7. Ubuntu 16.4 安装anaconda 详细教程

    下载 官方下载地址:https://www.continuum.io/downloads 所有安装包地址:https://repo.continuum.io/archive/ 这里使用 Python ...

  8. Spring之hello world(Spring入门)

    spring各个版本中: 在3.0以下的版本,源码有spring中相关的所有包[spring功能 + 依赖包] 如2.5版本: 在3.0以上的版本,源码中只有spring的核心功能包[没有依赖包] ( ...

  9. #10 //I [HNOI/AHOI2018]毒瘤

    题解: 80分做法还是听简单的 对于非树边枚举一下端点状态 然而我也不知道为什么就多t了一个点 具体实现上 最暴力的是3^n次 但是我们可以发现对于i不取,j取 i不取,j不取是可以等效成i不取,j没 ...

  10. asp.net core 支付宝支付( 电脑2.0)

    支付宝电脑支付实测在手机浏览器也可以唤醒手机支付宝进行支付,因此也可以作为支付宝手机web支付方式.支付宝电脑支付流程为使用支付宝官方sdk通过获取的支付宝参数构造DefaultAopClient实例 ...