下载地址
https://archive.apache.org/dist/zookeeper/zookeeper-3.5.6/
第一次下载zookeeper根据学习修改了,zoo.cfg的文件但是还是出现了org.apache.zookeeper.server.quorum.QuorumPeerMainm,而且其他没有做修改,查看百度无果,上google查找终于发现了原来zookeeper在3.5.5之后在下载的时候应该下载带bin的文件,而之前的普通的tar.gz的包里面是只是源码的包无法直接使用
参考文档:
https://www.jianshu.com/p/ed6ec88b01c3
安装环境
系统版本 |
centos7.7 |
zookeeper版本 |
apache-zookeeper-3.5.6-bin.tar.gz |
jdk版本 |
openjdk1.8 |
配置参数详解(主要是%ZOOKEEPER_HOME%/conf/zoo.cfg文件)
https://www.cnblogs.com/xiohao/p/5541093.html
Zookeeper 目录结构
1. bin:放置运行脚本和工具脚本,如果是 Linux 环境还会有有 zookeeper 的运 行日志 zookeeper.out
2. conf:zookeeper 默认读取配置的目录,里面会有默认的配置文件
3. contrib:zookeeper 的拓展功能
4. dist-maven:zookeeper的 maven 打包目录
5. docs:zookeeper 相关的文档
6. lib:zookeeper 核心的 jar
7. recipes:zookeeper 分布式相关的 jar 包
8. src:zookeeper 源码
zookeeper单点安装
首先安装openjdk
yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
下载zookeeper包
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.6/apache-zookeeper-3.5.6-bin.tar.gz
tar xf apache-zookeeper-3.5.6-bin.tar.gz
mv apache-zookeeper-3.5.6-bin /usr/local/
cd /usr/local/
ln -s /usr/local/apache-zookeeper-3.5.6-bin/ zookeeper
配置环境变量
vim /etc/profile
export PATH=$PATH:/usr/local/zookeeper/bin/
source /etc/profile
vim /etc/profile
配置jdk系统环境变量
JAVA_HOME=/usr/local/java/jdk1.8
JRE_HOME=/usr/local/java/jdk1.8/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
创建log日志目录
mkdir /usr/local/zookeeper/log_snapshot #快照日志目录
mkdir /usr/local/zookeeper/log_transaction #事务日志目录
进入conf目录
cd /usr/local/zookeeper/conf
改名字
cp zoo_sample.cfg zoo.cfg
具体参数如下:
主要需要配置
dataDir=/usr/local/zookeeper/log_snapshot
dataLogDir=/usr/local/zookeeper/log_transaction
Zookeeper启动
服务管理命令:zkServer.sh start|stop|restart|status
连接客户端
客户端连接:zkCli.sh -server ${ip}:${port}
zkCli.sh -server 10.77.20.23:2181
客户端关闭:quit 或者按 Ctrl + C
zookeeper端口是2181
ZK中有几种节点类型,节点类型在节点创建的时候就被确定且不可改变
临时节点(EPHEMERAL):临时创建的,会话结束节点自动被删除,也可以手动删除,临时节点不能拥有子节点
临时顺序节点(EPHEMERAL_SEQUENTIAL):具有临时节点特征,但是它会有序列号,分布式锁中会用到该类型节点
持久节点(PERSISTENT):创建后永久存在,除非主动删除。
持久顺序节点(PERSISTENT_SEQUENTIAL):该节点创建后持久存在,相对于持久节点它会在节点名称后面自动增加一个10位数字的序列号,这个计数对于此节点的父节点是唯一,如果这个序列号大于2^32-1就会溢出。
zookeeper创建节点
create -s /zk-test 123 # -e参数为创建临时节点,如果不带参数则创建持久节点#为节点的名字,为节点的内容
查看节点内容
get /zk-test
删除节点
delete /zk
connect host:port - 连接其他的 ZooKeeper 应用。
ls path - 列表路径下的资源。在 ZooKeeper 控制台客户端中,没有默认列表功能,必须 指定要列表资源的位置。 如: ls / ; ls /path 等。
create [-e] [-s] path data - 创建节点,如:
create /test 123 创建一个/test 节点,节点携 带数据信息 123。
create -e /test 123 创建一个临时节点/test,携带数据为 123,临时节点只 在当前会话生命周期中有效,会话结束节点自动删除。
create -s /test 123 创建一个顺序节点 /test,携带数据123,创建的顺序节点由ZooKeeper自动为节点增加后缀信息,如-/test00000001 等。-e 和-s 参数可以联合使用。
get path - 查看指定节点的数据。 如: get /test。结果如下:
set path data [version] - 设置对应位置节点的数据。如: set /test 'test data'。 如果要设 置的数据中有空格,则使用单引号界定数据的范围。每次修改数据后,dataVersion 属性自增。 那么在 set 命令中可以指定 version,version 数据必须与上次查询的值一致,用于保证本次修 改命令执行时,没有其他会话修改此数据。
delete path [version] - 删除指定节点,此命令不能删除有子节点的节点。如:delete /test。 其中 version 参数和 set 命令的 version 含义一致 rmr path - 删除指定结点,包括子节点。
quit - 退出控制台
集群搭建
集群内节点只要不宕掉一半,zookeeper就不会出现问题,等于是,节点越多,越安全
在每个节点添加
vim /usr/local/zookeeper/conf/zoo.cfg
server.1=172.26.103.56:2881:3881
server.2=172.26.103.57:2881:3881
server.3=172.26.103.58:2881:3881
service.N=YYY:A:B
N:代表服务器编号(也就是myid里面的值)
YYY:服务器地址
A:表示 Flower 跟 Leader的通信端口,简称服务端内部通信的端口(默认2888)
B:表示 是选举端口(默认是3888)
在每个zookeeper节点下配置文件内的dataDir设置的目录内添加myid
echo 1 >myid
echo 2 >myid
echo 3 >myid
启动各个节点
/usr/local/zookeeper/bin/zkServer.sh start
查看各个节点角色状态
/usr/local/zookeeper/bin/zkServer.sh status
优化;添加环境变量
export PATH=$PATH:/usr/local/zookeeper/bin/
关于zookeeper占用8080端口
zookeeper最近的版本中有个内嵌的管理控制台是通过jetty启动,也会占用8080 端口。
通过查看zookeeper的官方文档,发现有3种解决途径:
(1).删除jetty。
(2)修改端口。
修改方法的方法有两种,一种是在启动脚本中增加 -Dzookeeper.admin.serverPort=你的端口号.一种是在zoo.cfg中增加admin.serverPort=没有被占用的端口号
(3)停用这个服务,在启动脚本中增加"-Dzookeeper.admin.enableServer=false"