zookeeper 集群简单搭建,以及Error contacting service,It is probably not running问题解决
第一步:现在http://www-eu.apache.org/dist/zookeeper/zookeeper-3.4.9/ 下载一个gz包,然后解压。当然,zookeeper 需要在java 的环境中运行,所以,你需要安装jdk http://java.sun.com/javase/downloads/index.jsp 。
第二部:cd zookeeper-3.4.9/,cp conf/zoo_sample.cfg conf/zoo.cfg zoo_sample.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
建议需要去看一下 zookeeper的部署和管理的指南 http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance 虽然是英文的,但是可以进行翻译
在部署和管理的指南中有提到
dataDir=/tmp/zookeeper 这个配置,在原注解中do not use /tmp for storage, /tmp here is just example sakes. 需要将tmp 换成其他目录,官方文档上是:/var/lib/zookeeper/
然后是配置各个节点 地址 最终的配置如下
# 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=/home/zookeeper/server/data
# 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
server.1 = 10.211.55.9:2888:3888
server.2 = 10.211.55.12:2888:3888
server.3 = 10.211.55.13:2888:3888
10.211.55.9是我自己的ip 根据自己的ip去配置,接下来要注意:
在配置的dataDir 下创建myid 文件,内容就是对应的你当前 ip 下的 server.x
例如 server 的 ip 为 10.211.55.9 conf 文件中是 server.1 = 10.211.55.9:2888:3888 myid 对应的内容就是 1
server 的 ip 为 10.211.55.12 conf 文件中是 server.2 = 10.211.55.12:2888:3888 myid 对应的内容就是 2
即:server.x => myid = x
最后一步在每个服务器上开启服务,cd zookeeper-3.4.9/ ./bin/zkServer.sh start
启动之后,通过 ./bin/zkServer.sh status 查看服务的状态
或者
以上都是成功的
如果出现了提示:Error contacting service.It is probably not running
会有以下的原因:
1. 配置错了,仔细阅读以下流程
2. zoo.cfg 三个端口没有开启。
附上官网文档,地址 http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance 即 指南
-
Install the Java JDK. You can use the native packaging system for your system, or download the JDK from:
-
Set the Java heap size. This is very important to avoid swapping, which will seriously degrade ZooKeeper performance. To determine the correct value, use load tests, and make sure you are well below the usage limit that would cause you to swap. Be conservative - use a maximum heap size of 3GB for a 4GB machine.
-
Install the ZooKeeper Server Package. It can be downloaded from:
-
Create a configuration file. This file can be called anything. Use the following settings as a starting point:
tickTime=2000 dataDir=/var/lib/zookeeper/ clientPort=2181 initLimit=5 syncLimit=2 server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
You can find the meanings of these and other configuration settings in the section Configuration Parameters. A word though about a few here:
Every machine that is part of the ZooKeeper ensemble should know about every other machine in the ensemble. You accomplish this with the series of lines of the form server.id=host:port:port. The parameters host and port are straightforward. You attribute the server id to each machine by creating a file named myid, one for each server, which resides in that server's data directory, as specified by the configuration file parameter dataDir.
-
The myid file consists of a single line containing only the text of that machine's id. So myid of server 1 would contain the text "1" and nothing else. The id must be unique within the ensemble and should have a value between 1 and 255.
-
If your configuration file is set up, you can start a ZooKeeper server:
$ java -cp zookeeper.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4j12-1.6.1.jar:lib/log4j-1.2.15.jar:conf \ org.apache.zookeeper.server.quorum.QuorumPeerMain zoo.cfg
QuorumPeerMain starts a ZooKeeper server, JMX management beans are also registered which allows management through a JMX management console. The ZooKeeper JMX document contains details on managing ZooKeeper with JMX.
See the script bin/zkServer.sh, which is included in the release, for an example of starting server instances.
-
Test your deployment by connecting to the hosts:
In Java, you can run the following command to execute simple operations:
$ bin/zkCli.sh -server 127.0.0.1:218