zookeeper单机和同一台机器(即伪集群)上搭建集群部署 及错误Error contacting service. It is probably not running

在同一台机器(即伪集群)上,启动三个zookeeper,三个分别使用不同的配置文件

Zookeeper的单机版安装
从官网上下载zookeeper的安装包

1 准备:安装之前请自行安装jdk(如java8)

2 使用wget 命令或者xshell editplus工具远程上传tar包到Linux

(1)使用wget 命令下载zookeeper安装包到linux环境下

命令: wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz

(2)推荐方法zookeeper-3.4.14.tar.gz(或者zookeeper-3.4.6.tar.gz自己选择下载):

点击下载: https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/

3 解压zookeeper到安装目录(安装目录自己指定如:/usr/local/zk-standalone/)

tar -zxvf zookeeper-3.4.14.tar.gz -C /usr/local/zk-standalone/

重命名:

mv zookeeper-3.4.14.tar.gz  zookeeper

进入到zookeeper的conf目录

cd zookeeper/conf/  && cp zoo_sample.cfg   zoo.cfg

有三个文件,zookeeper的配置文件叫做zoo.cfg,这里边没有,我们把 zoo_sample.cfg 拷贝一份出来,

使用vim 编辑器编辑zoo.cfg 这是原本的配置,

我们需要更改的地方有以下几点

dataDir是zookeeper的数据目录,可以任意选择,但是这个目录必须要提前创建好,zookeeper是不会帮你创建的

dataDir=/usr/local/zk-standalone/zookeeper3/data

dataLogdir是zookeeper的日志目录,应该要谨慎的选择日志目录,目录必须要提前创建好,如果将日志存放在比较繁忙的设备上,将大大影响系统性能
dataLogDir=/usr/local/zk-standalone/zookeeper3/logData

限制zookeeper的客户端链接数量,设置为0或者不设置表示取消对并发连接的设置

maxClientCnxns=0

最小会话超时时间和最大会话超时时间
minSessionTimeout=4000
maxSessionTimeout=10000

server.id 其中1表示这是第几号server,用来做集群中的区别的192.168.9.103是该server所在的ip地址

2888是该server和集群中的leader通信端口,3888是选举leader的端口

server.1=zkcluster:2881:3881

注意:

指定主机名和ip映射关系=>Linux下/etc/hosts文件

写入如:192.168.9.103  zkcluster 

在之前设置的dataDir中新建myid文件,写入一个数字,该数字表示这是第几号server,该数字必须和zoo.cfg文件中的server.X中的X一 一对应

#在dataDir中创建myid文件并写入 1

echo 1  >myid 
#查看myid
cat myid

更改后的文件如下

# 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=/usr/local/zk-standalone/zookeeper3/data
logDataDir=/usr/local/zk-standalone/zookeeper3/logData
# 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 


进入到zookeeper的安装目录 执行bin/zkServer.sh start

如图所示,使用jps命令查看进程是否启动成功

出现 QuorumPeerMain这个进程的时候就说明zookeeper已经安装成功了

[root@sh_c zk-cluster]# jps
42913 QuorumPeerMain
43081 Jps

接下里进入zookeeper的客户端查看 

进入zookeeper的安装目录执行bin/zkCli.sh

执行ls /   查看当前根目录下的节点 发现有一个zookeeper的节点

至此zookeeper的单机版安装成功!

集群版
 

(1)安装JDK  【此步骤省略】。

(2)Zookeeper压缩包上传到服务器

3)将Zookeeper解压 ,创建data目录 ,将 conf下zoo_sample.cfg 文件改名为 zoo.cfg

4)建立/usr/local/zookeeper-cluster目录,将解压后的Zookeeper复制到以下三个目录

/usr/local/zookeeper-cluster/zookeeper-1

/usr/local/zookeeper-cluster/zookeeper-2

/usr/local/zookeeper-cluster/zookeeper-3


  1. 配置每一个Zookeeper 的dataDir(zoo.cfgclientPort 分别为2181  2182  2183

修改/usr/local/zookeeper-cluster/zookeeper-1/conf/zoo.cfg

clientPort=2181

dataDir=/usr/local/zookeeper-cluster/zookeeper-1/data

dataLogDir=/usr/local/zk-cluster/zookeeper-1/logData

修改/usr/local/zookeeper-cluster/zookeeper-2/conf/zoo.cfg

clientPort=2182

dataDir=/usr/local/zookeeper-cluster/zookeeper-2/data

dataLogDir=/usr/local/zk-cluster/zookeeper-2/logData

修改/usr/local/zookeeper-cluster/zookeeper-3/conf/zoo.cfg

clientPort=2183

dataDir=/usr/local/zookeeper-cluster/zookeeper-3/data

dataLogDir=/usr/local/zk-cluster/zookeeper-3/logData

2.2.3配置集群

  1. 每个zookeeper的 data 目录下创建一个 myid 文件,内容分别是1、2、3 。这个文件就是记录每个服务器的ID

-------知识点小贴士------

如果你要创建的文本文件内容比较简单,我们可以通过echo 命令快速创建文件

格式为:

echo 内容 >文件名

例如我们为第一个zookeeper指定ID为1,则输入命令

(2)在每一个zookeeper 的 zoo.cfg配置客户端访问端口(clientPort)和集群服务器IP列表。

集群服务器IP列表如下

server.1=192.168.25.140:2881:3881

server.2=192.168.25.140:2882:3882

server.3=192.168.25.140:2883:3883

解释:server.服务器ID=服务器IP地址:服务器之间通信端口:服务器之间投票选举端口

2.2.4启动集群

启动集群就是分别启动每个实例。

启动后我们查询一下每个实例的运行状态

先查询第一个服务Mode为follower表示是跟随者(从)

再查询第二个服务Mod 为leader表示是领导者(主)

查询第三个为跟随者(从)

2.2.5模拟集群异常

1)首先我们先测试如果是从服务器挂掉,会怎么样

把3号服务器停掉,观察1号和2号,发现状态并没有变化

由此得出结论,3个节点的集群,从服务器挂掉,集群正常

(2)我们再把1号服务器(从服务器)也停掉,查看2号(主服务器)的状态,发现已经停止运行了。

由此得出结论,3个节点的集群,2个从服务器都挂掉,主服务器也无法运行。因为可运行的机器没有超过集群总数量的半数。

  1. (3)我们再次把1号服务器启动起来,发现2号服务器又开始正常工作了。而且依然是领导者。
  1. (4)我们把3号服务器也启动起来,把2号服务器停掉(汗~~干嘛?领导挂了?)停掉后观察1号和3号的状态。发现新的leader产生了~
  2.  

由此我们得出结论,当集群中的主服务器挂了,集群中的其他服务器会自动进行选举状态,然后产生新得leader

(5)我们再次测试,当我们把2号服务器重新启动起来(汗~~这是诈尸啊!)启动后,会发生什么?2号服务器会再次成为新的领导吗?我们看结果

我们会发现,2号服务器启动后依然是跟随者(从服务器),3号服务器依然是领导者(主服务器),没有撼动3号服务器的领导地位。哎~退休了就是退休了,说了不算了,哈哈。

由此我们得出结论,当领导者产生后,再次有新服务器加入集群,不会影响到现任领导者。

error 错误

安装zookeeper时候,可以查看进程启动,但是状态显示报错:Error contacting service. It is probably not running

安装zookeeper-3.4.6的时候,启动正常没报错,但zkServer.sh status查看状态的时候却出现错误,如下:

JMX enabled by default
Using config: /hadoop/zookeeper/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.

jps查看进程,却发现进程已启动

7313  QuorumPeerMain

如:没有jps命令时

安装open-jdk后发现jps不能用,此时需要安装另外一个包才能使用

通过以下命令进行安装:

sudo yum install java-1.8.0-openjdk-devel.x86_64

在网上查阅资料一共有三种解决方法:

如果配置了日志(dataLogDir=/usr/local/zk-cluster/zookeeper-1/logData)可以首先查看日志记录

1,打开zkServer.sh 找到status)

STAT=`echo stat | nc localhost $(grep clientPort "$ZOOCFG" | sed -e 's/.*=//') 2> /dev/null| grep Mode`
在nc与localhost之间加上 -q 1 (是数字1而不是字母l)
如果已存在则去掉
注:因为zookeeper是3.4.5版本,所以在我的zkServer.sh脚本文件里根本没有这一行,所以没有生效

2,调用sh zkServer.sh status 遇到这个问题。百度,google了后发现有人是修改sh脚本里的一个nc的参数来解决,可在3.4.5的sh文件里并没有找到nc的调用。配置文档里指定的log目录没有创建导致出错,手动增加目录后重启,问题解决。
注:我想不是日志的问题所以这个方法根本就没有试

3,创建数据目录,也就是在你zoo.cfg配置文件里dataDir指定的那个目录下创建myid文件,并且指定id,改id为你zoo.cfg文件中server.1=localhost:2888:3888中的    1.只要在myid头部写入1即可.
注:在我第二次安装的时候,没有将myid文件创建在dataDir指定的那个目录下,也报了该错误。之后在dataDir指定的那个目录下创建myid文件就没有报错。

4 因为防火墙没有关闭。关闭防火墙:

  #查看防火墙状态

   service iptables status 或者systemctl status iptables

  #关闭防火墙
   service iptables stop 或者 systemctl stop iptables
  #查看防火墙开机启动状态
   chkconfig iptables --list 
  #关闭防火墙开机启动
   chkconfig iptables off

 注意:我的确在开始时候没有关闭防火墙,但是当我关闭防火墙之后也没有解决问题。

5 没有建立主机和ip之间的映射关系。

  建立主机和ip之间映射关系的命令为 vim /etc/hosts   在文件的末端加入各个主机和ip地址之间的映射关系就可以了。

  注意:只有在建立了映射关系之后,才可以将在同一个网段下的机器利用主机名进行文件传递。问题解决!

Linux的/etc/hosts文件

发布了20 篇原创文章 · 获赞 24 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/u010565545/article/details/103850039