zoukankan      html  css  js  c++  java
  • Zookeeper-3.5.8集群搭建

    大数据技术有着众多系统需要分布式协调服务,比如Hadoop、Kafka系统,其中主从切换、维护命名空间、以及分布式协调通知等场景,需要保证数据的分布式一致性。

    Zookeeper是业界最著名的分布式协调系统,下文中简称为ZK。ZK系统的实现基于ZAB协议(Zookeeper Atomic Broadcast),ZAB协议的核心定义了那些会改变Zookeeper服务器数据状态的事务请求的处理方式。由于ZK实现的原理比较复杂,这里不再展开,感兴趣的读者可以阅读《从Paxos到Zookeeper分布式一致性原理与实践》这本书。

    本文将重点讨论如何搭建一套稳定的ZK集群,合理地配置ZK参数,以及更高效地使用新版本的特性。希望能给初学者带来一些参考,也欢迎大家在留言区讨论~~~

    1. 初始化各个zk节点基础环境

    • 安装jdk
    下载jdk1.8.0_144,并解压到目录/usr/local/ 
    
    • 关闭swap
    #临时生效
    swapoff -a
    
    #永久生效
    echo 'swapoff -a' >> /etc/rc.d/rc.local
    

    2. 中转机配置一份zookeeper

    从ZK官网下载zookeeper-3.5.8到中转机,下载完成后解压tar包。这里要注意安装的版本号,根据Apache版本命名规范,x.y.z的y表示增加重要功能的版本号,z表示修复bug后的版本号,因此要权衡y和z的版本号。

    笔者考虑到3.5是目前比较新的版本,且当前3.5最新的z版本号为8,之前的一些bug已经被修复,相对比较稳定,因此选择了3.5.8版本。

    修改zk配置文件

    • 修改zoo.cfg配置文件
    cp conf/zoo_sample.cfg conf/zoo.cfg
    
    #追加或修改以下配置
    vim conf/zoo.cfg
    # 配置数据保存目录
    dataDir=/data0/zookeeper
    # 只保留10个快照文件(用于自动清除历史数据)
    autopurge.snapRetainCount=10
    # 每隔1小时扫描一次数据目录
    autopurge.purgeInterval=1
    
    server.1=zk1.bjehp.com:2888:3888
    server.2=zk2.bjehp.com:2888:3888
    server.3=zk3.bjehp.com:2888:3888
    server.4=zk4.bjehp.com:2888:3888
    server.5=zk5.bjehp.com:2888:3888
    
    # 把所有的四字命令加入白名单
    4lw.commands.whitelist=*
    
    • 修改zookeeper的日志目录
    vim bin/zkEnv.sh
    ZOO_LOG_DIR="/var/log/zookeeper"
    ZOO_LOG4J_PROP="INFO,ROLLINGFILE"    # 用于滚动清除系统日志
    JAVA_HOME="/usr/local/jdk1.8.0_144"
    
    • 添加jvm内存配置
    vim conf/java.env
    SERVER_JVMFLAGS="-Xms2g -Xmx4g $SERVER_JVMFLAGS"  # 配置zk的JVM内存参数
    
    • 修改log4j
    vim conf/log4j.properties
    zookeeper.log.maxfilesize=64MB    # 每64MB迭代一个系统日志文件
    zookeeper.log.maxbackupindex=10   # 只保留10个系统日志文件
    
    • 配置jmx端口
    vim bin/zkServer.sh
    ZOOMAIN="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=$JMXLOCALONLY -Dcom.sun.management.jmxremote.port=6999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false org.apache.zookeeper.server.quorum.QuorumPeerMain" 
    

    3. 安装并启动zk服务

    登录各个zk节点,执行以下操作

    安装

    拷贝中转机的zookeeper-3.5.8安装包到/usr/local目录
    
    mkdir /data0/zookeeper  
    mkdir /var/log/zookeeper
    
    #对每个zk节点配置相应的id数字,id取值范围1~255,这里id要与zoo.cfg配置对应
    vim /data0/zookeeper/myid
    

    启动并验证

    /usr/local/apache-zookeeper-3.5.8-bin/bin/zkServer.sh start
    
    ll /var/log/zookeeper/
    ll /data0/zookeeper/
    /usr/local/apache-zookeeper-3.5.8-bin/bin/zkServer.sh status
    tailf /var/log/zookeeper/zookeeper-*.log
    
    echo mntr|nc zk.node 2181
    
    zk节点全部启动后,会有一个leader节点,其余四个为follower节点。
    

    停止

    /usr/local/apache-zookeeper-3.5.8-bin/bin/zkServer.sh stop
    

    配置监控报警

    • 磁盘/内存/cpu
    • 端口存活
    • 服务是否正常

    4. 总结

    本文介绍了搭建zookeeper-3.5.8集群的详细步骤,包括先关闭swap(zk需要保证数据的一致性,写入磁盘会破坏数据的顺序,数据写入磁盘对于zk来说是个灾难),配置自动清除数据文件和日志文件,配置JMX便于日后采集metric排查问题,最后介绍了zk启停操作和验证服务是否正常的命令。

    参考资料

    1. 《从Paxos到Zookeeper分布式一致性原理与实践》
    2. https://zookeeper.apache.org/
  • 相关阅读:
    JQuery
    a:hover伪类在ios移动端浏览器内无效的解决方法
    git rebase 过程中遇到冲突该怎么解决?
    git
    vue单文件中scoped样式如何穿透?
    微信小程序-怎么获取当前页面的url
    es6 class 中 constructor 方法 和 super
    如何将svg图标快速转换成字体图标?
    JavaWeb三大组件之一Filter知识总结
    Session的引入以及Cookie的不足
  • 原文地址:https://www.cnblogs.com/ljhbjehp/p/13888412.html
Copyright © 2011-2022 走看看