搭建高可用zookeeper
标签(空格分隔): 运维
Step 1:安装jdk和jre
下载最新版本的jdk
地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
cd /usr
mkdir java
cd java
tar xzvf jdk-8u141-linux-x64.tar.gz
# 设置环境变量
vim /etc/profile
# 加入以下内容,注意目录设置,jdk1.8.0_141要换成当前所下载的jdk版本
# set java environment
JAVA_HOME=/usr/java/jdk1.8.0_141
JRE_HOME=/usr/java/jdk1.8.0_141/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
# 在当前shell会话中立马生效,而无需重新登录主机
source /etc/profile
# 查看java 版本以确认成功安装了jdk和jre
java -version
Step 2:搭建zookeeper集群
参考文献-官方文档:
http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_zkMulitServerSetup
# 下载zookeeper-3.4.10到/home下
地址:
https://archive.apache.org/dist/zookeeper/zookeeper-3.4.10/
cd /home
tar xzfv zookeeper-3.4.10.tar.gz
mkdir /data/zookeeperLog #zoo.conf中需要用到。存放zookeeper产生的log。
vim /etc/hosts
vim /home/zookeeper-3.4.10/conf/zoo.cfg
# 每个集群中都加入该文件,该文件中写一个数字,代表该zookeeper节点在集群中的序号,取值正整数。
# myid这个文件应该放在zoo.cfg中指定dataDir下目录下,这里的zoo.cfg中指定dataDir=/home。
vim /home/myid
在/etc/hosts中加入如下格式的内容
10.30.x.x slave-01
10.30.x.x slave-02
10.30.x.x slave-03
10.30.x.x slave-04
10.30.x.x slave-05
注意:IP换成zookeeper的IP即可,主机名按照如上格式排序即可。目前生产环境的zookeeper集群设置5个节点。每一个节点都放在一个单独的主机上。
zoo.cfg内容如下
注意:最后面的几行等号右边写的slave-01是主机名。左边写的是zookeeper集群节点的标记,每一个zookeeper节点在集群中都有唯一一个序号,序号取值为正整数。目前序号最大可以写到255。
# 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.
dataLogDir=/data/zookeeperLog/
dataDir=/home
# 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=2000
#
# 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=10
# Purge task interval in hours
# Set to "0" to disable auto purge feature
autopurge.purgeInterval=1
server.1=slave-01:2888:3888
server.2=slave-02:2888:3888
server.3=slave-03:2888:3888
server.4=slave-04:2888:3888
server.5=slave-05:2888:3888
至此,可以启动zookeeper,检查节点能否成功启动,节点之间是否有成功互相连接成集群.后续设置
# 启动zookeeper
/home/zookeeper-3.4.10/bin/zkServer.sh start
# 停止zookeeper
/home/zookeeper-3.4.10/bin/zkServer.sh start
# 检查zookeeper是否有成功连接成集群,要在每个zookeeper节点上检测所有zookeeper节点的状态,例如:
/home/zookeeper-3.4.10/bin/zkCli.sh -server slave-01
# 查看子节点
ls
Step 3:使用daemontools守护zookeeper进程。
安装daemontools
mkdir /package
chmod 755 /package
cd /package
wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
tar zxf daemontools-0.76.tar.gz
cd admin/daemontools-0.76
vim src/error.h 找到:extern int errno; 改成:#include <errno.h>
# 或者:在src下的conf-cc文件的第一行最后添加如下代码即可 -include /usr/include/errno.h
# vi src/conf-cc
# 在最后加上 -include /usr/include/errno.h
package/install
监控zookeeper
在/service下,新建文件夹zookeeper,新建run文件:
cd /service
mkdir zookeeper
cd zookeeper
vim run
chmod 755 run
run内容:
#!/bin/bash
exec 2>&1
exec /home/zookeeper-3.4.4/bin/zkServer.sh start
date
执行付下命令启动功能启动daemontools
supervise /service/zookeeper
//或者可以用nohup以后台方式运行。如下:
nohup supervise /service/zookeeper &
如果出现
supervise: fatal: unable to acquire /service/zookeeper/supervise/lock: temporary failure
快速rm /service/zookeeper/supervise 重新执行 supervise /service/zookeeper 即可
验证监控zookeeper是否成功:
kill zookeeper进程,查看zookeeper的进程是否自动重启
参考文献:
http://cr.yp.to/daemontools/faq/create.html
Step 4:添加daemontools开机启动
# 在/etc/rc.d/rc.local中末尾加入
/command/svscanboot &
网友评论