Zookeeper HA 部署方案

一、准备服务器环境

ZooKeeper Cluster

Host   IP  
zookeeper1   192.168.50.228  
zookeeper2   192.168.50.229  
zookeeper3   192.168.50.230  

注:为了测试方便,把所有服务器的防火墙都关闭了

#chkconfig iptables off #永久关闭防火墙

#chkconfig iptables on #永久开启防火墙

使用主机名代替IP更加易读,修改方法如下:

1、修改主机名

#vim /etc/sysconfig/network

HOSTNAME=zookeeper1 #主机名称

2、配置hosts文件(相当于么有DNS服务器)

192.168.50.228 zookeeper1

192.168.50.229 zookeeper2

192.168.50.230 zookeeper3

二、安装SunJRE

2.1、JRE7下载

下载地址:

Oracle.com/otn-pub/java/jdk/7u75-b13/jre-7u75-linux-x64.tar.gz?AuthParam=1426833144_785a1e689cccd502d1def7b4a777c646

2.2、安装

把jre7.tar.gz拷贝到安装目录,然后解压

#tar -zxvf jre7.tar.gz

2.3、配置环境变更

#vim /etc/profile

export JAVA_HOME=/home/bdata/software/jre1.7.0_75

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export ZOOKEEPER_HOME=/home/bdata/software/zookeeper-3.4.6

export PATH=$PATH: $JAVA_HOME/bin :$ZOOKEEPER_HOME/bin

2.4、设置默认JRE

sudo update-alternatives

--install /usr/bin/java java /home/bdata/software/jre1.7.0_75/bin/java 300

三、安装zookeeper集群

•1、下载zookeeper


下载地址:

2、安装&配置zookeeper

把tar文件解压到安装目录

#tar -zxvf zookeeper-3.4.6.tar.gz

在conf文件夹下创建zoo.cfg

#cd ${zookeeper_home}/conf

#cp zoo_sample.cfg zoo.cfg

#vim zoo.cfg

#配置如下

#Zookeeper服务器心跳时间,单位毫秒

tickTime=2000

#投票选举新leader的初始化时间

initLimit=10

#Leader与Follower之间的最大响应时间单位,响应超过syncLimit*tickTime,Leader认为Follwer死掉,从服务器列表中删除Follwer

syncLimit=5

#数据存放目录(持久化路径)

dataDir=/home/bdata/datadir/zk/data

#日志保存路径  这个要自己新建

dataLogDir=/home/bdata/datadir/zk/logs

clientPort=2181

#最大的客户端连接数,这里我们设置10000

maxClientCnxns=10000

#集群配置,zookeeper1表示服务机器名可以使用IP或机器名,使用机器名需要设置hosts文件,集群部署需要在dataDir指定的目录下创建一个myid文件,里面设置1-255之间的整数用作zookeeper唯一标识名称,集群必须设置该值

如/home/bdata/datadir/zk/data/myid

echo "1" > myid

#server.服务器标识=IP或机器名:选举leader端口(zk之间的通讯):接收选举数据通信端口,还有一个客户端的端口2181,这三个端口不要混淆

server.1=zookeeper1:2887:3887

server.2=zookeeper2:2887:3887

server.3=zookeeper3:2887:3887

•3、设置日志输出路径


#vim ${zookeeper_home}/bin/zkEnv.sh

#################截取部分配置#################

ZOOBINDIR="${ZOOBINDIR:-/usr/bin}"

ZOOKEEPER_PREFIX="${ZOOBINDIR}/.."

if [ "x$ZOOCFGDIR" = "x" ]

then

if [ -e "${ZOOKEEPER_PREFIX}/conf" ]; then

ZOOCFGDIR="$ZOOBINDIR/../conf"

else

ZOOCFGDIR="$ZOOBINDIR/../etc/zookeeper"

fi

fi

if [ -f "${ZOOCFGDIR}/zookeeper-env.sh" ]; then

. "${ZOOCFGDIR}/zookeeper-env.sh"

fi

if [ "x$ZOOCFG" = "x" ]

then

ZOOCFG="zoo.cfg"

fi

ZOOCFG="$ZOOCFGDIR/$ZOOCFG"

if [ -f "$ZOOCFGDIR/java.env" ]

then

. "$ZOOCFGDIR/java.env"

fi

if [ "x${ZOO_LOG_DIR}" = "x" ]

then

#设置日志输出路径,默认为执行zkServer.sh start命令所在目录生成日志文件

ZOO_LOG_DIR="/home/bdata/software/datadir/zk/logs/"

fi

•4、启动zookeeper


每个节点都启动zookeeper服务

#zkServer.sh start

查看zookeeper运行状态

#zkServer.sh status

//显示如下信息表示集群启动失败(注:集群环境至少启动两台服务器才能成功)

JMX enabled by default

Using config: /home/bdata/software/zookeeper-3.4.6/bin/../conf/zoo.cfg

Error contacting service. It is probably not running.

//**********************************************************************

//显示如下信息表示集群启动成功

JMX enabled by default

Using config: /home/bdata/software/zookeeper-3.4.6/bin/../conf/zoo.cfg

Mode: leader  #leade节点显示leader,普通节点显示follower

四、注意事项

1、检查状态(zkServer.sh status)出现:Error contacting service. It is probably not running.

解决方法:

打开zkServer.sh

找到

status)

STAT=`echo stat | nc localhost $(grep clientPort "$ZOOCFG" | sed -e 's/.*=//') 2> /dev/null| grep Mode`

在nc与localhost之间加上 -q 1 (是数字1而不是字母l)

如果已存在则去掉

2、Unkown Host/无法映射主机名错误/连接超时

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/18ef21962e7af630658abafa55d92554.html