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启停操作和验证服务是否正常的命令。
参考资料
- 《从Paxos到Zookeeper分布式一致性原理与实践》
- https://zookeeper.apache.org/
Zookeeper-3.5.8集群搭建的更多相关文章
- zookeeper相关知识与集群搭建
Zookeeper Zookeeper相关概念 Zookeeper概述 Zookeeper是一个分布式协调服务的开源框架,主要用来解决分布式集群中应用系统的一致性问题. Zookeeper本质上是一个 ...
- ZooKeeper的伪分布式集群搭建
ZooKeeper集群的一些基本概念 zookeeper集群搭建: zk集群,主从节点,心跳机制(选举模式) 配置数据文件 myid 1/2/3 对应 server.1/2/3 通过 zkCli.sh ...
- zookeeper+activemq高可用集群搭建
一.准备工作: 准备三台机器:192.168.35.111192.168.35.112192.168.35.113 二.搭建zookeeper 三台机器上均要搭建zookeeper服务// 下载zoo ...
- Zookeeper,Hbase 伪分布,集群搭建
工作中一般使用的都是zookeeper和Hbase的分布式集群. more /etc/profile cd /usr/local zookeeper-3.4.5.tar.gz zookeeper在安装 ...
- 【ZooKeeper】单机伪集群搭建(适用于mac)
1.配置 .zookeeper下载地址:http://apache.mirrors.lucidnetworks.net/zookeeper/ 可以选择需要的版本,我下载的是zookeeper-3.4. ...
- zookeeper集群搭建及Leader选举算法源码解析
第一章.zookeeper概述 一.zookeeper 简介 zookeeper 是一个开源的分布式应用程序协调服务器,是 Hadoop 的重要组件. zooKeeper 是一个分布式的,开放源码的分 ...
- 分布式实时日志系统(一)环境搭建之 Jstorm 集群搭建过程/Jstorm集群一键安装部署
最近公司业务数据量越来越大,以前的基于消息队列的日志系统越来越难以满足目前的业务量,表现为消息积压,日志延迟,日志存储日期过短,所以,我们开始着手要重新设计这块,业界已经有了比较成熟的流程,即基于流式 ...
- 分布式架构中一致性解决方案——Zookeeper集群搭建
当我们的项目在不知不觉中做大了之后,各种问题就出来了,真jb头疼,比如性能,业务系统的并行计算的一致性协调问题,比如分布式架构的事务问题, 我们需要多台机器共同commit事务,经典的案例当然是银行转 ...
- 28.zookeeper单机(Standalones模式)和集群搭建笔记
zookeeper单机(Standalones模式)和集群搭建: 前奏: (1).zookeeper也可以在windows下使用,和linux一样可以单机也可以集群,具体就是解压zookeeper-3 ...
- ZooKeeper在centos6.4的集群搭建
首先给一个小tips,在搭建zookeeper之前,需要配置好java环境,请参看我的另一篇文章<Jdk1.8在CentOS7中的安装与配置>,还需要免密码登录,请参看我的另一篇文章< ...
随机推荐
- 【代码审计】PHP代码审计---基础记录
PHP伪协议 PHP伪协议事实上是其支持的协议与封装协议,支持的种类有以下12种. * file:// - 访问本地文件系统 * http:// - 访问 HTTP(s) 网址 * ftp:// - ...
- matplotlib.pyplot.imshow如何显示灰度图
转载:https://www.zhihu.com/question/24058898 作者:采石工链接:https://www.zhihu.com/question/24058898/answer/1 ...
- c++缓冲区std::wstringbuf
参考:http://www.cplusplus.com/reference/sstream/wstringbuf/ class <sstream> std::wstringbuf type ...
- 浙大《数据结构》学习&练习(一)算法初步
1.数据结构是数据在计算机中的组织方式,类比图书在图书馆中的存储,应该如何分类,如何在书架上存取. 2.抽象数据结构是对一类的数据的一种组织方式的通用(抽象)描述,包括类型的名称,数据对象集和操作集. ...
- P1879 [USACO06NOV] Corn Fields G
题目描述 农场主John新买了一块长方形的新牧场,这块牧场被划分成M行N列(1 ≤ M ≤ 12; 1 ≤ N ≤ 12),每一格都是一块正方形的土地.John打算在牧场上的某几格里种上美味的草,供他 ...
- 【题解】[USACO08MAR]Land Acquisition G
Link 题目大意:给定\(n\)个二元组,每次可以选择一组,花费是组内最大的长乘以最大的宽.问消掉所有二元组的最小代价. \(\text{Solution:}\) \(dp\)写的不够啊-- 先挖掘 ...
- DevOps元素周期表—2号元素Kibana
Kibana 是一款开源的数据分析和可视化平台,它是 Elastic Stack 成员之一,设计用于和 Elasticsearch 协作.您可以使用 Kibana 对 Elasticsearch 索引 ...
- 达梦产品技术支持培训-day6-DM性能诊断与优化
(本文只作为个人随笔用途,非官方文档,请勿作他用,谢谢) 1.DM8查询优化基本思路 1.1 操作系统性能诊断 linux常用系统监控命令 使用 top 命令查看cpu使用率 使用 iostat 命令 ...
- MeteoInfoLab脚本示例:AIRS Grid HDF数据
AIRS Grid HDF数据是HDF4 EOS格式,数据地理坐标信息可以被MeteoInfo自动识别,脚本程序更为简单.需要注意的是读取数据时Y轴是反向的(卫星数据通常如此).脚本程序: #Add ...
- 【Luogu】P1613 跑路
[Luogu]P1613 跑路 一.题目 题目描述 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零.可是小A偏偏又有赖床的坏毛病.于是为了保住自己的工资 ...