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
zookeeper安装
1.下载安装包https://zookeeper.apache.org/releases.html
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目录
5.启动测试
a. 进入zookeeper目录下的bin目录,使用命令启动zkServer.sh,后缀为sh的为linux启动,为cmd的是Windows下启动
./zkServer.sh start
b.启动后查看服务的状态,显示如下信息则启动成功
./zkServer.sh status
./zkServer.sh stop
d.启动客户端
./zkCli.sh
节点增删改查
zookeeper有四种节点,临时节点,临时顺序节点,持久节点和持久顺序节点。
zookeeper节点的增删改查命令很简单,唯一需要注意的是create命令有两个参数,-s代表顺序节点,-e代表临时节点,临时节点当客户端断开时回销毁。
我们先用create /temp 123命令创建一个名为temp的znode节点,123是这个节点保存的data值。
如果你输入的是get temp,那么会出现Path must start with / character提示,这是因为在zookeeper中,没有相对路径的概念,所有的节点都需要用绝对路径表示,也即所有节点名称都会以“/”开头。
zookeeper操作见博文 https://blog.csdn.net/lamfang/article/details/108954766
zookeeper分布式锁实现原理
比如有一个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)
参考连接:https://www.helloworld.net/p/7482175713
zookeeper可视化工具
https://www.cnblogs.com/ibigboy/p/16501139.html