zookeeper集群搭建

 

一、zookeeper集群搭建

下载zookeeper

wget http://download.o2o.idohoo.com/zookeeper-3.4.8.tar.gz

1、部署规划

A、zookeeper服务(java):

1号机:10.10.14.212

2号机:10.10.14.213

3号机:10.10.14.214

端口:2181

B、 以上三台机器能互相访问2888、3888、2181端口

 

2、安装

2.1下载安装包

通过”wget http://download.o2o.idohoo.com/zookeeper-3.4.8.tar.gz获取安装包(具体包的版本根据具体情况下载)

2.2 安装

解压到/data/services/目录,进入目录

cd /data/services

tar –zxvf /data/download/zookeeper-3.4.8.tar.gz –C .

3、配置

3.1 新建myid文件(分别在212213214三台机上执行)

在“/data/services/zookeeper/data”目录下新建myid文件,编辑server对应ID信息,并保存,每台zookeeper服务机器改文件不同(每台机器都要加,ID不一样)

没此目录的话创建目录mkdir /data/services/zookeeper/data

1号机(212)echo 1 >/data/services/zookeeper/data/myid

2号机(213)echo 2 >/data/services/zookeeper/data/myid

3号机(214)echo 3 >/data/services/zookeeper/data/myid

 3.2 配置文件修改

zookeeper配置文件路径:/data/services/zookeeper/conf

cp zoo_sample.cfg zoo.cfg

vi zoo.cfg

添加配置:

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/data/services/zookeeper-3.4.8/

clientPort=2181

server.1=10.10.14.212:2008:6008

server.2=10.10.14.213:2008:6008

server.3=10.10.14.214:2008:6008

这个tickTime时间是作为zookeeper服务器之间或客户端与服务器之间维持心跳的时间隔,也就是每到tickTime时间2秒的时候就会发送一个心跳。

initLimit这个配置项是用来配置Zookeeper接收客户端(这里所说的客户端不是用户链接Zookeeper服务器的客户端,而是Zookeeper服务器集群中连接到leader的Follower服务器)初始化连接是最长能忍受多少个心跳的时间间隔数。当已经超过10个心跳的时间(也就是tickTime)长度后Zookeeper服务器还没有收到客户端返回的信息,那么表明这个客户端连接失败。总的时间长度就是10*2000=20秒

syncLimit这个配置项标识leader与follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是5*2000=10秒。

DataDir是保存数据的路径

lientPort这个端口开放来给客户端(应用程序)连接Zookeeper服务器的端口,Zookeeper会监听这个端口接受客户端的访问请求。

server.1 server.2 server.3这些是标记是第几号服务器,集群中的每台ZK server都会有一个用于惟一标识自己的id,有两个地方会使用到这个idmyid文件和zoo.cfg文件中。myid文件存储在dataDir目录中,指定了当前serverserver id。在zoo.cfg文件中,根据server id,配置了每个serverip和相应端口。Zookeeper启动的时候,读取myid文件中的server id,然后去zoo.cfg 中查找对应的配置。2008第一个端口用来集群成员的信息交换,标识这个服务器与集群中的leader服务器交换信息的端口6008是在leader挂掉时专门用来进行选举leader所用的端口

 3.3 配置zookeeper的java虚拟机内存(因为不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率,所以一般最好只有与java程序有关的都配置jvm启动参数,可以防止内存溢出,不配置的话会以默认的256k去防止内存溢出)          在/data/services/zookeeper/bin目录下添加java.env文件

cd /data/services/zookeeper/bin

vi java.env

内容:

#!/bin/bash

export JVMFLAGS="-Xms1024m -Xmx1024m $JVMFLAGS"          

#-Xms为启动时分配内存,-Xmx为最大内存

4、启动

每机器都启动

sh /data/services/zookeeper/bin/zkServer.sh start

5、状态查看

sh  /data/services/zookeeper/bin/zkServer.sh status

 

二、zookeeper集群测试(3台服务器只允许一台故障)

目前因为要与测试环境一致,所以只启动一台zookeeper212,就不启动三台zookeeper,如果需要启动三台zookeeper,而且由于ZooKeeper集群,会有一个Leader负责管理和协调其他集群服务器,因此服务器的数量通常都是奇数,例如3,5,7...等,这样2n+1的数量的服务器就可以允许最多n台服务器的失效。操作步骤如下:

1、先查看各个服务器的状态(三台的话一台leader二台follower)

命令

目录:cd /data/services/zookeeper/bin

sh zkServer.sh status

集群的情况下就是以下这种情况

独立模式情况下

https://www.cnblogs.com/freeweb/p/5216168.html  #zookeeper常用的操作命令

https://www.cnblogs.com/raphael5200/p/5285583.html  #zookeeper原理

https://www.cnblogs.com/z-sm/p/5691752.html   #独立模式和负责模式

2、功能测试,数据同步。 查看三台机器数据是否同步

2.1 创建node

每台机器输入

Sh zkCli.sh -server 127.0.0.1:2181           #zookeeper客户端登陆

 

每台机都创建一个Node数据

结论:实际上只有一个机器会执行创建操作,这是正常的,其他的机器显示已经拥有这个数据

 

2.2 获取node数据

都可以数据

1号机:

 

2号机

 

3号机

 

2.3 1号机重新设置node数据,并在三台机查看数据

1号机设置

 

1-3号机器获取新设置的node数据

 

结论:都能获取到,表示数据设置正常

 

2.4 1号机删除node数据,再查看其他机器数据

 

结论:经检查3台机器都无node说明删除成功,获得数据

 

3、集群冗余测试

3.1 leader宕机之后是否会重新选举出leader,并正常工作

A、选举之前,leader机在1号机

使用sh zkServer.sh status查看

 

B、停掉1号机服务,并查看1号机状态

sh zkServer.sh stop

sh zkServer.sh status

 

通过状态可以看到已经停止了

C、  查看23号机的状态

2号机

 

D、   通过数据同步测试看是否正常,参考部署2功能测试

3.2 宕机掉一台普通机器2号机看是否正常

A、先把原来宕机掉的1号机先起来,恢复zookeeper集群

 

B、然后再把2号机宕机,查看数据是否正常

2号机空压机

 

C、然后根据功能测试2进行数据测试(略)

原文地址:https://www.cnblogs.com/wudongyu/p/8572700.html