k8s 部署canal admin及server单机服务

news2024/11/15 17:24:07

目录

1. 前言

2. 部署canal-admin

2.1 数据库初始化

2.2 canal-admin k8s yaml部署文件

3. 部署canal-server单机


1. 前言

  • canal官方文档:https://github.com/alibaba/canal/wiki

主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。

部署清单

软件版本备注
canal-adminv1.1.6镜像:canal/canal-admin:v1.1.6
canal-serverv1.1.6镜像:canal/canal-server:v1.1.6,单机部署
mysql5.7.19

部署步骤
a. 初始化数据库及创建用户
b. 编写 K8s yaml文件

2. 部署canal-admin


2.1 数据库初始化

 
mysql执行以下sql脚本,创建库 'canal_manager' 用来存放canal-admin的数据,server、instance配置等数据

# 初始化sql脚本
https://raw.githubusercontent.com/alibaba/canal/canal-1.1.6/admin/admin-web/src/main/resources/canal_manager.sql 

# 具体如下
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `canal_manager` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */;

USE `canal_manager`;

SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for canal_adapter_config
-- ----------------------------
DROP TABLE IF EXISTS `canal_adapter_config`;
CREATE TABLE `canal_adapter_config` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `category` varchar(45) NOT NULL,
  `name` varchar(45) NOT NULL,
  `status` varchar(45) DEFAULT NULL,
  `content` text NOT NULL,
  `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for canal_cluster
-- ----------------------------
DROP TABLE IF EXISTS `canal_cluster`;
CREATE TABLE `canal_cluster` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(63) NOT NULL,
  `zk_hosts` varchar(255) NOT NULL,
  `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for canal_config
-- ----------------------------
DROP TABLE IF EXISTS `canal_config`;
CREATE TABLE `canal_config` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `cluster_id` bigint(20) DEFAULT NULL,
  `server_id` bigint(20) DEFAULT NULL,
  `name` varchar(45) NOT NULL,
  `status` varchar(45) DEFAULT NULL,
  `content` text NOT NULL,
  `content_md5` varchar(128) NOT NULL,
  `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `sid_UNIQUE` (`server_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for canal_instance_config
-- ----------------------------
DROP TABLE IF EXISTS `canal_instance_config`;
CREATE TABLE `canal_instance_config` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `cluster_id` bigint(20) DEFAULT NULL,
  `server_id` bigint(20) DEFAULT NULL,
  `name` varchar(45) NOT NULL,
  `status` varchar(45) DEFAULT NULL,
  `content` text NOT NULL,
  `content_md5` varchar(128) DEFAULT NULL,
  `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name_UNIQUE` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for canal_node_server
-- ----------------------------
DROP TABLE IF EXISTS `canal_node_server`;
CREATE TABLE `canal_node_server` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `cluster_id` bigint(20) DEFAULT NULL,
  `name` varchar(63) NOT NULL,
  `ip` varchar(63) NOT NULL,
  `admin_port` int(11) DEFAULT NULL,
  `tcp_port` int(11) DEFAULT NULL,
  `metric_port` int(11) DEFAULT NULL,
  `status` varchar(45) DEFAULT NULL,
  `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for canal_user
-- ----------------------------
DROP TABLE IF EXISTS `canal_user`;
CREATE TABLE `canal_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(31) NOT NULL,
  `password` varchar(128) NOT NULL,
  `name` varchar(31) NOT NULL,
  `roles` varchar(31) NOT NULL,
  `introduction` varchar(255) DEFAULT NULL,
  `avatar` varchar(255) DEFAULT NULL,
  `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

SET FOREIGN_KEY_CHECKS = 1;

-- ----------------------------
-- Records of canal_user
-- ----------------------------
BEGIN;
INSERT INTO `canal_user` VALUES (1, 'admin', '6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9', 'Canal Manager', 'admin', NULL, NULL, '2019-07-14 00:05:28');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;

2.2 canal-admin k8s yaml部署文件


创建部署 deployment.yaml,资源清单包含:service,deployment,configmap,ingress。使用官方canal-admin镜像部署,可以通过环境变量的方式传递数据库配置(而不用修改canal-admin/conf/application.yml文件),因此,configmap存放了数据库等相关配置

canal-admin服务监听端口为:8089


canal-admin 部署文件

apiVersion: v1
kind: Service
metadata:
  name: canal-admin
spec:
  selector:
    app: canal-admin
  ports:
    - name: http
      protocol: TCP
      port: 8089
      targetPort: 8089 
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: canal-admin
  labels:
    app: canal-admin
spec:
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: app
            operator: In
            values:
            - canal-admin
        topologyKey: "kubernetes.io/hostname"
  replicas: 1
  selector:
    matchLabels:
      app: canal-admin
  template:
    metadata:
      labels:
        app: canal-admin
    spec:
      restartPolicy: "Always"
      containers:
      - name: canal-admin
        image: canal/canal-admin:v1.1.6
        imagePullPolicy: "IfNotPresent"
        resources:
          limits:
            cpu: "1000m"
            memory: "3Gi"
          requests:
            cpu: "50m"
            memory: "2Gi"
        ports:
        - containerPort: 8089
          name: http
          protocol: TCP
        envFrom:
          - configMapRef:
              name: canal-admin-cm
        readinessProbe:
          failureThreshold: 3
          periodSeconds: 5
          initialDelaySeconds: 10
          successThreshold: 1
          httpGet:
            port: 8089
            path: /
        livenessProbe:
          httpGet:
            port: 8089
            path: /
          initialDelaySeconds: 10
          periodSeconds: 10
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: canal-admin-ingress
spec:
  ingressClassName: nginx
  rules:
  - host: canal-admin.test.cn
    http:
      paths:
      - backend:
          service:
            name: canal-admin
            port:
              number: 8089
        path: /
        pathType: Prefix
---
# configmap
# kubectl create configmap game-config --from-file=docs/user-guide/configmap/kubectl
apiVersion: v1
kind: ConfigMap
metadata:
  name: canal-admin-cm
data:
  # replace your filename of properties configration and contents here.
  # canal-admin服务端口
  server.port: "8089"
  # canal-server注册到canal-admin时用的用户
  canal.adminUser: "admin"
  # canal-server注册到canal-admin时用的密码,注意这不是canal-admin 管理 web 的登录密码
  canal.adminPasswd: "123456"
  # 存放canal-admin数据的外部数据库配置
  spring.datasource.address: "192.168.1.221:3306"
  spring.datasource.database: "canal_manager"
  spring.datasource.username: "canal"
  spring.datasource.password: "canal"

部署 

# kubectl部署
kubectl apply -f deployment.yaml
# 查看部署结果
kubectl get svc 
NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                               AGE
canal-admin             ClusterIP   10.43.215.112   <none>        8089/TCP                              4d21h
kubectl get pod -l app=canal-admin
NAME                           READY   STATUS    RESTARTS   AGE
canal-admin-795bb556d7-l2jgh   1/1     Running   0          23h
> kubectl get ingress -n tools
NAME                    CLASS   HOSTS                    ADDRESS        PORTS     AGE
canal-admin-ingress     nginx   canal-admin.test.cn     192.168.1.145   80      4d21h

部署完可以通过ingress配置的域名进行访问,如:http://canal-admin.test.cn,默认帐号密码:admin/123456

 

3. 部署canal-server单机


canal-server这里部署的是单机版,不需要sql初始化,直接部署即可,注意部署中的变量传递,canal-admin password是在2.2章节中的canal.adminPasswd的密文模式

密文模式 

# 2.2配置的 canal.adminPasswd: "123456",则明文密码为:123456,密文为
# 登录任一mysql,通过select查询语句 
 select password('123456');
 password('123456')
 *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
# 密文为查询结果去掉*的内容,如下
6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9

canal-server 部署文件
服务端口11110,用于canal-admin通信,开启自动注册到canal-admin,注册IP为canal-server-headless.svc

apiVersion: v1
kind: Service
metadata:
  name: canal-server-headless
  labels:
    app: canal-server
spec:
  type: ClusterIP
  clusterIP: None
  ports:
    - port: 11110
      name: http
      targetPort: 11110
    - name: tcp11112
      protocol: TCP
      port: 11112
      targetPort: 11112    
  selector:
    app: canal-server
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: canal-server
spec:
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: app
            operator: In
            values:
            - canal-server
        topologyKey: "kubernetes.io/hostname"
  replicas: 1
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  selector:
    matchLabels:
      app: canal-server
  template:
    metadata:
      labels:
        app: canal-server
    spec:
      containers:
        - name: canal-server
          imagePullPolicy: Always
          image: canal/canal-server:v1.1.6
          resources:
            limits:
              memory: 3Gi
              cpu: 1000m
            requests:
              cpu: 50m
              memory: 2Gi
          ports:
            - containerPort: 11110
              name: http
              protocol: TCP  
            - containerPort: 11112
              name: tcp11112
              protocol: TCP  
          env:
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.name
            - name: SERVICE_NAME
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: 'metadata.labels[''app'']'
            - name: STS_NAMESPACE
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.namespace
            - name: canal.register.ip
              value: canal-server-headless.svc
            - name: canal.admin.manager
              value: 'canal-admin:8089'
            - name: canal.admin.port
              value: '11110'
            - name: canal.admin.user
              value: 'admin'
            - name: canal.admin.passwd # 注意这里是2.2章节配置的canal-admin password密文
              value: '6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9'
            - name: canal.admin.register.auto
              value: 'true'
            - name: canal.admin.register.name
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.name

部署 

# kubectl部署
kubectl apply -f deployment.yaml
kubectl get svc 
NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                               AGE
canal-server-headless   ClusterIP   None            <none>        11110/TCP,11111/TCP,11112/TCP         23h
kubectl get pod -l app=canal-server
NAME             READY   STATUS    RESTARTS   AGE
canal-server-0   1/1     Running   0          18h

部署成功后,可以在canal-admin查看注册结果及运行状态

 

 

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

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

相关文章

一文读懂深度学习中文本处理的4种方式

一、序言文本处理方式是深度学习领域中自然语言处理的基础&#xff0c;即把文本转变成计算机识别的语言过程。转变之后才能用算法做后续的文本分析和理解。所以有必要了解文本处理的几种方式&#xff0c;做到对不同的场景采用不同的处理方式。常见的文本处理方式有独热编码(one…

OSI参考模型与TCP/IP模型比较

TCP/IP模型 — TCP/IP协议簇 TCP/IP分为两种体系结构&#xff0c;一种是分为四层网络接口层、网络层、传输层和应用层&#xff1b;另外一种是分为五层物理层、数据链路层、网络层、传输层和应用层。这两种体系结构都对。 TCP/IP四层模型 — TCP/IP标准模型 TCP/IP五层模型 — T…

hive数据仓库搭建

一、虚拟机安装CentOS7并配置共享文件夹 二、CentOS 7 上hadoop伪分布式搭建全流程完整教程 三、本机使用python操作hdfs搭建及常见问题 四、mapreduce搭建 五、mapper-reducer编程搭建 六、hive数据仓库安装 hive数据仓库搭建一、hive数据仓库安装1.1下载hive安装包1.2修改配置…

2022年亚太杯APMCM数学建模大赛C题全球是否变暖求解全过程文档及程序

2022年亚太杯APMCM数学建模大赛 C题 全球是否变暖 为方便各位阅览及了解掌握亚太杯的写作技巧&#xff0c;这里非技术使用中文&#xff0c;公式部分由于翻译过程繁琐使用英文来撰写此文章. 原题再现&#xff1a; 加拿大的49.6C创造了地球北纬50以上地区的气温新纪录&#xf…

SpringBoot的字符画(banner.txt)

好多小伙伴最近问我如何在启动项目的时候&#xff0c;在控制台打印如下的图案logo 其实很简单&#xff0c;Springboot提供了很方便的操作&#xff0c;在resource目录先新建一个banner.txt 然后将我们想要的图案拼接即可&#xff0c;如下图&#xff1a; 配置完成后正常启动项目…

TorchServe 详解:5 步将模型部署到生产环境

内容导读 TorchServe 自 2020 年 4 月推出至今&#xff0c;经历了 2 年多的发展&#xff0c;变得愈发成熟和稳定&#xff0c;本文将对 TorchServe 进行全面介绍。 TorchServe 是 PyTorch 中将模型部署到生产环境的首选解决方案。它是一个性能良好且可扩展的工具&#xff0c;用 …

【Java】多线程详解

目录 一、线程简介 进程&#xff08;Process &#xff09;与 线程&#xff08;Thread&#xff09; 二、线程创建 1、线程Thread 1.1. 步骤 1.2 应用 1.3 案例&#xff1a;下载图片 2、实现Runnable接口 2.1 步骤 2.2 应用 3.小结 3. 实现Callable接口&#xff08;了解…

利用Github账号实现(多个)个人网站

创建仓库 命名一定要是<username>.github.io这种形式username就是自己github账号的用户名。因为我已经有这个仓库&#xff0c;所以这里的报错可以忽略。 往仓库放入静态html文件 命名为index.html&#xff0c;随便放点内容。 在设置里面开启github page 这里可以选…

verilog学习笔记- 2)时序约束文件

目录 为什么要创建时序约束文件&#xff1f; 时序&#xff1a; 创建时序约束文件&#xff1a; 为什么要创建时序约束文件&#xff1f; 对于一些简单的工程时序的要求并不是特别的严格&#xff0c;添不添加时序约束文件影响不大。但是对于一些复杂的工程&#xff0c;涉及到高…

【SpringBoot应用篇】SpringBoot 启动扩展点/常用接口

【SpringBoot应用篇】SpringBoot 启动扩展点/常用接口SpringBoot常用的接口ApplicationContextInitializerBeanDefinitionRegistryPostProcessorBeanFactoryPostProcessorInstantiationAwareBeanPostProcessorSmartInstantiationAwareBeanPostProcessorBeanFactoryAwareApplica…

Dom 重点核心

关于dom操作&#xff0c;主要针对元素的操作。 主要有创建&#xff0c;增&#xff0c;删&#xff0c;改&#xff0c;查&#xff0c;属性操作&#xff0c;事件操作。 一、创建 1.document.write 2.innerHTML 3.createElement 二、增 1.appendChild&#xff08;在后面添加&am…

【iOS】块与大中枢派发

文章目录[TOC](文章目录)前言理解“块”这一概念块的基础知识块的内部结构全局块&#xff0c;栈块&#xff0c;堆块为常用的块类型创建typedef用handler块降低代码分散程度用块引用其所属对象时不要出现保留环多用派发系列&#xff0c;少用同步锁多用GCD&#xff0c;少用perfor…

Linux/ARM下QT MQTT库的编译安装

&#x1f482; 个人主页:风间琉璃&#x1f91f; 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主&#x1f4ac; 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦目录 一、 Linux 环境下编译安装 二、 ARM Linux 环境下安装 一、 Linux 环境下…

破解分布式光伏运维难题,光伏+屋面数字化监控融合是关键

2022年5月&#xff0c;在东南地区某城市一幢写字楼上&#xff0c;技术人员们正不辞辛苦爬上数十米高的墙面&#xff0c;对写字楼的屋面和墙面进行勘察。随后&#xff0c;他们准备赶在台风季来临之前完成该写字楼的建筑光伏一体化项目安装与部署。 这是森特士兴集团股份有限公司…

fixed:error:0308010C:digital envelope routines::unsupported

目录1.故障现场2. 问题分析3. 修复方案4. 参考文献1.故障现场 最近由于一些原因&#xff0c;从Mac OSX 迁移到 Windows 平台&#xff0c;在尝试运行基于vue-element-admin 项目时&#xff0c;发生了如下异常&#xff1a; error:0308010C:digital envelope routines::unsuppor…

MySQL的一些指令,函数以及关键字

这个里面我准备记录一些比较有意思的MySQL的指令和函数&#xff0c;当然使用函数的时候我们要注意&#xff0c;会不会因为函数导致不走索引&#xff0c;走全表扫描的情况。 因为对索引字段做函数操作&#xff0c;可能会破坏索引值的有序性&#xff0c;因此优化器就决定放弃走树…

导读:21 世纪中叶的精准肿瘤学奇点?循环肿瘤细胞和单细胞测序?

Tips: 组学时代的循环肿瘤细胞&#xff1a;我们离实现“奇点”还有多远&#xff1f;&#xff08;Br J Cancer&#xff0c;IF&#xff1a;9.075&#xff09;&#xff0c;原文链接: https://pubmed.ncbi.nlm.nih.gov/35273384/ 循环肿瘤细胞的生物学、脆弱性和临床应用&#xff0…

用javascript分类刷leetcode22.字典树(图文视频讲解)

目录 Trie树&#xff0c;即字典树&#xff0c;又称前缀树&#xff0c;是一种树形结构&#xff0c;典型应用是用于统计和排序大量的字符串&#xff08;但不限于字符串&#xff09;&#xff0c;所以经常被搜索引擎用于文本词频统计。它的优先是&#xff0c;最大限度的减少无谓的…

数据挖掘与机器学习作业_06 决策树

决策树 步骤 1.计算不纯度2.选取不纯度最高的特征进行分支3.计算不纯度4.继续划分 from sklearn import tree from sklearn.model_selection import GridSearchCV from sklearn.model_selection import cross_val_score from sklearn.model_selection import train_test_spl…

单点登录 SSO 解决方案选型指南|身份云研究院

单点登录&#xff08;SSO&#xff09;是目前企业降本增效以及提升用户体验的主流选择方案。常规的单点登录指“登录一次&#xff0c;即可访问所有互相信任的应用&#xff0c;用户不再需要记住每一个应用的账号密码”&#xff0c;这有效解决了密码疲劳、登录效率等问题&#xff…