Zookeeper install

来自linux中国网wiki
docker>Evan2018年8月15日 (三) 02:17的版本 →‎trouble shooting
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

pre

/home/evan/dkm/bigdata

http://192.168.1.204:3000/root/yak/src/master/web/piping/doc

zookeeper 介绍 https://zh.wikipedia.org/wiki/Apache_ZooKeeper

download http://mirrors.hust.edu.cn/apache/zookeeper/

https://www.zhihu.com/question/35139415 Zookeeper在哪些系统中使用,又是怎么用的


  #最老土的jdk ins
tar xvf /soft/jdk-7u79-linux-x64.tar.gz  -C /soft 
vim  /etc/profile
#java 
export JAVA_HOME=/soft/jdk1.7.0_79/
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:/$JAVA_HOME/bin:$HADOOP_HOME/bin
source /etc/profile 
   
#前端机器 
10.135.68.219 dkm-yak-front-01
#kafka
10.135.68.219 dkm-yak-kafka-01
#zk
10.135.68.219 dkm-yak-zk-01
    
 前端机器:
java 1.8  jdk-8u121-linux-x64.rpm 加入仓库吧 
apache-flume-1.7.0-bin.tar.gz
http://mirrors.hust.edu.cn/apache/flume/1.7.0/apache-flume-1.7.0-bin.tar.gz
log机器:
java1.8
apache-flume-1.7.0-bin.tar.gz
kafka_2.12-0.10.2.0.tgz
http://mirror.bit.edu.cn/apache/kafka/0.10.2.0/kafka_2.10-0.10.2.0.tgz

zookeeper-3.4.9.tar.gz
http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz

git clone https://github.com/liutpmars/node-zk-browser.git
wget https://github.com/edenhill/librdkafka/archive/v0.9.4.tar.gz -O librdkafka-0.9.4.tar.gz
wget https://github.com/arnaud-lb/php-rdkafka/archive/3.0.1.tar.gz -O php-rdkafka-3.0.1.tar.gz

1. intall jdk and ZooKeeper server

角色:数据机搭建环境:

install ZooKeeper

分布式服务框架 Zookeeper -- 管理分布式环境中的数据   ZooKeeper(动物园管理员),顾名思义,是用来管理Hadoop(大象)、Hive(蜜蜂)、Pig(小猪)的管理员,同时Apache Hbase、Apache Solr、LinkedIn Sensei等众多项目中都采用了ZooKeeper。   ZooKeeper曾是Hadoop的正式子项目,后发展成为Apache顶级项目,与Hadoop密切相关但却没有任何依赖。它是一个针对大型应用提供高可用的数据管理、应用程序协调服务的分布式服务框架,基于对Paxos算法的实现,使该框架保证了分布式环境中数据的强一致性,提供的功能包括:配置维护、统一命名服务、状态同步服务、集群管理等。 Apache ZooKeeper是Apache软件基金会的一个软件项目,他为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。[需要解释] ZooKeeper曾经是Hadoop的一个子项目,但现在是一个独立的顶级项目。 ZooKeeper的架构通过冗余服务实现高可用性(英语:High-availability cluster)。因此,如果第一次无应答,客户端就可以询问另一台ZooKeeper主机。ZooKeeper节点将它们的数据存储于一个分层的命名空间,非常类似于一个文件系统或一个前缀树结构。客户端可以在节点读写,从而以这种方式拥有一个共享的配置服务。更新是全序的


1)zookeeper单台机器集群:

http://zookeeper.apache.org/doc/r3.4.9/zookeeperAdmin.html#sc_zkMulitServerSetup

1. ins

 tar xvf zookeeper-3.4.9.tar.gz &&   mv zookeeper-3.4.9 /data/apps/zookeeper/
cd /data/apps/zookeeper/src/c
./configure --prefix=/data/apps/zookeeper/
make -j3  && make install

2.zookeeper的环境变量的配置:

 
#为了今后操作方便,我们需要对Zookeeper的环境变量进行配置,方法如下:
#在/etc/profile文件中加入如下的内容:
#set zookeeper environment
echo 'export ZOOKEEPER_HOME=/data/apps/zookeeper/
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf' >>/etc/profile
source  /etc/profile

config

 #here20180810
mkdir -p /data/apps/zookeeper/data; mkdir -p /data/logs/zookeeper/
cd /data/apps/zookeeper/conf
cp zoo_sample.cfg zoo.cfg
#
echo '#general  config
tickTime=2000
dataDir=/data/apps/zookeeper/data
dataLogDir=/data/logs/zookeeper/
clientPort=2181
maxClientCnxns=60
# minSessionTimeout=1000
# maxSessionTimeout=10000
# autopurge.snapRetainCount=3
# autopurge.purgeInterval=1

#集群模式下需要配置
initLimit=5
syncLimit=2

#地址:与leader通讯port:选举port
server.1=host1:2888:3888 ' >zoo.cfg 
 
###下面这个是手工不交互改变

#sed -i 's!/dataDir=/tmp/zookeeper!dataDir=data/apps/zookeeper/data!' /data/apps/zookeeper/conf/zoo.cfg
mkdir -p /datat/logs/zookeeper/
#sed  -i '12 a dataLogDir=/data/logs/zookeeper/' /data/apps/zookeeper/conf/zoo.cfg

#2888,3888 are election port
#sed  -i '29 a server.1=zookeeper:2888:38888' /data/apps/zookeeper/conf/zoo.cfg

run

启动: 其实选择第一个就行了 默认会找zoo.cfg才对 /data/apps/zookeeper/bin/zkServer.sh start

 /data/apps/zookeeper/bin/zkServer.sh start /data/apps/zookeeper/conf/zoo.cfg &

测试:

/data/apps/zookeeper/bin/zkCli.sh -server host:port
#/data/apps/zookeeper/bin/zkCli.sh -server dkm-yak-zk-01:2181

ls /zookeeper

jps


2)集群模式

zk集群一般都是奇数台。 3 5 7 这样的。

为了获得可靠的 ZooKeeper 服务,用户应该在一个集群上部署 ZooKeeper 。只要集群上大多数的ZooKeeper 服务启动了,那么总的 ZooKeeper 服务将是可用的。另外,最好使用奇数台机器。 如果 zookeeper拥有 5 台机器,那么它就能处理 2 台机器的故障了。

之后的操作和单机模式的安装类似,我们同样需要对 JAVA 环境进行设置,下载最新的 ZooKeeper 稳定版本并配置相应的环境变量。不同之处在于每台机器上 conf/zoo.cfg 配置文件的参数设置,参考下面的配置:

host修改hosts文件(三台主机)

手工
cat zoo.cfg
tickTime=2000

clientPort=2181
initLimit=5
syncLimit=2
dataDir=/data/apps/zookeeper/data
dataLogDir=/data/logs/zookeeper/
server.1=192.168.0.201:2888:3888
server.2=192.168.0.202:2888:3888
server.3=192.168.0.203:2888:3888
#下面这种 上次居然问题,不知是不是格式问题
#server.1=zoo1:2888:3888
#server.2=zoo2:2888:3888
#server.3=zoo3:2888:3888
非交互方式
sed -i 's!/dataDir=/tmp/zookeeper!dataDir=data/apps/zookeeper/data!' /data/apps/zookeeper/conf/zoo.cfg
mkdir -p /datat/logs/zookeeper/

#无效
#sed  -i '12 a dataLogDir=/data/logs/zookeeper/' /data/apps/zookeeper/conf/zoo.cfg
sed -i 's!dataDir=/tmp/zookeeper!dataDir=/data/apps/zookeeper/data!' /data/apps/zookeeper/conf/zoo.cfg 
#2888,3888 are election port
#sed  -i '29 a server.1=zookeeper:2888:38888' /data/apps/zookeeper/conf/zoo.cfg
sed -i 's!initLimit=10!initLimit=5!' /data/apps/zookeeper/conf/zoo.cfg
sed -i 's!syncLimit=5!syncLimit=2!' /data/apps/zookeeper/conf/zoo.cfg
echo 'server.1=192.168.0.201:2888:3888
server.2=192.168.0.202:2888:3888
server.3=192.168.0.203:2888:3888' >> zoo.cfg<pre>


initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过5个心跳的时间(也就是 tickTime)长度后 Zookeeper服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒 
syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒 
 
“ server.id=host:port:port. ”指示了不同的 ZooKeeper 服务器的自身标识,作为集群的一部分的机器应该知道 ensemble(全体) 中的其它机器。用户可以从“ server.id=host:port:port. ”中读取相关的信息。 在服务器的 data( dataDir 参数所指定的目录)目录下创建一个文件名为 myid 的文件,这个文件中仅含有一行的内容,指定的是自身的 id 值。比如,服务器“ 1 ”应该在 myid 文件中写入“ 1 ”。这个 id 值必须是 ensemble 中唯一的,且大小在 1 到 255 之间。这一行配置中,第一个端口( port )是从( follower )机器连接到主( leader )机器的端口,第二个端口是用来进行 leader 选举的端口。在这个例子中,每台机器使用三个端口,分别是: clientPort ,2181 ; port , 2888 ; port , 3888 。

我们在拥有三台机器的 Hadoop 集群上测试使用 ZooKeeper 服务,下面代码清单 B 是我们根据自身情况所设置的 ZooKeeper 配置文档:
代码清单 B : zoo.cfg
# The number of milliseconds of each tick
tickTime=2000
 
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
 
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
 
# the directory where the snapshot is stored.
dataDir=/root/hadoop-0.20.2/zookeeper-3.3.1/snapshot/d1
 
# the port at which the clients will connect
clientPort=2181
 
server.1=IP1:2887:3887
server.2=IP2:2888:3888
server.3=IP3:2889:3889
 
清单中的 IP 分别对应的配置分布式 ZooKeeper 的 IP 地址。当然,也可以通过机器名访问 zookeeper ,但是需要在ubuntu 的 hosts 环境中进行设置。读者可以查阅 Ubuntu 以及 Linux 的相关资料进行设置。

#2018年新添加 
myid配置 
三台电脑上分别在ZooKeeper的data目录(/data/apps/zookeeper/data/)创建myid文件, 由前面添加的配置文件 内容可知(server.1=zoo1:2888:3888),内容分别为1、2、3
echo 1 >/data/apps/zookeeper/data/myid 

启动

启动: 其实选择第一个就行了 默认会找zoo.cfg才对
/data/apps/zookeeper/bin/zkServer.sh start
/data/apps/zookeeper/bin/zkServer.sh start /data/apps/zookeeper/conf/zoo.cfg &

jps 
其中,QuorumPeerMain是zookeeper进程,启动正常


查看三者状态
使用bin/zkServer.sh status查看三者状态:

[root@localhost zookeeper]# /data/apps/zookeeper/bin/zkServer.sh status 
ZooKeeper JMX enabled by default
Using config: /data/apps/zookeeper/bin/../conf/zoo.cfg
Mode: leader

[root@localhost conf]# /data/apps/zookeeper/bin/zkServer.sh status 
ZooKeeper JMX enabled by default
Using config: /data/apps/zookeeper/bin/../conf/zoo.cfg
Mode: follower

[root@localhost conf]# /data/apps/zookeeper/bin/zkServer.sh status 
ZooKeeper JMX enabled by default
Using config: /data/apps/zookeeper/bin/../conf/zoo.cfg
Mode: follower 

trouble shooting

[root@localhost conf]#  /data/apps/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /data/apps/zookeeper/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.

tail /etc/hosts
192.168.0.201 master  zoo1
192.168.0.202 slave1  zoo2
192.168.0.203 slave2  zoo3


cat zoo.cfg
#server.1=zoo1:2888:3888
#server.2=zoo2:2888:3888
#server.3=zoo3:2888:3888
改为 下面便好了 
server.1=192.168.0.201:2888:3888
server.2=192.168.0.202:2888:3888
server.3=192.168.0.203:2888:3888

  
  
  api  脚本监控一下  CPU
   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                  
 3253 root      20   0 6302m 1.3g  13m S 105.0  4.0   2776:22 java        

[root@jiekou ~]# ps -ef |grep 3253
root      3253     1  9 Jul20 ?        1-22:16:58 /usr/java/jdk1.7.0_75/bin/java -Djava.util.logging.config.file=/home/appserver/tomcat4/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms512m -Xmx1024m -Djava.library.path=/usr/local/tcnative/lib -Djava.endorsed.dirs=/home/appserver/tomcat4/endorsed -classpath /home/appserver/tomcat4/bin/bootstrap.jar:/home/appserver/tomcat4/bin/tomcat-juli.jar -Dcatalina.base=/home/appserver/tomcat4 -Dcatalina.home=/home/appserver/tomcat4 -Djava.io.tmpdir=/home/appserver/tomcat4/temp org.apache.catalina.startup.Bootstrap start
root     28571 28467  0 13:29 pts/1    00:00:00 grep 3253

安装zookeeper php扩展

https://pecl.php.net/package/zookeeper
https://github.com/php-zookeeper/php-zookeeper
wget -c https://pecl.php.net/get/zookeeper  # zookeeper-0.3.2.tgz
#tar -zxvf zookeeper-0.2.2.tgz
tar -xvf  zookeeper
cd zookeeper-0.3.2/
phpize
./configure --with-php-config=/data/apps/php/bin/php-config --with-libzookeeper-dir=/data/apps/zookeeper/ # #(ps:请正确的指定php-config的目录)
make -j3  && make install


 /data/apps/php/lib/php/extensions/no-debug-non-zts-20131226/
#配置 然后编辑php.ini,加入pcntl配置 这里刚才用了 > 我考  小心呀 
echo "extension=zookeeper.so" >> /data/apps/php/etc/php.ini 
#echo "extension=zookeeper.so" >> /usr/local/lib/php.ini 
修改php文件,重启fast-cgi

[root@server pcntl]# /data/apps/php/bin/php -m | grep zookeeper

安装web管理工具:http://www.oschina.net/p/zkdash https://wiki.linuxchina.net/index.php?title=Zkdash%E5%AE%89%E8%A3%85%E4%B8%8E%E8%BF%90%E8%A1%8C


常见配置

maxClientCnxns 这个操作将限制连接到 ZooKeeper 的客户端的数量,限制并发连接的数量,它通过 IP 来区分不同的客户端。此配置选项可以用来阻止某些类别的 Dos 攻击。将它设置为 0 或者忽略而不进行设置将会取消对并发连接的限制

minSessionTimeout 和 maxSessionTimeout 最小的会话超时时间以及最大的会话超时时间。其中,最小的会话超时时间默认情况下为 2 倍的 tickTme 时间,最大的会话超时时间默认情况下为 20 倍的会话超时时间。在启动时,系统会显示相应信息,见下图 2 所示,默认会话超时时间

集群配置 initLimit 此配置表示,允许 follower (相对于 leader 而言的“客户端”)连接并同步到 leader 的初始化连接时间,它以 tickTime 的倍数来表示。当超过设置倍数的 tickTime 时间,则连接失败。 syncLimit 此配置表示, leader 与 follower 之间发送消息,请求和应答时间长度。如果 follower 在设置的时间内不能与leader 进行通信,那么此 follower 将被丢弃。


ZooKeeper系列之四:ZooKeeper的配置 http://blog.csdn.net/shenlan211314/article/details/6185176

ZooKeeper系列之五:ZooKeeper的运行

1)单机模式 用户可以通过下面的命令来启动 ZooKeeper 服务: zkServer.sh start 这个命令默认情况下执行 ZooKeeper 的 conf 文件夹下的 zoo.cfg 配置文件

2)集群模式 集群模式下需要用户在每台 ZooKeeper 机器上运行第一部分的命令,这里不再赘述。



ZooKeeper系列之五:ZooKeeper的运行 http://blog.csdn.net/shenlan211314/article/details/6185178


ZooKeeper系列之六:ZooKeeper四字命令

ZooKeeper系列之六:ZooKeeper四字命令 http://blog.csdn.net/shenlan211314/article/details/6187029


ZooKeeper系列之七:ZooKeeper命令行工具

/data/apps/zookeeper/bin/zkCli.sh -server host:port

  1. /data/apps/zookeeper/bin/zkCli.sh -server dkm-yak-zk-01:2181

ZooKeeper系列之七:ZooKeeper命令行工具 http://blog.csdn.net/shenlan211314/article/details/6187034

ZooKeeper系列之八:ZooKeeper的简单操作

ZooKeeper系列之八:ZooKeeper的简单操作 http://blog.csdn.net/shenlan211314/article/details/6187035


ZooKeeper系列之九:ZooKeeper API简介及编程

ZooKeeper系列之九:ZooKeeper API简介及编程 http://blog.csdn.net/shenlan211314/article/details/6187037


ZooKeeper系列之十:ZooKeeper的一致性保证及Leader选举

ZooKeeper系列之十:ZooKeeper的一致性保证及Leader选举 http://blog.csdn.net/shenlan211314/article/details/6187040


参考

http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html

【Zookeeper全系列】Zookeeper应用介绍与安装部署等等 https://my.oschina.net/xianggao/blog/531204

good 分布式服务框架 Zookeeper -- 管理分布式环境中的数据 https://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/

ZooKeeper系列教程 http://blog.csdn.net/shatelang/article/details/7596007


centos下安装ZooKeeper http://www.cnblogs.com/ilovexiao/p/3946547.html

http://blog.csdn.net/cruise_h/article/details/19046357

ZooKeeper介绍及典型使用场景 http://blog.csdn.net/liuxinghao/article/details/42747625

see also

ZooKeeper集群搭建(good) 实时数据处理环境搭建flume+kafka+storm:1.zookeeper 安装配置 http://www.bbsmax.com/A/A2dmYwWAde/

good ZooKeeper安装与配置 http://www.cnblogs.com/linjiqin/archive/2013/03/16/2962597.html

ZooKeeper-3.3.4集群安装配置 http://blog.csdn.net/shirdrn/article/details/7183503

Zookeeper的功能以及工作原理

Zookeeper教程

hadoop-1.2.1安装方法详解

ZooKeeper安装配置

Zookeeper 安装和配置

http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_configuration

Zookeeper安装学习(zoo.cfg配置详解)

Zookeep启动异常:Error contacting service. It is probably not running.

zookeeper环境搭建中的几个坑

zookeeper异常 Error contacting service. It is probably not running.以及java.net.ConnectException: 拒绝连接

other

evan@evanpc:~/test$ awk '{print $NF}' log  |tail 
0.114
0.020
0.102
0.003
0.003
0.003
0.013
0.074
0.014
0.020

打印最后一行的最后一个字段
{ field = $NF } END { print field }

Linux Shell 内置命令
http://scottming.com/2017/01/06/analysts_CLI_toolbox_01/