zookeeper完全分布式安装

分布式Apache ZooKeeper-3.5.3集群安装

Apache ZooKeeper是一个为分布式应用所设计的开源协调服务,其设计目的是为了减轻分布式应用程序所承担的协调任务。它可以为用户提供同步、配置管理、分组和命名等服务。在这里,对ZooKeeper的完全分布式集群安装部署进行介绍。

一、基本环境

JDK    :1.8.0_11 (要求1.6+)

ZooKeeper:3.5.3

主机数:3(要求3+,且必须是奇数,因为ZooKeeper的选举算法)

主机名 ZooKeeper myid
master server.1  1
slaveA server.2  2
slaveB server.3  3

二、master节点上安装配置

1、下载并解压ZooKeeper-3.5.3.tar.gz

wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.5.3-beta/zookeeper-3.5.3-beta.tar.gz

tar -zxvf zookeeper-3.5.3-beta.tar.gz
wget 下载下来的压缩包可能解压失败,改为tar -xvf就可以了。

这里路径为 /all/zookeeper/soft/zookeeper-3.5.3

2、$ZOOKEEPER_HOME/conf/zoo.cfg

cp zoo_sample.cfg 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=/all/zookeeper/data/tmp
# the port at which the clients will connect
clientPort=2181

server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

3、设置myid

  在节点配置的dataDir(如我的是 /all/zookeeper/data/tmp)指定的目录下面,创建一个myid文件,里面内容为一个数字,用来标识当前主机,$ZOOKEEPER_HOME/conf/zoo.cfg文件中配置的server.X,则myid文件中就输入这个数字X。(即在每个节点上新建并设置文件myid,其内容与zoo.cfg中的id相对应)这里master节点为 1

mkdir -p /all/zookeeper/data/tmp
cd /all/zookeeper/data/tmp
touch myid
echo “1” > myid

4、设置日志

conf/log4j.properties

# Define some default values that can be overridden by system properties
zookeeper.root.logger=INFO, CONSOLE
改为

# Define some default values that can be overridden by system properties  
zookeeper.root.logger=INFO, ROLLINGFILE
将

#
# Add ROLLINGFILE to rootLogger to get log file output
#    Log DEBUG level and above messages to a log file
log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
改为---每天一个log日志文件,而不是在同一个log文件中递增日志

#
# Add ROLLINGFILE to rootLogger to get log file output
#    Log DEBUG level and above messages to a log file
log4j.appender.ROLLINGFILE=org.apache.log4j.DailyRollingFileAppender


bin/zkEvn.sh

if [ "x${ZOO_LOG_DIR}" = "x" ]
then
    ZOO_LOG_DIR="."
fi

if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
    ZOO_LOG4J_PROP="INFO,CONSOLE"
fi
改为

if [ "x${ZOO_LOG_DIR}" = "x" ]
then
    ZOO_LOG_DIR="$ZOOBINDIR/../logs"
fi

if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
    ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
fi

参考:Zookeeper运维的一些经验

三、从master节点分发文件到其他节点

1、在master节点的/home/fesh/目录下

scp -r /all/zookeeper root@SlaveA:/all/
scp -r /all/zookeeper root@SlaveB:/all/

2、在slaveA节点的/home/fesh/目录下

vi /all/zookeeper/data/tmp/myid
修改为 2

3、在slave2节点的/home/fesh/目录下

vi ./data/zookeeper/myid
修改为 3

四、其他配置

1、每个节点/etc/hostname中分别为master、slaveA、slaveB
2、在每个节点配置/etc/hosts 主机 -IP地址映射

192.168.145.121    master  根据你自己的ID来设置。
192.168.145.158    slaveA
192.168.145.159    slaveB

3、在每个节点配置环境变量/etc/profile 其实还可以到指定用户的根目录~下,将下面两句加大.baserc里面。

export ZOOKEEPER_HOME=/all/zookeeper/soft/zookeeper-3.5.3
export PATH=$PATH:$ZOOKEEPER_HOME/bin

五、启动

在每个节点上$ZOOKEEPER_HOME目录下,运行 (这里的启动顺序为 master > slave1 > slave2 )

每个节点运行启动命令
bin/zkServer.sh start
并用命令查看启动状态
bin/zkServer.sh status

(注:之前我配置正确的,但是一直都是,每个节点上都启动了,但就是互相连接不上,最后发现好像是防火墙的原因,啊啊啊!一定要先把防火墙关了! sudo ufw disable )

查看$ZOOKEEPER_HOME/zookeeper.out 日志,会发现开始会报错,但当leader选出来之后 就没有问题了。

六、很神奇的一点!

开始时,slaveA机器上,myid好像写错了,然后没启动。master和SlaveB正常启动了。更坏的是,SlaveB是leader。。一切是那么糟糕,难道不是master固定第leader吗。

后来改了SlavaA的myid。尝试启动,能启动!!而且,当关闭master时,SlaveA和SlaveB中有一台自动变成了leader!

初步判断:

一:当几台机器都没启动的时候,learer是第一个启动的那台机器。当leader所在的机器挂掉后,会在剩下的几台了选举一个新的leader!

二:几台zookeeper机器是相互独立的,其中一台myid配置错误,或没启动,对其他的没影响。只要重新配置好,可以很快加入集体!!

参考:

1、http://zookeeper.apache.org/doc/r3.4.6/zookeeperAdmin.html

2、一个很好的博客http://www.blogjava.net/hello-yun/archive/2012/05/03/377250.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值