数据平台安装配置-Zookeeper

ZooKeeper 不存在明显的 master/slave 关系, 如果 leader 出现故障, 剩下的 follower 会从他们之中选出一个新的 leader. 各个 zk 服务器没有主从关系, 需要单独启动, 它们之间通过TCP端口来交换数据。

Zookeeper 安装


解压压缩文件到 ~/workspace 下

修改环境变量

1
2
3
4
$ vim ~/.bashrc
export ZOO_KEEPER_HOME=/home/hadoop/workspace/zookeeper-3.4.6
export CLASSPATH=.:$ZOO_KEEPER_HOME/lib:$CLASSPATH
export PATH=$ZOO_KEEPER_HOME/bin:$PATH

配置生效:

1
source ~/.bashrc

修改 ZooKeeper 配置

配置文件在 ~/workspace/zookeeper-3.4.6/

1
2
3
cd ~/workspace/zookeeper-3.4.6/conf #进入zookeeper 配置目录
cp zoo_sample.cfg zoo.cfg #从配置模板复制
vim zoo.cfg #添加配置内容

  1. zoo.cfg 配置
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    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=/home/data/zookeeper
    # the port at which the clients will connect
    clientPort=2181
    server.1=h16:2888:3888
    server.2=h17:2888:3888
    server.3=h18:2888:3888

配置说明:

1
2
3
4
5
6
7
8
9
10
tickTime=2000:毫秒级的基本时间单位,其他时间如心跳/超时等都为该单位时间的整数倍
initLimit=10:tickTime的倍数,表示leader选举结束后,followers与leader同步需要的时间, leader的数据非常多时或followers比较多,则该值应该适当大一些;
syncLimit=5:tickTime的倍数,表示follower和observer与leader交互时的最大等待时间, 只不过是在与leader同步完毕之后,正常请求转发或ping等消息交互时的超时时间。
clientPort=2181:监听客户端连接的服务端口
electionAlg=3:领导选举算法,默认3。(No Java system property)
dataDir=/data:内存数据库快照地址,事务日志地址(除非由 dataLogDir 另行指定)
dataLogDir=/datalog:事务日志目录,可以使用专用的设备,以避免事务日志与快照之间的竞争。
第一个 nnnnn 是与 leader 通讯使用,第二个 nnnnn 是选举 leader 使用,
electionAlg 等于 0 时不需要此参数. (No Java system property)
server.x=[hostname]:nnnnn[:nnnnn], etc

集群配置中, 在 dataDir 中必须建一个 myid 文件, 里面存放一个唯一数字(1-255), 作为服务器的标示:

1
2
3
h16:/home/hadoop/workspace/zookeeper-3.4.6> echo "1" >> /home/data/zookeeper/myid
h17:/home/hadoop/workspace/zookeeper-3.4.6> echo "2" >> /home/data/zookeeper/myid
h18:/home/hadoop/workspace/zookeeper-3.4.6> echo "3" >> /home/data/zookeeper/myid

Zookeeper 启动


在所有服务器上启动 zookeeper:

1
2
3
h16:/home/hadoop/workspace/zookeeper-3.4.6/bin/zkServer.sh start
h17:/home/hadoop/workspace/zookeeper-3.4.6/bin/zkServer.sh start
h18:/home/hadoop/workspace/zookeeper-3.4.6/bin/zkServer.sh start

验证启动情况:

1
2
3
4
h16:/home/hadoop/workspace/zookeeper-3.4.6>bin/zkServer.sh status
JMX enabled by default
Using config: /home/hadoop/workspace/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower

Java客户端连接Zookeeper集群


解压zookeeper压缩包, 直接使用java客户端连接 ZooKeeper 集群中的机器:

1
./bin/zkCli.sh -server h16:2181

参考资料:


在CentOS上安装ZooKeeper集群

zookeeper 集群安装和配置