ZooKeeper分布式集群部署及问题
ZooKeeper为分布式应用系统提供了高性能服务,在许多常见的集群服务中被广泛使用,最常见的当属HBase集群了,其他的还有Solr集群。Hadoop-2中的HA自己主动故障转移等。
本文主要介绍了为HBase集群部署ZooKeeper集群的过程。并说明了部署过程中遇到的问题。
默认情况下,由HBase管理ZooKeeper的启动和停止。要想改动这一默认行为,须要将hbase-env.sh中的export HBASE_MANAGES_ZK=true改为export HBASE_MANAGES_ZK=false,并在启动HBase之前先启动ZooKeeper集群。在${ZOOKEEPER_HOME}/conf中复制zoo_sample.cfg为zoo.cfg,并改动dataDir为用于保存ZooKeeper数据的文件夹,默觉得/tmp/zookeeper。然后加入用于集群的服务器,格式为:server.1=hostname1:连接端口:选举端口,当中的1为myid文件里的值。比方对于拥有三个节点的ZooKeeper集群,演示样例配置可能为:
server.1=CentOS-1:2888:3888
server.2=CentOS-2:2888:3888
server.3=CentOS-3:2888:3888
对于ZooKeeper集群配置。须要在启动集群之前在${ZOOKEEPER_HOME}/${dataDir}下创建myid文件,文件内容与server.x中的x相应,比方myid位于上述演示样例中的CentOS-1中,则内容必须为1。
CentOS-2、CentOS-3上的myid文件内容分别为2、3。假设在集群启动之前没有创建myid文件,在启动时会报例如以下的错误:
2015-07-03 15:37:40,877 [myid:] - ERROR [main:QuorumPeerMain@85] - Invalid config, exiting abnormally
org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Error processing /home/search/zookeeper-3.4.6/bin/../conf/zoo.cfg
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:123)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:101)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)
Caused by: java.lang.IllegalArgumentException: /HData/zookeeper/myid file is missing
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:350)
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:119)
... 2 more
Invalid config, exiting abnormally
在每台ZooKeeper节点对ZooKeeper进行改动完成后,因为ZooKeeper没有start-hbase或者start-dfs相似的启动全部节点的脚本,所以必须在每台服务器上分别运行${ZOOKEEPER_HOME}/bin/zkServer.sh start启动ZooKeeper。启动完成后能够运行${ZOOKEEPER_HOME}/bin/zkServer.sh status检查状态,比方:
JMX enabled by default
Using config: /application/search/zookeeper/bin/../conf/zoo.cfg
Mode: follower
ZooKeeper集群成功启动后,须要改动hbase-site.xml中的參数hbase.zookeeper.quorum。使其值包括全部ZooKeeper节点,比方CentOS-1,CentOS-2,CentOS-3,之间用逗号分隔。
而对于单节点的ZooKeeper来说。则不须要在配置文件zoo.cfg中设置服务器相关的信息。即不须要设置server.x,因而也就无需创建相应的myid文件。
对于单节点的ZooKeeper另一个问题须要注意,该问题属于ZooKeeper本身的一个Bug。但已经在版本号3.4.7, 3.5.2, 3.6.0中修复,详细可參考ZOOKEEPER-832。异常信息例如以下:
2015-07-22 13:00:23,286 [myid:] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@213] - Accepted socket connection from /10.10.32.223:15489
2015-07-22 13:00:23,286 [myid:] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:ZooKeeperServer@811] - Refusing session request for client /10.10.32.223:15489 as it has seen zxid 0x210d711 our last zxid is 0x26ca client must try another server
2015-07-22 13:00:23,287 [myid:] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1000] - Closed socket connection for client /10.10.32.223:15489 (no session established for client)
该问题是因为改动了ZooKeeper的${dataDir}文件夹到新文件夹或者删除文件夹中的文件引起的。
在部署ZooKeeper时还遇到了日志输出的问题。在不做不论什么与日志有关的改动时。会将ZooKeeper日志输出到单一的zookeeper.out文件。假设长时间运行,将导致该文件很巨大,对其查看将很不方便,因此须要改动zkEnv.sh、log4j.properties。对zkEnv.sh做例如以下的改动,分别指定日志保存的文件夹。日志输出的级别及输出的地方:
if [ "x${ZOO_LOG_DIR}" = "x" ]
then
#ZOO_LOG_DIR="." #默认值为当前文件夹
ZOO_LOG_DIR="/HData/log/zookeeper/"
fi
if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
#ZOO_LOG4J_PROP="INFO,CONSOLE"
ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
fi
然后改动log4j.properties文件。凝视部分为原有值,新增部分代替了原有值:
#zookeeper.root.logger=INFO, CONSOLE
zookeeper.root.logger=INFO.ROLLINGFILE #日志输出的级别及输出的地方
#log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLINGFILE=org.apache.log4j.DailyRollingFileAppender #日志文件的appender
# Max log file size of 10MB
#log4j.appender.ROLLINGFILE.MaxFileSize=10MB #禁用该属性
# uncomment the next line to limit number of backup files
#log4j.appender.ROLLINGFILE.MaxBackupIndex=10
做完上述部分的改动后,ZooKeeper将日志输出到${ZOO_LOG_DIR}/zookeeper.log中,每天都会生成新的日志文件,并将之前的文件重命名为zookeeper.log.2015-07-22。即使做了上述改动依旧会生成zookeeper.out,虽然此时该文件的内容为空,但对于不喜欢该文件的用户来说。则须要改动zkServer.sh文件。将以下的行替换例如以下,这样就不会在日志文件夹中存在zookeeper.out文件。
nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
-cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &
nohup $JAVA "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
-cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > /dev/null 2>&1 < /dev/null &
本文简要描写叙述了ZooKeeper集群的部署安装,并分析了安装过程中遇到的问题,最后说明了怎样改动ZooKeeper的默认日志配置,以使日志输出到指定文件夹和文件里。
ZooKeeper分布式集群部署及问题的更多相关文章
- Zookeeper分布式集群部署
ZooKeeper 是一个针对大型分布式系统的可靠协调系统:它提供的功能包括:配置维护.名字服务.分布式同步.组服务等: 它的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效.功能稳定的 ...
- 新闻网大数据实时分析可视化系统项目——4、Zookeeper分布式集群部署
ZooKeeper 是一个针对大型分布式系统的可靠协调系统:它提供的功能包括:配置维护.名字服务.分布式同步.组服务等: 它的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效.功能稳定的 ...
- Hadoop(HA)分布式集群部署
Hadoop(HA)分布式集群部署和单节点namenode部署其实一样,只是配置文件的不同罢了. 这篇就讲解hadoop双namenode的部署,实现高可用. 系统环境: OS: CentOS 6.8 ...
- Hadoop教程(五)Hadoop分布式集群部署安装
Hadoop教程(五)Hadoop分布式集群部署安装 1 Hadoop分布式集群部署安装 在hadoop2.0中通常由两个NameNode组成,一个处于active状态,还有一个处于standby状态 ...
- solr 集群(SolrCloud 分布式集群部署步骤)
SolrCloud 分布式集群部署步骤 安装软件包准备 apache-tomcat-7.0.54 jdk1.7 solr-4.8.1 zookeeper-3.4.5 注:以上软件都是基于 Linux ...
- 在 Linux 多节点安装配置 Apache Zookeeper 分布式集群
规划: 三台物理服务器就形成了(法定人数).对于高可用性集群,您可以使用高于3的任何奇数.例如,如果设置5台服务器,则集群可以处理两个故障节点等. 物理服务器需要开启的端口 2888 , 3888 和 ...
- SolrCloud 分布式集群部署步骤
https://segmentfault.com/a/1190000000595712 SolrCloud 分布式集群部署步骤 solr solrcloud zookeeper apache-tomc ...
- Zookeeper分布式集群搭建
实验条件:3台安装linux的机子,配置好Java环境. 步骤1:下载并分别解包到每台机子的/home/iHge2k目录下,附上下载地址:http://mirrors.cnnic.cn/apache/ ...
- Zookeeper+Kafka集群部署(转)
Zookeeper+Kafka集群部署 主机规划: 10.200.3.85 Kafka+ZooKeeper 10.200.3.86 Kafka+ZooKeeper 10.200.3.87 Kaf ...
随机推荐
- 中文分词--最大正向与逆向匹配算法python实现
最大匹配法:最大匹配是指以词典为依据,取词典中最长单词为第一个次取字数量的扫描串,在词典中进行扫描(为提升扫描效率,还可以跟据字数多少设计多个字典,然后根据字数分别从不同字典中进行扫描).例如:词典中 ...
- VM-安装MAC系统
搜了下论坛没有这个教程,继续搬运一波,这次教的是用VM15安装Mac OS10.14懒人版VMware安装Windows和Linux比较类似,相对于今天要安装的MAC OS来说过程也比较简单.官方原版 ...
- rsync文件备份同步
1.rsync有两种认证协议: ssh认证协议 rsync server端不需要启动daemon进程,所以不用配置/etc/rsyncd.conf,只需要获取远程host的用户名密码 例: rsync ...
- 大数字运算——2、BigDecimal
package com.wh.BigInteger; import java.math.BigDecimal; import java.util.Arrays; /** * @author 王恒 * ...
- 浅析CLR的异常处理模型
文章目录: 异常概述 CLR中的异常处理机制 CLR中异常的核心类System.Exception类 异常处理的设计规范和最佳实践 异常处理的性能问题 其他拓展 1.异常概述 异常我们通常指的是行动成 ...
- Java基础4一数组
数组 数组是用来存储一组相同类型数据的数据结构 数组变量属于引用数据类型 数组中的元素可以是任何数据类型(基本类型和引用类型) 备注:数组中存放的都是相同数据类型的数据. 1.一维数组的声明 语法:数 ...
- Linux集群搭建与Hadoop环境搭建
今天是8月19日,距离开学还有15天,假期作业完成还是遥遥无期,看来开学之前的恶补是躲不过了 今天总结一下在Linux环境下安装Hadoop的过程,首先是对Linux环境的配置,设置主机名称,网络设置 ...
- (转)shiro权限框架详解03-shiro介绍
http://blog.csdn.net/facekbook/article/details/54893740 shiro介绍 本文正式进入主题.本文将介绍如下内容: 什么是shiro 为什么需要学习 ...
- iPhone Mach-O文件格式与代码签名
错误现象1) 直接运行/Applications/MobileFonex.app/MobileFonexKilled: 9 2)gdb调试Program received signal EXC_BAD ...
- 函数反抖 debounce
debounce :如果在一段延时内又触发了事件,则重新开始延时.即每次触发事件,只触发最近一次的事件. const debounce = (fn, duration) => { let tim ...