文档

MySQL高可用实践

更新时间:

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

优势说明

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

对比项

基于DBFS共享存储构建

基于主备同步方式构建

性能

高。主备共享一份数据,不需要同步,可关闭binary log。

弱。开启MySQL binary log后,性能下降。强同步模式下,性能下降明显。

成本

低。主备共享一份数据。

高。主备库两份数据存储。

一致性

强一致。

弱一致。一般采用异步模式复制。半同步复制模式下,仍然存在主备库数据状态不一致问题。

易用性

部署与切换简单

部署与切换逻辑复杂,另需保证第三方切换工具的自身高可用性。

环境准备

从以上比较可知,基于DBFS共享存储构建MySQL高可用的方案,在性能、成本、数据一致性、易用性等方面上都有非常好的收益。

在展开构建步骤陈述之前,先做前置条件说明:

  • 可用区:构建双机的ECS以及DBFS需要在同一个可用区。

  • 专有网络VPC:在阿里云 “控制台” -》“专有网络VPC” 中创建VPC。

  • 传统型负载均衡 CLB(原SLB):在阿里云 “控制台” -》“传统型负载均衡 CLB(原SLB)” 中创建”主备服务器组“类型的CLB,需与ECS在同一个VPC网络中。

环境部署清单如下:

资源

IP/挂载点

端口

系统

角色

dbfs1-node1

172.16.198.79

3306

Alibaba Cloud Linux 2.1903 64位

MASTER

dbfs1-node2

172.16.198.80

3306

Alibaba Cloud Linux 2.1903 64位

SLAVE

SLB VIP

172.16.198.99

3306

N/A

负载均衡

应用机器

172.16.198.157

3306

N/A

MySQL客户端

共享存储

/mnt/dbfs/hgsrb6i8ebd4/dbfs-ytr9rtr9tgvwyrv*******

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/hgsrb6i8****/dbfs-ytr9rtr9tgvwyrv*******/lock/dbfs_mysql_ha.lock -c "/home/mysql/start_mysql.sh"
                                
  3. 安装MySQL

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

  4. 测试高可用

    1. 场景一:停掉Master上的MySQL数据库

      #杀掉Master上的MySQL进程,在客户端机器上连接MySQL。
      #如果连接成功说明VIP已经连到slave上。
      [mysql@iZbp156ycm6s06x******** ~]# 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@iZbp156ycm6s06x******** ~]# 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)