zookeeper集群的搭建

zookeeper通常以“复制模式”运行于一个计算机集群上,这个计算机集群被称为一个“集合体”。zookeeper通过复制来实现高可用性,只要集合体中半数以上的机器处于可用状态,它就可以提供服务。出于这个原因,一个集合体通常包含奇数台机器。

安装过程

本文选择了在slave1,slave2和slave3三台机器上安装
将zookeeper解压到/usr/local目录下,并配置环境变量
sudo nano /etc/profile
在最下面加上2行

export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.6
export PATH=$ZOOKEEPER_HOME/bin:$PATH

然后在conf中新建zoo.cfg文件,输入以下内容:

# 客户端心跳时间(毫秒)
tickTime=2000
# 允许心跳间隔的最大时间
initLimit=10
# 同步时限
syncLimit=5
# 数据存储目录
dataDir=/usr/local/zookeeper-3.4.6/data
# 数据日志存储目录
dataLogDir=/usr/local/zookeeper-3.4.6/data/log
# 端口号
clientPort=2181
# 集群节点和服务端口配置
server.1=hadoop-slave1:2888:3888
server.2=hadoop-slave2:2888:3888
server.3=hadoop-slave3:2888:3888

创建zookeeper的数据存储目录和日志存储目录

cd /usr/local/zookeeper-3.4.6
mkdir -p data/log

在data目录中创建一个文件myid,输入内容为1
echo "1" >> data/myid
修改zookeeper的日志输出路径(注意CDH版与原生版配置文件不同)
sudo nano bin/zkEnv.sh

if [ "x${ZOO_LOG_DIR}" = "x" ]
then
   ZOO_LOG_DIR="$ZOOKEEPER_HOME/logs"
fi
if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
   ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
fi

修改zookeeper的日志配置文件
sudo nano conf/log4j.properties

zookeeper.root.logger=INFO,ROLLINGFILE
log4j.appender.ROLLINGFILE=org.apache.log4j.DailyRollingFileAppender

创建日志目录
sudo mkdir logs
将这个zookeeper-3.4.6的目录复制到其他的两个节点上,并修改他们的myid为2和3。
然后使用bin目录下的zkServer.sh start分别启动三个zookeeper,按1,2,3的顺序。使用jps命令查看,若有QuorumPeerMain则说明服务正常启动,没有的话,使用zkServer.sh start-foreground查看一下哪里出了问题。

我在安装过程中遇到的问题

  1. zookeeper启动不了
    使用sudo ./zkServer.sh start-foreground运行zookeeper,显示line 131:exec java: not found
    解决办法:
    cd /usr/local
    sudo chown –R hadoop-sna zookeeper-3.4.6
    sudo chgrp –R hadoop-sna zookeeper-3.4.6
    
    改一下用户权限即可(我觉得这是我掉进的一个很有意义的坑。。。)
  2. 打开logs文件夹里面的zookeeper.log显示connection refused错误
    原因:一般来说这是配置的问题,我出现这个问题的主要原因是,我在zoo.cfg中写了三个server,但是只在server1上启动zkServer.sh所以会出现connection refused。
    事实上只在一个机器上启动zookeeper时,使用zkServer.sh status查看状态时,会看到的错误,但是这并不是说明你的zookeeper有问题,只是那两个还没启动好而已,当3台机器的zookeeper都启动后,3台机器会自动进行投票,选出一个leader两个follower,此时再用zkServer.sh status查看状态的时候就可以看到这台机器是leader还是follower了。

你可能感兴趣的:(zookeeper集群的搭建)