zookeeper 搭建 linux

jdk安装

1.从网盘里下载jkd
2.创建安装目录,然后将jdk包解压到目录中

mkdir jdk

tar -zxvf jdk-8u271-linux-x64.tar.gz -C /home/ubuntu/app/jdk/

3.设置环境变量
修改 vi /etc/profile, 在 profile 文件中添加如下内容并保存:

set java environment
JAVA_HOME=/home/ubuntu/app/jdk/jdk1.8.0_271
JRE_HOME=/home/ubuntu/app/jdk/jdk1.8.0_271/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH

注意:其中 JAVA_HOME, JRE_HOME 请根据自己的实际安装路径及 JDK 版本配置。

4.让配置生效

source /etc/profile

5.检查安装结果

java -version

image
如果出现上边结果,说明安装成功。

zookeeper安装

1.下载安装包
https://zookeeper.apache.org/releases.html
image
image
2.将安装包上传到linux服务器上
3.创建安装路径,并将压缩包解压到安装路径中

mkdir zookeeper

tar -zxvf apache-zookeeper-3.8.1-bin.tar.gz -C /home/ubuntu/app/zookeeper/

4.进入安装目录
a.创建data目录,存放我们的数据,使用以下命令

mkdir data

b.进入conf目录,把zoo_sample.cfg 复制一份,重命名为zoo.cfg.(名字叫zoo.cfg才会生效)

cd conf

cp zoo_sample.cfg zoo.cfg

c.修改zoo.cfg文件内容,将dataDir值改为我们创建的data目录
image

5.启动测试
a. 进入zookeeper目录下的bin目录,使用命令启动zkServer.sh,后缀为sh的为linux启动,为cmd的是Windows下启动

./zkServer.sh start

image

b.启动后查看服务的状态,显示如下信息则启动成功

./zkServer.sh status

image
c.停止服务

./zkServer.sh stop

d.启动客户端

./zkCli.sh

节点增删改查

zookeeper有四种节点,临时节点,临时顺序节点,持久节点和持久顺序节点。

zookeeper节点的增删改查命令很简单,唯一需要注意的是create命令有两个参数,-s代表顺序节点,-e代表临时节点,临时节点当客户端断开时回销毁。

我们先用create /temp 123命令创建一个名为temp的znode节点,123是这个节点保存的data值。
image
如果你输入的是get temp,那么会出现Path must start with / character提示,这是因为在zookeeper中,没有相对路径的概念,所有的节点都需要用绝对路径表示,也即所有节点名称都会以“/”开头。

zookeeper操作见博文 https://blog.csdn.net/lamfang/article/details/108954766

zookeeper分布式锁实现原理

image

比如有一个lock节点当做锁节点,所有客户端需要申请锁时,在lock节点下创建一个临时顺序节点。然后获取到lock节点的所有子节点,检查自己创建的节点是不是序号最小的节点,如果是表示申请到了锁,如果不是监听比自己序号小一位的节点。目的是为了在后续当比他小一位的节点客户端使用完锁之后,将此节点删除,自己能够知道获得了锁权限。

为什么会创建临时顺序节点?
创建临时节点是为了避免当某个客户端在获得锁之后发生了宕机,无法删除自己创建的锁节点,导致锁一直被占用的情况。创建顺序节点是为了排队

zookeeper集群管理

集群配置集群配置

1.在每个服务的zoo.cfg配中添加以下内容

server.1=集群1:2188:2888
server.2=集群2:2188:2888
server.3=集群3:2188:2888

2188与2888分别为默认的信息交互端口和选举端口

2.在每个服务下创建服务编号文件 myid, 在文件内指定编号
echo "1" > myid

通过上边两步就配好了。

集群投票规则

每个单机会给当前启动服务编号最大的服务投票,当票数过半时,当选为lader。如果没有leader,集群将不可用。

参考链接:https://juejin.cn/post/7114254500692492301

python 调用zookeeper

1安装依赖库
pip install kazoo==2.8.0

ps: 安装2.8.0版本,不然会有"Connection dropped:socket connection error:句柄无效"错误

2简单使用

from kazoo.client import KazooClient

zk = KazooClient(hosts='localhost:2181')
# 启动连接
zk.start()

# 创建节点,不设置数据
res = zk.ensure_path('/my/test')
print(111, res)

# 创建节点,并设置数据, ephemeral表示是否是临时节点,sequence表示是否是顺序节点
res = zk.create("/my/test/node", b"a value", ephemeral=True, sequence=False)
print(222, res)

# 获取子节点列表
children = zk.get_children("/my/test")
print(333, children)

# 获取节点数据data 和节点状态stat
data, stat = zk.get("/my/test/node")
print(444, data)
print(555, stat)

# 断开连接
zk.stop()  # 与zookeeper断开


# def my_func(event):
#     # 检查最新的节点数据
#     pass
#
#
# # 当子节点发生变化的时候,调用my_func
# children = zk.get_children("/my/favorite/node", watch=my_func)

输出结果
image

参考连接:https://www.helloworld.net/p/7482175713

zookeeper可视化工具

https://www.cnblogs.com/ibigboy/p/16501139.html

posted @ 2023-04-14 17:16  一枚码农  阅读(77)  评论(0编辑  收藏  举报