【传统方式部署zookeeper集群与迁移至k8s】

news2024/11/16 1:41:26

zookeeper简介:

	zk主要服务于分布式系统、配置管理、注册中心、集群管理等;
	
	为什么要迁移Zookeeper集群;
	存储kafka什么数据:kafka有多少节点、topic名称、协调kafka正常运行。
	
	ELK+Kafka收集k8s日志;

一、传统方式部署zookeeper集群

环境说明

192.168.79.34 node1
192.168.79.35 node2
192.168.79.36 node3

1、 所有node节点操作:

#所有节点安装java, 下载zk解压
yum install java -y
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.0/apache-zookeeper-3.8.0-bin.tar.gz --no-check-certificate
tar xf apache-zookeeper-3.8.0-bin.tar.gz -C /opt
ln -s /opt/apache-zookeeper-3.8.0-bin/ /opt/zookeeper
mkdir /opt/zookeeper/logs
mkdir /opt/zookeeper/data

修改zoo.cfg
#node1的

cat /opt/zookeeper/conf/zoo.cfg

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=../data
dataLogDir=../logs
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
maxClientCnxns=60

# 客户端获取 zookeeper 服务的当前状态及相关信息
4lw.commands.whitelist=*

# 三个接点配置,格式为: server.服务编号=服务地址、LF通信端口、选举端口
server.1=192.168.79.34:2888:3888
server.2=192.168.79.35:2888:3888
server.3=192.168.79.36:2888:3888

node2的

cat /opt/zookeeper/conf/zoo.cfg

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=../data
dataLogDir=../logs
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
maxClientCnxns=60

# 客户端获取 zookeeper 服务的当前状态及相关信息
4lw.commands.whitelist=*

# 三个接点配置,格式为: server.服务编号=服务地址、LF通信端口、选举端口
server.1=192.168.79.34:2888:3888
server.2=192.168.79.35:2888:3888
server.3=192.168.79.36:2888:3888

node3的

cat /opt/zookeeper/conf/zoo.cfg

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=../data
dataLogDir=../logs
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
maxClientCnxns=60

# 客户端获取 zookeeper 服务的当前状态及相关信息
4lw.commands.whitelist=*

# 三个接点配置,格式为: server.服务编号=服务地址、LF通信端口、选举端口
server.1=192.168.79.34:2888:3888
server.2=192.168.79.35:2888:3888
server.3=192.168.79.36:2888:3888

创建节点标记ID

#node1操作
echo "1" > /opt/zookeeper/data/myid
#node2操作
echo "2" > /opt/zookeeper/data/myid
#node3操作
echo "3" > /opt/zookeeper/data/myid

启动zookeeper

 cd /opt/zookeeper/bin/
 ./zkServer.sh start

集群状态检查

[root@node4 bin]# bash zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower


[root@node5-db bin]# bash zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader

[root@node6 bin]# bash zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower

报错处理

在这里插入图片描述

2023-04-26 17:33:28,909 [myid:] - ERROR [ListenerHandler-/192.168.19.35:3888:o.a.z.s.q.QuorumCnxManager$Listener$ListenerHandler@1099] - Exception while listening to address /192.168.19.35:3888
java.net.BindException: 无法指定被请求的地址 (Bind failed)
	at java.net.PlainSocketImpl.socketBind(Native Method)
	at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:513)


答: 原因地址写错了。 错误:192.168.19.35 ,正确的:192.168.79.35

二、制作ZK集群镜像

2.1 编写dockerfile

FROM openjdk:8-jre
#改时区,复制zk包,cfg文件,重命名。
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo 'Asia/Shanghai' > /etc/timezone

ENV VERSION=3.8.0
ADD ./apache-zookeeper-${VERSION}-bin.tar.gz /
ADD ./zoo.cfg /apache-zookeeper-${VERSION}-bin/conf

RUN mv /apache-zookeeper-${VERSION}-bin /zookeeper

ADD ./entrypoint.sh /entrypoint.sh

#设定ZK对外暴露的端口;[客户端端口,LF通信端口,选举端口]    
EXPOSE 2181 2888 3888  
CMD ["/bin/bash","/entrypoint.sh"] 

2.2 编写zoo.cfg

# 服务器之间或客户端与服务器之间维持心跳的时间间隔 tickTime以毫秒为单位。
tickTime={ZOOK_TICKTIME}

# 集群中的follower服务器(F)与leader服务器(L)之间的初始连接心跳数 10* tickTime
initLimit={ZOOK_INIT_LIMIT}

# 集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数 5 * tickTime
syncLimit={ZOOK_SYNC_LIMIT}

# 数据保存目录
dataDir={ZOOK_DATA_DIR}

# 日志保存目录
dataLogDir={ZOOK_LOG_DIR}

# 客户端连接端口
clientPort={ZOOK_CLIENT_PORT}

# 客户端最大连接数。#默认为60个
maxClientCnxns={ZOOK_MAX_CLIENT_CNXNS}

# 客户端获取 zookeeper 服务的当前状态及相关信息
4lw.commands.whitelist=*

# 集群节点地址:格式为: server.服务编号=服务地址、LF通信端口、选举端口
# 不建议将地址写死配置文件,建议通过entrypoint脚本传递进来

2.3 编写entrypoint.sh


#设定变量
ZOOK_BIN_DIR=/zookeeper/bin
ZOOK_CONF_DIR=/zookeeper/conf/zoo.cfg

# 2、对配置文件中的字符串进行变量替换
sed -i s@{ZOOK_TICKTIME}@${ZOOK_TICKTIME:-2000}@g ${ZOOK_CONF_DIR}
sed -i s@{ZOOK_INIT_LIMIT}@${ZOOK_INIT_LIMIT:-10}@g ${ZOOK_CONF_DIR}
sed -i s@{ZOOK_SYNC_LIMIT}@${ZOOK_SYNC_LIMIT:-5}@g ${ZOOK_CONF_DIR}
sed -i s@{ZOOK_DATA_DIR}@${ZOOK_DATA_DIR:-/data}@g ${ZOOK_CONF_DIR}

sed -i s@{ZOOK_LOG_DIR}@${ZOOK_LOG_DIR:-/logs}@g ${ZOOK_CONF_DIR}
sed -i s@{ZOOK_CLIENT_PORT}@${ZOOK_CLIENT_PORT:-2181}@g ${ZOOK_CONF_DIR}
sed -i s@{ZOOK_MAX_CLIENT_CNXNS}@${ZOOK_MAX_CLIENT_CNXNS:-60}@g ${ZOOK_CONF_DIR}

# 3、准备ZK的集群节点地址,后期肯定是需要通过ENV的方式注入进来
for server in ${ZOOK_SERVERS}
do
	echo ${server} >> ${ZOOK_CONF_DIR}
done

# 4、在datadir目录中创建myid的文件,并填入对应的编号. k8s使用sts来部署zk集群
#例子:echo -e $(( $(echo "zk-1" | sed -r s#.*-##) + 1 ))
ZOOK_MYID=$(( $(hostname | sed 's#.*-##g') + 1 ))
echo ${ZOOK_MYID:-99} > ${ZOOK_DATA_DIR:-/data}/myid


#5、前台运行Zookeeper
cd ${ZOOK_BIN_DIR}
./zkServer.sh start-foreground

2.4 构建镜像,推送到仓库

[root@node4 zk-dockerfile]# ls
apache-zookeeper-3.8.0-bin.tar.gz  Dockerfile  entrypoint.sh  zoo.cfg

docker build -t harbor.oldxu.net/base/zookeeper:3.8.0 .
docker push harbor.oldxu.net/base/zookeeper:3.8.0

三、迁移ZK集群到K8S

3.1 迁移ZK思路

1、Zookeeper属于有状态服务;
2、Zookeeper集群存在角色之分;
2、Zookeeper集群每个节点都需要存储自己的数据;
4、Zookeeper集群每个节点都需要有一个唯一的地址;

3.2 创建headless service

01-zookeeper-headless.yaml

apiVersion: v1
kind: Service
metadata:
  name: zk-svc
spec:
  clusterIP: None
  selector:
    app: zk
  ports:
  - name: client
    port: 2181
    targetPort: 2181
  - name: leader-follwer
    port: 2888
    targetPort: 2888
  - name: selection
    port: 3888
    targetPort: 3888

3.3 创建StatefulSet

02-zk-sts.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: zookeeper
spec:
  serviceName: "zk-svc"
  replicas: 3
  selector:
    matchLabels:
      app: zk
  template:
    metadata:
      labels:
        app: zk
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                - key: app
                  operator: In
                  values: ["zk"]
              topologyKey: "kubernetes.io/hostname"
      imagePullSecrets:
      - name: harbor-login
      
      containers:
      - name: zk
        image: harbor.oldxu.net/base/zookeeper:3.8.0
        imagePullPolicy: IfNotPresent
        ports:
        - name: client
          containerPort: 2181
        - name: leader-follwer
          containerPort: 2888
        - name: selection
          containerPort: 3888
        
        env:
        - name: ZOOK_SERVERS
          value: "server.1=zookeeper-0.zk-svc.default.svc.cluster.local:2888:3888 server.2=zookeeper-1.zk-svc.default.svc.cluster.local:2888:3888 server.3=zookeeper-2.zk-svc.default.svc.cluster.local:2888:3888" 
        
        readinessProbe:     # 就绪探针,不就绪则不介入流量
          exec:
            command:
            - "/bin/bash"
            - "-c"
            - '[[ "$(/zookeeper/bin/zkServer.sh status 2>/dev/null | grep 2181)" ]] && exit 0 || exit 1'
          initialDelaySeconds: 5
        
        livenessProbe:    #存活探针。如果不存活则根据重启策略进行重启
          exec:
            command:
            - "/bin/bash"
            - "-c"
            - '[[ "$(/zookeeper/bin/zkServer.sh status 2>/dev/null | grep 2181)" ]] && exit 0 || exit 1'            
          initialDelaySeconds: 5
        
        volumeMounts:
        - name: data
          mountPath: /data
          
  volumeClaimTemplates:
  - metadata:
      name: data
    spec:
      accessModes: ["ReadWriteMany"]
      storageClassName: "nfs"
      resources:
        requests:
          storage: 20Gi

3.4 检查Zookeeper集群

1、查看Pod以及Service
在这里插入图片描述

service/zk-svc              ClusterIP      None             <none>                                 2181/TCP,2888/TCP,3888/TCP   16m

2、检查集群状态

[root@master01 zookeeperProject]# kubectl exec -it zookeeper-0 -- /zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower


[root@master01 zookeeperProject]# kubectl exec -it zookeeper-1 -- /zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader


[root@master01 zookeeperProject]# kubectl exec -it zookeeper-2 -- /zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower

其他:

[root@master01 zookeeperProject]# dig @10.96.0.10 zk-svc.default.svc.cluster.local +short
10.244.0.4
10.244.2.228
10.244.1.239

[root@master01 zookeeperProject]# dig @10.96.0.10 zookeeper-0.zk-svc.default.svc.cluster.local +short
10.244.2.228

[root@master01 zookeeperProject]# dig @10.96.0.10 zookeeper-1.zk-svc.default.svc.cluster.local +short
10.244.1.239

[root@master01 zookeeperProject]# dig @10.96.0.10 zookeeper-2.zk-svc.default.svc.cluster.local +short
10.244.0.4


3、连接Zookeeper集群
在这里插入图片描述

[root@master01 zookeeperProject]# kubectl exec -it zookeeper-2 -- /bin/bash

root@zookeeper-2:/# /zookeeper/bin/zkCli.sh -server zk-svc
Connecting to zk-svc

[zk: zk-svc(CONNECTED) 0] create /hello lss
Created /hello
[zk: zk-svc(CONNECTED) 1] get /hello 
lss
[zk: zk-svc(CONNECTED) 2] 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/466810.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浙江省区块链数字资产登记中心筹备会议顺利举行

4月25日下午&#xff0c;由浙江省区块链技术应用协会主办、西溪谷管委会、西湖区网联会协办的“浙江省区块链数字资产登记中心筹备会议”在西湖蚂蚁小镇多功能厅顺利举行。 出席本次筹备会议的有中国电子技术标准化研究院区块链研究室主任、IEEE 计算机 协会区块链和分布式记帐…

设计模式--桥接模式

传统方案解决手机操作问题分析 (1) 扩展性问题(类爆炸) 如果我们再增加手机的样式(全面屏) 就需要增加各个品牌手机的类 同样如果我们增加一个手机品牌 也要在各个手机样式类下增加 (2) 违反了单一职责原则 当我们增加手机样式时 要同时增加所有品牌的手机 增大了代码维护成本…

【STM32】基础知识 第九课 STM32启动

【STM32】基础知识 第九课 STM32启动 MAP 文件MAP 文件浅析MAP 文件组成atk_f103.map 文件 启动模式STM32 启动模式 (F1) STM32 启动过程启动文件介绍Reset_Handler 函数介绍堆栈简介 MAP 文件 MAP 文件是 MDK 编译代码后, 产生的集程序, 数据及 IO 空间的一种映射列表文件. 简…

谁是液冷行业真龙头?疯狂的液冷技术!

“人工智能领域AIGC”、“ChatGPT”、“数据特区”、“东数西算”、“数据中心”&#xff0c;可以说是2023年最热的概念&#xff0c;算力提升的背后&#xff0c;处理器的功耗越来越高&#xff0c;想发挥出处理器的最高性能&#xff0c;需要更高的散热效率。 算力井喷之下&…

Blender 建模案例一(1)

目录 1. 指环1.1 创建一个柱体1.2 柱体微调1.3 缩放1.4 应用缩放1.5 物体属性回归默认1.6 进入编辑模式1.7 内插面1.8 桥接循环边1.9 添加表面细分修改器1.10 平滑着色1.11 添加环切 2. 卷轴2.1 添加曲线2.2 进入正交前视图2.3 添加节点2.4 曲线转3D 1. 指环 1.1 创建一个柱体…

Wifi ESL方案介绍

革新点&#xff1a; 7.5寸墨水屏显示WIFI无线通信&#xff0c;极简部署&#xff0c;远程控制按键及LED指示灯指示640*384点阵屏幕锂电池供电&#xff0c;支持USB充电DIY界面支持文本/条码/二维码/图片超低功耗/超长寿命&#xff0c;一次充电可用一年基于现有Wifi环境&#xff…

APS54083 深度调光降压恒流驱动IC 8A LED摩托汽车舞台工作灯IC PWM调光 优化线路图

APS54083 是一款 PWM 工作模式,高效率、外 围简单、外置功率 MOS 管&#xff0c;适用于 5-220V 输入高精度降压 LED 恒流驱动芯片。输出最大 功率150W最大电流 6A。APS54083 可实现线 性调光和 PWM 调光&#xff0c;线性调光脚有效电压 范围 0.5-2.5V.PWM 调光频率范围 1…

第一天 :虚拟机的安装、Centos的安装、FinalShell的安装

Linux学习之虚拟机的安装 一、虚拟机的下载二、虚拟机的安装三、Centos的安装四、vm中安装centos五、finalShell安装 一、虚拟机的下载 1、进入安装官网https://www.vmware.com/cn/products/workstation-pro.html 2、下滑点击试用版下载 3、点击后在新页面下滑&#xff0c;找…

CnOpenData中国汽车能源消耗量数据

一、数据简介 工业和信息化部组织制定的《乘用车燃料消耗量限值》强制性国家标准&#xff08;GB19578-2021&#xff09;于2021年7月1日起正式实施&#xff0c;该标准规定了燃用汽油或柴油燃料、最大设计总质量不超过3500kg的M1类车辆在今后一段时期的燃料消耗量限值要求&#x…

瑞芯微RK3568智慧视频录像机NVR设备解决方案

NVR技术应用功能模式&#xff0c;较为灵活且能够在很大程度上满足当今视频监控系统功能需求。以NVR技术为核心的小型NVR方案&#xff0c;具有规模较小、操作灵活、使用方便、经济实用等优点&#xff0c;其前端主要配合高清视频摄像机支持8路720P的高清视频图像接入&#xff0c;…

刚进公司就负责项目,把老弟整蒙了!

刚进公司就负责项目&#xff0c;把老弟整蒙了&#xff01; 大家好&#xff0c;我是鱼皮&#xff0c;先把封面图送给大家&#xff1a; 又快到周末了&#xff0c;今天分享一些轻松的编程经验~ 还记得我学编程的老弟小阿巴么&#xff1f;他目前大二&#xff0c;听说最近刚刚找到…

java 版本企业电子招投标采购系统源码之登录页面

​ 信息数智化招采系统 服务框架&#xff1a;Spring Cloud、Spring Boot2、Mybatis、OAuth2、Security 前端架构&#xff1a;VUE、Uniapp、Layui、Bootstrap、H5、CSS3 涉及技术&#xff1a;Eureka、Config、Zuul、OAuth2、Security、OSS、Turbine、Zipkin、Feign、Monitor、…

基于python的socket网络通信【1】

一、Socket原理 学习了大佬的知识&#xff0c;简单记一些笔记 https://www.jianshu.com/p/066d99da7cbd http://c.biancheng.net/view/2351.html 1.1什么是Socket 在计算机通信领域&#xff0c;socket 被翻译为“套接字”&#xff0c;它是计算机之间进行通信的一种约定或一种…

Speech and Language Processing-之最小化编辑距离

今天讲编辑距离。 编辑距离为我们提供了一种量化这两种关于字符串相似度的直觉的方法。更正式地说&#xff0c;两个字符串之间的最小编辑距离定义为将一个字符串转换为另一个字符串所需的最小编辑操作(插入、删除、替换等操作)数量。 如上&#xff0c;图中第一行字符串和第二行…

Java-代码生成器的实现

文章目录 前言一、概述二、手写代码1. 简要说明2. 代码编写3. 完整代码4. 测试效果 三、项目源码 前言 最近看了一个开源的项目&#xff0c;jfinal-layui&#xff0c;然后这个项目里面有一个 代码生成器 的功能 之前虽然有用过代码生成器&#xff0c;但是从来没有看过相关的源…

【react从入门到精通】react入门这一篇就够了

文章目录 前言什么是 React&#xff1f;安装和配置 React创建 React 组件渲染 React 组件使用 JSX传递属性&#xff08;Props&#xff09;处理组件状态&#xff08;State&#xff09;处理用户输入&#xff08;事件处理&#xff09;组合和嵌套组件写在最后 前言 React 是一种由 …

一些技术管理常见问题笔记

空降管理&#xff1a; 1 真诚靠谱&#xff1a; 思考我们能给上级、下级、公司带来什么价值。 遇到冲突&#xff0c;怎么决策&#xff1f; 团队、合作方了解清楚。 团队同学的简历&#xff0c;工作情况&#xff0c;背景能力有了解。 对应的产品经理、业务方的思维、背景。…

改善电商实时聊天体验的 5 大方法

今天&#xff0c;大多数网站都提供实时聊天支持作为选项。这是因为客户压倒性地将实时聊天列为他们的首选联系方式。 高达86%的消费者愿意在更好的客户体验上花费更多&#xff0c;但只有1%的人的期望始终得到满足&#xff0c;对于能够正确进行实时聊天的品牌来说&#xff0c;这…

润滑剂产业互联网平台搭建

润滑剂是一种广泛应用于工业、交通运输和农业等领域的重要物质&#xff0c;而润滑剂产业互联网平台的搭建可以更好地满足企业和用户的需求&#xff0c;提高行业效率&#xff0c;提升企业竞争力。下面是润滑剂产业互联网平台搭建的一些步骤和关键考虑因素&#xff1a; 确定平台的…

在KylinV10安装Dm8

前言 因为近期&#xff0c;业外和几个朋友想搞点有趣的项目玩玩&#xff0c;既然不以盈利为主&#xff0c;就> 主推国产化&#xff0c;所以这篇记录一下&#xff0c;我在KylinV10安装dm8.最近真的很忙&#xff0c;要负责专研一下国产化工具开发的事&#xff0c;还要负责tb级…