首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
大数据
›
数据仓库与分析
›
k8s学习--k8s聚集摆设zookeeper应用及详细表明 ...
返回列表
发新帖
k8s学习--k8s聚集摆设zookeeper应用及详细表明
[复制链接]
发表于 2026-2-13 06:45:42
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
zookeeper
什么是zookeeper
ZooKeeper 是一个开源的分布式和谐服务,告急用于分布式应用步调中,管理数据、同步服务以及维护设置信息。它是由 Apache Software Foundation 管理和维护的。
根本概念
ZNode:
ZooKeeper 的数据
存储
单位,类似于文件体系中的文件和目次。ZNode 可以
存储
数据和子节点。
Zookeeper Ensemble:
一个 ZooKeeper 服务通常由多个 ZooKeeper
服务器
(节点)构成,称为一个 ensemble。通常会有一个主节点(Leader)和多少个跟随节点(Follower)。
Session:
客户端与 ZooKeeper
服务器
之间的会话。每个客户端会话都有一个唯一的会话 ID。
告急
功能
定名服务(Naming Service):
类似于 DNS,答应分布式应用步调使用路径来访问资源和服务。
设置管理(Configuration Management):
存储
和更新设置信息,使得分布式应用步调的各个部分可以大概同步读取最新的设置。
分布式同步(Distributed Synchronization):
支持分布式锁和队列,资助多个历程和谐对共享资源的访问。
组服务(Group Services):
用于维护分布式体系中群构成员的列表,
监控
集群中节点的状态。
工作原理
ZooKeeper 接纳了一个简朴的、基于全局数据划一性的模子:
Leader Election:
当 ZooKeeper 集群启动时,节点之间通过投票推选出一个 Leader。Leader 负责处置处罚全部写哀求,而读哀求可以由任何节点处置处罚。
Watches:
客户端可以在 ZNode 上设置 watch,当 ZNode 的数据或子节点变革时,ZooKeeper 会关照客户端。
Atomic Broadcast (Zab):
ZooKeeper 使用一种叫做 Zab 协议的原子广播协议,确保全部
服务器
上的数据划一性。全部的写操纵都会被记载为事件
日志
,并通过 Zab 协议广播给其他节点。
使用场景
分布式锁:
使用暂时 ZNode 实现分布式锁,确保多个历程不会同时访问共享资源。
集群管理:
在分布式体系中,使用 ZooKeeper
监控
集群中的节点,处置处罚节点的动态增长和淘汰。
设置管理:
存储和分发分布式应用步调的设置参数,确保全部节点使用类似的设置。
定名服务:
管理分布式体系中服务的定名和查找。
优点
高可用性:
ZooKeeper 接纳分布式架构,包管了高可用性和容错本领。
高
性能
:
ZooKeeper 的读
性能
非常高,适当高读
负载
的场景。
划一性:
提供严格的数据划一性,确保分布式体系中各个节点的数据划一。
缺点
单点瓶颈:
Leader 处置处罚全部写哀求,大概成为
性能
瓶颈。
复杂性:
摆设和管理 ZooKeeper 集群必要肯定的技能门槛。
k8s集群摆设zookeeper
环境
假造机
Ip主机名cpu内存硬盘192.168.10.11master012cpu双核4G100G192.168.10.12worker012cpu双核4G100G192.168.10.13worker022cpu双核4G100G192.168.10.18nfs1cpu一核2G40G
版本
centos7.9
已摆设k8s-1.27
必要做的前置设置
storageclass
详情请看
链接: k8s练习–StorageClass详细表明与应用
区别仅有ip差别等,按本次ip来
Ingress(本章使用nodeport方式访问)
详情请看
链接: k8s学习–ingress详细表明与应用(nginx ingress controller))
本章不再过多叙述
一、zookeeper摆设YAML资源清单预备
master节点设置
vim zookeeper.yaml
复制
代码
---apiVersion: v1kind: Namespacemetadata: name: smart---apiVersion: v1kind: Servicemetadata: name: zk-headless namespace: smart labels: app: zkspec: ports: - port: 2888 name: server - port: 3888 name: leader-election clusterIP: None #无头服务集群内访问 selector: app: zk---apiVersion: v1kind: Servicemetadata: name: zk-np namespace: smart labels: app: zkspec: type: NodePort #对外
发布
访问 ports: - port: 2181 targetPort: 2181 name: client nodePort: 32181 selector: app: zk---apiVersion: policy/v1kind: PodDisruptionBudgetmetadata: name: zk-pdb namespace: smartspec: selector: matchLabels: app: zk maxUnavailable: 1 #答应失效pod的数目---apiVersion: apps/v1kind: StatefulSetmetadata: name: zookeeper namespace: smartspec: serviceName: zk-headless replicas: 3 updateStrategy: type: RollingUpdate selector: matchLabels: app: zk template: metadata: labels: app: zk spec: affinity: #pod粘滞 podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: "app" operator: In values: - zk topologyKey: "kubernetes.io/hostname" containers: - name: kubernetes-zookeeper image: k8s.gcr.io/kubernetes-zookeeper:1.0-3.4.10 imagePullPolicy: Always resources: requests: memory: "1Gi" cpu: "0.5" ports: - containerPort: 2181 name: client - containerPort: 2888 name: server - containerPort: 3888 name: leader-election command: - sh - -c - "start-zookeeper \ --servers=3 \ --data_dir=/var/lib/zookeeper/data \ --data_log_dir=/var/lib/zookeeper/data/log \ --conf_dir=/opt/zookeeper/conf \ --client_port=2181 \ --election_port=3888 \ --server_port=2888 \ --tick_time=2000 \ --init_limit=10 \ --sync_limit=5 \ --heap=512M \ --max_client_cnxns=60 \ --snap_retain_count=3 \ --purge_interval=12 \ --max_session_timeout=40000 \ --min_session_timeout=4000 \ --log_level=INFO" readinessProbe: exec: command: - sh - -c - "zookeeper-ready 2181" initialDelaySeconds: 10 timeoutSeconds: 5 livenessProbe: exec: command: - sh - -c - "zookeeper-ready 2181" initialDelaySeconds: 10 timeoutSeconds: 5 volumeMounts: - name: datadir mountPath: /var/lib/zookeeper - name: localtime mountPath: /etc/localtime volumes: - name: localtime hostPath: path: /etc/localtime #pod时间同步于宿主机时间 type: '' volumeClaimTemplates: - metadata: name: datadir annotations: volume.alpha.kubernetes.io/storage-class: anything spec: accessModes: [ "ReadWriteOnce" ] storageClassName: "nfs-client" resources: requests: storage: 1Gi
复制
代码
用于创建一个zookeeper聚集
简朴来说就是创建一个下令空间存放干系资源,两个service一个对内一个对外
发布
服务,尚有一个statefulset控制器创建pod,特点是在每个节点至少摆设一个,实用于有状态服务,好比说
数据库
之类
二、zookeeper摆设及摆设验证
应用yaml文件
kubectl apply -f zookeeper.yaml
复制
代码
Zookeeper运行pod数目一样寻常为奇数,每节点上会运行一个pod,k8sworker节点假如不敷,大概会出现如下征象
kubectl get pod -n smart -o wide
复制代码
出于
安全
思量,默认设置下Kubernetes不会将Pod调治到Master节点。
假如渴望将k8s-master也看成Node使用,可以实行如下下令:
检察master01调治控制(Taints污点设置,NoSchedule不被调治)
kubectl describe node master01 | grep Taints
复制代码
可以看到是noscheduler
克制调用
取消污点设置:
kubectl taint node master01 node-role.kubernetes.io/control-plane-
复制代码
再检察就好了
kubectl get pod -n smart -o wide
复制代码
注
假如发现pod只有一个且不绝pending,那就是storageclass没有做好,nfs的pod没有或无法起来,pv无法调治存储装备的资源,请详细检察
链接: k8s练习–StorageClass详细表明与应用
检察statefulset应用\
kubectl get sts -n smart
复制代码
检察service
kubectl get svc -n smart
复制代码
假如想取消被调治,实行如下下令即可,不会影响已经被调治的pod
kubectl taint node master01 node-role.kubernetes.io/control-plane:NoSchedule
复制代码
三、zookeeper应用验证
zookeeper访问毗连信息验证
dig -t a zk-headless.smart.svc.cluster.local @10.96.0.10dig -t a zk-np.smart.svc.cluster.local @10.96.0.10```
复制代码
在kubernetes集群内访问验证
kubectl exec -it zookeeper-0 -n smart -- bashroot@zookeeper-0:/# zkCli.sh[zk: localhost:2181(CONNECTED) 0] create /key1 111[zk: localhost:2181(CONNECTED) 1] get /key1[zk: localhost:2181(CONNECTED) 2] quitroot@zookeeper-0:/# exit
复制代码
在kubernetes集群外访问验证:
下载客户端软件
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz
复制代码
会提示,由于是假造机情何况只是检察能不能用,以是使用不
安全
的方式链接也无伤风雅
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz --no-check-certificatetar xf apache-zookeeper-3.8.4-bin.tar.gzcd apache-zookeeper-3.8.4-bin/cd bin/./zkCli.sh -server 192.168.10.11:32181
复制代码
出现以下提示分析必要jdk包
安装jdk
呃呃呃,路径忘了,但包名是
jdk-8u191-linux-x64.tar.gz
可以本身试着找找,我上传的时间表现资源已存在,可以找一找
传到假造机内
tar xf jdk-8u191-linux-x64.tar.gzmv jdk1.8.0_191/ /usr/local/jdkecho "export JAVA_HOME=/usr/local/jdk" >> /etc/profilesource /etc/profilecd /root/apache-zookeeper-3.8.4-bin/bin./zkCli.sh -server 192.168.10.11:32181
复制代码
[zk: 192.168.10.11:32181(CONNECTED) 2] create /key2 123[zk: 192.168.10.11:32181(CONNECTED) 3] get /key2[zk: 192.168.10.11:32181(CONNECTED) 4] quit
复制代码
完成
回复
使用道具
举报
返回列表
浏览过的版块
SQL-Server
物联网
Oracle
DevOps与敏捷开发
云原生
分布式数据库
飞不高
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表