超级白话说Zookeeper(一)

我的文章写给自己看的,几乎没有恶心的专业词汇,要看严谨的充满专业术语和哲学味道的文章,请绕道。因为懒,所以文章几乎没图。

Zookeeper提供了诸如统一命名空间服务,配置服务和分布式锁等分布式基础服务。

嗯,说上面这个话的人,良心不会痛吗?
Zookeeper功能如狗杂种说到的:统一命名空间服务
其他就tm跟我们平时本地磁盘那种文件系统没多大区别
文件系统大家都知道吧,例如windows的:

我的电脑://
············C://
·················Windows
·················program files
············D://
·················相片
·················电影

如果要把window的“我的电脑”理解为根目录的话,
在Zookeeper中则是用/作为根目录。
/:
········用户自己创建的文件夹1
·························文件夹1下的某文件1
·························文件夹1下的某文件2
········用户自己创建的文件2
·························文件夹2下的某文件1
·························文件夹2下的某文件1

注意了,在我的理解中,Zookeeper这个看上去没什么特别的文件结构其实非常有用,让我来举例子吧。

例如可以用Zookeeper的这种文件结构做分布式锁
我先说一下分布式锁是什么东西:
有两台电脑都想去修改存在第三台电脑的一个文件,但是这个文件同一时刻只能由一台电脑访问,所以需要加一把锁来满足同一时刻只有同一个电脑访问这个文件的需求。

我们来看看Zookeeper是如何利用文件结构来完成这个分布式锁这个功能的:
还是上面的例子:
电脑1访问美国某电脑文件之前,先去Zookeeper中某目录(例如/readfile)下创建一个顺序文件(所谓顺序文件,就是Zookeeper会为你创建的文件加一个顺序号,这个序号由时间先后顺序递增),名字叫“我要访问A文件+顺序号”
电脑2访问美国某电脑文件之前,先去Zookeeper中与电脑1同一目录(/readfile)创建一个顺序文件,名字叫“我要访问A文件+顺序号”
电脑3访问美国某电脑文件之前,先去Zookeeper中与电脑1同一目录(/readfile)创建一个顺序文件,名字叫“我要访问A文件+顺序号”

假设现在三台电脑创建了三个文件,分别是:
电脑1创建的:我要访问A文件00000000001
电脑2创建的:我要访问A文件00000000003
电脑3创建的:我要访问A文件00000000002

其实这个过程就有点像排队拿锁的过程,电脑1创建的序列号最小,那么电脑1就拿到了锁,电脑2和电脑3就等着电脑1访问文件结束,才能访问。
这里我又需要说一下Zookeeper里面的文件类型:
1、就是我们刚刚说的顺序文件
例如电脑1创建的:我要访问A文件00000000001。
2、无顺序文件
就是创建文件后,不会在文件名后面加上数字编号。
3、临时节点
临时节点是什么意思呢?电脑1刚刚在Zookeeper中创建了一个文件,如果电脑1断开与Zookeeper的连接,这个时候电脑1创建的文件就会被Zookeeper自动删除。
4、永久节点
如果某电脑在Zookeeper上创建的是永久节点,那当某电脑与Zookeeper断开之后,创建的节点仍在存在
注:这里所说节点和文件等效,说文件是问了方便大家理解。
上面的4种类型的组合方式是:顺序临时节点,无顺序临时节点,顺序永久节点,无顺序永久节点4种。

现在再来说刚刚三台电脑访问美国某电脑上的文件,电脑1创建的其实是临时顺序节点,那当电脑1访问完美国某电脑上的文件之后,电脑1将断开与Zookeeper的连接,这个时候电脑1创建的文件被Zookeeper自动删除,电脑3创建的文件此时序号最小,所以电脑3拿到锁,然后访问美国某服务器上的文件。(这里还有一些细节没有讲到,因为这些细节涉及到Zookeeper另一个监听的特性,之后再讲)

这里再说清楚几个事情:
Zookeeper是一个集群,多台服务器对外提供服务,但是对于客户端来说是不可见的,啥意思呢?我来讲一个故事,这里也比较重要
最开始有个喜欢拽专业词汇的程序员,我们叫他小逼吧,小逼的妈妈死了,他哭瞎了眼睛。在他妈妈的葬礼上,他饿了,于是点了一份外卖。
这个时候有很多外卖小哥在等着接单,然后有一个外卖小哥先抢到单子,告诉大家:他的外卖我去送,你们等其他单子吧。于是乎这个抢到单子的外卖小哥把外卖送到小逼手上,小逼由于眼瞎,并不知道送外卖的人是谁。

Zookeeper其实是部署在很多台电脑上,但是每个电脑上部署的Zookeeper几乎一样,每个Zookeeper都可以看做外卖小哥,一个外卖小哥接到单子,也会告诉其他外卖小哥这个消息,Zookeeper文件系统也是一样,例如电脑1在某一台Zookeeper电脑上创建了一个文件,那么Zookeeper也会将这个文件同步到其他Zookeeper电脑上。
好,所以Zookeeper分布式,就是这么分布来的,Zookeeper分布在不同节点上,某台节点上有文件删除修改就跟其他节点上的Zookeeper兄弟说,然后一起同步。理解了这个再来看一开始装逼的傻逼说的充满专业术语的话:

Zookeeper提供了诸如统一命名空间服务,配置服务和分布式锁等分布式基础服务。
统一命名空间服务:我们上文说了,文件系统而已。
分布式锁:我们上文也说了,就是利用文件系统创建节点来完成锁的效果。

我自认为上面说的非常通俗了,下一篇文章我用自己的话聊聊监听(Watcher)。

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
KubeSphere是一个开源的企业级容器平台,它为Kubernetes提供了一层轻量级的管理界面和增强功能。如果你想在KubeSphere环境中部署Zookeeper,你需要遵循一些步骤,因为KubeSphere并不直接支持Zookeeper作为服务,但可以通过将Zookeeper部署为一个独立的Pod或使用Kubernetes的StatefulSets来实现。 以下是基本的部署步骤: 1. 准备Zookeeper镜像:确保你有适合运行在Docker中的Zookeeper镜像。你可以从Docker Hub下载官方的Zookeeper镜像,例如` wurstmeister/zookeeper:latest `。 2. 创建yaml文件:编写一个Kubernetes的YAML文件,定义Zookeeper的Deployment或StatefulSet,包括必要的配置如环境变量、卷存储等。例如,你可能需要指定数据目录和持久化卷。 ```yaml apiVersion: apps/v1 kind: StatefulSet metadata: name: zookeeper spec: replicas: 3 serviceName: zookeeper selector: matchLabels: app: zookeeper template: metadata: labels: app: zookeeper spec: containers: - name: zookeeper image: wurstmeister/zookeeper:latest env: - name: ZOOKEEPER_SERVER_ID value: ${SERVER_ID} - name: ZOOKEEPER_CLIENT_PORT value: "2181" ports: - containerPort: 2181 volumeMounts: - name: data-volume mountPath: /data volumes: - name: data-volume persistentVolumeClaim: claimName: zookeeper-pvc ``` 3. PVC(Persistent Volume Claim):创建一个持久化卷声明(PersistentVolumeClaim),为Zookeeper的数据存储需求申请存储资源。 ```yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: zookeeper-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi ``` 4. 部署:将这些YAML文件应用到KubeSphere集群中,通常是通过Kubectl命令或者KubeSphere UI的“应用”功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值