• zookeeper环境搭建.md


    zookeeper

    简介

    ZooKeeper是一个为分布式应用所设计的分布的、开源的协调服务,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以Standalone模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。

    集群角色

    • 领导者(leader),用于负责进行投票的发起和决议,更新系统状态。
    • 学习者(learner),包括跟随者(follower)和观察者(observer)。

    其中follower用于接受客户端请求并想客户端返回结果,在选主过程中参与投票。
    而observer可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度。

    安装

    jdk安装

    通用二进制包安装:

    # tar xf jdk-7u79-linux-x64.tar.gz -C /usr/local/
    # ln -sv /usr/local/jdk1.7.0_79 /usr/local/java
    "/usr/local/java" -> "/usr/local/jdk1.7.0_79"
    # cat /etc/profile.d/java.sh 
    export JAVA_HOME=/usr/local/java
    export JAVA_CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export PATH=$PATH:$JAVA_HOME/bin
    # . /etc/profile.d/java.sh
    # java -version
    java version "1.7.0_79"
    OpenJDK Runtime Environment (rhel-2.5.5.4.el6-x86_64 u79-b14)
    OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)
    

    yum 安装:

    # yum install -y java-1.7.0-openjdk
    

    zookeeper安装

    下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/

    # tar xf zookeeper-3.4.10.tar.gz -C /opt/
    # cd /opt/
    # chown -R root.root zookeeper-3.4.10/
    

    单实例配置

    # cd /opt/zookeeper-3.4.10/conf/
    # cp zoo_sample.cfg zoo.cfg
    # mkdir /data/zookeeper/log -p
    # grep -v '^#' zoo.cfg 
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/data/zookeeper
    dataLogDir=/data/zookeeper/log
    clientPort=2181
    

    配置参数说明

    • tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
    • initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒。
    • syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒
    • dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
    • dataLogDir:这个操作将管理机器把事务日志写入到“ dataLogDir ”所指定的目录,而不是“ dataDir ”所指定的目录。这将允许使用一个专用的日志设备并且帮助我们避免日志和快照之间的竞争。
    • clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。

    启动

    # /opt/zookeeper-3.4.10/bin/zkServer.sh start
    ZooKeeper JMX enabled by default
    Using config: /opt/zookeeper-3.4.10/bin/../conf/zoo.cfg
    Starting zookeeper ... STARTED
    

    查看状态

    # /opt/zookeeper-3.4.10/bin/zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /opt/zookeeper-3.4.10/bin/../conf/zoo.cfg
    Mode: standalone
    

    连接

    # /opt/zookeeper-3.4.10/bin/zkCli.sh -server  localhost:2181
    Connecting to localhost:2181
    ......
    [zk: localhost:2181(CONNECTED) 0]
    

    伪集群搭建

    配置前请将单实例的zookeeper给关闭。

    # grep -v '^#' z1.cfg 
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/data/zookeeper/z1/
    clientPort=2181
    server.1=127.0.0.1:2222:2223
    server.2=127.0.0.1:3333:3334
    server.3=127.0.0.1:4444:4445
    # grep -v '^#' z2.cfg 
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/data/zookeeper/z2/
    clientPort=2182
    server.1=127.0.0.1:2222:2223
    server.2=127.0.0.1:3333:3334
    server.3=127.0.0.1:4444:4445
    # grep -v '^#' z3.cfg 
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/data/zookeeper/z3/
    clientPort=2183
    server.1=127.0.0.1:2222:2223
    server.2=127.0.0.1:3333:3334
    server.3=127.0.0.1:4444:4445
    # mkdir -p /data/zookeeper/z{1,2,3}
    
    • server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。

    除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面就有一个数据就是 A 的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个 server。

    # echo 1>/data/zookeeper/z1/myid
    # echo 2>/data/zookeeper/z2/myid
    # echo 3>/data/zookeeper/z3/myid
    

    启动

    # ./zkServer.sh start z1.cfg
    ZooKeeper JMX enabled by default
    Using config: /opt/zookeeper-3.4.10/bin/../conf/z1.cfg
    Starting zookeeper ... STARTED
    # ./zkServer.sh start z2.cfg
    ZooKeeper JMX enabled by default
    Using config: /opt/zookeeper-3.4.10/bin/../conf/z2.cfg
    Starting zookeeper ... STARTED
    # ./zkServer.sh start z3.cfg
    ZooKeeper JMX enabled by default
    Using config: /opt/zookeeper-3.4.10/bin/../conf/z3.cfg
    Starting zookeeper ... STARTED
    

    状态查看

    # ./zkServer.sh status z1.cfg
    ZooKeeper JMX enabled by default
    Using config: /opt/zookeeper-3.4.10/bin/../conf/z1.cfg
    Mode: follower
    # ./zkServer.sh status z2.cfg
    ZooKeeper JMX enabled by default
    Using config: /opt/zookeeper-3.4.10/bin/../conf/z2.cfg
    Mode: leader
    # ./zkServer.sh status z3.cfg
    ZooKeeper JMX enabled by default
    Using config: /opt/zookeeper-3.4.10/bin/../conf/z3.cfg
    Mode: follower
    

    四字命令

    ZooKeeper 支持某些特定的四字命令字母与其的交互。它们大多是查询命令,用来获取 ZooKeeper 服务的当前状态及相关信息。用户在客户端可以通过 telnet 或 nc 向 ZooKeeper 提交相应的命令。 ZooKeeper 常用四字命令见下表 :

    四字命令 功能描述
    conf 输出相关服务配置的详细信息。
    cons 列出所有连接到服务器的客户端的完全的连接/会话的详细信息。包括“接受 / 发送”的包数量、会话 id 、操作延迟、最后的操作执行等等信息。
    dump 列出未经处理的会话和临时节点。
    envi 输出关于服务环境的详细信息(区别于 conf 命令)。
    reqs 列出未经处理的请求
    ruok 测试服务是否处于正确状态。如果确实如此,那么服务返回“imok ”,否则不做任何相应。
    stat 输出关于性能和连接的客户端的列表。
    wchs 列出服务器 watch 的详细信息。
    wchc 通过 session 列出服务器 watch 的详细信息,它的输出是一个与watch 相关的会话的列表。
    wchp 通过路径列出服务器 watch 的详细信息。它输出一个与 session相关的路径。

    使用举例

    # echo conf |nc 192.168.197.61 2181
    clientPort=2181
    dataDir=/data/zookeeper/z1/version-2
    dataLogDir=/data/zookeeper/z1/version-2
    tickTime=2000
    maxClientCnxns=60
    minSessionTimeout=4000
    maxSessionTimeout=40000
    serverId=1
    initLimit=10
    syncLimit=5
    electionAlg=3
    electionPort=2223
    quorumPort=2222
    peerType=0
    

    命令行操作

    [zk: 192.168.197.61:2181(CONNECTED) 0] ls /
    [zookeeper]
    [zk: 192.168.197.61:2181(CONNECTED) 1] create /zk myDate
    Created /zk
    [zk: 192.168.197.61:2181(CONNECTED) 2] ls /
    [zk, zookeeper]
    [zk: 192.168.197.61:2181(CONNECTED) 3] get /zk
    myDate
    cZxid = 0x300000002
    ctime = Thu May 18 18:36:41 CST 2017
    mZxid = 0x300000002
    mtime = Thu May 18 18:36:41 CST 2017
    pZxid = 0x300000002
    cversion = 0
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 6
    numChildren = 0
    [zk: 192.168.197.61:2181(CONNECTED) 4] set /zk yourDate
    cZxid = 0x300000002
    ctime = Thu May 18 18:36:41 CST 2017
    mZxid = 0x300000003
    mtime = Thu May 18 18:37:10 CST 2017
    pZxid = 0x300000002
    cversion = 0
    dataVersion = 1
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 8
    numChildren = 0
    [zk: 192.168.197.61:2181(CONNECTED) 5] get /zk         
    yourDate
    cZxid = 0x300000002
    ctime = Thu May 18 18:36:41 CST 2017
    mZxid = 0x300000003
    mtime = Thu May 18 18:37:10 CST 2017
    pZxid = 0x300000002
    cversion = 0
    dataVersion = 1
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 8
    numChildren = 0
    [zk: 192.168.197.61:2181(CONNECTED) 6] delete /zk
    [zk: 192.168.197.61:2181(CONNECTED) 7] ls /
    [zookeeper]
    
  • 相关阅读:
    《我是一只IT小小鸟》
    实现对字符串的反转输出与句子的反转输出
    7.13学习记录
    CentOS 7 不能连接网路的解决方法
    Xshell连接linux服务器不成功的乌龙问题
    Python基础(二)数据类型
    Python基础(一)
    UML精粹3
    UML精粹2
    UML精粹1
  • 原文地址:https://www.cnblogs.com/cuchadanfan/p/6874953.html
Copyright © 2020-2023  润新知