zoukankan      html  css  js  c++  java
  • Zookeeper 部署 配置文件

    Zookeeper的搭建方式

    Zookeeper安装方式有三种,单机模式集群模式以及伪集群模式

    ■ 单机模式:      Zookeeper只运行在一台服务器上,适合测试环境;
    ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例;
    ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble)

            Zookeeper通过复制来实现高可用性,只要集合体中半数以上的机器处于可用状态,它就能够保证服务继续。
    为什么一定要超过半数呢?这跟Zookeeper的复制策略有关:zookeeper确保对znode 树的每一个修改都会被复制到集合体中超过半数的机器上。

    下载解压zookeeper包 zookeeper-3.4.11
    #cd zookeeper-3.4.11

    请检查服务器是否安装java环境!!!没有java环境 先安装java环境

    zookeeper 配置文件:

    ZK中的一个时间单元,以毫秒为单位
    # The number of milliseconds of each tick   

    tickTime=2000
    Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。
    Leader允许F在 initLimit 时间内完成这个工作

    # The number of ticks that the initial
    # synchronization phase can take
    initLimit=10
    如果Leader发出心跳包在syncLimit之后,还没有从Follower那里收到响应,那么就认为这个F已经不在线了

    # The number of ticks that can pass between
    # sending a request and getting an acknowledgement
    syncLimit=5
    存储快照文件snapshot的目录。默认情况下,事务日志也会存储在这里。
    建议同时配置参数dataLogDir, 事务日志的写性能直接影响zk性能。

    # the directory where the snapshot is stored.
    # do not use /tmp for storage, /tmp here is just
    # example sakes.
    dataDir=/tmp/zookeeper
    客户端连接server的端口,即对外服务端口

    # the port at which the clients will connect
    clientPort=2181
    单个客户端与单台服务器之间的连接数的限制,是ip级别的,默认是60,
    如果设置为0,那么表明不作任何限制

    # the maximum number of client connections.
    # increase this if you need to handle more clients
    #maxClientCnxns=60
    #
    # Be sure to read the maintenance section of the
    # administrator guide before turning on autopurge.
    #
    # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
    #
    这个参数和下面参数配合使用
    指定了需要保留的文件数目。默认是保留3个

    # The number of snapshots to retain in dataDir
    #autopurge.snapRetainCount=3
    3.4.0及之后版本,ZK提供了自动清理事务日志和快照文件的功能,
    这个参数指定了清理频率,单位是小时,需要配置一个1或更大的整数,
    0表示不开启自动清理功能

    # Purge task interval in hours
    # Set to "0" to disable auto purge feature
    #autopurge.purgeInterval=1

     

    下面是在最低配置要求中必须配置的参数:

    (1) client:监听客户端连接的端口。
    (2) tickTime:基本事件单元,这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,
         每隔tickTime时间就会发送一个心跳;最小 的session过期时间为2倍tickTime   
    (3)dataDir:存储内存中数据库快照的位置,如果不设置参数,更新食物的日志将被存储到默认位置。

    参数名

    说明

    clientPort

    客户端连接server的端口,即对外服务端口,一般设置为2181吧。

    dataDir

    存储快照文件snapshot的目录。默认情况下,事务日志也会存储在这里。建议同时配置参数dataLogDir, 事务日志的写性能直接影响zk性能。

    tickTime

    ZK中的一个时间单元。ZK中所有时间都是以这个时间单元为基础,进行整数倍配置的。例如,session的最小超时时间是2*tickTime。

    dataLogDir

    事务日志输出目录。尽量给事务日志的输出配置单独的磁盘或是挂载点,这将极大的提升ZK性能。  
    (No Java system property)

    globalOutstandingLimit

    最大请求堆积数。默认是1000。ZK运行的时候, 尽管server已经没有空闲来处理更多的客户端请求了,但是还是允许客户端将请求提交到服务器上来,以提高吞吐性能。当然,为了防止Server内存溢出,这个请求堆积数还是需要限制下的。  
    (Java system property:zookeeper.globalOutstandingLimit. )

    preAllocSize

    预先开辟磁盘空间,用于后续写入事务日志。默认是64M,每个事务日志大小就是64M。如果ZK的快照频率较大的话,建议适当减小这个参数。(Java system property:zookeeper.preAllocSize )

    snapCount

    每进行snapCount次事务日志输出后,触发一次快照(snapshot), 此时,ZK会生成一个snapshot.*文件,同时创建一个新的事务日志文件log.*。默认是100000.(真正的代码实现中,会进行一定的随机数处理,以避免所有服务器在同一时间进行快照而影响性能)(Java system property:zookeeper.snapCount )

    traceFile

    用于记录所有请求的log,一般调试过程中可以使用,但是生产环境不建议使用,会严重影响性能。(Java system property:? requestTraceFile )

    maxClientCnxns

    单个客户端与单台服务器之间的连接数的限制,是ip级别的,默认是60,如果设置为0,那么表明不作任何限制。请注意这个限制的使用范围,仅仅是单台客户端机器与单台ZK服务器之间的连接数限制,不是针对指定客户端IP,也不是ZK集群的连接数限制,也不是单台ZK对所有客户端的连接数限制。指定客户端IP的限制策略,这里有一个patch,可以尝试一下:http://rdc.taobao.com/team/jm/archives/1334(No Java system property)

    clientPortAddress

    对于多网卡的机器,可以为每个IP指定不同的监听端口。默认情况是所有IP都监听 clientPort 指定的端口。  New in 3.3.0

    minSessionTimeout

    maxSessionTimeout

    Session超时时间限制,如果客户端设置的超时时间不在这个范围,那么会被强制设置为最大或最小时间。默认的Session超时时间是在2 *  tickTime ~ 20 * tickTime 这个范围 New in 3.3.0

    fsync.warningthresholdms

    事务日志输出时,如果调用fsync方法超过指定的超时时间,那么会在日志中输出警告信息。默认是1000ms。(Java system property:  fsync.warningthresholdms )New in 3.3.4

    autopurge.purgeInterval

    在上文中已经提到,3.4.0及之后版本,ZK提供了自动清理事务日志和快照文件的功能,这个参数指定了清理频率,单位是小时,需要配置一个1或更大的整数,默认是0,表示不开启自动清理功能。(No Java system property)  New in 3.4.0

    autopurge.snapRetainCount

    这个参数和上面的参数搭配使用,这个参数指定了需要保留的文件数目。默认是保留3个。(No Java system property)  New in 3.4.0

    electionAlg

    在之前的版本中, 这个参数配置是允许我们选择leader选举算法,但是由于在以后的版本中,只会留下一种“TCP-based version of fast leader election”算法,所以这个参数目前看来没有用了,这里也不详细展开说了。(No Java system property)

    initLimit

    Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。Leader允许F在 initLimit 时间内完成这个工作。通常情况下,我们不用太在意这个参数的设置。如果ZK集群的数据量确实很大了,F在启动的时候,从Leader上同步数据的时间也会相应变长,因此在这种情况下,有必要适当调大这个参数了。(No Java system property)

    syncLimit

    在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。如果L发出心跳包在syncLimit之后,还没有从F那里收到响应,那么就认为这个F已经不在线了。注意:不要把这个参数设置得过大,否则可能会掩盖一些问题。(No Java system property)

    leaderServes

    默认情况下,Leader是会接受客户端连接,并提供正常的读写服务。但是,如果你想让Leader专注于集群中机器的协调,那么可以将这个参数设置为no,这样一来,会大大提高写操作的性能。(Java system property: zookeeper. leaderServes )。

    server.x=
    [hostname]:nnnnn[:nnnnn]

    这里的x是一个数字,与myid文件中的id是一致的。右边可以配置两个端口,第一个端口用于F和L之间的数据同步和其它通信第二个端口用于Leader选举过程中投票通信。  
    (No Java system property)

    group.x=
    nnnnn[:nnnnn]weight.x=nnnnn

    对机器分组和权重设置,可以  参见这里(No Java system property)

    cnxTimeout

    Leader选举过程中,打开一次连接的超时时间,默认是5s。(Java system property: zookeeper.  cnxTimeout )

    zookeeper.Digest
    AuthenticationProvider
    .superDigest

    ZK权限设置相关,具体参见  《  使用super  身份对有权限的节点进行操作 》  和  《 ZooKeeper   权限控制 

    skipACL

    对所有客户端请求都不作ACL检查。如果之前节点上设置有权限限制,一旦服务器上打开这个开头,那么也将失效。(Java system property:  zookeeper.skipACL )

    forceSync

    这个参数确定了是否需要在事务日志提交的时候调用 FileChannel .force来保证数据完全同步到磁盘。(Java system property: zookeeper.forceSync )

    jute.maxbuffer

    每个节点最大数据量,是默认是1M。这个限制必须在server和client端都进行设置才会生效。(Java system property: jute.maxbuffer )

     

    Zookeeper的伪集群模式搭建

            Zookeeper不但可以在单机上运行单机模式Zookeeper,而且可以在单机模拟集群模式 Zookeeper的运行,也就是将不同节点运行在同一台机器。
    我们知道伪分布模式下Hadoop的操作和分布式模式下有着很大的不同。
            比如,我们在实验的时候,可以先使用少量数据在集群伪分布模式下进行测试。当测试可行的时候,再将数据移植到集群模式进行真实的数据实验。这样不 但保证了它的可行性,同时大大提高了实验的效率。
            这种搭建方式,比较简便,成本比较低,适合测试和学习,如果你的手头机器不足,就可以在一台机器上部署了 3个server。

    注意事项

            在一台机器上部署了3个server,需要注意的是在集群为伪分布式模式下,我们使用的每个配置文档模拟一台机器,也就是说单台机器及上运行多个Zookeeper实例。
            但是,必须保证每个配置文档的各个端口号不能冲突,除了clientPort不同之外,dataDir也不同
    另外,还要在dataDir所对应的目录中创建myid文件来指定对应的Zookeeper服务器实例。

    ■ clientPort端口:如果在1台机器上部署多个server,那么每台机器都要不同的 clientPort,比如 server1是2181,server2是2182,server3是2183

    ■ dataDir和dataLogDir:dataDir和dataLogDir也需要区分下,将数据文件和日志文件分开存放,同时每个server的这两变量所对应的路径都是不同的

    ■ server.X和myid: server.X 这个数字就是对应,data/myid中的数字。在3个server的myid文件中分别写入了1,2,3
         那么每个server中的zoo.cfg都配 server.1 server.2,server.3就行了。
         因为在同一台机器上,后面连着的2个端口,3个server都不要一样,否则端口冲突

    部署步骤

    安装java

    1.创建三个server的数据目录和日志目录
    # mkdir -p /home/zoo1/data/
    # mkdir -p /home/zoo1/logs/

    # mkdir -p /home/zoo2/data/
    # mkdir -p /home/zoo2/logs/

    # mkdir -p /home/zoo3/data/
    # mkdir -p /home/zoo3/logs/

    2.创建三个server的 myid文件(在data目录中)并写入其编号
    # echo 1 > /home/zoo1/data/myid

    # echo 2 > /home/zoo2/data/myid

    # echo 3 > /home/zoo3/data/myid

    3.在zookeeper-3.4.11/conf 中创建三个配置文件 
        zoo1.cfg    zoo2.cfg    zoo3.cfg

       文件内容,注意修改dataDir、dataLogDir 的目录   还有 clientPort的端口也要修改

    zoo1 对应 2181端口 
    zoo2 对应 2182端口 
    zoo3 对应 2183端口 

    tickTime=2000
    initLimit=10
    syncLimit=5

      dataDir=/home/zoo1/data
      dataLogDir=/home/zoo1/logs

    clientPort=2181 

    server.1=localhost:2287:3387
    server.
    2=localhost:2288:3388
    server.
    3=localhost:2289:3389

    4.启动
    进入zookeeper/bin目录  执行以下命令,启动三个实例

    # ./zkServer.sh start zoo1.cfg

    # ./zkServer.sh start zoo2.cfg

    # ./zkServer.sh start zoo3.cfg


    查看状态和角色

    # ./zkServer.sh status zoo1.cfg
    ZooKeeper JMX enabled by default
    Using config: /usr/local/zookeeper/zookeeper-3.4.11/bin/../conf/zoo1.cfg
    Mode: follower

    # ./zkServer.sh status zoo2.cfg
    ZooKeeper JMX enabled by default
    Using config: /usr/local/zookeeper/zookeeper-3.4.11/bin/../conf/zoo2.cfg
    Mode: leader

    # ./zkServer.sh status zoo3.cfg
    ZooKeeper JMX enabled by default
    Using config: /usr/local/zookeeper/zookeeper-3.4.11/bin/../conf/zoo3.cfg
    Mode: follower

     

    Zookeeper的集群模式搭建

    为了获得可靠地Zookeeper服务,用户应该在一个机群上部署Zookeeper。
    只要机群上大多数的Zookeeper服务启动了,那么总的 Zookeeper服务将是可用的。
    集群的配置方式,在每台机器上conf/zoo.cfg配置文件的参数设置 相同

    部署步骤

    1.创建每台server的数据目录和日志目录
    # mkdir /home/zoo/data/
    # mkdir /home/zoo/logs/

    2.创建server的 myid文件(在data目录中)并写入其机器编号
    # echo 1 > /home/zoo1/data/myid

     

    3.在zookeeper-3.4.11/conf 中创建配置文件 
        # mkdir /usr/local/zookeeper-3.4.11/conf/zoo.cfg  

       文件内容,注意修改dataDir、dataLogDir 、clientPort、这三处

    tickTime=2000
    initLimit=10
    syncLimit=5

      dataDir=/home/zoo1/data
      dataLogDir=/home/zoo1/logs

    clientPort=2181 

    server.1=localhost:2287:3387
    server.2=localhost:2288:3388
    server.3=localhost:2289:3389

    4.启动

    分别在3台机器上启动ZooKeeper的Server:

    进入zookeeper/bin目录  执行以下命令,启动

    # ./zkServer.sh start zoo.cfg

  • 相关阅读:
    deeplearning.ai 卷积神经网络 Week 1 卷积神经网络
    deeplearning.ai 构建机器学习项目 Week 2 机器学习策略 II
    deeplearning.ai 构建机器学习项目 Week 1 机器学习策略 I
    deeplearning.ai 改善深层神经网络 week3 超参数调试、Batch Normalization和程序框架
    deeplearning.ai 改善深层神经网络 week2 优化算法
    deeplearning.ai 改善深层神经网络 week1 深度学习的实用层面
    cs231n spring 2017 lecture8 Deep Learning Networks
    cs231n spring 2017 lecture7 Training Neural Networks II
    cs231n spring 2017 lecture6 Training Neural Networks I
    cs231n spring 2017 Python/Numpy基础
  • 原文地址:https://www.cnblogs.com/centos2017/p/8125331.html
Copyright © 2011-2022 走看看