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

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

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

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

  • 安装jdk
  1. 下载jdk1.8.0_144,并解压到目录/usr/local/
  • 关闭swap
  1. #临时生效
  2. swapoff -a
  3. #永久生效
  4. 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配置文件
  1. cp conf/zoo_sample.cfg conf/zoo.cfg
  2. #追加或修改以下配置
  3. vim conf/zoo.cfg
  4. # 配置数据保存目录
  5. dataDir=/data0/zookeeper
  6. # 只保留10个快照文件(用于自动清除历史数据)
  7. autopurge.snapRetainCount=10
  8. # 每隔1小时扫描一次数据目录
  9. autopurge.purgeInterval=1
  10. server.1=zk1.bjehp.com:2888:3888
  11. server.2=zk2.bjehp.com:2888:3888
  12. server.3=zk3.bjehp.com:2888:3888
  13. server.4=zk4.bjehp.com:2888:3888
  14. server.5=zk5.bjehp.com:2888:3888
  15. # 把所有的四字命令加入白名单
  16. 4lw.commands.whitelist=*
  • 修改zookeeper的日志目录
  1. vim bin/zkEnv.sh
  2. ZOO_LOG_DIR="/var/log/zookeeper"
  3. ZOO_LOG4J_PROP="INFO,ROLLINGFILE" # 用于滚动清除系统日志
  4. JAVA_HOME="/usr/local/jdk1.8.0_144"
  • 添加jvm内存配置
  1. vim conf/java.env
  2. SERVER_JVMFLAGS="-Xms2g -Xmx4g $SERVER_JVMFLAGS" # 配置zk的JVM内存参数
  • 修改log4j
  1. vim conf/log4j.properties
  2. zookeeper.log.maxfilesize=64MB # 每64MB迭代一个系统日志文件
  3. zookeeper.log.maxbackupindex=10 # 只保留10个系统日志文件
  • 配置jmx端口
  1. vim bin/zkServer.sh
  2. 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节点,执行以下操作

安装

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

启动并验证

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

停止

  1. /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/

Zookeeper-3.5.8集群搭建的更多相关文章

  1. zookeeper相关知识与集群搭建

    Zookeeper Zookeeper相关概念 Zookeeper概述 Zookeeper是一个分布式协调服务的开源框架,主要用来解决分布式集群中应用系统的一致性问题. Zookeeper本质上是一个 ...

  2. ZooKeeper的伪分布式集群搭建

    ZooKeeper集群的一些基本概念 zookeeper集群搭建: zk集群,主从节点,心跳机制(选举模式) 配置数据文件 myid 1/2/3 对应 server.1/2/3 通过 zkCli.sh ...

  3. zookeeper+activemq高可用集群搭建

    一.准备工作: 准备三台机器:192.168.35.111192.168.35.112192.168.35.113 二.搭建zookeeper 三台机器上均要搭建zookeeper服务// 下载zoo ...

  4. Zookeeper,Hbase 伪分布,集群搭建

    工作中一般使用的都是zookeeper和Hbase的分布式集群. more /etc/profile cd /usr/local zookeeper-3.4.5.tar.gz zookeeper在安装 ...

  5. 【ZooKeeper】单机伪集群搭建(适用于mac)

    1.配置 .zookeeper下载地址:http://apache.mirrors.lucidnetworks.net/zookeeper/ 可以选择需要的版本,我下载的是zookeeper-3.4. ...

  6. zookeeper集群搭建及Leader选举算法源码解析

    第一章.zookeeper概述 一.zookeeper 简介 zookeeper 是一个开源的分布式应用程序协调服务器,是 Hadoop 的重要组件. zooKeeper 是一个分布式的,开放源码的分 ...

  7. 分布式实时日志系统(一)环境搭建之 Jstorm 集群搭建过程/Jstorm集群一键安装部署

    最近公司业务数据量越来越大,以前的基于消息队列的日志系统越来越难以满足目前的业务量,表现为消息积压,日志延迟,日志存储日期过短,所以,我们开始着手要重新设计这块,业界已经有了比较成熟的流程,即基于流式 ...

  8. 分布式架构中一致性解决方案——Zookeeper集群搭建

    当我们的项目在不知不觉中做大了之后,各种问题就出来了,真jb头疼,比如性能,业务系统的并行计算的一致性协调问题,比如分布式架构的事务问题, 我们需要多台机器共同commit事务,经典的案例当然是银行转 ...

  9. 28.zookeeper单机(Standalones模式)和集群搭建笔记

    zookeeper单机(Standalones模式)和集群搭建: 前奏: (1).zookeeper也可以在windows下使用,和linux一样可以单机也可以集群,具体就是解压zookeeper-3 ...

  10. ZooKeeper在centos6.4的集群搭建

    首先给一个小tips,在搭建zookeeper之前,需要配置好java环境,请参看我的另一篇文章<Jdk1.8在CentOS7中的安装与配置>,还需要免密码登录,请参看我的另一篇文章< ...

随机推荐

  1. JDK1.8新特性之(三)--函数式接口

    在上一篇文章中我们介绍了JDK1.8的新特性有以下几项. 1.Lambda表达式 2.方法引用 3.函数式接口 4.默认方法 5.Stream 6.Optional类 7.Nashorm javasc ...

  2. C++有子对象的派生类的构造函数

    转载:https://blog.csdn.net/qq1169091731/article/details/50934588?utm_source=blogxgwz6 类的数据成员不但可以是标准型(如 ...

  3. K-DTree入门

    \(K-D Tree\),一种用来维护\(K\)维数据的数据结构.常用于维护各种高维的数据,或者是邻近搜索等.从另一种意义上说,实际上就是高维的二叉搜索树.对于一些常见的问题,如\(k\)远点对.三位 ...

  4. RHSA-2017:2907-重要: wpa_supplicant 安全更新

    [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...

  5. php curl 获取请求头与DNS解析

    1 php-curl方法相关设置具体方法在最下方的示例函数有相关编著, 这里主要描述两个小众需求a 设置访问DNS解析问题点: get请求网页获取返回值速度很快, 但是使用curl请求数据时, 响应速 ...

  6. object-fit 详解

    contain 被替换的内容将被缩放,以在填充元素的内容框时保持其宽高比. 整个对象在填充盒子的同时保留其长宽比,因此如果宽高比与框的宽高比不匹配,该对象将被添加"黑边". cov ...

  7. Java死锁编码及定位分析的demo

    死锁 死锁是什么 大学课程中的四个要素: (1)互斥(2)不可抢占(3)循环等待(4)请求保持 也就是下图所描述 产生死锁的主要原因 (1)系统资源不足(2)进程运行推进的顺序不合适(3)资源分配不当 ...

  8. vector专题

    <C++程序设计语言(第4部分:标准库)> 31.4 容器 31.4.1 vector 31.4.1.1 vector和增长 重要知识点:vector的内存布局 vector不会在添加每个 ...

  9. MeteoInfoLab脚本示例:Trajectory

    示例读取HYSPLIT模式输出的气团轨迹数据文件,生成轨迹图层,并显示轨迹各节点的气压图.脚本程序: f = addfile_hytraj('D:/MyProgram/Distribution/jav ...

  10. Android HandlerThread 详解

    概述 HandlerThread 相信大家都比较熟悉了,从名字上看是一个带有 Handler 消息循环机制的一个线程,比一般的线程多了消息循环的机制,可以说是Handler + Thread 的结合, ...