背景
sidecar在MysqlCluster的CRD资源中主要作为一个http的server端,为mysql服务进行数据的备份恢复。
在版本0.6.2中,主要支持两个版本的mysql(5.7 or 8.0)。构建后的二进制为mysql-operator-sidecar。
镜像名称为mysql-operator-sidecar-5.7-amd64:v0.6.2
在bitpoke/msyql-operator中的部署结构如下所示(省略了MysqlCluster中其他资源类型):
sidecar源码简介
代码路径
sidecar代码可在bitpoke/mysql-operator中mysql-operator/cmd/mysql-operator-sidecar/main.go中查询
功能描述
clone-and-init
该功能的接口引用是在mysql的init-container中,简单理解为数据库每次启动都会调用,调用的工具为orchestrator。
主要有两个逻辑:
-
RunCloneCommand
主要在进行数据恢复,按照一下逻辑进行:- 如果MySQL数据存在,直接退出
- 如果从节点存在且状态健康,则从从节点拷贝数据恢复
- 如果主节点存在,则从主节点拷贝数据恢复
- 如果从节点和主节点都不存在,则从云存储中拷贝数据(bucket URL)
- 如果这些都不存在,判断是否为mysql集群的第一个节点,若是,则退出
- 以上情况都不满足,无法启动,报错
-
RunConfigCommand
主要为配置项的恢复- 拷贝my.cnf文件,/mnt/conf/my.cnf -> /etc/mysql/my.cnf
- 拷贝pre-shutdown-ha.sh
- 配置10-identity.cnf,operator-init.sql,10-init-file.cnf和heartbeat.conf等
run
入口:RunSidecarCommand函数
newServer函数主要创建两个监听
- /health:用来判断sidecar是否健康
- /xbackup:用来接收mysql数据备份恢复命令,进行调用xtrabackup工具
take-backup-to
入口:RunTakeBackupCommand函数
将mysql数据库通过rclone工具推送到远端云存储的桶里面,需要提前配置bucket url