zookeeper集群:
zookeeper作为一个开源的分布式应用协调系统,已经用到了许多分布式项目中,用来状态同步服务、集群管理、分布式应用配置项的管理等工作。
ZooKeeper的工作模式有三种:单机模式、集群模式、伪集群模式。
- 单机模式:Zookeeper只运行在一台服务器上,适合测试用;
- 伪集群模式:就是在一台机器上运行多个Zookeeper 实例;
- 集群模式:运行于一个至少有三个节点以上集群中,适合生产环境;
Zookkeeper 集群中有三种角色,leader -主节点 、follower -从节点 、observer-观察节点 ,一个zookeeper集群中,可以有多个follower、observer服务器,但是必需只能有一个leader服务器。如果leader服务器挂掉了,剩下的服务器集群会通过半数以上投票选出一个新的leader服务器。Zookeeper通过复制来实现高可用性,只要集群中半数以上的节点处于可用状态,它就能够保证服务继续。为什么一定要超过半数呢?半数以上投票通过:可以这样理解。客户端的增删改操作无论访问到了哪台zookeeper服务器,最终都会被转发给leader服务器,再由leader服务器分给zookeeper集群中所有follower服务器去投票(投票指的是在内存中做增删改操作),半数投票通过就被认为操作可执行(commit),否则不可执行,因此在生产场集群中至少要三个节点以上,一般节点是单数,如3、5、7 。
下面介绍一下搭建Zookeeper集群(3台server)
1. 安装环境
1) 操作系统为三台linux虚拟机,其IP地址分别为:
uatzp01:10.168.18.97
uatzp02:10.168.18.98
uatzp03:10.168.18.99
2) 服务器配置:
2 Core / 4G Mem / 60G HDD
3) 服务器软件版本:
linux:CentOS6.6
zookeeper: zookeeper-3.4.8
jdk: jdk1.7.0_80
2. 下载
1) zookeeper下载地址:
http://apache.01link.hk/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz
2) jdk下载地址:
http://download.oracle.com/otn/java/jdk/7u80-b15/jdk-7u80-linux-x64.tar.gz
3. 安装与配置jdk和zookeeper
3.1. jdk安装与配置
1) 解压jdk安装包
$ sudo tar -zxvf jdk-7u80-linux-x64.tar.gz
2) 修改配置文件/etc/profile添加如下内容:
export JAVA_HOME=/usr/local/jdk1.7.0_80
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
3) 使配置立即生效
$ . /etc/profile
4) 测试是否安装成功
执行java -version出现如下内容说明安装成功
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
3.2. zookeeper安装与配置(10.168.18.97)
1) 修改/etc/hosts文件加入如下配置
10.168.18.97 uatzp01.uaf.com.cn uat-zookeeper01 uatzp01
10.168.18.98 uatzp02.uaf.com.cn uat-zookeeper02 uatdzp02
10.168.18.99 uatzp03.uaf.com.cn uat-zookeeper03 uazp03
2) 解压zookeeper安装包
$ sudo tar -zxvf zookeeper-3.4.8.tar.gz
3) 在/usr/local/zp/zookeeper-3.4.8目录下创建以下目录
$ cd /usr/local/zk/zookeeper-3.4.8
$ sudo mkdir data
$ sudo mkdir logs
4) 将zookeeper-3.4.8目录下的zoo_sample.cfg文件拷贝一份,命名为zoo.cfg
$ sudo cp zoo_sample.cfg zoo.cfg
5) 修改zoo.cfg配置文件
$ sudo vi zoo.cfg
# 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.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/usr/local/zp/zookeeper-3.4.8/data
dataLogDir=/usr/local/zp/zookeeper-3.4.8/logs
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1= uatzp01:2888:3888
server.2= uatzp02:2888:3888
server.3= uatzp03:2888:3888
配置参数详解:
参数名 |
说明 |
tickTime |
ZK中的一个时间单元(心跳时间间隔)。单位:毫秒 |
initLimit |
初始化时最长能忍受多少个心跳时间间隔数。 |
syncLimit |
配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度。 |
dataDir |
存储快照文件snapshot的目录。 |
dataLogDir |
事务日志输出目录。 |
clientPort |
对外服务端口号 |
server.1= uatzp01:2888:3888 |
server后面的数字代表第几号服务器,uatzp01,uatzp02为集群服务器IP地址映射,2888端口号是zk服务之间通信的端口,3888是zookeeper与其他应用程序通信的端口。 |
server.2= uatzp02:2888:3888 |
|
server.3= uatzp03:2888:3888 |
6) 在dataDir=/usr/local/zp/zookeeper-3.4.8/data目录下创建myid文件
$ sudo vi myid
编辑myid文件,10.168.18.97 服务器设置内容为1,10.168.18.98 服务器设置内容为2,10.168.18.99 服务器设置内容为3。
7) zpuser用户下修改sudo vi /home/zpuser/.bash_profile,增加如下zookeeper配置
#zookeeper env
export ZOOKEEPER_HOME=/usr/local/zp/zookeeper-3.4.8
export PATH=$ZOOKEEPER_HOME/bin:$PATH
执行source /home/zpuser/.bash_profile使设置立即生效。
8) 设置zookeeper开机使用user用户启动相关服务
编辑 sudo vi /etc/rc.local添加如下配置:
su - zpuser -c '/usr/local/zp/zookeeper-3.4.8/bin/zkServer.sh start'
9) 测试是否配置成功
- 切换到zookeeper安装目录
$ cd /usr/local/zpzookeeper-3.4.8
- 执行zookeeper启动命令
$ zkServer.sh start
出现如下则说明成功:
$ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zp/zookeeper-3.4.8/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
通过此命令查看zk状态
ZooKeeper JMX enabled by default
Using config: /usr/local/zp/zookeeper-3.4.8/bin/../conf/zoo.cfg
Mode: leader
ZooKeeper JMX enabled by default
Using config: /usr/local/zp/zookeeper-3.4.8/bin/../conf/zoo.cfg
Mode: follower
- 通过ps -ef|grep zookeeper命令查看进程。
3.3. zookeeper安装与配置(10.168.18.98、99)
参照以上10.168.18.98、99 设置即可。