zookeeper高可用集群部署
一、Zookeeper 的搭建方式
Zookeeper 安装方式有三种,单机模式和集群模式以及伪集群模式。单机模式 :Zookeeper 只运行在一台服务器上,适合测试环境;集群模式 :Zookeeper 运行于一个集群上,适合生产环境,这个计算机集群被称为一个 "集合体"(ensemble);伪集群模式 :就是在一台物理机上运行多个 Zookeeper 实例,测试使用。
Zookeeper 通过复制来实现高可用性,只要集合体中半数以上的机器处于可用状态,它就能够保证服务继续。
为什么一定要超过半数呢? 这跟 Zookeeper 的复制策略有关:Zookeeper 确保对 znode 树的每一个修改都会被复制到集合体中超过半数的机器上。
二、配置JDK环境tar zxvf jdk-8u162-linux-x64.tar.gz -C /usr/local/ cat >>/etc/profile<<"EOF" export JAVA_HOME=/usr/local/jdk1.8.0_162 export CLASSPAT=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin EOF source /etc/profile
三、Zookeeper 单机模式搭建
1、下载 ZooKeeper :http://mirrors.hust.edu.cn/apache/zookeeper/
2、解压tar zxvf zookeeper-3.4.10.tar.gz -C /usr/local/
3、配置环境变量vim /etc/profile export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.10 export PATH=.:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH source /etc/profile
非必须操作
4、修改 Zookeeper 的配置文件 conf/zoo.cfgtickTime=2000 dataDir=/usr/local/zookeeper-3.4.10/data dataLogDir=/usr/local/zookeeper-3.4.10/logs clientPort=2181
5、启动 ZooKeeperzkServer.sh start # 启动 zkServer.sh stop # 停止 zkServer.sh status # 状态 zkCli.sh -server localhost:2181
四、Zookeeper 集群模式搭建
Zookeeper 集群模式搭建方案:
主机IP
消息端口
通信端口
myid
data目录
10.10.10.16
2181
2888:3888
0
$ZOOKEEPER_HOME/data
10.10.10.17
2181
2888:3888
1
$ZOOKEEPER_HOME/data
10.10.10.18
2181
2888:3888
2
$ZOOKEEPER_HOME/data一共三个节点(zk服务器集群规模不小于三个节点),要求服务器之间系统时间保持一致
1、解压tar zxvf zookeeper-3.4.10.tar.gz -C /usr/local/
2、配置环境变量vim /etc/profile export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.10 export PATH=.:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH source /etc/profile
非必须操作
3、修改 Zookeeper 的配置文件cd /usr/local/zookeeper-3.4.10/conf cp zoo_sample.cfg zoo.cfg 修改如下配置 tickTime=2000 initLimit=10 syncLimit=5 clientPort=2181 # 修改目录 dataDir=/usr/local/zookeeper-3.4.10/data dataLogDir=/usr/local/zookeeper-3.4.10/logs # 添加集群配置 server.0=10.10.10.16:2888:3888 server.1=10.10.10.17:2888:3888 server.2=10.10.10.18:2888:3888
zookeeper参数说明server.A=B:C:D
A :其中 A 是一个数字,表示这个是服务器的编号;B :是这个服务器的 ip 地址;C :Leader 选举的端口;D :Zookeeper 服务器之间的通信端口。clientPort:客户端连接端口tickTime:tickTime这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳。initLimit=10:initLimit这个配置项是用来配置Zookeeper接受客户端(这里所说的客户端不是用户连接Zookeeper服务器的客户端,而是Zookeeper服务器集群中连接到Leader的Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过10个心跳的时间(也就是tickTime)长度后Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是10*2000=20 秒。syncLimit=5:syncLimit这个配置项标识Leader与Follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是5*2000=10秒。dataDir:dataDir顾名思义就是Zookeeper保存数据的目录,默认情况下Zookeeper将写数据的日志文件也保存在这个目录里。dataLogDir:日志文件目录clientPort=2181:clientPort这个端口就是客户端(应用程序)连接Zookeeper服务器的端口,Zookeeper会监听这个端口接受客户端的访问请求maxClientCnxns:这个操作将限制连接到 Zookeeper 的客户端数量,并限制并发连接的数量,通过 IP 来区分不同的客户端。此配置选项可以阻止某些类别的 Dos 攻击。将他设置为零或忽略不进行设置将会取消对并发连接的限制。minSessionTimeout 和 maxSessionTimeout:即最小的会话超时和最大的会话超时时间。在默认情况下,minSession=2tickTime;maxSession=20tickTime自动清理快照(snapshot)和事务日志:从版本 3.4.0 开始, Zookeeper 提供了自动清理快照(snapshot)和事务日志的功能autopurge.purgeInterval :这个参数指定了持久化日志清理频率,单位是小时,默认是 0,表示不开启自动清理功能。autopurge.snapRetainCount :这个参数和上面的参数搭配使用,用于指定需要保留的持久化目志文件数目,默认是保留 3 个。myid 和 zoo.cfg:除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面就有一个数据就是 A 的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是哪个 server。
4、添加服务器标识配置 dataDir/myid# 在 dataDir 目录创建 myid 文件 mkdir /usr/local/zookeeper-3.4.10/{data,logs} # 创建文件 myid,Server0 内容为 0,Server1 内容为 1,Server2 内容为 2 echo "0" >/usr/local/zookeeper-3.4.10/data/myid
5、将修改后的zookeeper分发到其他节点scp -r /usr/local/zookeeper-3.4.10/ envir-03:/usr/local/ scp -r /usr/local/zookeeper-3.4.10/ envir-04:/usr/local/ 修改其他节点上的myid文件内容,这里修改envir-03和envir-04 envir-03: echo "1" >/usr/local/zookeeper-3.4.10/data/myid envir-04: echo "2" >/usr/local/zookeeper-3.4.10/data/myid
6、启动
分别在3个节点启动zookeeper/usr/local/zookeeper-3.4.10/bin/zkServer.sh start
查看状态/usr/local/zookeeper-3.4.10/bin/zkServer.sh status
五、 Zookeeper 伪集群模式搭建
主机IP
消息端口
通信端口
myid
data目录
10.10.10.16
2180
2880:3880
0
$ZOOKEEPER_HOME/data
10.10.10.16
2181
2881:3881
1
$ZOOKEEPER_HOME/data
10.10.10.16
2182
2882:3882
2
$ZOOKEEPER_HOME/data
只需将zookeper复制3份到不同的位置,配置如下# The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. dataDir=/usr/local/zookeeper/data_0 # the port at which the clients will connect clientPort=2180 #the location of the log file dataLogDir=/usr/local/zookeeper/logs_0 server.0=localhost:2880:3880 server.1=localhost:2881:3881 server.2=localhost:2882:3882
zookeeper服务脚本#!/bin/bash #chkconfig:2345 20 90 #description:zookeeper #processname:zookeeper source /etc/profile ZK_HOME=/usr/local/zookeeper case $1 in start) $ZK_HOME/bin/zkServer.sh start ;; stop) $ZK_HOME/bin/zkServer.sh stop ;; status) $ZK_HOME/bin/zkServer.sh status ;; restart) $ZK_HOME/bin/zkServer.sh restart ;; *) echo "require start|stop|status|restart" ;; esac