k8s 部署 canal 集群,RocketMQ 模式

k8s 部署 canal 集群,RocketMQ 模式

  • k8s 部署 canal 集群,RocketMQ 模式
    • 前提
      • MySQL
      • RocketMQ
      • 制作 canal-admin、canal-server 镜像
    • 部署 zookeeper
    • 部署 canal-admin
    • 部署 canal-server
    • 测试

k8s 部署 canal 集群,RocketMQ 模式

前提

MySQL

开启 binlog 的 MySQL 服务器:192.168.59.1:3306

[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复

具有 slave 权限的账号:用户名 canal,密码:canal

CREATE USER canal IDENTIFIED BY 'canal';  
-- GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;

RocketMQ

RocketMQ 地址:192.168.56.1:9876

创建 tipoc:canal_test

RocketMQ-Dashboard 地址:192.168.56.1:8080,便于查看消息

制作 canal-admin、canal-server 镜像

由于 canal:v1.1.7 有一个 bug com.alibaba.otter.canal.server.embedded.CanalServerWithEmbedded isn’t start , please check · Issue #4930 ,而官方已经在 Release 1.1.8-alpha 中修复了这个问题,但没有发布官方的 docker 镜像,所以需要自己制作镜像。以下是我制作的镜像,已发布到 dockerhub,可直接使用

zhaobingshuang/canal-admin:v1.1.8-alpha
zhaobingshuang/canal-server:v1.1.8-alpha

部署 zookeeper

zk-configmap.yaml

数据目录配置为 /data

apiVersion: v1
kind: ConfigMap
metadata:name: zk-configmap
data:"zoo.cfg": |tickTime=2000dataDir=/dataclientPort=2181

zk-pvc.yaml

数据目录持久化

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: zk-data-pvc
spec:resources:requests:storage: 2GiaccessModes:- ReadWriteOnce

zk-deployment.yaml

无状态服务

将 zk-data-pvc 挂载到数据目录 /data,将 zk-configmap 的 zoo.cfg 挂载到 /conf/zoo.cfg 文件

apiVersion: apps/v1
kind: Deployment
metadata:name: zk
spec:replicas: 1selector:matchLabels:app: zktemplate:metadata:labels:app: zkspec:containers:- name: zkimage: zookeeperports:- containerPort: 2181name: servevolumeMounts:- mountPath: /dataname: zk-persistent-storage- mountPath: /confname: zk-configreadOnly: truevolumes:- name: zk-persistent-storagepersistentVolumeClaim:claimName: zk-data-pvc- name: zk-configconfigMap:name: zk-configmapitems:- key: zoo.cfgpath: zoo.cfg

zk-service.yaml

apiVersion: v1
kind: Service
metadata:name: zk
spec:selector:app: zkports:- protocol: TCPport: 2181targetPort: 2181type: ClusterIPclusterIP: None

执行以下命令

kubectl apply -f zk-configmap.yaml
kubectl apply -f zk-pvc.yaml
kubectl apply -f zk-deployment.yaml
kubectl apply -f zk-service.yaml

打开 kubernetes-dashboard,进入 zk pod 验证。

执行 create /cluster_1 创建 znode,为之后 canal-admin 创建集群使用

部署 canal-admin

执行 manager.sql 初始化数据库。

canal-admin-configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:name: canal-admin-configmap
data:"server.port": "8089""spring.datasource.address": "192.168.59.1:3306""spring.datasource.database": "canal_manager""spring.datasource.username": "canal""spring.datasource.password": "canal""canal.adminPasswd": "admin"

canal-admin-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: canal-admin
spec:selector:matchLabels:app: canal-admintemplate:metadata:labels:app: canal-adminspec:containers:- name: canal-adminimage: zhaobingshuang/canal-admin:v1.1.8-alphaports:- containerPort: 8089envFrom:- configMapRef:name: canal-admin-configmap

canal-admin-service.yaml

apiVersion: v1
kind: Service
metadata:name: canal-admin
spec:selector:app: canal-adminports:- protocol: TCPport: 8089targetPort: 8089type: ClusterIP

canal-admin-ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: canal-adminannotations:nginx.ingress.kubernetes.io/rewrite-target: /
spec:ingressClassName: nginxrules:- host: canal-admin.comhttp:paths:- path: /pathType: Prefixbackend:service:name: canal-adminport:number: 8089

执行以下命令

kubectl apply -f canal-admin-configmap.yaml
kubectl apply -f canal-admin-deployment.yaml
kubectl apply -f canal-admin-service.yaml
kubectl apply -f canal-admin-ingress.yaml

zhaobingshuang/canal-admin:v1.1.8-alpha 镜像比较大,需要等待一段时间等待,等 pod canal-admin 启动后,浏览器访问 http://canal-admin.com/。

用户名:admin,密码:123456

image-20240331132622062

创建集群,集群名称:cluster_1,ZK 地址:zk:2181/cluster_1

image-20240331133710507

点击主配置 -> 载入模板

image-20240331133859089

修改以下配置:

canal.zkServers =zk:2181/cluster_1
canal.serverMode = rocketMQ
canal.instance.global.spring.xml = classpath:spring/default-instance.xmlrocketmq.namesrv.addr = 192.168.56.1:9876
rocketmq.tag =canal

部署 canal-server

canal-server-configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:name: canal-server-configmap
data:canal.admin.manager: "canal-admin:8089"canal.admin.port: "11110"canal.admin.user: "admin"canal.admin.passwd: "4ACFE3202A5FF5CF467898FC58AAB1D615029441"canal.admin.register.auto: "true"canal.admin.register.cluster: "cluster_1"

canal-server-service.yaml

apiVersion: v1
kind: Service
metadata:name: canal-server-headless
spec:selector:app: canal-serverports:- port: 11110name: admin- port: 11111name: tcp- port: 11112name: metrictype: ClusterIPclusterIP: None

canal-server-statefulset.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:name: canal-server
spec:replicas: 1selector:matchLabels:app: canal-serverserviceName: canal-server-headlesstemplate:metadata:labels:app: canal-serverspec:containers:- name: canal-serverimage: zhaobingshuang/canal-server:v1.1.8-alphaenvFrom:- configMapRef:name: canal-server-configmapenv:- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: "metadata.namespace"- name: POD_HOSTvalueFrom:fieldRef:fieldPath: "metadata.name"- name: RAW_NAMEvalueFrom:fieldRef:fieldPath: "metadata.labels['app']"- name: canal.register.ipvalue: $(POD_HOST).$(RAW_NAME)-headless.$(POD_NAMESPACE)- name: canal.admin.register.namevalue: $(POD_HOST)ports:- containerPort: 11110name: admin- containerPort: 11111name: tcp- containerPort: 11112name: metric

执行以下命令:

kubectl apply -f canal-server-configmap.yaml
kubectl apply -f canal-server-service.yaml
kubectl apply -f canal-server-statefulset.yaml

等 pod canal-server启动后,查看 Server 管理

image-20240331134818584

测试

image-20240331135939826

载入模板,修改以下配置之后保存:

canal.instance.master.address=192.168.59.1:3306
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
canal.instance.filter.regex=test\\..*
canal.mq.topic=canal_test

image-20240331140245854

启动实例

image-20240331140306487

执行以下 SQL,创建数据库、创建表、插入数据:

CREATE DATABASE IF NOT EXISTS test;
USE test;
CREATE TABLE `table_1` (`id` int NOT NULL,`name` varchar(50) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
INSERT INTO table_1 VALUES(1, 'tom');
INSERT INTO table_1 VALUES(2, 'jack')

浏览器访问 http://192.168.56.1:8080/ 打开 RocketMQ-Dashboard 查看 canal_test 的消息:

image-20240331142133821

image-20240331141930518

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

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

相关文章

vulnhub----natraj靶机

文章目录 一.信息收集1.网段探测2.端口扫描3.版本服务探测4.漏扫5.目录扫描 二.漏洞利用1.分析信息2..fuzz工具 三.getshell四.提权六.nmap提权 一.信息收集 1.网段探测 因为使用的是VMware,靶机的IP地址是192.168.9.84 ┌──(root㉿kali)-[~/kali/vulnhub] └─…

JVM-面试-4-连炮,你能顶住么?

1、JVM的内存区域是怎么划分的? JVM的内存划分中,有部分区域是线程私有的,有部分是属于整个JVM进程;有些区域会抛出OOM异常,有些则不会,了解JVM的内存区域划分以及特征,是定位线上内存问题的基础…

Lua 和 Love 2d 教程 二十一点朴克牌 (上篇lua源码)

GitCode - 开发者的代码家园 Lua版完整原码 规则 庄家和玩家各发两张牌。庄家的第一张牌对玩家是隐藏的。 玩家可以拿牌(即拿另一张牌)或 停牌(即停止拿牌)。 如果玩家手牌的总价值超过 21,那么他们就爆掉了。 面牌…

Django源码之路由的本质(上)——逐步剖析底层执行流程

目录 1. 前言 2. 路由定义 3. 路由定义整体源码分析 3.1 partial实现path函数调用 3.2 图解_path函数 3.3 最终 4.URLPattern和Pattern的简单解析 5. 小结 1. 前言 在学习Django框架的时候,我们大多时候都只会使用如何去开发项目,对其实现流程并…

鸽哒言讯独家最新im即时通讯系统双端源码下载 (中越双语)带安卓未封装、苹果未封装、PC端(全开源)+部署教程

独家最新im即时通讯系统双端源码下载 (中越双语)带安卓未封装、苹果未封装、PC端(全开源)部署教程鸽哒IM即时通讯系统是一款类似于weixin的即时通讯软件,具有独立开发的特点。与网络其他聊天软件相比,即时聊…

文件同步工具哪个好

背景 今天介绍一款文件实时同步工具PanguFlow,它能够实时地监控源端文件夹的变化,然后将这种变化实时同步到目标端,对于文件灾备冗余的场景可谓是再合适不过了,一些老铁可能有这样的需求,比如两台服务器需要做文件的双机热备&…

模拟退火遗传算法GASA-附MATLAB代码

模拟退火遗传算法(Simulated Annealing Genetic Algorithm,SAGA)结合了模拟退火算法(Simulated Annealing,SA)和遗传算法(Genetic Algorithm,GA)的优点,用于解…

956: 约瑟夫问题的实现

【学习版】 【C语言】 #include <iostream> #include <string> #include <algorithm> #include <cmath> #include <cstdlib> using namespace std; typedef struct Lnode {int date;struct Lnode* next; }Lnode, * Linklist; int In(Linklist&…

如何开发创建自己的npm包并成功发布、维护至npm官方网站

npm&#xff0c;全称为Node Package Manager&#xff0c;是专为JavaScript生态系统设计的软件包管理系统&#xff0c;尤其与Node.js平台紧密关联。作为Node.js的默认包管理工具&#xff0c;npm为开发者提供了便捷的方式来安装、共享、分发和管理代码模块。 npm作为JavaScript世…

ROS 2边学边练(12)-- 创建一个工作空间

上一篇我们已经接触过工作空间的概念&#xff0c;并简单了解体验了一点构建包、测试包的流程&#xff0c;此篇会深入一点学习工作空间相关内容。 前言 一个工作空间是包含了ROS 2的功能包的目录&#xff08;文件夹&#xff09;&#xff0c;在使用ROS 2之前我们得激活一下目标工…

Codeforces CodeTON Round 8(Div.1 + Div.2) A~E

A. Farmer John’s Challenge (模拟) 题意&#xff1a; 构造一个长度为 n n n的数组&#xff0c;将这些数组围成一个圈&#xff08;顺时针&#xff09;从任意一个位置打开&#xff0c;有且仅有 k k k个非降序排列的数组。 分析&#xff1a; k 1 k1 k1时&#xff0c;升序输…

如何删除 iPhone 上的 iCloud 激活锁

Apple 在 iPhone 上通过不同的安全屏障来保护您的数据。 iCloud 激活锁可阻止外部人员访问您的手机。您可以通过打开“查找我的 iPhone”功能来激活此锁。 使用安全协议似乎是无害的&#xff0c;直到你到达门的另一边。如果您购买了带有激活锁的二手 iPhone 或忘记了 iCloud 凭…

「精细化管理」某物业集团精细化管理咨询项目纪实

实现工作例行化、定时化、程序化与可视化企业重视绩效考核&#xff0c;却总感觉考核不到点上&#xff1b;企业重视规划职责&#xff0c;却总感觉部门间职责不清&#xff1b;企业重视激励&#xff0c;却总感觉难以真正激励员工。到底是哪里出了问题&#xff1f;华恒智信指出&…

win11安装WSL UbuntuTLS

win11安装WSL WSL 简介WSL 1 VS WSL 2先决要求安装方法一键安装通过「控制面板」安装 WSL 基本命令Linux发行版安装Ubuntu初始化相关设置root用户密码网络工具安装安装1panel面板指导 WSl可视化工具问题总结WSL更新命令错误Ubuntu 启动初始化错误未解决问题 WSL 简介 Windows …

【QT+QGIS跨平台编译】056:【pdal_kazhdan+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

点击查看专栏目录 文章目录 一、pdal_kazhdan介绍二、pdal下载三、文件分析四、pro文件五、编译实践一、pdal_kazhdan介绍 pdal_kazhdan 是 PDAL(Point Data Abstraction Library)相关的 Kazhdan 算法的实现。PDAL 是一个用于处理和分析点云数据的开源库,而 Kazhdan 算法通常…

C语言 | Leetcode C语言题解之第9题回文数

题目&#xff1a; 题解&#xff1a; bool isPalindrome(int x) {if(x < 0)return false;long int sum0;long int nx;while(n!0){sumsum*10n%10;nn/10;}if(sumx)return true;elsereturn false; }

LLaMA-Factory微调(sft)ChatGLM3-6B保姆教程

LLaMA-Factory微调&#xff08;sft&#xff09;ChatGLM3-6B保姆教程 准备 1、下载 下载LLaMA-Factory下载ChatGLM3-6B下载ChatGLM3windows下载CUDA ToolKit 12.1 &#xff08;本人是在windows进行训练的&#xff0c;显卡GTX 1660 Ti&#xff09; CUDA安装完毕后&#xff0c…

前端路径问题总结

1.相对路径 不以/开头 以当前资源的所在路径为出发点去找目标资源 语法: ./表示当前资源的路径 ../表示当前资源的上一层路径 缺点:不同位置,相对路径写法不同2.绝对路径 以固定的路径作为出发点作为目标资源,和当前资源所在路径没关系 语法:以/开头,不同的项目中,固定的路径…

【Godot4自学手册】第三十四节来回无限滚动的伤害铁刺球

本节主要学习给地宫添加来回滚动的铁刺球&#xff0c;铁刺球共有两个方向&#xff0c;一个是左右方向&#xff1b;另一个是上下方向。如果主人公不小心碰到球&#xff0c;就会收到伤害。这是地宫的第一个机关。 一、新建场景并布局节点 把我们准备好的铁球图片素材拖入到文件…

基于单片机的测时仪系统设计

**单片机设计介绍&#xff0c;基于单片机的测时仪系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的测时仪系统设计是一个结合了单片机技术与测时技术的综合性项目。该设计的目标是创建一款精度高、稳定性强且…