当前位置: 首页>后端>正文

[java]64、zookeeper安装

1、安装步骤

1.1、下载最新的zookeeper版本

zookeeper下载地址
可以通过wget命令下载,也可以由外部下载通过scp命令传入例如:
scp apache-zookeeper-3.8.0-bin.tar.gz root@192.168.2.128:/usr/local/soft

1.2、解压到指定目录

tar -zxvf apache-zookeeper-3.6.0-bin.tar.gz -C /usr/local/
修改文件名称
mv apache-zookeeper-3.6.0-bin zookeeper-server01

1.3、修改配置文件

配置文件所在的目录:
zookeeper-server01/conf
在该目录下创建配置文件zoo.cfg,如下命令
cat zoo_sample.cfg |grep -v "#" |grep -v "^$" > zoo.cfg
在配置文件中添加如下内容

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-server-01/data
clientPort-2181
server.1=192.168.2.128:2887:3887
server.2=192.168.2.128:2888:3888
server.3=192.168.2.128:2889:3889

tickTime=2000 # 心跳的时间单位 毫秒值
initLimit=10 # 启动集群的初始化的事件 10个心跳单位 20s
syncLimit=5 # 集群服务器同步数据的事件5个心跳单位, 10s钟
dataDir=/usr/local/zookeeper-server-01/data #数据的快照存储目录
clientPort=2181 #服务端提供客户端访问的连接接口

1.4、创建存储数据目录

1、在/zookeeper-server-01/下创建data目录
mkdir -p /usr/local/zookeeper-server-01/data
2、在/data/目录下创建一个标志文件myid
cd /usr/local/zookeeper-server-01/data/
echo 1 > myid

1.5、创建同样的zookeeper资源

同时在创建两份
cp -R zookeeper-server01 zookeeper-server02
cp -R zookeeper-server01 zookeeper-server03
重复以上步骤,同步修改zookeeper-server02zookeeper-server03zoo.cfg文件和myid
zookeeper-server02

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-server-02/data
clientPort-2182
server.1=192.168.2.128:2887:3887
server.2=192.168.2.128:2888:3888
server.3=192.168.2.128:2889:3889

cd /usr/local/zookeeper-server-02/data/
echo 2 > myid

zookeeper-server03

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-server-03/data
clientPort-2183
server.1=192.168.2.128:2887:3887
server.2=192.168.2.128:2888:3888
server.3=192.168.2.128:2889:3889

cd /usr/local/zookeeper-server-03/data/
echo 3 > myid

1.6、启动服务

zkServer.sh start # 启动命令
zkServer.sh status # 查看状态命令
zkServer.sh stop # 停止服务命令
zkServer.sh restart# 停止服务命令

2、Zookeeper的核心工作机制

2.1、zookeeper的核心工作机制

1、Zookeeper:一个leader,多个follower组成的集群(3个节点 最佳实践)
2、全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的
3、分布式读写,更新请求转发,由leader实施
4、更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行
5、数据更新原子性,一次数据更新要么成功(半数以上节点成功),要么失败
6、实时性,在一定时间范围内,client能读到最新数据(毫秒级别) 1M

2.2、zookeeper数据结构

1、层次化的目录结构,命名符合常规文件系统规范(见下图)
2、每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识
3、节点Znode可以包含数据(只能存储很小量的数据,<1M)和子节点(但是EPHEMERAL类型的节点不能有子节点,下一页详细讲解)
4、客户端应用可以在节点上设置监视器

2.3、节点类型

Znode有四种形式的目录节点
PERSISTENT 持久化节点
PERSISTENT_SEQUENTIAL 持久化顺序节点
EPHEMERAL 临时节点
EPHEMERAL_SEQUENTIAL 临时节点顺序节点
创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护
在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序

3、创建节点

3.1、服务器的启动和监控

zkServer.sh start | stop | restart | status
jps 查看java进程 QuorumPeerMain
netstat -natl
netstat -ntpl

3.2、客户端连接

zkCli.sh -server 192.168.2.128:2181
如果是连接当前本机地址, 可以使用 zkCli.sh

3.3、创建节点

create [-s] [-e] [-c] [-t ttl] path [data] [acl] 命令创建节点
-s: 顺序节点 默认为否
-e: 临时节点 默认为否
-c: 创建一个容器节点
-t ttl 创建一个持久化节点或者一个持久化顺序节点的时候, 指定存活时间
path: 路径|目录
data: 设置路径下存放的数据
1、创建持久化节点
create /pNod pNode
2、创建临时节点
create -e /eNode eNode
临时节点在会话关闭以后, 会自动删除
临时节点不允许有子节点
3、创建顺序节点
create /lock
create -s /lock/getId
create -e -s /lock/getId2
对于顺序节点, 是允许进行节点重复创建, 默认会在节点后面添加一个全局唯一的顺序ID
4、创建容器节点
容器节点: 可以用来一个节点, 下面存放多个子节点, 当子节点删除完以后, 容器节点会自动删除
create -c /cnode cnode
create -c /cnode/child01 child01
create -c /cnode/child02 child02
delete /cnode/child01
delete /cnode/child02
get /cnode
会通过定时器, 在一分钟没有子节点, 直接删除改节点znode.container.checkIntervalMs

3.4、查看节点

ls [-s] [-w] [-R] path
[-s] : 显示统计信息
[-w]: 查看事件信息
[-R]: 显示递归目录
例如:
ls -R /

/
/pNode
/tempNode
/zookeeper
/pNode/node01
/zookeeper/config
/zookeeper/quota
3.5、获取节点

get [-s] [-w] path
-s: 显示统计信息
-w: 获取事件信息

get -s /pNode
pNode # 获取到的节点数据
cZxid = 0x600000010 # 创建节点的事务Id
ctime = Tue Apr 21 16:23:31 CST 2020 #创建时间
mZxid = 0x600000010 # 修改的事务ID
mtime = Tue Apr 21 16:23:31 CST 2020 #修改时间
pZxid = 0x600000010
cversion = 0 # 当前版本信息
dataVersion = 0 #数据版本信息
aclVersion = 0 #权限版本信息
ephemeralOwner = 0x0 #临时节点的会话ID
dataLength = 5 # 数据长度
numChildren = 0 # 子节点个数

3.6、修改节点数据

set [-s] [-v version] path data
-s 设置过程显示节点的状态信息
-v: 使用CAS设置数据, 使用国歌声, 可以使用stat从dataVersion中找到版本
set -v 0 /node2 node3
set /node2 node3

3.7、删除节点

1、删除单个节点
delete [-v version] path
-v: 在并发的时候, 使用乐观锁进行删除
delete /node2
2、删除所有节点(递归删除)
deleteall /pNod


https://www.xamrdz.com/backend/3cw1922304.html

相关文章: