MQ--2 Message queuing)>>>>ZooKeeper

MQ–1( Message queuing)>>>>RabbitMQ

二.ZooKeeper

https://zookeeper.apache.org/ #Zookeeper官网

ZooKeeper 最早起源于雅虎研究院的一个研究小组。在当时,研究人员发现,在雅虎内部很多大型系统基本都需要依赖一个类 似的系统来进行分布式协调,但是这些系统往往都存在分布式单点问题 所以, 雅虎的开发人员就试图开发一个通用的无单点问题的分布式协调框架,以便让开发人员将精力集中在处理业务逻辑上。

关于“ZooKeeper”这个项目的名字,其实也有一段趣闻 在立项初期,考虑到之前内部很多项目都是使用动物的名字来命名的(例如著名的 Pig 项目 雅虎的工程师希望给这个项目也取一个动物的名字。时任研究院的首席科学家RaghuRamakrishnan 开玩笑地说: 在这样下去,我们这儿就变成动物园了! 此话一出,大家纷纷表示就叫动物园管理员吧一一一因为各个以动物命名的分布式组件放在一起, 雅虎的整个分布式系统看上去就像一个大型的动物园了,而Zookeeper 正好要用来进行分布式环境的协调 于是 Zookeeper 的名字也就由此诞生了。

在这里插入图片描述

2.1 ZooKeeper 使用场景:

ZooKeeper 是一个分布式服务框架,它主要是用来解决分布式 应用中经常遇到的一些数据管理问题,如:命名服务、状态同步、配置中心 、集群管理等。

2.1.1命名服务:

命名服务是分布式系统中比较常见的一类场景。命名服务是分布式系统最基本的公共服务之一。在分布式系统中,被命名的实体通常可以是集群中的机器、提供的服务地址或远程对象等——这些我们都可以统称它们为名字( Name ),其中较为常见的就是一些分布式服务框架(如 RPC 、 RMI )中的服务地址列表,通过使用命名服务,客户端应用能够 根据指定名字来获取资源的实体、服务地址和提供者的信息等。

2.1.2 状态同步

每个节点除了存储数据内容 和 node 节点状态信息之外,还存储了已经注册的APP 的状态信息。 当有些节点或APP 不可用, 就将当前状态同步给其他服务 。

2.1.3 配置中心:

现在我们大多数应用都是采用的是分布式开发的应用,搭建到不同的服务器上,我们的配置文件,同一个应用程序的配置文件一样,还有就是多个程序存在相同的配置,当我们配置文件中有个配置属性需要改变,我们需要改变每个程序的配置属性,这样会很麻烦的去修改配置, 那么可用使用 ZooKeeper 来实现配置中心,ZooKeeper 采用的是推拉相结合的方式: 客户端向服务端注册自己需要关注的节点,一旦该节点的数据发生变更,那么服务端就会向相应的客户端发送Watcher事件通知,客户端接收到这个消息通知后,需要主动到服务端获取最新的数据。

#分布式配置中心Apollo

2.1.4 集群管理

所谓集群管理,包括集群监控与集群控制两大块,前者侧重对集群运行时状态的收集,后者则是对集群进行操作与控制, 在日常开发和运维过程中, 我们经常会有类似于如下的求:
1.希望知道当前集群中究竟有多少机器在工作。
2.对集群中每台机器的运行时状态进行数据收集。
3.对集群中机器进行上下线操作。

ZooKeeper 具有以下两大特性。

客户端如果对 ZooKeeper 的一个数据节点注册 Watcher 监听,那么当该数据节点的内容或是其子节点列表发生变更时, ZooKeeper 服务器就会向订阅的客户端发送变更通知。
对在 ZooKeeper 上创建的临时节点,一旦客户端与服务器之间的会话失效,那么该临时节点也就被自动清除 。

Watcher (事件监听器),是 Zookeeper 中的一个很重要的特性。 Zookeeper 允许用户在指定节点上注册一些 Watcher ,并且在一些特定事件触发的时候,ZooKeeper 服务端会将事件通知到感兴趣的客户端上去,该机制是 Zookeeper实现分布式协调服务的重要特性。

zookeeper中过半写入完成也是完成

在这里插入图片描述

2.2 ZooKeeper 单机安装

2.2.1 :配置 java 环境

https://zookeeper.apache.org/doc/r3.4.14/zookeeperAdmin.html#sc_requiredSoftware #官方依赖介绍
一般java环境为java1.8 (至需要java1.7)
最少3个服务器为一个集群
2G ROM 80G磁盘

root@ZK-server1# apt update
root@ZK-server1# apt install openjdk-8-jdk -y

root@ZK-server1:/opt# java -version
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-8u242-b08-0ubuntu3~18.04-b08)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)

2.2.2 部署 ZooKeeper

https://archive.apache.org/dist/zookeeper/ #官网下载地址

# pwd
/usr/local/src
# tar xvf zookeeper-3.4.14.tar.gz
# ln -sv /usr/local/src/zookeeper-3.4.14 /usr/local/zookeeper
'/usr/local/zookeeper' --> '/usr/local/src/zookeeper 3.4.14'
# cd /usr/local/zookeeper/conf
# cp zoo_sample.cfg zoo.cfg

# mkdir /usr/local/zookeeper/data #创建一个新目录 用来存放配置文件中的dataDir


# grep ^[a-Z] zoo.cfg # 当前配置
tickTime=2000  #2s
initLimit=10   #10次  一共开始探测的时候为20s 超过为超时
syncLimit=5    #周期性探测
dataDir=/usr/local/zookeeper/data  #数据文件
clientPort=2181    #注册端口  这个端口不要随便改

2.2.3 启动 ZooKeeper

/usr /local/zookeeper/bin/zkServer.sh #用于启动、重启、停止 ZooKeeper

# /usr/local/zookeeper/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

2.2.4 验证 Zookeeper 进程

在这里插入图片描述

2.2.5 验证 Zookeeper 状态

# /usr/local/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: standalone #单机模式

2.3 ZooKeeper 集群介绍

ZooKeeper 集群用于解决单点和单机性能及数据高可用等问题。

读写数据:https://www.sohu.com/a/253808097_465221

2.3.1 集群结构:

在这里插入图片描述

2.3.2 集群角色:

在这里插入图片描述

2.4 Zookeeper 集群部署

Zookeeper 的集群部署过程 。
zookeeper 集群特性:整个集群种只要有超过集群数量一半的 zookeeper 工作只正常的,那么整个集群对外就是可用的,假如有 2 台服务器做了一个 zookeeper集群,只要有任何一台故障或宕机,那么这个 zookeeper 集群就不可用了,因为剩下的一台没有超过集群一半 的数量,但是假如有三台 zookeeper 组成一个集群,那么损坏一台就还剩两台,大于3台的一半,所以损坏一台还是可以正常运行的,但是再损坏一台就只剩一台集群就不可用了。那么要是 4 台组成一个zookeeper 集群,损坏一台集群肯定是正常的,那么损坏两台就还剩两台,那么2台不大于集群数量的一半,所以3台的 zookeeper 集群和 4 台的 zookeeper 集群损坏两台的结果都是集群不可用,以此类推 5 台和 6 台以及 7 台和 8 台都是同理,所以这也就是为什么集群一般都是奇数的原因。

2.4.1 配置 ZooKeeper 集群

各zookeeper 服务器都 配置 java环境并部署 zookeeper 集群服务器

环境:
Zk-node1 :172.18.0.101
Zk-node2 :172.18.0.102
Zk-node3 :172.18.0.103

实验:
ZK-server1 : 172.20.10.100
ZK-server2 : 172.20.10.101
ZK-server3 : 172.20.10.102

2.4.1.1 zk 节点 1 部署 过程

官方文档:https://zookeeper.apache.org/doc/r3.4.14/zookeeperAdmin.html

# apt update
# apt install openjdk-8-jdk -y
# java -version
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-8u242-b08-0ubuntu3~18.04-b08)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)

# pwd
/usr/local/src
# tar xf zookeeper-3.4.14.tar.gz
# ln -sv /usr/local/src/zookeeper-3.4.14 /usr/local/zookeeper #解决并对zookeepe做软连接
'/usr/local/zookeeper' --> '/usr/local/src/zookeeper-3.4.14'
# cd /usr/local/zookeeper/conf/
# cp zoo_sample.cfg zoo.cfg #基于模板配置文件生成配置文件

# mkdir /usr/local/zookeeper/data #创建数据目录

# grep v "^#" /usr/local/zookeeper/conf/zoo.cfg  # 配置文件内容
tickTime=2000  #服务器与服务器之间的单次心跳检测时间间隔,单位为毫秒
initLimit=10  #集群中 leader 服务器与 follower 服务器初始连接心跳次数,即多少个2000 毫秒
syncLimit=5 # leader 与 follower 之间连接完成之后,后期检测发送和应答的心跳次数,如果该 
follower 在设置的时间内 (5* 不能与 leader 进行通信,那么此 follower 将被视为不可用。
dataDir=/usr/local/zookeeper/data  #自定义的 zookeeper 保存数据的目录
clientPort=2181 #客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求
maxClientCnxns= 128  #一个客户端IP可以和zookeeper保持的连接数
autopurge.snapRetainCount=3  #3.4.0 中的新增功能:启用后, ZooKeeper 自动清除功能会
将autopurge.snapRetainCount 最新快照和相应的事务日志分别保留在 dataDir 和 dataLogDir
中,并删除其余部分,默认值为3。最小值为 3 。
autopurge.purgeInterval=1  #3.4.0 及之后版本, ZK提供了自动清理 日志和快照文件的功
能,这个参数指定了清理频率,单位是小时,需要配置一个 1 或更大的整数,默认是 0 ,表示不开启
自动清理功能

server.1=172.20.10.100:2888:3888  #server.服务器编号=服务器IP:LF数据同步端口 :LF选举端口
server.2=172.20.10.101:2888:3888
server.3=172.20.10.102:2888:3888
#echo "1" > /usr/local/zookeeper/data/myid  #自己的集群 id 和dataDir路径保持一致 文件的名称必须是myid 还需要和server.1编号保持一致

# scp zoo.cfg 172.20.10.101:/usr/local/zookeeper/conf/zoo.cfg  #将配置文件分发至其他服务器

# scp zoo.cfg 172.20.10.102:/usr/local/zookeeper/conf/zoo.cfg
2.4.1 .2 zk 节点 2 部署 过程
# apt install openjdk-8-jdk
# java version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222 8u222 b10 1ubuntu1~18.04.1 b10)
OpenJDK 64 Bit Server VM (build 25.222 b10, mixed mode)

# pwd
/usr/local/src
# tar xf zookeeper-3.4.14.tar.gz
# ln -sv /usr/local/src/zookeeper-3.4.14 /usr/local/zookeeper
'/usr/local/zookeeper' --> '/usr/local/src/zookeeper 3.4.14'
# cd /usr/local/zookeeper/conf/
# cp zoo_sample.cfg zoo.cfg

# mkdir /usr/local/zookeeper/data

root@ZK-server:/usr/local/zookeeper/conf# grep -v "^#" /usr/local/zookeeper/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
clientPort=2181
maxClientCnxns=128
autopurge.snapRetainCount=3
autopurge.purgeInterval=24

server.1=172.20.10.100:2888:3888  
server.2=172.20.10.101:2888:3888
server.3=172.20.10.102:2888:3888
# echo "2" > /usr/local/zookeeper/data/myid
2.4.1.3 zk 节点 3 部署 过程
# apt install openjdk-8-jdk
# java version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (bui ld 1.8.0_222 8u222 b10 1ubuntu1~18.04.1 b10)
OpenJDK 64 Bit Server VM (build 25.222 b10, mixed mode)

# pwd
/usr/local/src
# tar xf zookeeper-3.4.14.tar.gz
# ln -sv /usr/local/src/zookeeper-3.4.14 /usr/local/zookeeper
'/usr/local/zookeeper' --> '/usr/ src/zookeeper-3.4.14'
cd /usr/local/zookeeper/conf/
# cp zoo_sample.cfg zoo.cfg

# mkdir /usr/local/zookeeper/data #数据目录

root@ZK-server3:/usr/local/zookeeper/conf# grep -v "^#" /usr/local/zookeeper/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
clientPort=2181
maxClientCnxns=128
autopurge.snapRetainCount=3
autopurge.purgeInterval=24


server.1=172.20.10.100:2888:3888  
server.2=172.20.10.101:2888:3888
server.3=172.20.10.102:2888:3888
# echo "3" > /usr/local/zookeeper/data/myid #当前节点 id

2.4.2:各服务器启动 zookeeper

各zookeeper 服务器尽快启动 zookeeper服务。因为超时时间为20s

2.4.2.1

zk 节点 1 启动 zookeeper

/usr/local/zookeeper/bin/zkServer.sh start
ZooKeeper JM X enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
2.4.2.2

zk 节点 2 启动 zookeeper

/usr/local/zookeeper/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf /zoo.cfg
Starting zookeeper ... STARTED
2.4.2.3

zk 节点 3 启动 zookeeper

/usr/local/zookeeper/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

2.4.3验证 zookeeper 集群状态:

验证各zookeeper 节点服务运行状态

2.4.2.1 zk 节点 1 验证 zookeeper
# /usr/local/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower
2.4.2.2 zk 节点 2 验证 zookeeper
# /usr/local/zookeeper/bin/ sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: leader   #leader 
2.4.2.3 zk 节点 3 验证 zookeeper
# /usr/local/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin /../conf/zoo.cfg
Mode: follower

配置文件中的注释最好是另起一行

leader服务停止后,其他的follower服务器会重新选举新的leader
把服务起来之后会以follower的身份继续加入到集群当中

2.5zookeeper 命令操作

2.5.1:查看 当前 zk 运行 状态:

/usr/local/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower

2.5.2:命令行写入数据:

可连接至 zookeeper 集群中的任意一台 zookeeper 节点 进行 一下操作。

# /usr/local/zookeeper/bin/zkCli.sh -server 172.18.0.101:2181
stat path [watch]  # 支持的命令
set path data [version]
ls path [watch]
delquota [-n|-b] path
ls2 path [watch]
setAcl path acl
setquota -n|-b val path
history
redo cmdno
printwatches on|off
delete path [version]
sync path
listquota path
rmr path
get path [watch]
create [-s] [-e] path data acl
addauth scheme auth
quit
getAcl path
close
connect host:port

[zk: 172.18.0.101:2181(CONNECTED)3] create /test "hello"  #写入数据
Created /test

[zk: 172.18.0.101:2181(CONNECTED)4] get /test 验#证数据可以到其他节点验证数据是否一致
hello #访问的创建数据   下面的为其他的一些信息
cZxid = 0x10000000a
ctime = FriNov 22 10:24:02 CST 2019
mZxid = 0x10000000a
mtime = FriNov 22 10:24:02 CST 2019
pZxid = 0x10000000a
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0

2.6zookeeper 客户端 ZooInspector

https://github.com/zzhang5/zooinspector

2.6.1 :客户端编译

cd
git clone https://github.com/zzhang5/zooinspector.git
# cd zooinspector/
# apt install mvn -y
# mvn clean package # 没有的话需要安装mvn

在这里插入图片描述
编译成功.
因为服务器在美国 所以可能编译不成功

在这里插入图片描述

2.6.2 客户端使用:

# chmod +x target/zooinspector-pkg/bin/zooinspector.sh
# bash target/zooinspector pkg/bin/zooinspector.sh

README:

Build
$git clone https://github.com/zzhang5/zooinspector.git
$cd zooinspector/
$mvn clean package

Run
$chmod +x target/zooinspector-pkg/bin/zooinspector.sh
$target/zooinspector-pkg/bin/zooinspector.sh

如果报错:

Exception in thread "main" java.awt.AWTError: Can't connect to X11 window server using 'localhost:10.0'
 as the value of the DISPLAY variable.

首先确保服务器的ssh设置中配置为 X11Forwarding yes
参考:Xshell: https://www.netsarang.com/tutorial/xshell/1018/Using_X11_forwarding
vi /etc/ssh/sshd_config
配置:X11Forwarding yes
然后重启服务service sshd restart

然后确保xshell客户端配置为:
属性-连接-SSH-隧道:
X11转移-(选中)转发X11连接到-(选中)Xmanager

然后打开xshell会话后:
echo $DISPLAY 查看是有值的
此时直接运行脚本可以打开程序GUI界面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.6.2.2 windows 客户端使用:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值