k8s集群下搭建数据同步工具-canal:canal-server篇

本文介绍在Kubernetes环境中使用Headless Service和StatefulSet搭建Canal Server的方法,解决Pod重启导致IP变化的问题,确保Server以固定域名注册。

k8s集群下搭建数据同步工具-canal:canal-server篇

前言

canal-server的搭建过程与canal-admin大体相同,但需要解决一下一些问题,我们知道,server是通过canal.properties中的register.ip向admin注册server信息的,但是在k8s环境下,pod的ip是不固定的,每一次pod重启其ip都会发生变化,也就会在admin中重新注册一个新的server,这种情况下程序基本是不可用的。

本文提供一种方法,通过headlessService和StatefulSet方式搭建canal-server,使canal-server以固定域名的方式向canal-admin注册,解决pod重启ip变化,重新注册新server的问题。

容器化

canal-server

环境准备

  • yum源文件 CentOS6-Base-163.repo
  • jdk包 jdk-8u201-linux-x64.tar.gz
  • canal-server程序包 canal.server-1.1.4.tar.gz
  • centos基础镜像 centos:6.6

将准备的文件与Dockerfile放在同一文件夹下

  • 解压canal-server程序
mkdir canal-server
tar -zxvf canal.deployer-1.1.4.tar.gz -C canal-server
  • 在canal-server/bin目录下创建文件config.sh(这部分主要是为了实现server在k8s中的自动注册过程中容器重启后ip变化的问题) 同时注意将start.sh文件中启动命令改为前台启动(删掉启动命令最后的 & )
cat > /home/canal/conf/canal.properties <<- EOF
# register ip
# ${HOSTNAME} 为podname,canal-server-discovery-svc-stable为svc名称
# StatefulSet类型pod名称是固定的,k8s集群内pod域名规则为pod_name.svc_name.namespace.svc.cluster.local
canal.register.ip = ${HOSTNAME}.canal-server-discovery-svc-stable.testcanal.svc.cluster.local

# canal admin config
canal.admin.manager = canal-adm
要在Kubernetes (K8s) 上部署 Canal Server,你可以使用 Deployment 和 Service 来创建和管理它。 首先,你需要创建一个 Canal Server 的配置文件,例如 `canal-server.yaml`,其内容类似于以下示例: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: canal-server spec: replicas: 1 selector: matchLabels: app: canal-server template: metadata: labels: app: canal-server spec: containers: - name: canal-server image: canal/canal-server:v1.1.4 ports: - containerPort: 11111 env: - name: canal.destinations value: example --- apiVersion: v1 kind: Service metadata: name: canal-server spec: selector: app: canal-server ports: - port: 11111 targetPort: 11111 ``` 上述配置文件定义了一个名为 `canal-server` 的 Deployment 和一个名为 `canal-server` 的 Service。Deployment 中的容器使用 `canal/canal-server:v1.1.4` 镜像,并将容器的端口设置为 11111。Service 将流量转发到 Pod 的容器端口 11111。 执行以下命令来部署 Canal Server: ```shell kubectl apply -f canal-server.yaml ``` 这将创建一个名为 `canal-server` 的 Deployment 和一个名为 `canal-server` 的 Service。 你可以使用以下命令来检查 Deployment 和 Service 的状态: ```shell kubectl get deployments kubectl get services ``` 一旦 Deployment 和 Service 创建成功,你就可以通过 Service 的 Cluster IP 或 NodePort 来访问 Canal Server。 请注意,上述示例仅供参考,你需要根据自己的实际需求进行修改和调整。另外,还需要确保你的 Kubernetes 集群已正确配置,并且能够拉取指定的 Canal Server 镜像。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值