zookeeper是一款分布式协调服务,其可以对公共配置、公共服务等进行管理,关于zookeeper的更详细信息,大家可以在网上查看更多的信息,此处主要介绍如何搭建zookeeper集群。
首先说一下我本地的实验环境:
宿主主机:linux redhat 系统;
三台zookeeper服务器:三台zookeeper服务器共用同一台宿主主机,ip为192.168.81.129,以不同端口区分不同的zookeeper机器,端口分别为2181、2182、2183 ;
jdk版本:1.7;
下载zookeeper(zookeeper-3.4.9.tar.gz):
http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.9/
步骤
1、使用mkdir命令创建三个文件夹,以安装我们需要的三台zookeeper服务器,我这里在“/usr/gdkt/software/zookeeper/app/cluster”目录下新建了server2181、server2182、server2183三个文件夹:
2、进入server2181文件夹,然后创建data、dataLog、logs文件夹,这三个文件夹看名字就知道是干什么的,不再赘述;进入data文件夹创建myid文件,因为这台zookeeper服务器端口是2181,所以在myid文件中输入2181,以唯一标识当前的zookeeper服务器,这myid文件里的2181在等会配置集群中会用到。过程如下:
myid文件里的内容:
3、把zookeeper的安装包上传到server2181文件夹中,并且解压tar -zxvf zookeeper-3.4.9.tar.gz,解压完之后会生成一个zookeeper-3.4.9
4、进入zookeeper-3.4.9/conf/目录可以看到有个配置文件zoo_sample.cfg,但是zookeeper默认是不会加载这个配置文件的,而是加载zoo.cfg配置文件,所以需要我们拷贝一下,并且改名为zoo.cfg,可以看到配置文件的信息:
各配置项说明如下(摘抄网上的说明的):
tickTime:tickTime这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳;
initLimit:配置项是用来配置Zookeeper接受客户端(这里所说的客户端不是用户连接Zookeeper服务器的客户端,而是Zookeeper服务器集群中连接到Leader的Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。
当已经超过10个心跳的时间(也就是tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20 秒
syncLimit:这个配置项标识Leader与Follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是5*2000=10秒
dataDir:顾名思义就是Zookeeper保存数据的目录,默认情况下Zookeeper将写数据的日志文件也保存在这个目录里
clientPort:这个端口就是客户端连接Zookeeper服务器的端口,Zookeeper会监听这个端口接受客户端的访问请求
maxClientCnxns:将限制连接到 ZooKeeper 的客户端的数量,限制并发连接的数量,它通过 IP 来区分不同的客户端。此配置选项可以用来阻止某些类别的 Dos 攻击。将它设置为 0 或者忽略而不进行设置将会取消对并发连接的限制
5、修改配置文件,最终的配置文件如下,红色圈住的代表是修改过的:
这里说明一下关于集群的配置:
集群配置中,每一行就是一台服务器,比如server.2181=192.168.81.129:2888:3888就代表一台zookeeper服务器;
2181:代表与myid文件相同的内容,唯一标识一台zookeeper服务器
192.168.81.129:代表zookeeper服务器的ip地址
2888:用来集群成员的信息交换,表示的是这个服务器与集群中的Leader服务器交换信息的端口
3888:在leader挂掉时专门用来进行选举leader所用
至此,集群中的第一台服务器就算搭建完成了,第二和第三台参照以上步骤进行搭建,但是需要注意修改myid文件的值、服务器的端口和保存数据的相关路径,这里给出另外两台服务器的相关配置:
server2182配置信息:
server2183配置信息:
至此,整个zookeeper集群就算搭建完成了,该集群包括三台zookeeper服务器,下面我们启动集群:
启动端口为2181这台服务器:
进入该目录:cd /usr/gdkt/software/zookeeper/app/cluster/server2181/zookeeper-3.4.9
然后运行:./bin/zkServer.sh start
2182和2183这两台服务器也用同样的方法启动即可:
监测集群是否正确启动
利用“ echo stat|nc localhost 2181”命令查看:
可以看到2182这个端口的zookeeper为主服务器,其余两个服务器都为从服务器。
另外,如果要在外部验证集群是否可以正常工作,那么可以在外部利用ZooInspector工具进行验证,只要利用ZooInspector工具连上其中一台服务器,然后增加一个节点,看是否可以增加上,而且查看其它两台服务器是否也有相应的新增节点,关于ZooInspector的使用,大家在网上也可以找到相应的使用方法。
注意:如果要在外部访问zookeeper集群,那么需要linux上的防火墙或者开放相应的端口,我就是通过开放相应端口以允许外部访问的,在这里也给出相应的步骤:
增加红色框中的部分,然后运行 service iptables restart命令重启防火墙: