ZooKeeper-3.4.10分布式安装指南
目录
3.5. 修改conf/log4j.properties 3
1. 前言
介绍ZooKeeper-3.4.6版本的分布式安装,力求细致,提供精确的安装指导。本文的安装环境是64位的SuSE 10.1 Linux,也适用于ZooKeeper-3.4.8。
ZooKeeper节点间不需要互登录,因此不用配置免密码登录。
2. 约定
将ZooKeeper安装在/data/hadoop/zookeeper目录,其中/data/hadoop/zookeeper是指向/data/hadoop/zookeeper-3.4.6的软链接。
ZooKeeper的数据目录设置为/data/hadoop/zookeeper/data。
本文使用了3台机器部署ZooKeeper集群,IP和主机名对应关系如下:
IP |
主机名 |
10.12.154.77 |
DEVNET-154-77 |
10.12.154.78 |
DEVNET-154-70 |
10.12.154.79 |
DEVNET-154-79 |
3. 安装步骤
Zookeeper机器间不需要设置免密码登录,其它hadoop也可以不设置,只要不使用hadoop-daemons.sh来启动、停止进程,注意不是hadoop-daemon.sh,而是带“s”的那个,带“s”的会读取hadoop的salves文件,远程ssh启动DataNode和备NameNode等。
3.1. 配置/etc/hosts
将3台机器的IP和主机名映射关系,在3台机器上都配置一下,亦即在3台机器的/etc/hosts文件中,均增加以下内容(可以先配置好一台,然后通过scp等命令复制到其它机器上,注意主机名不能包含任何下划线):
10.12.154.77 DEVNET-154-77 10.12.154.78 DEVNET-154-70 10.12.154.79 DEVNET-154-79 |
3.2. 设置myid
在dataDir指定的数据目录(/data/hadoop/zookeeper/data)下,创建文件myid,文件内容为一个正整数值,用来唯一标识当前机器,因此不同机器的数值不能相同,建议从1开始递增标识,以方便记忆和管理。本文约定如下:
IP |
标识数值(取值范围为1~255) |
10.12.154.77 |
|
10.12.154.78 |
|
10.12.154.79 |
可以使用echo命令直接写进去,如:
echo 1 > myid或echo 1 > /data/hadoop/zookeeper/data/myid |
3.3. 修改conf/zoo.cfg
按下述内容,修改ZooKeeper配置文件(3台机器都需要,可以先配置好一台,然后通过scp等命令复制到其它机器上):
tickTime=2000 dataDir=/data/hadoop/zookeeper/data dataLogDir=/data/hadoop/zookeeper/datalog clientPort= initLimit=5 syncLimit=2 autopurge.snapRetainCount=10 autopurge.purgeInterval=1 server.1=DEVNET-154-77:: server.2=DEVNET-154-78:: server.3=DEVNET-154-79:: |
server.N中的N值必须和myid保持相同。
以上内容的配置,参照了ZooKeeper的官方文档:zookeeperStarted.html。server.X用来配置ZooKeeper集群中的各节点,并建议X的值和myid保持一致。
端口用于监听客户端的连接,端口用于Leader监听Follower的连接,而则用于Leader选举。
dataDir用来指定快照文件存放目录,dataLogDir用来指定事务日志文件存放目录。如果只指定了dataDir,而没指定dataLogDir,则事务日志文件也存放于dataDir指定的目录。
默认,autopurge的两个参数是被注释的。
“autopurge.表示不自动清理,这个时候可以使用脚本zkCleanup.sh手动清理。不清理的结果是占用的磁盘空间越来越大。
“autopurge.。
3.4. 修改/bin/zkEnv.sh
设置环境变量ZOO_LOG_DIR为zookeeper的日志存放目录,如:
export ZOO_LOG_DIR=/data/hadoop/zookeeper/log
可将这一行放在ZOOKEEPER_PREFIX之后。
再修改下ZOO_LOG4J_PROP,以让日志不是输出到zookeeper.out,而是写入到日志文件,将:ZOO_LOG4J_PROP="INFO,CONSOLE",改成:
ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
3.5. 修改conf/log4j.properties
log4j.appender.ROLLINGFILE.MaxFileSize=100MB
log4j.appender.ROLLINGFILE.MaxBackupIndex=10
设置每个日志文件大小为100M,滚动10个。
3.6. 修改conf/java.env
打开文件bin/zkEnv.sh,可以看到它有引用conf/java.env。可以在java.env中设置JAVA_HOME这个环境变量,如:export JAVA_HOME=/data/jdk。
仅在/etc/profile等处设置JAVA_HOME,可能并不管用。如果不管用,查看log/zookeeper.out,可以看到错误“nohup: failed to run command 'java': No such file or directory”。
3.7. 设置PATH
这步不是必须的,但是推荐将zookeeper/bin加入到环境变量PATH,这样操作zookeeper会方便些,如:export PATH=/data/zookeeper/bin:$PATH。
如果计划设置,修改当前用户的.profile或.bashrc即可,而不是/etc/profile等。
4. 启动ZooKeeper集群
登录所有ZooKeeper节点,使用bin目录下的脚本zkServer.sh用来启动ZooKeeper集群,但需要带一个start参数,如:
cd /data/hadoop/zookeeper/bin&&./zkServer.sh start |
停止参数为stop,重启参数为restart,如:./zkServer.sh restart。
由于启动时,每个节点都会试图去连接其它节点,因此先启动的刚开始会连接不上其它的,导致日志中会包含错误信息,在未全启动之前,这个属正常现象。
5. 安装验证
脚本zkServer.sh不但可以用来启动ZooKeeper,还可以用来查看状态。使用方式为带一个status参数,如:
./zkServer.sh status |
如遇到以下错误,请稍安勿躁,过会再试,可能是因为还未完全起来:
[hadoop@DEVNET-154-77 ~/zookeeper/bin]$ ./zkServer.sh status JMX enabled by default Using config: /data/hadoop/zookeeper/bin/../conf/zoo.cfg Error contacting service. It is probably not running. |
集群成功启动后,将有且只会有一个成为leader,其它是follower:
[hadoop@DEVNET-154-79 ~/zookeeper/bin]$ ./zkServer.sh status JMX enabled by default Using config: /data/hadoop/zookeeper/bin/../conf/zoo.cfg Mode: leader [hadoop@DEVNET-154-70 ~/zookeeper/bin]$ ./zkServer.sh status JMX enabled by default Using config: /data/hadoop/zookeeper/bin/../conf/zoo.cfg Mode: follower [hadoop@DEVNET-154-77 ~/zookeeper/bin]$ ./zkServer.sh status JMX enabled by default Using config: /data/hadoop/zookeeper/bin/../conf/zoo.cfg Mode: follower |
6. 基本命令
进入ZooKeeper的bin目录,执行zkCli.sh进入ZooKeeper的命令行操作界面。
./zkCli.sh -server |
参数“-server”中只含一个“-”,用以指定被连接的ZooKeeper节点,可以为Leader,也可以为Follower,“”为ZooKeerp提供的客户端服务端口。
进入ZooKeeper命令行操作界面后,输入help然后回车,可以看到ZooKeeper支持的命令列表:
[zk: DEVNET-154-79:2181(CONNECTED) 0] help ZooKeeper -server host:port cmd args stat path [watch] set path data [version] ls path [watch] delquota [-n|-b] path ls2 path [watch] setAcl path acl setquota -n|-b val path history redo cmdno printwatches on|off delete path [version] sync path listquota path rmr path get path [watch] create [-s] [-e] path data acl addauth scheme auth quit getAcl path close connect host:port |
“ls”有点像HDFS中的“ls”,随便测试下:
[zk: DEVNET-154-79:2181(CONNECTED) 1] ls / [zookeeper, hbase] |
再测试下:
[zk: DEVNET-154-79:2181(CONNECTED) 2] ls /hbase [replication, meta-region-server, rs, splitWAL, backup-masters, table-lock, region-in-transition, online-snapshot, master, running, recovering-regions, draining, namespace, hbaseid, table] |
再测试一下:
[zk: DEVNET-154-79:2181(CONNECTED) 4] ls /hbase/backup-masters [VM-40-171-sles10-64,60000,1398162436871] |
测试创建一个目录:
[zk: DEVNET-154-79:2181(CONNECTED) 2] create /test test Created /test [zk: DEVNET-154-79:2181(CONNECTED) 2] ls / [zookeeper, test] |
上面可以看到有HBase,是因为基于它部署了一套HBase,若未基于它安装HBase,则不会有这个条目。
7. 只启一台zookeeper会如何?
如果只启动一台,执行zkServer.sh status查看状态时,报如下错误:
$ zkServer.sh status ZooKeeper JMX enabled by default Using config: /data/zookeeper/bin/../conf/zoo.cfg Error contacting service. It is probably not running. |
如果再启一台zookeeper,会发现一个成了leader,另一个成了follower(经测试两台zookeeper即能正常工作):
$ zkServer.sh status ZooKeeper JMX enabled by default Using config: /data/zookeeper/bin/../conf/zoo.cfg Mode: follower $ zkServer.sh status ZooKeeper JMX enabled by default Using config: /data/zookeeper/bin/../conf/zoo.cfg Mode: leader |
8. 如何扩容zookeeper?
只需要将已有的zookeeper打包复制到新的机器上,然后修改myid文件并设置好,然后启动zookeeper即可。
9. 四字命令
用户在客户端可以通过telnet或nc向ZooKeeper提交相应的命令。ZooKeeper常用四字命令见下表:
命令 |
说明 |
conf |
输出相关服务配置的详细信息 |
cons |
列出所有连接到服务器的客户端的完全的连接、会话的详细信息,包括接受、发送的包数量、会话ID、操作延迟、最后的操作执行等等信息 |
dump |
列出未经处理的会话和临时节点 |
envi |
输出关于服务环境的详细信息 |
reqs |
列出未经处理的请求 |
ruok |
测试服务是否处于正确状态。如果确实如此,那么服务返回“imok”,否则不做任何相应 |
stat |
输出关于性能和连接的客户端的列表 |
wchs |
列出服务器watch的详细信息 |
wchc |
通过session列出服务器 watch 的详细信息,它的输出是一个与watch相关的会话的列表 |
wchp |
通过路径列出服务器 watch 的详细信息,它输出一个与 session 相关的路径 |
使用示例:
$ echo ruok|nc 127.0.0.1 2181 $ telnet 127.0.0.1 2181 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. stat Zookeeper version: 3.4.8--1, built on 02/06/2016 03:18 GMT Clients: /127.0.0.1:34711[0](queued=0,recved=1,sent=0) /10.43.36.23:43303[1](queued=0,recved=225666,sent=225666) Latency min/avg/max: 0/0/19 Received: 313930 Sent: 313929 Connections: 2 Outstanding: 0 Zxid: 0x60000cfe4 Mode: follower Node count: 183 Connection closed by foreign host. |
10. 相关文档
《HBase-0.98.0分布式安装指南》
《Hive 0.12.0安装指南》
《ZooKeeper-3.4.6分布式安装指南》
《Hadoop 2.3.0源码反向工程》
《在Linux上编译Hadoop-2.4.0》
《Accumulo-1.5.1安装指南》
《Drill 1.0.0安装指南》
《Shark 0.9.1安装指南》
更多,敬请关注技术博客:http://aquester.cublog.cn。
11. 结束语
至此,ZooKeeper分布式安装大告成功!更多细节,请浏览官方文档:http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html。
ZooKeeper-3.4.10分布式安装指南的更多相关文章
- HBase-1.2.1和Phoenix-4.7.0分布式安装指南
目录 目录 1 1. 前言 2 2. 概念 2 2.1. Region name 2 3. 约定 2 4. 相关端口 3 5. 下载HBase 3 6. 安装步骤 3 6.1. 修改conf/regi ...
- HBase-0.98.0和Phoenix-4.0.0分布式安装指南
目录 目录 1 1. 前言 1 2. 约定 2 3. 相关端口 2 4. 下载HBase 2 5. 安装步骤 2 5.1. 修改conf/regionservers 2 5.2. 修改conf/hba ...
- ZooKeeper 3.5.0 分布式配置问题
ZooKeeper 3.5.0 分布式配置好后,执行./zkServer.sh start 命令启动,报如下错误: 2015-07-02 21:06:01,671 [myid:] - INFO [ma ...
- Dubbo+zookeeper构建高可用分布式集群(二)-集群部署
在Dubbo+zookeeper构建高可用分布式集群(一)-单机部署中我们讲了如何单机部署.但没有将如何配置微服务.下面分别介绍单机与集群微服务如何配置注册中心. Zookeeper单机配置:方式一. ...
- Spark 0.9.1和Shark 0.9.1分布式安装指南
目录 目录 1 1. 约定 1 2. 安装Scala 1 2.1. 下载 2 2.2. 安装 2 2.3. 设置环境变量 2 3. 安装Spark 2 3.1. 部署 2 3.2. 下载 3 3.3. ...
- Apache ZooKeeper原理剖析及分布式理论名企高频面试v3.7.0
概述 **本人博客网站 **IT小神 www.itxiaoshen.com 定义 Apache ZooKeeper官网 https://zookeeper.apache.org/ 最新版本3.7.0 ...
- Zookeeper概念学习系列之分布式事务
不多说,直接上干货! 初学者来说,肯定会有这么一个疑问.为什么会在zookeeper里牵扯到分布式事务? zookeeper到底是什么? zookeeper实际上是yahoo开发的,用于分布式中一致性 ...
- Zookeeper是如何实现分布式锁的
[toc] Zookeeper是如何实现分布式锁的 标签 : Zookeeper 分布式 实现分布式锁要考虑的重要问题 1. 三个核心要素 加锁, 解锁, 锁超时 2. 三个问题 要保证原子性操作, ...
- 3.9-3.10 分布式协作服务框架Zookeeper
一.zookeeper概述 一个开源的分布式的,为分布式应用提供协调服务的Apache项目. 提供一个简单的原语集合,以便于分布式应用可以在它之上构建更高层次的同步服务. 设计非常易于编程,它使用的是 ...
随机推荐
- 非对称加密与OpenSSL
随着个人隐私越来越受重视, HTTPS也渐渐的流行起来, 甚至有许多网站都做到了全站HTTPS, 然而这种加密和信任机制也不断遭遇挑战,比如戴尔根证书携带私钥,Xboxlive证书私钥泻露, 还有前一 ...
- 在Centos中导入sql文件的方法
在Centos中导入sql文件的方法 利用mysql -u root -p进入mysql数据库 对于文件的导入,在Centos下里面的是首先要新建一个和文件相同名字的数据库.例如:mysql>c ...
- socket_udp客户端循环输入
server--------------#!/usr/bin/env python # encoding: utf-8 # Date: 2018/6/7 from socket import * s ...
- python 3389爆破机
前言: = =上学后的第一个星期假期,写了个3389爆破器 - 0x01 准备: hydra 钟馗之眼API 0x02代码: import optparse import os import requ ...
- 第七章 : Git 介绍 (上)[Learn Android Studio 汉化教程]
Learn Android Studio 汉化教程 [翻译]Git介绍 Git版本控制系统(VCS)快速成为Android应用程序开发以及常规的软件编程领域内的事实标准.有别于需要中心服务器支持的早期 ...
- Python实践练习目录
缘由 做中学才是最好的方法,通过这些项目来加强自己的Python掌握程度. 原则 成体系地学,不搞"题海战术" 通所有不如精一物,精一物方可通所有 走心学,忌浮躁 项目列表 字符串 ...
- Spring Test 整合 JUnit 4 使用总结
转自:https://blog.csdn.net/hgffhh/article/details/83712924 这两天做Web开发,发现通过spring进行对象管理之后,做测试变得复杂了.因为所有的 ...
- PHP 连接打开新网页带参数
PHP 连接打开新网页带参数 detail.php?ID=<?PHP echo $row['ID'];?> aa.php?ID=123 取ID参数 $aid=$_GET['ID']; 网页 ...
- 最流行的JavaScript代码规范
什么是最佳的JavaScript代码编程规范?这可能是一个众口难调的问题.那么,不妨换个问题,什么代码规范最流行? sideeffect.kr通过分析GitHub上托管的开源代码,得出了一些有趣的结果 ...
- iOS学习之Xcode 的Debug技巧
在Xcode中,Debug时,不能像eclipse ,或VS那些集成开发那样,能直接查看变量的值.那怎么在调试的时候查看XCode的变量呢? 有一些方法的. 1.新建一个Single View App ...