MySQL 集群迁移到 Kubernetes操作步骤

目录
  • 背景
  • 适用场景
    • 前提条件
  • 操作步骤
    • Step 1:自建集群开启 GTID
    • Step 2:容器集群在线迁移全量数据
    • Step 3:进行增量同步
    • Step 4:同步数据到容器集群的其他节点
    • Step 5:业务切换
    • Step 6:停止同步
  • 总结

背景

如果你有自建的 MySQL 集群,并且已经感受到了云原生的春风拂面,想将数据迁移到 Kubernetes 上,那么这篇文章可以给你一些思路。

文中将自建 MySQL 集群数据,在线迁移到 Kubernetes 的 MySQL 集群中,快速实现了 MySQL on Kubernetes。

适用场景

自建 MySQL 数据库迁移至 Kubernetes 的过程中。优点是停机时间短,数据一致性强。

前提条件

  • 掌握 RadonDB MySQL Kubernetes 的使用
  • 自建集群 MySQL 版本同 RadonDB MySQL Kubernetes 的 MySQL 大版本一致。如:自建集群 MySQL 8.0.22,RadonDB MySQL Kubernetes 中 MySQL 8.0.35
  • 自建集群开启 Binlog 和 GTID

操作步骤

Step 1:自建集群开启 GTID

用超级管理员登录自建 MySQL 集群,确保开启 GTID。

# 检查输出是否为 1
mysql -uroot -e "select @@gtid_mode,@@log_bin";
# 如果不为 1 则在 MySQL 终端中执行下面的 SQL
set global ENFORCE_GTID_CONSISTENCY = ON;
set global GTID_MODE = OFF_PERMISSIVE;
set global GTID_MODE = ON_PERMISSIVE;
set global GTID_MODE = ON;

Step 2:容器集群在线迁移全量数据

全量数据迁移期间,容器集群停止所有的写入。

# 在进行操作的节点上安装 screen 工具,防止终端退出
apt install screen -y
# 开启一个 screen 终端
screen -S migration
# 将节点 scale 成 2 节点
kubectl scale mysqlcluster sample --replicas=2
# 将 Follower 角色 Xenon 容器执行 raft disable
kubectl exec -it $(kubectl get po -l role=FOLLOWER,mysql.radondb.com/cluster=sample  -o jsonpath="{.items[*].metadata.name}") -c xenon -- xenoncli raft disable
# 进入 Leader 角色 MySQL 容器
kubectl exec -it $(kubectl get po -l role=LEADER,mysql.radondb.com/cluster=sample  -o jsonpath="{.items[*].metadata.name}") -c  mysql -- bash

screen 窗口可以按Ctrl + a ,然后输入 d 退出。用screen -R migration 重新进入迁移数据的终端。

通过管道进行不落地导入全量数据。

mysqldump --all-databases \
--single-transaction \
--triggers \
--routines \
--events \
--max-allowed-packet=805306368 \
--ignore-table=mysql.user \
--ignore-table=mysql.db \
--ignore-table=mysql.tables_priv \
--set-gtid-purged=ON \
-uroot -hxxx -pxxx|mysql -uroot -h127.0.0.1

Step 3:进行增量同步

全量同步完成之后,配置增量同步。

# 重新进入终端
screen -R migration
# 再次进入 Leader 角色 MySQL 容器
kubectl exec -it $(kubectl get po -l role=LEADER,mysql.radondb.com/cluster=sample  -o jsonpath="{.items[*].metadata.name}") -c  mysql -- bash
# 设置主从同步参数
mysql -uroot -h 127.0.0.1
CHANGE MASTER TO MASTER_HOST='xx', MASTER_PORT=xx, MASTER_USER='root', MASTER_PASSWORD='xx', MASTER_AUTO_POSITION=1;start slave;
# 检查主从同步进度
kubectl exec -it  sample-mysql-0 -c xenon -- xenoncli cluster mysql

Seconds_Behind 变为 0 则代表自建集群和容器集群数据完全一致,可以进行下一步操作。

Step 4:同步数据到容器集群的其他节点

# sample-mysql-1 为刚才 raft disable 的 Follower 节点
kubectl label pod sample-mysql-1 rebuild=true
# 查看集群状态等待同步完成
kubectl exec -it  sample-mysql-0 -c xenon -- xenoncli cluster gtid
kubectl logs sample-mysql-1 -c init-sidecar -f
# 同步完成后将集群扩容成 3 节点,并按照相同的步骤进行数据同步
kubectl scale mysqlcluster sample --replicas=3;kubectl label pod sample-mysql-2 rebuild=true

Step 5:业务切换

停止自建数据库的业务,启动容器上的业务负载。

Step 6:停止同步

kubectl exec -it $(kubectl get po -l role=LEADER,mysql.radondb.com/cluster=sample  -o jsonpath="{.items[*].metadata.name}") -c  mysql -- bash
mysql -uroot -h 127.0.0.1
stop slave;reset slave all;

至此,自建 MySQL 集群就已经成功迁移到 Kubernetes 上了。

总结

如果业务规划有停机时间,那么可以在停止写入之后,对源端数据库进行 FTWRL 之后直接进行全量同步。这样省去了增量同步的步骤,缺点是业务停机时间较长。上述全量数据的迁移方式也可以使用 Xtrabackup 工具,后续将基于 Xtrabackup 的迁移方式进行阐述。

参考链接

www.percona.com/blog/2013/0…

dev.mysql.com/doc/refman/…

www.percona.com/blog/2012/0…

以上就是MySQL 集群迁移到 Kubernetes操作步骤的详细内容,更多关于MySQL 集群迁移Kubernetes的资料请关注我们其它相关文章!

(0)

相关推荐

  • 使用Kubernetes集群环境部署MySQL数据库的实战记录

    目录 1 编写 mysql.yaml文件 2 执行如下命令创建 3 通过如下命令查看创建结果 4 命令行进入Pod并登录mysql 5 至此,数据库已经安装完成,然后即可通过ip+端口,这里是30001,进行数据库链接了 1 编写 mysql.yaml文件 编写yaml如下 apiVersion: v1 kind: Namespace metadata: name: devops # Namespace 的名称 --- apiVersion: apps/v1 kind: Deployment m

  • 如何搭建 MySQL 高可用高性能集群

    目录 MySQL NDB Cluster 是什么 搭建集群的前置工作 开始部署集群 部署管理服务器 部署数据服务器 部署 SQL 服务 所有集群服务部署完毕,我们来测试一下集群是否真的部署成功 数据库集群部署成功了,总结一下集群的注意事项 MySQL NDB Cluster 是什么 MySQL NDB Cluster 是 MySQL 的一个高可用.高冗余版本,适用于分布式计算环境. 文档链接 搭建集群的前置工作 至少准备 3 台服务器,一台作为管理服务器,两台作为数据服务器和 SQL 服务器,当

  • 利用MySQL Shell安装部署MGR集群的详细过程

    目录 1. 安装准备 2. 利用MySQL Shell构建MGR集群 3. MySQL Shell接管现存的MGR集群 4. 小结 参考资料.文档 免责声明 本文介绍如何利用MySQL Shell + GreatSQL 8.0.25构建一个三节点的MGR集群. MySQL Shell是一个客户端工具,可用于方便管理和操作MySQL,支持SQL.JavaScript.Python等多种语言,也包括完善的API.MySQL Shell支持文档型和关系型数据库模式,通过X DevAPI可以管理文档型数

  • MySQL之高可用集群部署及故障切换实现

    一.MHA 1.概念 2.MHA 的组成 3.MHA 的特点 二.搭建MySQL+MHA 思路和准备工作 1.MHA架构 数据库安装 一主两从 MHA搭建 2.故障模拟 模拟主库失效 备选主库成为主库 原故障主库恢复重新加入到MHA成为从库 3.准备4台安装MySQL虚拟机 MHA高可用集群相关软件包 MHAmanager IP:192.168.221.30 MySQL1 IP:192.168.221.20 MySQL2 IP:192.168.221.100 MySQL3 IP: 192.168

  • MySQL之PXC集群搭建的方法步骤

    一.PXC 介绍 1.1 PXC 简介 PXC是一套 MySQL 高可用集群解决方案,与传统的基于主从复制模式的集群架构相比 PXC 最突出特点就是解决了诟病已久的数据复制延迟问题,基本上可以达到实时同步.而且节点与节点之间,他们相互的关系是对等的.PXC 最关注的是数据的一致性,对待事物的行为时,要么在所有节点上执行,要么都不执行,它的实现机制决定了它对待一致性的行为非常严格,这也能非常完美的保证 MySQL 集群的数据一致性: 1.2 PXC特性和优点 完全兼容 MySQL. 同步复制,事务

  • MySQL 集群迁移到 Kubernetes操作步骤

    目录 背景 适用场景 前提条件 操作步骤 Step 1:自建集群开启 GTID Step 2:容器集群在线迁移全量数据 Step 3:进行增量同步 Step 4:同步数据到容器集群的其他节点 Step 5:业务切换 Step 6:停止同步 总结 背景 如果你有自建的 MySQL 集群,并且已经感受到了云原生的春风拂面,想将数据迁移到 Kubernetes 上,那么这篇文章可以给你一些思路. 文中将自建 MySQL 集群数据,在线迁移到 Kubernetes 的 MySQL 集群中,快速实现了 M

  • 详解MySQL集群搭建

    概述 MySQL Cluster 是MySQL 适合于分布式计算环境的高实用.可拓展.高性能.高冗余版本,其研发设计的初衷就是要满足许多行业里的最严酷应用要求,这些应用中经常要求数据库运行的可靠性要达到99.999%.MySQL Cluster允许在无共享的系统中部署"内存中"数据库集群,通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求.此外,由于每个组件有自己的内存和磁盘,不存在单点故障. 实际上,MySQL集群是把一个叫做NDB的内存集群存储引擎集成与标准的MyS

  • 构建双vip的高可用MySQL集群

    目录 一. 项目描述: 二.项目环境: 二.项目步骤: 三.项目概念图: 四.部署zabbix监控系统 4.1 准备: 4.2 步骤: 五.项目心得: 一. 项目描述:     本项目的目的是: 构建一个高可用的能实现读写分离的高效的MySQL集群 确保业务的稳定,能沟通方便的监控整个集群 同时能批量的去部署和管理整个集群. 二.项目环境: 8台服务器(2G,2核),centos7.8 mysql5.7.30 mysqlrouter8.0.21 keepalived2.0.10 zabbix a

  • 如何把Oracle 数据库从 RAC 集群迁移到单机环境

    目录 一.系统环境 二.源数据库的操作 三.目标数据库的操作 四.开始恢复数据库 五.启动数据库 把 Oracle 数据库从 RAC 集群迁移到单机环境 一.系统环境 1.源数据库 db_name:hisdb SID:hisdb1.hisdb2 IP: 192.168.1.101.192.168.1.102 os:CentOS Linux release 7.3.1611 (Core) 2.目标数据库 IP: 192.168.1.15 os:CentOS Linux release 7.3.16

  • 详解mysql集群:一主多从架构实现

    实验环境: 1.三台CentOS 7 服务器 2.mysql5.7.26(三台都通过yum安装) 服务器列表 7.100.222.111 master 47.103.211.5 slave1 47.103.98.221 slave2 如果还没安装mysql请看安装教程:mysql安装 一.概述: 架构图: 此种架构,一般初创企业比较常用,也便于后面步步的扩展 特点: 1.可以缓解读的压力. 2.成本低,布署快速.方便 3.读写分离 4.还能通过及时增加从库来减少读库压力 5.主库单点故障 6.数

  • docker 搭建Mysql集群的方法示例

    docker基本指令: 更新软件包 yum -y update 安装Docker虚拟机(centos 7) yum install -y docker 运行.重启.关闭Docker虚拟机 service docker start service docker stop 搜索镜像 docker search 镜像名称 下载镜像 docker pull 镜像名称 查看镜像 docker images 删除镜像 docker rmi 镜像名称 运行容器 docker run 启动参数 镜像名称 查看容

  • Docker部署Mysql集群的实现

    单节点数据库的弊病 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 单节点MySQL的性能瓶领颈 2016年春节微信红包巨大业务量,数据库承受巨大负载 常见MySQL集群方案 mysql 集群方案介绍,建议使用pxc,因为弱一致性会有问题,比如说a节点数据库显示我购买成功,b 节点数据库显示没有成功,这就麻烦了,pxc 方案是在全部节点都写入成功之后才会告诉你成功,是可读可写双向同步的,但是replication

  • docker安装Elasticsearch7.6集群并设置密码的方法步骤

    目录 一些基础配置 关于版本和docker镜像 开始 关于elasticsearch.yml 关于证书elastic-certificates.p12 生成密码 使用密码 忘记密码 Elasticsearch从6.8开始, 允许免费用户使用X-Pack的安全功能, 以前安装es都是裸奔.接下来记录配置安全认证的方法. 为了简化物理安装过程,我们将使用docker安装我们的服务. 一些基础配置 es需要修改linux的一些参数. 设置vm.max_map_count=262144 sudo vim

  • Windows Server 2003 下配置 MySQL 集群(Cluster)教程

    MySQL 群集是 MySQL 适合于分布式计算环境的高可用.高冗余版本.它采用了 NDB Cluster 存储引擎,允许在 1 个群集中运行多个 MySQL 服务器.在 MySQL 5.0 及以上的二进制版本中,以及与最新的 Linux 版本兼容的 RPM 包中提供了该存储引擎. MySQL 群集是一种技术,该技术允许在无共享的系统中部署"内存中"和"磁盘中"数据库的 Cluster .通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求.此外,由于

  • Hadoop分布式集群的搭建的方法步骤

    1 安装说明 1.1 用到的软件 软件 版本 下载地址 linux Ubuntu Server 18.04.2 LTS https://ubuntu.com/download/server hadoop hadoop-2.7.1 http://archive.apache.org/dist/hadoop/common/hadoop-2.7.1/hadoop-2.7.1.tar.gz java jdk-8u211-linux-x64 https://www.oracle.com/technetwo

随机推荐