博客
关于我
Zookeeper-3.5.8集群搭建
阅读量:759 次
发布时间:2019-03-23

本文共 2496 字,大约阅读时间需要 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=1server.1=zk1.bjehp.com:2888:3888server.2=zk2.bjehp.com:2888:3888server.3=zk3.bjehp.com:2888:3888server.4=zk4.bjehp.com:2888:3888server.5=zk5.bjehp.com:2888:3888# 把所有的四字命令加入白名单4lw.commands.whitelist=*
  • 修改zookeeper的日志目录
vim bin/zkEnv.shZOO_LOG_DIR="/var/log/zookeeper"ZOO_LOG4J_PROP="INFO,ROLLINGFILE"    # 用于滚动清除系统日志JAVA_HOME="/usr/local/jdk1.8.0_144"
  • 添加jvm内存配置
vim conf/java.envSERVER_JVMFLAGS="-Xms2g -Xmx4g $SERVER_JVMFLAGS"  # 配置zk的JVM内存参数
  • 修改log4j
vim conf/log4j.propertieszookeeper.log.maxfilesize=64MB    # 每64MB迭代一个系统日志文件zookeeper.log.maxbackupindex=10   # 只保留10个系统日志文件
  • 配置jmx端口
vim bin/zkServer.shZOOMAIN="-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 startll /var/log/zookeeper/ll /data0/zookeeper//usr/local/apache-zookeeper-3.5.8-bin/bin/zkServer.sh statustailf /var/log/zookeeper/zookeeper-*.logecho mntr|nc zk.node 2181zk节点全部启动后,会有一个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分布式一致性原理与实践》

转载地址:http://yglzk.baihongyu.com/

你可能感兴趣的文章
MySQL中interactive_timeout和wait_timeout的区别
查看>>
mysql中int、bigint、smallint 和 tinyint的区别、char和varchar的区别详细介绍
查看>>
mysql中json_extract的使用方法
查看>>
mysql中json_extract的使用方法
查看>>
mysql中kill掉所有锁表的进程
查看>>
mysql中like % %模糊查询
查看>>
MySql中mvcc学习记录
查看>>
mysql中null和空字符串的区别与问题!
查看>>
MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
查看>>
MYSQL中TINYINT的取值范围
查看>>
MySQL中UPDATE语句的神奇技巧,让你操作数据库如虎添翼!
查看>>
Mysql中varchar类型数字排序不对踩坑记录
查看>>
MySQL中一条SQL语句到底是如何执行的呢?
查看>>
MySQL中你必须知道的10件事,1.5万字!
查看>>
MySQL中使用IN()查询到底走不走索引?
查看>>
Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
查看>>
MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
查看>>
mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
查看>>
mysql中出现Unit mysql.service could not be found 的解决方法
查看>>
mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
查看>>