标签:配置文件 bin 四字命令 start 定时 必须 netstat log4j 环境
一、概述Zookeeper是一个开源的,分布式的,为分布式应用提供协调服务的Apache项目
Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化Zookeeper就将负责通知已经在Zookeeper.上注册的那些观察者做出相应的反应。
1) Zookeeper: 一个领导者(Leader) ,多个跟随者(Follower) 组成的集群。
2)集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。
3)全局数据一致:每个Server保存一份相同的数据副本,Client无论 连接到哪个Server,数据都是一致的。
4)更新请求顺序进行,来自同一个Client的更新请求按其发送顺序依次执行。
5)数据更新原子性,一次数据更新要么成功,要么失败。
6)实时性,在一定时间范围内,Client能读到最新数据。
ZooKeeper数据模型的结构与Unix文件系统很类似,整体上可以看作是一棵树,每个节点称做一个ZNode。每一个ZNode默认能够存储1MB的数据,每个ZNode都可以通过其路径唯一标识。
znode一共有4种类型:持久的(persistent)、临时的 (ephemeral)、持久有序的(persistent_sequential)和临时有序的 (ephemeral_sequential)。
提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等。
HBase:在HBase中,ZooKeeper用于选举一个集群内的主节点,以便跟踪可用的服务器,并保存集群的元数据
Kafka:在Kafka中,ZooKeeper用于检测崩溃,实现主题(topic)的发现,并保持主题的生产和消费状态
前提
①集群要求半数以上节点存活,所以集群数量最好是奇数个,最少是3个
②集群每台服务器必须安装JDK
③各节点时间/时区同步
④集群内部免密
⑤修改主机名并作本地解析
集群规划:在node1,node2,node3三个节点部署zookeeper
卸载老版本
rpm -qa | grep openjdk | xargs rpm -e --nodeps
创建安装目录
mkdir -p /usr/lib/jvm/jdk1.8.0_73
安装
tar -xvzf jdk-8u73-linux-x64.tar.gz -C /usr/lib/jvm
在/etc/profile中添加环境变量
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_73
export JRE_HOME=/usr/lib/jvm/jdk1.8.0_73/jre
export CLASSPATH=.:/usr/lib/jvm/jdk1.8.0_73/lib:/usr/lib/jvm/jdk1.8.0_73/jre/lib
export PATH=$PATH:/usr/lib/jvm/jdk1.8.0_73/bin
重读环境变量
source /etc/profile
解压到安装目录
tar -zxvf zookeeper-3.4.10.tar.gz -C /opt/
创建zkData目录
mkdir -p /opt/zookeeper-3.4.9/data
创建myid文件,在文件中添加与server对应的编号
echo "1" > /opt/zookeeper-3.4.9/data/myid
重命名/opt/zookeeper-3.4.9/conf这个目录下的zoo_sample.cfg为zoo.cfg
mv zoo_sample.cfg zoo.cfg
修改数据存放目录
dataDir=/opt/zookeeper-3.4.9/data
dataLogDir=/opt/zookeeper-3.4.9/logs
增加如下配置
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
#此处的1为data目录下myid的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。
#node1为zk节点的主机名,前提是已经做好本地解析
#2888是follower与leader交换信息的端口
#3888是用于执行选举leader时相互通信的端口
#ZooKeeper服务器在启动时从一个名为zoo.cfg的配置文件读取所有 选项,多个服务器如果角色相似,同时基本配置信息一样,就可以共享 一个文件。data目录下的myid文件用于区分各个服务器,对每个服务器 来说,data目录必须是唯一的,因此这个目录可以更加方便地保存一些 差异化文件。服务器ID将myid文件作为一个索引引入到配置文件中。
其他配置
tickTime =2000 #通信心跳数,Zookeeper服务器与客户端心跳时间,单位毫秒
initLimit =10 #LF初始通信时限
syncLimit =5 #LF同步通信时限
clientPort =2181 #客户端连接端口
修改zk日志存放目录:zkEnv.sh
sed -i ‘s/ZOO_LOG_DIR="."/ZOO_LOG_DIR="\/opt\/zookeeper-3.4.9\/logs"/g‘ /opt/zookeeper-3.4.9/bin/zkEnv.sh
sed -i ‘s/ZOO_LOG4J_PROP="INFO,CONSOLE"/ZOO_LOG4J_PROP="DEBUG,ROLLINGFILE"/g‘ /opt/zookeeper-3.4.9/bin/zkEnv.sh
修改zk的log4j配置文件:log4j.properties
sed -i ‘s/zookeeper.root.logger=INFO, CONSOLE/zookeeper.root.logger=INFO, ROLLINGFILE/g‘ /opt/zookeeper-3.4.9/conf/log4j.properties
sed -i ‘s/zookeeper.log.dir=./zookeeper.log.dir=\/opt\/zookeeper-3.4.9\/logs/g‘ /opt/zookeeper-3.4.9/conf/log4j.properties
sed -i ‘s/zookeeper.tracelog.dir=./zookeeper.tracelog.dir=\/opt\/zookeeper-3.4.9\/logs/g‘ /opt/zookeeper-3.4.9/conf/log4j.properties
/opt/zookeeper-3.4.9/bin/zkServer.sh start-foreground
zkServer.sh脚本参数
start-foreground:查看启动时报的是什么异常,同时也可以查看运行过程中的异常。
print-cmd:查看zookeeper启动的各个参数,包括java路径等
[root@node1 zookeeper-3.4.9]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.9/bin/../conf/zoo.cfg
Mode: leader
解压安装包
tar zxvf docker-18.09.8.tgz
安装
mv docker/* /usr/bin/
mkdir /etc/docker
cp daemon.json /etc/docker/daemon.json
cp docker.service /usr/lib/systemd/system/docker.service
安装docker-compose
cp docker-compose/docker-compose /usr/local/bin/
chmod +x /usr/local/bin/docker-compose
启动并设置开机启动
systemctl daemon-reload
systemctl start docker
systemctl enable docker
systemctl restart docker
docker load -i zookeeper-3.4.9_20191008.tar
version: ‘2‘
services:
?? zookeeper:
? ? image: zookeeper:3.4.9
? ? restart: always
? ? container_name: zookeeper
? ? ports:
? ? - 2181:2181
? ? environment:
? ? ? ZOO_IP: 192.168.143.200
? ? ? ZOO_MY_ID: 1
? ? volumes:
? ? - "/home/data/zookeeper/data:/opt/zookeeper-3.4.9/data"
? ? - "/home/data/zookeeper/logs:/opt/zookeeper-3.4.9/logs"
? ? - "/etc/localtime:/etc/localtime:ro"
? ? - "/etc/timezone:/etc/timezone:ro"
? ? network_mode: "host"
①容器暴露2181端口到宿主机的2181端口
②将数据和日志目录挂载逻辑卷
③容器的本地时间与时区挂载宿主机的文件
④容器使用宿主机网络
docker-compose -f docker-compose.yml up -d
容器状态检查
[root@master home]# docker ps
CONTAINER ID? ? ? ? IMAGE ? ? ? ? ? ? ? COMMAND? ? ? ? ? ? ? ? ? CREATED ? ? ? ? ? ? STATUS? ? ? ? ? ? ? PORTS ? ? ? ? ? ? ? NAMES
e4685488115a? ? ? ? zookeeper:3.4.9 ? ? "/opt/zookeeper-3.4.…" ? 12 minutes ago? ? ? Up 12 minutes ? ? ? ? ? ? ? ? ? ? ? ? ? zookeeper
容器内zookeeper检查
[root@master home]# docker exec -it e4685488115a /bin/bash
[root@master /]# ps afx
?? PID TTY? ? ? STAT ? TIME COMMAND
?? 122 pts/0? ? Ss ? ? 0:00 /bin/bash
?? 135 pts/0? ? R+ ? ? 0:00? \_ ps afx
?? ? 1 ?? ? ? ? Ssl? ? 0:01 /opt/jdk1.8.0_73/bin/java -Dzookeeper.log.dir=/opt/zookeeper-3.4.9/logs -Dzookeeper.root.logger=DEBUG,ROLLI
[root@master /]# jps
1 QuorumPeerMain
136 Jps
宿主机监听端口检查
[root@master home]# netstat -tanlp | grep java
tcp6 ? ? ? 0? ? ? 0 :::41309? ? ? ? ? ? ? ? :::*? ? ? ? ? ? ? ? ? ? LISTEN? ? ? 5850/java? ? ? ? ? ?
tcp6 ? ? ? 0? ? ? 0 :::2181 ? ? ? ? ? ? ? ? :::*? ? ? ? ? ? ? ? ? ? LISTEN? ? ? 5850/java ?
Zookeeper提供了一些4字命令用来监控自己的运行状态,在zoo.cfg文件最下面加上如下配置开启四字命令白名单
4lw.commands.whitelist=* #所有4字命令都可以用
conf:输出相关服务配置的详细信息。
cons:列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息。包括“接受 / 发送”的包数量、会话 id 、操作延迟、最后的操作执行等等信息。
dump:输出所有等待队列中的会话和临时节点的信息,这个命令针对Leader执行。
envi:输出关于服务环境的详细信息(区别于 conf 命令)。
reqs:列出未经处理的请求
ruok:测试服务是否处于正确状态。如果确实如此,那么服务返回“ imok ”,否则不做任何相应。
stat:输出关于性能和连接的客户端的列表。
wchs:列出服务器 watch 的概要信息。
wchc:通过 session 列出服务器 watch 的详细信息,它的输出是一个与 watch 相关的会话的列表。
wchp:通过路径列出服务器 watch 的详细信息。它输出一个与 session 相关的路径。
mntr:输出比stat命令更为详尽的服务器统计信息
crst:功能性命令,重置所有连接的统计信息
示例:输出server的详细配置信息,配合nc
[root@master home]# yum install nc -y
示例:输出server统计信息
参考文章:
http://zookeeper.apache.org/doc/r3.4.14/zookeeperAdmin.html
《ZooKeeper:分布式过程协同技术详解》
标签:配置文件 bin 四字命令 start 定时 必须 netstat log4j 环境
原文地址:https://blog.51cto.com/jiayimeng/2485465