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

前言

本文使用v1.1.4版本的canal相关程序进行容器化,主要包含cana-admin、canal-server、canal-adapter三个部分,其中admin和server官方都提供了镜像,但是根据实际情况还是决定自己来构建镜像,原因如下

  • admin镜像中包含了数据库程序,我打算使用外建的数据库,所以把这部分剔除了
  • 自建镜像相对简单,修改起来比较容易

容器化

canal-admin

环境准备

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

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

  • 解压canal-admin程序包
mkdir canal-admin

tar -zxvf canal.admin-1.1.4.tar.gz -C canal-admin

cd canal-admin/bin

vi startup.sh
# 将脚本最后的启动命令改为如下(将程序改为前台运行,否则在创建pod后容器会退出)
$JAVA $JAVA_OPTS $JAVA_DEBUG_OPT $CANAL_OPTS -classpath .:$CLASSPATH com.alibaba.otter.canal.admin.CanalAdminApplication 1>>/dev/null 2>&1

# 修改canal-admin/conf下application.yml,将数据库信息修改为自己的地址
  • 创建Dockerfile文件如下
FROM centos:6.6

#设置时钟
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo ZONE=\"Asia/Shanghai\" > /etc/sysconfig/clock

#更新yum源
RUN rm -rf /etc/yum.repos.d/*.repo 
COPY CentOS6-Base-163.repo /etc/yum.repos.d/
RUN yum clean all


#创建用户
RUN groupadd -g 2500 canal; useradd -u 2501 -g canal -d /home/canal -m canal
RUN echo canal:De@2018er | chpasswd; echo root:dockerroot | chpasswd

# 安装相关包
RUN yum -y install wget vi openssl.x86_64 glibc.x86_64 tar inetutils-ping net-tools telnet which file
RUN yum clean all

# 配置java环境变量
COPY jdk-8u201-linux-x64.tar.gz /opt
RUN tar -zvxf /opt/jdk-8u201-linux-x64.tar.gz -C /opt && \
        rm -rf /opt/jdk-8u201-linux-x64.tar.gz && \
                        chmod -R 755 /opt/jdk1.8.0_201 && \
                                        chown -R root:root /opt/jdk1.8.0_201
RUN echo 'export JAVA_HOME=/opt/jdk1.8.0_201' >> /etc/profile                       
RUN echo 'export JRE_HOME=$JAVA_HOME/jre' >> /etc/profile
RUN echo 'export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH' >> /etc/profile
RUN echo 'export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH' >> /etc/profile
RUN source /etc/profile

#安装中文包
RUN yum install kde-l10n-Chinese -y
RUN yum install glibc-common -y
RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
ENV JAVA_HOME /opt/jdk1.8.0_201
ENV PATH $PATH:$JAVA_HOME/bin
ENV LANG zh_CN.UTF-8
ENV LC_ALL zh_CN.UTF-8

#ADD 复制canal-admin程序
ADD canal-admin /home/canal/
RUN chmod 755 /home/canal/bin

#启动程序
WORKDIR /home/canal/bin
RUN chmod 777 /home/canal/bin/restart.sh
RUN chmod 777 /home/canal/bin/startup.sh
RUN chmod 777 /home/canal/bin/stop.sh
ENTRYPOINT /home/canal/bin/restart.sh
  • 构建镜像
docker build  -t canal/canal-admin:v1.1.4 .

k8s集群创建pod

以下所有操作均在testcanal命名空间下进行

canal-admin

  • 将application.yml已cofigmap形式挂载到容器内(方便变更配置)
# 创建configmap
kubectl create configmap canal-admin-stable-conf --from-file=/canal/canal-admin/conf/application.yml -n testcanal

# 如需变更配置,修改完application文件后,执行如下语句更新
kubectl create configmap canal-admin-stable-conf --from-file=/canal/canal-admin/conf/application.yml -n testcanal -o yaml --dry-run | kubectl replace -f -
  • canal-admin-deploy-stable.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: canal-admin-stable
  namespace: testcanal
  labels:
    app: canal-admin-stable
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: canal-admin-stable
    spec:
      containers:
      - image: canal/canal-admin:v1.1.4
        name: canal-admin-stable
        ports:
        - containerPort: 8089
          protocol: TCP
          name: http
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
          limits:
            cpu: 2000m
            memory: 2Gi
        volumeMounts:
        - mountPath: /home/canal/conf/application.yml
          subPath: application.yml
          name: admin-conf
      volumes:
        - name: admin-conf
          configMap:
            name: canal-admin-stable-conf
      securityContext:
        runAsUser: 0
  • canal-admin-svc-stable.yaml(admin需要外网访问,创建nodeport类型svc)
apiVersion: v1
kind: Service
metadata:
  name: canal-admin-stable
  namespace: testcanal
  labels:
    app: canal-admin-stable
spec:
  selector:
    app: canal-admin-stable
  type: NodePort
  ports:
    - name: web
      nodePort: 31628
      port: 8089
      targetPort: http
  • 创建admin相关
kubectl apply -f canal-admin-svc-stable.yaml
kubectl apply -f canal-admin-deploy-stable.yaml

# 查看pod创建结果
kubectl get pods -n testcnal

# 访问master节点:31628验证是否成功
http://masterIp:31628

以上就是我在搭建和使用 canal 过程中的一些总结,希望对你有所帮助!

欢迎关注我的个人微信公众号,一个菜鸟程序猿的技术技术分享和奔溃日常

一个菜鸟程序猿的技术技术分享和奔溃日常

GitHub 加速计划 / ca / canal
53
10
下载
alibaba/canal: Canal 是由阿里巴巴开源的分布式数据库同步系统,主要用于实现MySQL数据库的日志解析和实时增量数据订阅与消费,广泛应用于数据库变更消息的捕获、数据迁移、缓存更新等场景。
最近提交(Master分支:4 个月前 )
8a4199a7 * 1. Fix compressed OSS binlog data 2. Fix first second data loss caused by dumping from OSS binlog * Fix CI failed test cases 21 天前
79338be0 - String.format is lower than StringBuilder. Benchmark like below: code snippet: String str = String.format("%s-%s-%s", 0, 1, 10); Benchmark Mode Cnt Score Error Units StringBenchmark.append thrpt 46431458.255 ops/s StringBenchmark.format thrpt 985724.313 ops/s StringBenchmark.append avgt ≈ 10⁻⁸ s/op StringBenchmark.format avgt ≈ 10⁻⁶ s/op StringBenchmark.append sample 364232 ≈ 10⁻⁷ s/op StringBenchmark.append:p0.00 sample ≈ 10⁻⁸ s/op StringBenchmark.append:p0.50 sample ≈ 10⁻⁷ s/op StringBenchmark.append:p0.90 sample ≈ 10⁻⁷ s/op StringBenchmark.append:p0.95 sample ≈ 10⁻⁷ s/op StringBenchmark.append:p0.99 sample ≈ 10⁻⁷ s/op StringBenchmark.append:p0.999 sample ≈ 10⁻⁷ s/op StringBenchmark.append:p0.9999 sample ≈ 10⁻⁵ s/op StringBenchmark.append:p1.00 sample 0.001 s/op StringBenchmark.format sample 336220 ≈ 10⁻⁶ s/op StringBenchmark.format:p0.00 sample ≈ 10⁻⁶ s/op StringBenchmark.format:p0.50 sample ≈ 10⁻⁶ s/op StringBenchmark.format:p0.90 sample ≈ 10⁻⁶ s/op StringBenchmark.format:p0.95 sample ≈ 10⁻⁶ s/op StringBenchmark.format:p0.99 sample ≈ 10⁻⁶ s/op StringBenchmark.format:p0.999 sample ≈ 10⁻⁵ s/op StringBenchmark.format:p0.9999 sample ≈ 10⁻⁴ s/op StringBenchmark.format:p1.00 sample 0.001 s/op StringBenchmark.append ss ≈ 10⁻⁶ s/op StringBenchmark.format ss ≈ 10⁻⁵ s/op 21 天前
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐