CentOS6.5搭建ZooKeeper集群与单机

服务器需要的系统环境

1.本文内容是在Linux(CentOS6.5)下搭建zookeeper集群,若想了解在windows下如何搭建zookeeper集群,可以移步到我的另一片文章zookeeper+kafka集群

2.ZooKeeper使用java语言编写,因此它的运行环境需要java环境的支持,本文中每个centos都安装了JDK1.8.

ZooKeeper下载

zookeeper的官方下载地址是:http://www.apache.org/dyn/closer.cgi/zookeeper/

本文在CentOS6.5下使用的zookeeper是3.4.8版本,我上传到了csdn上,欢迎下载zookeeper-3.4.8.tar.gz.

集群与单机

ZooKeeper有两种运行模式,一种是集群模式,另外一种是单机模式.

1.集群模式

我这边使用虚拟机配合克隆功能,准备了三台可以相互联网的centos6.5的linux服务器.分别是:

ip1:192.168.199.100

ip2:192.168.199.101

ip3:192.168.199.102

这三台服务器上都是安装好了jdk1.8的环境,接下来是在这三台服务器上分别安装ZooKeeper服务器,这里就只演示在ip1中的安装操作,在ip2和ip3的机子上安装操作同理.

在/usr/local下新建zookeeper目录,并且将zookeeper.3.4.8.tar.gz在此解压,并且修改zoo.cfg文件:

[#root] cd /usr/local

[#root] mkdir zookeeper

[#root] cd /root

[#root] cp zookeeper3.4.5.tar.gz /usr/local/zookeeper

[#root] cd /usr/local/zookeeper

[#root] tar xzvf zookeeper3.4.5.tar.gz

[#root] rm zookeeper3.4.5.tar.gz

[#root] cd zookeeper3.4.5

[#root] cd conf

[#root] mv zoo_sample.cfg zoo.cfg

CentOS6.5搭建ZooKeeper集群与单机


对于zoo.cfg文件配置,这里只做一个简单即可,默认的zoo.cfg文件内容如下:

CentOS6.5搭建ZooKeeper集群与单机

/var 包含系统一般运行时要改变的数据。通常这些数据所在的目录的大小是要经常变化或扩充的。

/var/lib : 存放系统正常运行时要改变的文件。 

对zoo.cfg文件做如下修改:

CentOS6.5搭建ZooKeeper集群与单机

在集群模式下,集群中每台机器都需要感知到整个集群是由哪几台机器组成的,在配置文件中,可以按照以下格式进行配置,每一行代表一个机器配置:

server.id=host:port:port

id被称为ServerID,用来标识该机器在集群走过的机器序号,在每台ZooKeeper机器上,需要再dataDir参数指定的那个目录下创建一个myid文件,该文件只有一行内容,对应于每台机器的ServerID.例如,server.1的myid文件内容就是"1".

接下来,在dataDir指定的路径下新建myid文件,并且填入server对应的id:

[#root] touch myid

[#root]  vi myid

因为server.1对应的是192.168.199.100这台机子,所以在100这台机子的myid文件填入1即可

按照相同步骤,为101和102配置上zoo.cfg和myid文件.


启动集群,

依次进入每一个zookeeper机器的bin目录下执行:(如果你配置好了环境变量,那么可以直接使用zkServer.sh命令,不然的话需要在当前目录下才能执行)

./zkServer.sh start

执行结果如下:

CentOS6.5搭建ZooKeeper集群与单机

验证服务器,启动完成之后,可以使用telnet命令来测试:

安装好zookeeper集群之后想进入连接测试,telnet localhost 2181发现竟然提示没有telnet这个命令,于是需要自己进行安装。
一、查看本机是否安装telnet
#rpm -qa | grep telnet
如果什么都不显示。说明你没有安装telnet
二、开始安装
yum install xinetd
yum install telnet
yum install telnet-server
三、装好telnet服务之后,默认是不开启服务的,下面我们需要修改文件来开启服务。
vim /etc/xinetd.d/telnet 修改 disable = yes 为 disable = no
四、需要**xinetd服务
# service xinetd restart 或者 #/etc/rc.d/init.d/xinetd restart
我在使用中第一次有提示错误,第二次运行就没事了。

CentOS6.5搭建ZooKeeper集群与单机

发现This ZooKeeper instance is not currently serving requests Connetction closed by foregin host错误,报这个异常的原因就是集群没有选出来leader,当集群里的结点只剩下一台,或者不足半数时,就会出现这个错误提示。 

可是为什么没有选出来leader呢,目测应该是端口没有开放,查了一下最终是因为网络不通,那就防火墙开放端口2181,2888以及3888三个端口.

vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport  2181 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 2888 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3888 -j ACCEPT
保存后重启linux的防火墙服务,命令如下:
/etc/init.d/iptables restart
或者service iptables restart

CentOS6.5搭建ZooKeeper集群与单机

CentOS6.5搭建ZooKeeper集群与单机

先停止zooKeeper服务器先:

CentOS6.5搭建ZooKeeper集群与单机

然后再重启启动,这里指出一个有可能会发现错误的地方,就是启动的时候会包Permssion denied错误

CentOS6.5搭建ZooKeeper集群与单机

这种错误是因为权限不够才发生的错误,如果执行此操作的用户应该具有启动的权限,那么使用chomd为其添加写权限即可,我这里直接换成root用户进行操作;

su root

才执行启动的命令: ./zkServer..sh start

CentOS6.5搭建ZooKeeper集群与单机

注意查看到Mode属性指示的是follower,(集群模式除此之外也有可能是leader,standalone)


2.单机

在上面的集群模式下,已经完成了一个ZooKeeper集群的搭建.

其实,单机模式只是一个特殊的集群模式而已--只有一台机器的集群. 将ip2和ip3这两台zookeeper机器移除之后,只剩下ip1一台zookeeper组成的集群,这就叫做单机模式

单机模式启动之后,其Mode属性的值就是standalone.


3.伪集群模式

如果手上有且只有一台比较好的机器,那么这个时候.如果作为单机模式来进行部署,资源明显有点浪费,那么这时候就可以使用伪集群.

伪集群,就是集群所有的机器都是在一台机器上,但是还是以集群的特性来对外提供服务,比如zoo.cfg文件可做如下设置:

server1.=192.168.199.100:2888:3888

server.2=192.168.199.100:2889:3889

server.3=192.168.199.100:2890:3890

分别对应每一个zookeeper程序(一台机器上装了三台zookeeper)

这种模式下集群搭建可以参考我的另一文章zookeeper+kafka集群