美文网首页
ZooKeeper集群

ZooKeeper集群

作者: 六弦极品 | 来源:发表于2019-01-17 18:06 被阅读0次

    ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效、高可用的分布式协调服务,提供了诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知和分布式锁等分布式基础服务。由于 ZooKeeper 便捷的使用方式、卓越的性能和良好的稳定性,被广泛地应用于诸如 Hadoop、HBase、Kafka 和 Dubbo 等大型分布式系统中。

    一个 ZooKeeper 集群通常由一组机器组成,一般 3 台以上就可以组成一个可用的 ZooKeeper 集群了。
    组成 ZooKeeper 集群的每台机器都会在内存中维护当前的服务器状态,并且每台机器之间都会互相保持通信。
    重要的一点是,只要集群中存在超过一半的机器能够正常工作,那么整个集群就能够正常对外服务。
    ZooKeeper 的客户端程序会选择和集群中的任意一台服务器创建一个 TCP 连接,而且一旦客户端和服务器断开连接,客户端就会自动连接到集群中的其他服务器。

    集群节点:

    server.1=10.4.4.151    Zookeeper节点标识文件myid值为1
    server.2=10.4.4.152    Zookeeper节点标识文件myid值为2
    server.3=10.4.4.153    Zookeeper节点标识文件myid值为3
    

    一. 准备 Java 运行环境

    1、下载安装jdk

    $ sudo useradd -g users -u 200 user_00
    $ sudo mkdir /usr/local/services/src -p
    $ sudo chown user_00.users  /usr/local/services -R
    $ sudo su - user_00
    $ cd /usr/local/services/src
    $ wget http://10.40.6.64/src/jdk-8u91-linux-x64.tar.gz
    $ tar xvf jdk-8u91-linux-x64.tar.gz -C ../
    

    2、配置 JAVA_HOME环境变量

    $ cat /etc/profile.d/java.sh
    export JAVA_HOME="/usr/local/services/jdk1.8.0_91"
    export CLASS_PATH="$JAVA_HOME/lib:$JAVA_HOME/jre/lib"
    export CLASSPATH="$JAVA_HOME/lib:$JAVA_HOME/jre/lib"
    export PATH="$JAVA_HOME/bin:$PATH"
    
    $ source /etc/profile
    $ java -version
    java version "1.8.0_91"
    Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
    Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
    

    二. ZooKeeper 包下载、安装及配置

    1、下载安装

    $ cd /usr/local/services/src
    $ wget https://apache.org/dist/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
    $ tar xvf zookeeper-3.4.13.tar.gz -C ../
    

    2、配置

    (1)、创建相关目录

    $ mkdir /data/zookeeper/sa/data -p
    $ mkdir /data/zookeeper/sa/datalog -p
    $ chown user_00.users /data/zookeeper/ -R
    $ chown user_00.users /data/zookeeper/ -R
    

    (2)、zoo.cfg 文件是zookeeper配置文件 在conf目录里。

    $ cat zoo.cfg
    tickTime=2000 #Zookeeper最小时间单元,单位毫秒(ms),默认值为3000
    initLimit=10 #Leader服务器等待Follower启动并完成数据同步的时间,默认值10,表示tickTime的10倍
    syncLimit=5 #Leader服务器和Follower之间进行心跳检测的最大延时时间,默认值5,表示tickTime的5倍
    dataDir=/data/zookeeper/sa/data   #Zookeeper服务器存储快照文件的目录,必须配置
    dataLogDir=/data/zookeeper/sa/datalog  #Zookeeper事物日志的存储路径,如果不配置这个那么事物日志会默认存储到dataDir制定的目录,这样会严重影响zk的性能,当zk吞吐量较大的时候,产生的事物日志、快照日志太多
    clientPort=2181      #服务器对外服务端口,一般设置为2181
    server.1=10.4.4.151:2888:3888
    server.2=10.4.4.152:2888:3888
    server.3=10.4.4.153:2888:3888
    

    集群模式的配置: server.id=host:port1:port2 。
    其中,id 被称为 Server ID,用来标识该机器在集群中的机器序号(在每台机器的 dataDir 目录下创建 myid 文件,文件内容即为该机器对应的 Server ID 数字)。host 为机器 IP,port1 用于指定 Follower 服务器与 Leader 服务器进行通信和数据同步的端口,port2 用于进行 Leader 选举过程中的投票通信。注意节点端口防火墙配置。

    (3)、myid文件和server.myid 在快照目录下存放的标识本台服务器的文件,他是整个zk集群用来发现彼此的一个重要标识。

    #10.4.4.151
    $ echo "1" > /data/zookeeper/sa/data/myid
    #10.4.4.152
    $ echo "2" > /data/zookeeper/sa/data/myid
    10.4.4.153
    $ echo "3" > /data/zookeeper/sa/data/myid
    

    (4)、log4j.properties文件是zk的日志输出文件 在conf目录里用java写的程序基本上有个共同点日志都用log4j,来进行管理。

    $ cat log4j.properties
    # Define some default values that can be overridden by system properties
    zookeeper.root.logger=INFO, CONSOLE #日志级别
    zookeeper.console.threshold=INFO #使用下面的console来打印日志
    zookeeper.log.dir=. #日志打印目录,是启动zookeeper的目录(建议设置统一的日志目录路径)
             ....
    

    (5)、zkEnv.sh和zkServer.sh文件:
    zkServer.sh 主的管理程序文件
    zkEnv.sh 是主要配置,zookeeper集群启动时配置环境变量的文件

    $ cat zookeeper-env.sh 
    #ZOO_LOG4J_PROP=INFO,ROLLINGFILE
    source /etc/profile
    export ZOO_LOG_DIR=/usr/local/services/zookeeper-3.4.13/logs
    export ZOOPIDFILE="${ZOO_LOG_DIR}"/zookeeper-server.pid
    export JVMFLAGS="-Xms3072m -Xmx3072m $JVMFLAGS"
    

    三、配置系统服务启动

    $ cat  /lib/systemd/system/zookeeper-sa.service
    [Unit]
    Description=Apache Zookeeper sa
    After=network.target
    
    [Service]
    Type=forking
    User=user_00
    Group=users
    ExecStart=/usr/local/services/zookeeper-3.4.13/bin/zkServer.sh start
    ExecStop=/usr/local/services/zookeeper-3.4.13/bin/zkServer.sh stop
    Restart=always
    RestartSec=20
    
    [Install]
    WantedBy=multi-user.target
    

    四、查看节点状态

    节点1
    $ /usr/local/services/zookeeper-3.4.13/bin/zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /usr/local/services/zookeeper-3.4.13/bin/../conf/zoo.cfg
    Mode: leader
    
    节点2
    /usr/local/services/zookeeper-3.4.13/bin/zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /usr/local/services/zookeeper-3.4.13/bin/../conf/zoo.cfg
    Mode: follower
    
    节点3
    /usr/local/services/zookeeper-3.4.13/bin/zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /usr/local/services/zookeeper-3.4.13/bin/../conf/zoo.cfg
    Mode: follower
    

    zk集群一般只有一个leader,多个follower,主一般是相应客户端的读写请求,而从主同步数据,当主挂掉之后就会从follower里投票选举一个leader出来。

    相关文章

      网友评论

          本文标题:ZooKeeper集群

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