美文网首页ZooKeeper
ZooKeeper集群的搭建

ZooKeeper集群的搭建

作者: 李程鹏 | 来源:发表于2018-01-15 00:46 被阅读0次

    ZooKeeper集群的搭建

    ZooKeeper是一个能为分布式应用程序提供主从协调服务,少量数据的存储与管理的技术。

    1 前提准备

    • 操作系统:CentOS6.6
    • ZooKeeper安装包:zookeeper-3.4.5.tar.gz

    2 集群架构

    ZooKeeper01 ZooKeeper02 ZooKeeper03
    192.168.1.4 192.168.1.5 192.168.1.6

    3 搭建集群

    3.1 解压安装包

    [root@ZooKeeper01 lcp]# pwd
    /home/lcp
    [root@ZooKeeper01 lcp]# mkdir zookeeper
    [root@ZooKeeper01 lcp]# tar -zxf software/zookeeper-3.4.5.tar.gz -C zookeeper/
    

    3.2 修改配置文件名

    [root@ZooKeeper01 conf]# pwd
    /home/lcp/zookeeper/zookeeper-3.4.5/conf
    [root@ZooKeeper01 conf]# ll
    total 12
    -rw-r--r--. 1 501 games  535 Sep 30  2012 configuration.xsl
    -rw-r--r--. 1 501 games 2161 Sep 30  2012 log4j.properties
    -rw-r--r--. 1 501 games  808 Sep 30  2012 zoo_sample.cfg
    [root@ZooKeeper01 conf]# mv zoo_sample.cfg zoo.cfg
    

    3.3 设置数据存储路径

    配置文件中默认的数据存储路径是“/tmp/zookeeper”,因为tmp目录下的数据在Linux系统重启后会被清空,所以必须要修改它。一般情况下,我们会将数据目录设置在zookeeper的安装目录下。

    # the directory where the snapshot is stored.
    # do not use /tmp for storage, /tmp here is just 
    # example sakes.
    dataDir=/home/lcp/zookeeper/zookeeper-3.4.5/data
    

    3.4 设置集群信息

    在配置文件“zoo.cfg”的最底下加上集群信息:

    server.1=192.168.1.4:2888:3888
    server.2=192.168.1.5:2888:3888
    server.3=192.168.1.6:2888:3888
    
    • 1,2,3:ZooKeeper服务器标识ID
    • 2888:主从节点通信端口
    • 3888:主从节点选举端口

    zoo.cfg配置文件的最终效果:


    01-配置文件.png

    3.5 创建数据存储路径

    [root@ZooKeeper01 zookeeper-3.4.5]# pwd
    /home/lcp/zookeeper/zookeeper-3.4.5
    [root@ZooKeeper01 zookeeper-3.4.5]# mkdir data
    

    3.6 创建ZooKeeper标识文件

    进入数据存储路径,创建一个文件,名为“myid”,内容为zoo.cfg配置文件中指定的服务器标识ID。

    第一台ZooKeeper服务器的myid文件的内容为“1”,第二台为“2”,第三台为“3”。

    [root@ZooKeeper01 zookeeper-3.4.5]# cd data/
    [root@ZooKeeper01 data]# pwd
    /home/lcp/zookeeper/zookeeper-3.4.5/data
    [root@ZooKeeper01 data]# echo 1 > myid
    [root@ZooKeeper01 data]# ll
    total 4
    -rw-r--r--. 1 root root 2 Jan 11 08:39 myid
    [root@ZooKeeper01 data]# cat myid 
    1
    

    按照上面的六个步骤,依次到三台服务器上进行配置,以上就是ZooKeeper集群的搭建过程。

    4 启动集群

    4.1 启动指令

    将三台ZooKeeper服务器全部启动,启动指令如下:

    [root@ZooKeeper01 bin]# pwd
    /home/lcp/zookeeper/zookeeper-3.4.5/bin
    [root@ZooKeeper01 bin]# ./zkServer.sh start
    JMX enabled by default
    Using config: /home/lcp/zookeeper/zookeeper-3.4.5/bin/../conf/zoo.cfg
    Starting zookeeper ... STARTED
    

    4.2 查看服务进程

    [root@ZooKeeper01 bin]# jps
    24844 Jps
    24791 QuorumPeerMain
    [root@ZooKeeper01 bin]# netstat -nltp | grep 2181
    tcp        0      0 :::2181                     :::*                        LISTEN      24791/java
    

    QuorumPeerMain就是ZooKeeper的服务进程,这个进程监听着2181端口。

    4.3 查看集群主从情况

    ZooKeeper01:从节点(follower)

    [root@ZooKeeper01 bin]# ./zkServer.sh status
    JMX enabled by default
    Using config: /home/lcp/zookeeper/zookeeper-3.4.5/bin/../conf/zoo.cfg
    Mode: follower
    

    ZooKeeper02:主节点(leader)

    [root@ZooKeeper02 bin]# ./zkServer.sh status
    JMX enabled by default
    Using config: /home/lcp/zookeeper/zookeeper-3.4.5/bin/../conf/zoo.cfg
    Mode: leader
    

    ZooKeeper03:从节点(follower)

    [root@ZooKeeper03 bin]# ./zkServer.sh status
    JMX enabled by default
    Using config: /home/lcp/zookeeper/zookeeper-3.4.5/bin/../conf/zoo.cfg
    Mode: follower
    

    5 测试集群

    5.1 测试集群的数据同步

    使用命令行客户端登录集群:

    [root@ZooKeeper01 bin]# pwd
    /home/lcp/zookeeper/zookeeper-3.4.5/bin
    [root@ZooKeeper01 bin]# ./zkCli.sh
    

    在ZooKeeper01上写入一个测试数据(ZooKeeper使用文件树的形式管理数据):

    [zk: localhost:2181(CONNECTED) 6] create /test 100
    Created /test
    [zk: localhost:2181(CONNECTED) 7] ls /
    [test, zookeeper]
    [zk: localhost:2181(CONNECTED) 8] get /test
    100
    cZxid = 0x10000000c
    ctime = Thu Jan 11 10:03:32 PST 2018
    mZxid = 0x10000000c
    mtime = Thu Jan 11 10:03:32 PST 2018
    pZxid = 0x10000000c
    cversion = 0
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 3
    numChildren = 0
    

    分别到ZooKeeper02和ZooKeeper03上取这个数据,如果都能获取到“/test”的值(100),说明集群的数据同步功能没有问题。

    [zk: localhost:2181(CONNECTED) 2] get /test
    100
    cZxid = 0x10000000c
    ctime = Thu Jan 11 10:03:32 PST 2018
    mZxid = 0x10000000c
    mtime = Thu Jan 11 10:03:32 PST 2018
    pZxid = 0x10000000c
    cversion = 0
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 3
    numChildren = 0
    

    5.2 测试集群的高可用性

    ZooKeeper集群的特点:一半以上的节点存活时,集群才可以正常工作。

    当前集群的情况:

    • ZooKeeper01:从节点
    • ZooKeeper02:主节点
    • ZooKeeper03:从节点

    挂掉主节点ZooKeeper02:

    [root@ZooKeeper02 bin]# jps
    24976 Jps
    24720 QuorumPeerMain
    [root@ZooKeeper02 bin]# kill -9 24720
    

    这时候还有两个节点活着,数量大于集群总数的一半,我们查看一下这两个节点的状态:
    ZooKeeper01:

    [root@ZooKeeper01 bin]# ./zkServer.sh status
    JMX enabled by default
    Using config: /home/lcp/zookeeper/zookeeper-3.4.5/bin/../conf/zoo.cfg
    Mode: follower
    

    ZooKeeper03:

    [root@ZooKeeper03 bin]# ./zkServer.sh status
    JMX enabled by default
    Using config: /home/lcp/zookeeper/zookeeper-3.4.5/bin/../conf/zoo.cfg
    Mode: leader
    

    我们可以看到ZooKeeper通过选举机制将ZooKeeper03选举为新的主节点,集群依然正常工作。

    现在集群的情况:

    • ZooKeeper01:从节点
    • ZooKeeper02:挂了
    • ZooKeeper03:主节点

    我们再挂掉主节点ZooKeeper03:

    [root@ZooKeeper03 bin]# jps
    24718 QuorumPeerMain
    25047 Jps
    [root@ZooKeeper03 bin]# kill -9 24718
    

    这个时候只剩一个节点活着,数量小于集群总数的一半,理论上说,集群不会工作了。查看一下ZooKeeper01的状态:

    [root@ZooKeeper01 bin]# ./zkServer.sh status
    JMX enabled by default
    Using config: /home/lcp/zookeeper/zookeeper-3.4.5/bin/../conf/zoo.cfg
    Error contacting service. It is probably not running.
    

    果然,ZooKeeper01也不工作了。所以3台ZooKeeper组成的集群只能容错1台。

    相关文章

      网友评论

        本文标题:ZooKeeper集群的搭建

        本文链接:https://www.haomeiwen.com/subject/obtroxtx.html