• Zookeeper(一)-- 集群环境部署


    Zookeeper简述

    Zookeeper是一个开源的分布式应用程序协调服务,用于维护配置信息,命名,提供分布式同步和提供组服务。Zookeeper向使用者提供简单的API用于处理复杂的分布式协调问题。作用详解:

    • 名命服务:按名称标识集群中的节点
    • 配置管理:加入节点最新或者最近的配置信息
    • 集群管理:实时的在集群或者节点状态中加入/离开节点
    • 选举算法:选举一个节点作为协调目的的leader
    • 锁定和同步服务 - 在修改数据的同时锁定数据。此机制可帮助你在连接其他分布式应用程序(如Apache HBase)时进行自动故障恢复
    • 高度可靠的数据注册表 - 即使在一个或几个节点关闭时也可以获得数据
      官方网站:https://zookeeper.apache.org/
      镜像地址:http://mirror.bit.edu.cn/apache/zookeeper/

    集群的搭建

    服务端准备

    zookeeper的er简述
    Zookeeper是一个开源的分布式应用程序协调服务,用于维护配置信息,命名,提供分布式同步和提供组服务。Zookeeper向使用者提供简单的API用于处理复杂的分布式协调问题。作用详解:

    • 名命服务:按名称标识集群中的节点
    • 配置管理:加入节点最新或者最近的配置信息
    • 集群管理:实时的在集群或者节点状态中加入/离开节点
    • 选举算法:选举一个节点作为协调目的的leader
    • 锁定和同步服务 - 在修改数据的同时锁定数据。此机制可帮助你在连接其他分布式应用程序(如Apache HBase)时进行自动故障恢复
    • 高度可靠的数据注册表 - 即使在一个或几个节点关闭时也可以获得数据
      官方网站:https://zookeeper.apache.org/
      镜像地址:http://mirror.bit.edu.cn/apache/zookeeper/

    集群的搭建

    环境准备

    1.机器数量
    zookeeper的服务器应设置为奇数个这是由于zookeeper的容错机制,即zookeeper集群中正常运行的机器的数量大于宕机的数量,那么zookeeper即可以正常的提供服务。所以三台机器可以允许宕机一台,而两台机器宕机一台后无法工作。五台机器可以宕机两台,而六台机器也只能宕机两台,所以没有必要使用六台,故而一般都部署奇数台。
    2.java环境
    运行zookeeper需要准备java环境,并且设置环境变量。

    部署Zookeeper

    1.在镜像节点中下载所需版本的压缩包
    2.解压到指定的目录下

    [zookeeper@VM_0_10_centos ~]$ ll
    total 35824
    drwxrwxr-x  3 zookeeper zookeeper     4096 Aug 30 09:04 data
    drwxrwxr-x  3 zookeeper zookeeper     4096 Aug 27 16:07 logs
    drwxr-xr-x 10 zookeeper zookeeper     4096 Mar 27  2018 zookeeper-3.4.12
    -rw-r--r--  1 root      root      36667596 Aug 20 09:03 zookeeper-3.4.12.tar.gz
    

    3.修改配置文件
    在conf目录下原本存在zoo_sample.cfg,应将此配置文件重命名为zoo.conf,并修改其中相应的配置项:
    Zookeeper官网的doc文件中给出了配置文件的各项的解释与意义
    https://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_minimumConfiguration
    最低的集群配置可以如下所示

    # The number of milliseconds of each tick
    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
    dataDir=/app/zookeeper/data
    dataLogDir=/app/zookeeper/logs
    # the port at which the clients will connect
    clientPort=2181
    server.1=0.0.0.0:2888:3888
    server.2=*.*.*.*:2888:3888
    server.3=*.*.*.*:2888:3888
    

    tickTime:
    Zookeeper的时间单元。Zookeeper中所有时间都是以这个(2000)时间单元的整数倍去配置的。例如,session的最小超时时间是2tickTime,而session的最大超时时间是20被的tickTime,在3.3.0版本后,服务端的配置引入了minSessionTimeout 和maxSessionTimeout ,这两个参数将限制会话连接的时间,客户端中设置的timeout将上传给zookeeper的服务,而服务端将会比对这个时间与上面两参数的大小,如果在其中间,客户端参数生效,如果超出了上限(maxSessionTimeout)则会以maxSessionTimeout作为会话的timeout,同理低于下限也会以配置中的minSessionTimeout为准。如果在没有设置这两个参数的情况下,就会以[2tickTime,20*tickTime]为上下界限。tickTime的默认配置值是2000,如果说tickTime配置项都没有的话,缺省值是3000.在客户端的连接中要着重注意这几个参数(单位:毫秒)

    minSessionTimeout : (No Java system property) New in 3.3.0: the minimum session timeout in milliseconds that the server will allow the client to negotiate. Defaults to 2 times the tickTime.
    
    maxSessionTimeout : (No Java system property) New in 3.3.0: the maximum session timeout in milliseconds that the server will allow the client to negotiate. Defaults to 20 times the tickTime.
    

    initLimit:
    Observer和Follower启动时,从Leader同步最新数据时,Leader允许initLimit * tickTime的时间内完成。如果同步的数据量很大,可以相应的把这个值设置的大一些。默认值为10
    syncLimit:
    表示Follower和Observer与Leader交互时的最大等待时间,只不过是在与leader同步完毕之后,进入正常请求转发或ping等消息交互时的超时时间。
    dataDir:
    事务日志和数据快照都写在该目录下。同时节点号myid也应该存储在dataDir的目录下
    dataLogDir:
    用来设置事务日志的路径
    clientPort:
    zookeeper客户端连接的端口号
    server.x:
    server.x=[hostname]:nnnnn[:nnnnn],这里x代表的是节点号,应该与myid中的数字表示一致。hostname为服务节点的ip,右边可以配置两个端口号,用于数据和通信同步以及Leader选举中的投票通信。注意,本机的ip应该设置为0.0.0.0.:nnnn:nnnn
    4.创建dataDir以及dataLogDir
    注意创建的路径及目录名称应该与配置文件中的保持一致

    [zookeeper@VM_0_10_centos ~]$ pwd
    /app/zookeeper
    [zookeeper@VM_0_10_centos ~]$ mkdir data
    
    

    在data目录下创建myid,与zoo.cfg中配置的server.x的标号保持一致

    集群启动

    1.启动指令
    启动脚本应该在bin目录下

    [zookeeper@VM_0_10_centos bin]$ pwd
    /app/zookeeper/zookeeper-3.4.12/bin
    [zookeeper@VM_0_10_centos bin]$ ll
    total 172
    -rwxr-xr-x 1 zookeeper zookeeper    232 Mar 27  2018 README.txt
    -rwxr-xr-x 1 zookeeper zookeeper   1937 Mar 27  2018 zkCleanup.sh
    -rwxr-xr-x 1 zookeeper zookeeper   1056 Mar 27  2018 zkCli.cmd
    -rwxr-xr-x 1 zookeeper zookeeper   1534 Mar 27  2018 zkCli.sh
    -rwxr-xr-x 1 zookeeper zookeeper   1759 Mar 27  2018 zkEnv.cmd
    -rwxr-xr-x 1 zookeeper zookeeper   2696 Mar 27  2018 zkEnv.sh
    -rwxr-xr-x 1 zookeeper zookeeper   1089 Mar 27  2018 zkServer.cmd
    -rwxr-xr-x 1 zookeeper zookeeper   6773 Mar 27  2018 zkServer.sh
    

    启动服务

    [zookeeper@VM_0_10_centos bin]$ ./zkServer.sh start
    

    2.注意事项
    最好按照myid有小到大的顺序启动服务节点
    3.查看状态

    [zookeeper@VM_0_10_centos bin]$ ./zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /app/zookeeper/zookeeper-3.4.12/bin/../conf/zoo.cfg
    Mode: leader
    

    使用./zkServer.sh status查看启动状态,如果集群启动成功,会出现以上的(leader节点)状态,如果是follwer节点,则是

    [app@ecs-s6-medium-2-linux-20190828164230 bin]$ ./zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /app/zookeeper/zookeeper-3.4.12/bin/../conf/zoo.cfg
    Mode: follower
    

    4.错误情况查看
    如果查看服务器的启动状态是失败的,需要查看错误的原因

    [zookeeper@vultr bin]$ ./zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /app/zookeeper/zookeeper-3.4.12/bin/../conf/zoo.cfg
    Error contacting service. It is probably not running.
    

    可以在bin目录下的zookeeper.out文件下查看

    -rw-rw-r-- 1 zookeeper zookeeper 23615 Aug 28 16:27 zookeeper.out
    
  • 相关阅读:
    java中的堆、栈、常量池
    java中int和Integer的区别
    python linecache模块读取文件的方法
    Python 字符串中 startswith()方法
    Python中的filter()函数的用法
    python sort、sorted高级排序技巧
    二级指针内存模型(一)
    Linux下多线程模拟停车场停车
    linux线程操作
    C语言实现多线程排序
  • 原文地址:https://www.cnblogs.com/limushu/p/11458633.html
Copyright © 2020-2023  润新知