zookeeper 集群搭建

  经过 VMware ,咱们安装了三台虚拟机,用来搭建 zookeeper 集群,虚拟机网络地址以下:html

 hostname                      ipaddress                 subnet mask                          geteway    数据库

一、 master     192.168.146.200    255.255.255.0      192.168.146.2apache

二、 slave1      192.168.146.201    255.255.255.0      192.168.146.2vim

三、 slave2      192.168.146.202    255.255.255.0      192.168.146.2服务器

  在搭建 zookeeper 集群以前,咱们首先要明白为何要选择三台机器搭建,2台不能够吗?4台不能够吗?网络

  zookeeper 集群一般是用来对用户的分布式应用程序提供协调服务的,为了保证数据的一致性,对 zookeeper 集群进行了这样三种角色划分:leader、follower、observer分别对应着总统、议员和观察者。session

  总统(leader):负责进行投票的发起和决议,更新系统状态。分布式

  议员(follower):用于接收客户端请求并向客户端返回结果以及在选举过程当中参与投票。性能

  观察者(observer):也能够接收客户端链接,将写请求转发给leader节点,可是不参与投票过程,只同步leader的状态。一般对查询操做作负载。spa

一、为何zookeeper节点是奇数?

  咱们知道,在每台机器数据保持一致的状况下,zookeeper集群能够保证,客户端发起的每次查询操做,集群节点都能返回一样的结果。

  可是对于客户端发起的修改、删除等能改变数据的操做呢?集群中那么多台机器,你修改你的,我修改个人,最后返回集群中哪台机器的数据呢?

  这就是人心涣散,须要一个领导,因而在zookeeper集群中,leader的做用就体现出来了,只有leader节点才有权利发起修改数据的操做,而follower节点即便接收到了客户端发起的修改操做,也要将其转交给leader来处理,leader接收到修改数据的请求后,会向全部follower广播一条消息,让他们执行某项操做,follower 执行完后,便会向 leader 回复执行完毕。当 leader 收到半数以上的 follower 的确认消息,便会断定该操做执行完毕,而后向全部 follower 广播该操做已经生效。

  因此zookeeper集群中leader是不可缺乏的,可是 leader 节点是怎么产生的呢?其实就是由全部follower 节点选举产生的,讲究民主嘛,并且leader节点只能有一个,毕竟一个国家不能有多个总统。

  这个时候回到咱们的小标题,为何 zookeeper 节点数是奇数,咱们下面来一一来讲明:

  ①、容错率

  首先从容错率来讲明:(须要保证集群可以有半数进行投票)

  2台服务器,至少2台正常运行才行(2的半数为1,半数以上最少为2),正常运行1台服务器都不容许挂掉,可是相对于 单节点服务器,2台服务器还有两个单点故障,因此直接排除了。

  3台服务器,至少2台正常运行才行(3的半数为1.5,半数以上最少为2),正常运行能够容许1台服务器挂掉

  4台服务器,至少3台正常运行才行(4的半数为2,半数以上最少为3),正常运行能够容许1台服务器挂掉

  5台服务器,至少3台正常运行才行(5的半数为2.5,半数以上最少为3),正常运行能够容许2台服务器挂掉

  ②、防脑裂

  脑裂集群的脑裂一般是发生在节点之间通讯不可达的状况下,集群会分裂成不一样的小集群,小集群各自选出本身的leader节点,致使原有的集群出现多个leader节点的状况,这就是脑裂。

  3台服务器,投票选举半数为1.5,一台服务裂开,和另外两台服务器没法通行,这时候2台服务器的集群(2票大于半数1.5票),因此能够选举出leader,而 1 台服务器的集群没法选举。

  4台服务器,投票选举半数为2,能够分红 1,3两个集群或者2,2两个集群,对于 1,3集群,3集群能够选举;对于2,2集群,则不能选择,形成没有leader节点。

  5台服务器,投票选举半数为2.5,能够分红1,4两个集群,或者2,3两集群,这两个集群分别都只能选举一个集群,知足zookeeper集群搭建数目。

  以上分析,咱们从容错率以及防止脑裂两方面说明了3台服务器是搭建集群的最少数目,4台发生脑裂时会形成没有leader节点的错误。

二、下载 zookeeper

  官网下载地址:http://mirror.bit.edu.cn/apache/zookeeper/

三、安装JDK

  因为zookeeper集群的运行须要Java运行环境,因此须要首先安装 JDK,关于安装步骤,我在前面博客介绍过:http://www.javashuo.com/article/p-kweccecc-bu.html

四、解压 zookeeper

  在 /usr/local 目录下新建 software 目录,而后将 zookeeper 压缩文件上传到该目录中,而后经过以下命令解压。

tar -zxvf zookeeper-3.3.6.tar.gz

六、修改配置文件 zoo.cfg

  将zookeeper压缩文件解压后,咱们进入到 conf 目录:

  

  将 zoo_sample.cfg 文件复制并重命名为 zoo.cfg 文件。

cp zoo_sample.cfg zoo.cfg

  而后经过 vim zoo.cfg 命令对该文件进行修改:

  

  上面红色框住的内容便是咱们修改的内容:

  ①、tickTime:基本事件单元,这个时间是做为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,每隔tickTime时间就会发送一个心跳;最小 的session过时时间为2倍tickTime

  ②、dataDir:存储内存中数据库快照的位置,除非另有说明,不然指向数据库更新的事务日志。注意:应该谨慎的选择日志存放的位置,使用专用的日志存储设备可以大大提升系统的性能,若是将日志存储在比较繁忙的存储设备上,那么将会很大程度上影像系统性能。

  ③、client:监听客户端链接的端口。

  ④、initLimit:容许follower链接并同步到Leader的初始化链接时间,以tickTime为单位。当初始化链接时间超过该值,则表示链接失败。

  ⑤、syncLimit:表示Leader与Follower之间发送消息时,请求和应答时间长度。若是follower在设置时间内不能与leader通讯,那么此follower将会被丢弃。

  ⑥、server.A=B:C:D

    A:其中 A 是一个数字,表示这个是服务器的编号;

    B:是这个服务器的 ip 地址;

    C:Leader选举的端口;

    D:Zookeeper服务器之间的通讯端口。

  咱们须要修改的第一个是 dataDir ,在指定的位置处建立好目录。

  第二个须要新增的是 server.A=B:C:D 配置,其中 A 对应下面咱们即将介绍的myid 文件。B是集群的各个IP地址,C:D 是端口配置。

七、建立 myid 文件

  在 上一步 dataDir 指定的目录下,建立 myid 文件。

  

  而后在该文件添加上一步 server 配置的对应 A 数字。

  好比咱们上面的配置:

  dataDir=/usr/local/software/zookeeper-3.3.6/data

  而后下面配置是:

server.0=192.168.146.200:2888:3888
server.1=192.168.146.201:2888:3888
server.2=192.168.146.202:2888:3888

  那么就必须在 192.168.146.200 机器的的 /usr/local/software/zookeeper-3.3.6/data 目录下建立 myid 文件,而后在该文件中写上 0 便可。

  

  后面的机器依次在相应目录建立myid文件,写上相应配置数字便可。

八、配置环境变量

  为了可以在任意目录启动zookeeper集群,咱们须要配置环境变量。

  ps:你也能够不配,这不是搭建集群的必要操做,只不过若是你不配置环境变量,那么每次启动zookeeper须要到安装文件的 bin 目录下去启动。

  首先进入到 /etc/profile 目录,添加相应的配置信息:

#set zookeeper environment
export ZK_HOME=/usr/local/software/zookeeper-3.3.6
export PATH=$PATH:$ZK_HOME/bin

  而后经过以下命令使得环境变量生效:

source /etc/profle

九、启动zookeeper服务

  启动命令:

zkServer.sh start

  中止命令:

zkServer.sh stop

  重启命令:

zkServer.sh restart

  查看集群节点状态:

zkServer.sh status

  咱们分别对集群三台机器执行启动命令。执行完毕后,分别查看集群节点状态:

  出现以下便是集群搭建成功:

  

  三台机器,slave1 成功的经过了选举称为了leader,而剩下的两台成为了 follower。这时候,若是你将slave1关掉,会发现剩下两台又会有一台变成了 leader节点。

十、搭建问题

  若是没有出现上面的状态,说明搭建过程出了问题,那么解决问题的首先就是查看日志文件:

  zookeeper 日志文件目录在:

  dataDir 配置的目录下,文件名称为:zookeeper.out。经过查看日志来解决相应的问题。下面是两种常见的问题:

  ①、防火墙为关闭

  查看防火墙状态:

service iptables status

  关闭防火墙:

chkconfig iptables off

  ②、dataDir 配置的目录没有建立

  在 zoo.cfg 文件中,会有对 dataDir 的一项配置,须要建立该目录,而且注意要在该目录下建立 myid 文件,里面的配置和 zoo.cfg 的server.x 配置保持一致。

相关文章
相关标签/搜索