Zookeeper install
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
- /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
http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_configuration
Zookeep启动异常:Error contacting service. It is probably not running.
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/