天!转转MySQL机房迁移半小时结束战斗?

news2024/11/26 18:37:15

文章目录

    • 1 背景
    • 2 迁移方案选择
      • 2.1 方案一:扩容+主从切换
      • 2.2 方案二:级联切换
      • 2.3 方案对比
    • 3 如何又快又稳完成MySQL机房迁移
      • 3.1 提前搭建级联
      • 3.2 停服
      • 3.3 批量操作自动化,关键步骤解耦
      • 3.4 集群分级
      • 3.5 切换前、后置检查
      • 3.6 灰度切换验证
    • 4 写在最后

1 背景

作为国内领先的循环经济产业公司,随着转转业务的不断发展,基础服务设施已然到了“蜕壳”的阶段。

目前在用的IDC资源已趋于饱和,难以满足后续的发展需求。

同时,随着腾讯云提供的负载均衡技术迭代,需要将TGW(Tencent GateWay)替换为CLB(Cloud Load Balancer)。

经过运维同学近半年时间的筹划和建设,全新IDC和负载均衡技术(CLB)已完成升级建设并正式投产,MySQL、TiDB、Redis等公共基础服务需要有序进行迁移切换。对于MySQL迁移工作,面临集群数量多、操作影响大、操作要求高等一系列难题,需要充分调研现状并制定合理的方案,进一步降低对业务服务的感知。

2 迁移方案选择

2.1 方案一:扩容+主从切换

通过备份扩容出足够数量的从库,再依赖MHA(Master High Availability)系统发起主动切换,最终下线旧节点完成集群拓扑变更。

2.2 方案二:级联切换

通过备份搭建级联集群,完成新集群数据同步,再通过断级联+域名切换的方式完成集群变更。

2.3 方案对比

  • 方案一:开发量小,扩容和MHA切换都比较容易实现。但单个集群MHA切换时间>30s,对业务的影响时间过长,且机房迁移要求具备大规模切换能力,这就对MHA系统要求极高,就算是大厂自行维护的高可用系统,恐怕也难以保证在短时间内依靠高可用系统完成百余套集群的无损切换。

  • 方案二:原理简单,切换速度快,单个集群切换时间<10s,对业务影响小。但需要大量自动化开发,例如自动扩容、自动搭建级联集群、自动前/后置检查、自动切换读/写流量等,开发成本高。

落地方案的选定,重点考虑对业务的影响,哪种方案又快又稳对业务感知又小就选哪种,毫无疑问,方案二胜出。级联方案还有一个明显优势,新集群搭建过程中可以平滑升级负载均衡(CLB替换TGW)

  • 级联读流量切换示意图

  • 级联写流量切换示意图

3 如何又快又稳完成MySQL机房迁移

MySQL集群迁移切换的风险非常大,稍加操作不当就可导致整套集群不可用,极端情况下可能直接让线上服务停摆。转转线上MySQL集群数量较多,如何又快又稳完成MySQL机房迁移工作?

3.1 提前搭建级联

通过备份扩容新集群,并与老集群建立级联关系,提前搭建好所有待迁移集群级联。由于转转采用单机多实例部署的架构,新建集群时得重点考虑混合部署带来的问题,需要提前整理各集群单实例磁盘、内存占用数据。在开发自动搭建级联集群脚本时,需要同时兼顾机器负载均衡和资源成本。

限制逻辑:

  • 单机主库实例不超过5个
  • 单机从库实例不超过10个
  • 单机总实例不超过15个
  • 单机内存、磁盘使用率不超过85%

级联搭建过程:

3.2 停服

核心集群间的上下游关系错综复杂,尤其是交易库和商品库。如果停写一套集群,其他好几套关联集群也会受影响。另外,尽管当前部分业务方具备双写能力,能够应对切换停写带来的影响,但集群数量太多,并非所有业务都有足够人力成本投入额外开发。综合考虑,与其花费大量人工成本去梳理上下游关系和额外开发,不如在凌晨低峰期短暂停服,批量切换核心集群。这项决定意味着我们需要具备过硬的批量操作和恢复能力,务必将操作时间进一步缩短,给测试、开发留足验证时间,尽量减少停服时长。

3.3 批量操作自动化,关键步骤解耦

整个迁移周期内存在大量操作,需要降低人工误操作风险,同时对操作时间也有一定要求,因此,所有操作都需要实现自动化。对于关键步骤应当解耦处理,自动化模块需要能够独立运行,所有模块相互间形成闭环,当切换存在问题时能快速定位故障发生位置,及时回滚。
在闭环中实现:

  • 搭建级联集群自动化
  • 前/后置检查自动化
  • 批量切读
  • 批量切写
  • 自动kill旧集群连接,检测切换后新集群连接
  • 批量下线旧集群

3.4 集群分级

我们将线上集群分为3个等级,由高到低依次为P1、P2、P3,各等级占比约为1:1:1

  • P3集群可在白天任意时间切换
  • P2集群可在晚上8点-10点操作
  • P1集群需要在凌晨停服期间操作

我们正不断推进和完善集群服务分级管理,对于达到一定规模符合等级要求的集群,我们将投入更多精力、提供更多的资源去支撑高等级集群的可靠性及性能。

3.5 切换前、后置检查

整个切换周期内,新、老集群的前、后置检查必不可少。切换前后配置不一致可能引发故障,尤其是一些关键参数配置。

前置检查:

  • 新集群vip-rshost链路连通性
  • buffer_pool_size
  • sql_mode
  • 从节点个数
  • 级联延迟

后置检查:

  • 新、老主read_only状态
  • 新、老集群业务实时连接
  • 域名切换后是否指向新集群

3.6 灰度切换验证

完成各项自动化代码开发后,先通过测试集群进行多轮批量切换验证,随后按照集群等级开始线上集群切换。对于P3集群,由于切换操作对业务的影响较小,但又不同于测试集群,P3切换过程中能够反馈线上大部分集群可能遇到的问题。采用灰度切换验证,摸着石头过河,把意料之外的浑水都淌一遍,不断迭代自动化脚本。

灰度切换顺序:

  • 单套切换
  • 小批量切换(<10)
  • 大批量切换(>30)

灰度切换验证期间遇到的问题:

  • 多域名问题

按标准化运维,同一集群同一角色有且仅有一个域名,但线上集群存在一套集群使用多个主库、从库域名的情况。在流量切换时,需要兼容处理多域名问题

  • cmdb信息不准确

部分老集群元数据长时间未维护,实例信息、域名指向信息可能有误。在迁移切换前,需要花精力去校对最新数据

4 写在最后

转转线上MySQL集群规模400+,需要在9月27日凌晨停服期间完成所有集群切换。P3、P2集群在停服前已完成批量切换,剩余P1核心集群累计100+,平均耗时10s/套,半小时内结束战斗。停服期间因前期已规避大部分问题,切换过程非常流畅,后续的验证、压测也均符合预期。


关于作者

黄建波,转转DBA。主要负责转转MySQL运维及数据库平台开发。

转转研发中心及业界小伙伴们的技术学习交流平台,定期分享一线的实战经验及业界前沿的技术话题。

关注公众号「转转技术」(综合性)、「大转转FE」(专注于FE)、「转转QA」(专注于QA),更多干货实践,欢迎交流分享~

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

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

相关文章

rk3288-android8.1-以太网ethernet和蓝牙Bluetooth

遇到一个现象,以太网和蓝牙打不开 经过不断分析和查找发现问题在.config中 CONFIG_MOTORCOMM_PHYy 会导致以太网的eth0注册不成功(现在是双网口,还有个USB网卡) 改成# CONFIG_MOTORCOMM_PHY is not set 后以太网可以正常 # CONFIG_RTC_DRV_RK808 is not set 会导致蓝牙打不…

【分类评价指标】如何评估多(二)分类算法的性能:Acc、Precision、Recall、F1等

【分类评价指标】如何评估多&#xff08;二&#xff09;分类算法的性能&#xff1a;Acc、Precision、Recall、F1等 文章目录【分类评价指标】如何评估多&#xff08;二&#xff09;分类算法的性能&#xff1a;Acc、Precision、Recall、F1等1. 前言2. 二分类任务2.1 混淆矩阵2.2…

工控攻击,黑客组织GhostSec 称入侵以色列55 家Berghof PLC

“巴以冲突”在网络上依然硝烟弥漫。当地时间9月12日消息&#xff0c; 一个名为GhostSec的黑客组织声称入侵了以色列55台Berghof可编程逻辑控制器&#xff08;PLC&#xff09;。该网络攻击行为被视为“解放巴勒斯坦”运动的组成部分。 以色列工业网络安全公司OTORIO对此次事件…

JVM内存结构和GC调优

一 、JVM简介 1.1 JVM是什么&#xff1f; Java Virtual Machine(Java虚拟机) Write Once Run Anywhere 1.2 JDK JRE JVM Java官网 &#xff1a;https://docs.oracle.com/javase/8/ Reference -> Developer Guides -> 定位到: https://docs.oracle.com/javase/8/docs…

MySQL数据库——JDBC编程

文章目录一、什么是Java的JDBC二、JDBC编程三、代码整体展示一、什么是Java的JDBC JDBC&#xff0c;即Java Database Connectivity。意思是java数据库连接。是一种用来执行 SQL 语句的 JavaAPI&#xff0c;是Java中数据库的连接规范。这个 API 由 java.sql* 和 javax.sql* 包中…

Windows 环境下,使用 ESP32-S3 USB 接口进行 JTAG 调试的流程

前提 在 windows 上安装 esp-idf CMD 软件编译环境&#xff0c;可参考“Windows 上搭建 ESP-IDF SDK 编译环境 Visual Studio Code 软件编程环境”说明。硬件上使用 ESP32-S3 USB 接口与 PC 端建立连接&#xff0c;为方便测试&#xff0c;可使用官方发布的 ESP32-S3-DevKitC-…

“办”了三年数字化活动,这家公司成为行业独角兽

疫情三年&#xff0c;竟然有公司靠办活动成为行业独角兽&#xff1f;你没听错&#xff01;持续的疫情&#xff0c;让各行各业的数字化进程大大提速&#xff0c;活动这个历史悠久的领域也不例外。在疫情期间&#xff0c;数字化深刻影响着各行业招聘、展览、发布会等多种活动&…

2023年新能源汽车行业研究报告

第一章 行业概况 新能源汽车&#xff0c;是指采用新型动力系统&#xff0c;完全或者主要依靠新型能源驱动的汽车&#xff0c;包括纯电动汽车、插电式混合动力汽车、增程式混合动力汽车和燃料电池汽车等。国际上&#xff0c;混合动力汽车&#xff08;含中混、强混、插电式混动&…

浅谈常用的日志框架

文章目录1.为什么需要日志框架2.常见日志框架2.1.日志框架介绍2.2.市面上的日志框架3.Slf4j使用3.1.如何在系统中使用SLF4j3.2.可能存在的问题4.SpringBoot日志的默认配置5.SpringBoot指定日志文件6.切换日志框架1.为什么需要日志框架 通过日志的方式记录系统运行的过程或错误以…

vscode SSH 保存密码自动登录服务器

先在win local上拿到秘钥&#xff0c;然后再把这秘钥copy 进服务器 1. 创建 RSA 密钥对 第一步是在客户端机器&#xff08;通常是您的计算机 win 10&#xff09;上创建密钥对&#xff1a;打开powershell, 输入 ssh-keygen默认情况下ssh-keygen将创建一个 2048 位 RSA 密钥对…

套接字及分层模型(一)

套接字通信 1.内核开发的工程师将网络相关的头文件存储到一个专门目录include/net中&#xff0c;而不是存储到include/linux 2.ISO/OS和TCP/IP参考模型 应用层&#xff1a;网络服务与最终用户的接口&#xff1b; 表示层&#xff1a;数据的表示&#xff0c;安全及压缩&#xf…

SQL常用 增删改 语句

目录 1 插入语句 2 更新语句 2.1 更新单个值 2.2 更新表中的所有行 2.3 更新多个值 3 删除语句 1 插入语句 INSERT INTO 表名称 (字段名称) VALUES (值) 多个字段或值用逗号分隔字段与值的顺序要对应 我们添加后查询一下来验证结果 2 更新语句 2.1 更新单个值…

U盘安装CentOS 7 初体验

一、刻录镜像到U盘 把下载好的linux的 .iso 镜像文件 要通过刻录到U盘里才可以使用&#xff0c;不像虚拟机中一样可以直接导入使用。 使用软件 UltraISO 刻录到U盘上。 二、改启动方式 BIOS 改为U盘优先启动。 三、安装遇到的问题 1、找不到装有镜像的U盘盘符&#xff0c;…

企业级IM即时通讯私有云解决方案

信息无疑是当今社会最重要的资源之一&#xff0c;网络安全也成为了维护信息安全的一道防线。私有云办公通信平台成为不少企业的选择&#xff0c;不仅能实现自主部署&#xff0c;还能真正自主掌控云和数据&#xff0c;确保业务数据的安全、可控。然而企业如果自主研发私有云办公…

生产者消费者模型(多线程工作)

目录 1.模型前提 2.阻塞队列&#xff08;消费场所&#xff09; 3. 实验 4.有关效率 1.模型前提 以单生产者对单消费者为例子&#xff1a; 前提一&#xff1a;有一个缓冲区作为消费场所。 前提二&#xff1a;有两种功能不同的线程分别具有消费与生产的能力。 前提三&…

分布式事务框架Seata

分布式事务基础 <<分布式事务基础理论>> <<分布式事务解决方案>> Seata 一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式&#xff0c;为用户打造一站式的…

Socket编程 | TCP服务器 之 并发阻塞模型(多进程实现)

TCP服务器IO模型 之 并发阻塞 1. 引言 在 Linux 环境下多进程的应用很多,其中最主要的就是网络/客户服务器。多进程服务器是当客户有请求时,服务器用一个子进程来处理客户请求。父进程继续等待其它客户的请求。这种方法的优点是当客户有请求时,服务器能及时处理客户,特别是…

JavaEE简单示例——动态SQL元素<where>

简单介绍&#xff1a; 在我们之前使用where关键字进行查询的时候&#xff0c;总是会在后面添加一个11恒等式&#xff0c;并且在每一个可能拼接的SQL语句前面都加上一个and关键字&#xff0c;防止当后续的所有条件都不满足的时候&#xff0c;where关键字在最后直接跟and的时候也…

系列三、约束

一、概述 1.1、定义 约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。1.2、作用 保证数据库中数据的正确、有效性和完整性。1.3、分类 注意事项&#xff1a;约束是作用于表中字段上的&#xff0c;可以在创建表/修改表的时候添加约束。 二、演示 需求&am…

DEV C++的使用入门程序做算术运算

DEV C Dev-C &#xff08;有时候也称为 Dev-Cpp&#xff09;是一个免费软件&#xff0c;最早是由 BloodShed 公司开发的&#xff0c;在版本 4.9.2 之后该公司停止开发并开放源代码。然后由 Orwell 接手进行维护&#xff0c;陆续开发了几个版本&#xff0c;后来也有其他开发人员…