一、zookeeper介绍
zookeeper是一个分布式的开源框架,它能很好的管理集群,而且提供协调分布式应用的基本服务。
它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。
zookeeper本身可以以standalone模式(单节点状态)安装运行,不过它的长处在于通过分布式zookeeper集群(一个leader,多个follower),基于一定的策略来保证zookeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。
1.1、zookeeper集群角色介绍
zookeeper集群中主要有两个角色:leader和follower。
领导者(leader),用于负责进行投票的发起和决议,更新系统状态。
学习者(learner),包括跟随者(follower)和观察者(observer)。
其中follower用于接受客户端请求并向客户端返回结果,在选主过程中参与投票。
而observer可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度。
1.2 zookeeper集群节点个数
一个zookeeper集群需要运行几个zookeeper节点呢?
你可以运行一个zookeeper节点,但那就不是集群了。如果要运行zookeeper集群的话,最好部署3,5,7个zookeeper节点。本次实验我们是以3个节点进行的。
zookeeper节点部署的越多,服务的可靠性也就越高。当然建议最好是部署奇数个,偶数个不是不可以。但是zookeeper集群是以宕机个数过半才会让整个集群宕机的,所以奇数个节点更佳。
你需要给每个zookeeper 1G左右的内存,如果可能的话,最好有独立的磁盘,因为独立磁盘可以确保zookeeper是高性能的。如果你的集群负载很重,不要把zookeeper和RegionServer运行在同一台机器上面,就像DataNodes和TaskTrackers一样。
二、zookeeper安装
zookeeper介绍完毕后,我们现在就来安装zookeeper。而zookeeper运行需要java的支持,所以我们要首先安装jdk,jdk的安装就在这里忽略了。
注意:zookeeper、jdk需要在每台服务器上都要安装和运行,并且关闭防火墙。
#sudo yum -y install java-1.8.0-openjdk
2.1 安装zookeeper
zookeeper的安装很简单,只需要下载zookeeper压缩包,然后解压、配置、执行就可以了。
#mkdir ~/install #cd ~/install #wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz #tar -xvzf zookeeper-3.4.10.tar.gz #ln -sf ~/install/zookeeper-3.4.10 ~/zookeeper #cd ~/zookeeper #cp conf/zoo_sample.cfg conf/zoo.cfg #mkdir ~/zookeeper/data #mkdir ~/zookeeper/logs #echo "export PATH=$PATH:$HOME/zookeeper/bin" >> ~/.bash_profile #source ~/.bash_profile
现在在其中任意一台服务器上启动zookeeper,使用如下命令:
#bin/zkServer.sh start
查看zookeeper端口、状态和zookeeper日志,如下:
#netstat -tunlp #bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/server/zookeeper/bin/../conf/zoo.cfg
Mode: standalone
如果报错,请查看zookeeper.out日志
三、zookeeper集群搭建
环境说明 centos 6.5
三台机器
192.168.100.211
192.168.100.212
192.168.100.213
安装目录 /home/server/zookeeper
注意:在搭建zookeeper集群时,一定要停止已经启动的zookeeper,防火墙开通响应的端口
#bin/zkServer.sh stop #sudo /sbin/iptables -I INPUT -p tcp --dport 2181 -j ACCEPT #sudo /sbin/iptables -I INPUT -p tcp --dport 2888 -j ACCEPT #sudo /sbin/iptables -I INPUT -p tcp --dport 3888 -j ACCEPT #sudo /etc/rc.d/init.d/iptables #sudo /etc/rc.d/init.d/iptables status # #或永久关闭防火墙 #chkconfig –level 35 iptables off
3.1 修改zookeeper配置文件
zookeeper集群的搭建很简单,只需要修改每台服务器的zoo.cfg配置文件然后进行相关的操作即可。
#vim /home/server/zookeeper/conf/zoo.cfg tickTime=2000 initLimit=10 syncLimit=5 clientPort=2181 dataLogDir=/home/server/zookeeper/logs dataDir=/home/server/zookeeper/data server.1=192.168.100.211:2888:3888 server.2=192.168.100.212:2888:3888 server.3=192.168.100.213:2888:3888
配置文件参数说明:
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会监听这个端口接受客户端的访问请求。
server.A=B:C:D中的A是一个数字,表示这个是第几号服务器,B是这个服务器的IP地址,C第一个端口用来集群成员的信息交换,表示这个服务器与集群中的leader服务器交换信息的端口,D是在leader挂掉时专门用来进行选举leader所用的端口。
3.2 创建相关目录
配置文件修改完毕后,创建zookeeper数据目录和日志目录,使用如下命令:
#mkdir -p /home/server/zookeeper/logs #mkdir -p /home/server/zookeeper/data
3.3 创建ServerID标识
除了修改zoo.cfg配置文件外,zookeeper集群模式下还要配置一个myid文件,这个文件放在dataDir目录下。这个文件里面有一个数据就是A的值(该A就是zoo.cfg文件中server.A=B:C:D中的A),在zoo.cfg文件中配置的dataDir路径中创建myid文件。
在192.168.100.211服务器上创建myid文件,并设置为1,同时与zoo.cfg文件里面的server.1对应,如下:
#echo "1" > /home/server/zookeeper/data/myid
在192.168.100.212服务器上创建myid文件,并设置为2,同时与zoo.cfg文件里面的server.2对应,如下:
#echo "2" > /home/server/zookeeper/data/myid
在192.168.100.213服务器上创建myid文件,并设置为3,同时与zoo.cfg文件里面的server.3对应,如下:
#echo "3" > /home/server/zookeeper/data/myid
四、启动并查看zookeeper集群
#cd /home/server/zookeeper #bin/zkServer.sh start
注意:启动第一台zookeeper的时候可能会报错,等最后一台zookeeper全部启动之后就不会报错了。
zookeeper启动完毕后,查看各个服务器上zookeeper的状态。如下:
#bin/zkServer.sh status [server@centos01 ~]$ zkServer.sh status ZooKeeper JMX enabled by default Using config: /home/server/zookeeper/bin/../conf/zoo.cfg Mode: follower [server@centos02 zookeeper]$ zkServer.sh status ZooKeeper JMX enabled by default Using config: /home/server/zookeeper/bin/../conf/zoo.cfg Mode: follower [server@centos03 ~]$ zkServer.sh status ZooKeeper JMX enabled by default Using config: /home/server/zookeeper/bin/../conf/zoo.cfg Mode: leader
以上,可以很明显的看出这两台服务器zookeeper的状态是follower模式和leader模式。
这说明zookeeper集群已经成功搭建。
如果报错,请查看zookeeper.out日志,正确安装java jdk,关闭防火墙,不会报错
五、连接zookeeper集群
对于客户端来说,zookeeper集群是一个整体,连接到zookeeper集群实际上感觉在独享整个集群的服务,所以可以在任何一个节点上建立到服务器集群的连接,例如在192.168.100.212上进行登录192.168.100.211:
#bin/zkCli.sh -server 192.168.100.211:2181
ZooKeeper启动后,在本机监听一个端口,可以通过nc向此端口发指令进行验证,如果启动成功会返回imok。
#echo ruok | nc [zookeeper_server_ip] [zookeeper_server_port]
举例:
#echo ruok | nc 192.168.100.211 2181
文章评论