本文为您说明如何基于阿里云数据库存储服务DBFS来实现MySQL的高可用构建。

优势说明

如何保证数据库服务的高可用性,一直是业界讨论的重要课题之一。下面就主要的两种解决方案进行对比说明:

对比项 基于DBFS共享存储构建 基于主备同步方式构建
性能 高。主备共享一份数据,不需要同步,可关闭binary log。 弱。开起MySQL binary log后,性能下降。强同步模式下,性能下降明显。
成本 低。主备共享一份数据。 高。主备库两份数据存储。
一致性 强一致。 弱一致。一般采用异步模式复制。半同步复制模式下,仍然存在主备库数据状态不一致问题。
易用性 部署与切换简单 部署与切换逻辑复杂,另需保证第三方切换工具的自身高可用性。

环境准备

从以上比较可知,基于DBFS共享存储构建MySQL高可用的方案,在性能、成本、数据一致性、易用性等方面上都有非常好的收益。以下为架构图:
在展开构建步骤陈述之前,先做前置条件说明:
  • 可用区:构建双机的ECS以及DBFS需要在同一个可用区。
  • 专有网络VPC:在阿里云 “控制台” -》“专有网络VPC” 中创建VPC。
  • 负载均衡SLB:在阿里云 “控制台” -》“负载均衡 SLB” 中创建”主备服务器组“类型的SLB,需与ECS在同一个VPC网络中。
环境部署清单如下:
资源 IP/挂载点 端口 系统 角色
dbfs1-node1 172.16.198.79 3306 Aliyun Linux 2.1903 64位 MASTER
dbfs1-node2 172.16.198.80 3306 Aliyun Linux 2.1903 64位 SLAVE
SLB VIP 172.16.198.99 3306 N/A 负载均衡
应用机器 172.16.198.157 3306 N/A MySQL客户端
共享存储 /mnt/dbfs/v-bp196g0zi82d0pqte8r9 N/A N/A DBFS挂载点

服务高可用构建

以下为基于DBFS共享存储的MySQL双机高可用部署步骤:

  1. 挂载DBFS到两个ECS节点
    参考“挂载与卸载”,将DBFS挂载到之前申请的两台ECS上。
  2. 部署MySQL服务守护服务
    基于DBFS的分布式flock功能,部署将更加简单。脚本内容如下:
    #/bin/bash
    #MySQL服务守护脚本,基于DBFS的flock实现。脚本需要用户自己安排定期执行。
    #成功拿到flock的节点可拉起mysql服务。“start_mysql.sh”由用户根据自己情况来编写。
    flock -xn /mnt/dbfs/v-bp196g0zi82d0pqte8r9/lock/dbfs_mysql_ha.lock -c "/home/mysql/start_mysql.sh"
                                
  3. 安装MySQL

    请参考“MySQL存储计算分离实践”文章。

  4. 测试高可用
    1. 场景一:停掉Master上的MySQL数据库
      #杀掉Master上的MySQL进程,在客户端机器上连接MySQL。
      #如果连接成功说明VIP已经连到slave上。
      [mysql@iZbp156ycm6s06xjdb8acoZ ~]# mysql -usbtest -h 172.16.198.99 -P 3306 -p
      MySQL [(none)]> show databases;
      +--------------------+
      | Database           |
      +--------------------+
      | information_schema |
      | mysql              |
      | performance_schema |
      | sbtest             |
      | sys                |
      +--------------------+
      5 rows in set (0.02 sec)
    2. 场景二:停掉Master ECS
      #停掉Master ECS,在客户端机器上连接MySQL。
      #如果连接成功说明VIP已经连到slave上。
      [mysql@iZbp156ycm6s06xjdb8acoZ ~]# mysql -usbtest -h 172.16.198.99 -P 3306 -p
      MySQL [(none)]> show databases;
      +--------------------+
      | Database           |
      +--------------------+
      | information_schema |
      | mysql              |
      | performance_schema |
      | sbtest             |
      | sys                |
      +--------------------+
      5 rows in set (0.02 sec)