本文为您说明如何基于阿里云数据库存储服务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双机高可用部署步骤:
挂载DBFS到两个ECS节点
参考“挂载与卸载”,将DBFS挂载到之前申请的两台ECS上。
部署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"
安装MySQL
请参考“MySQL存储计算分离实践”文章。
测试高可用
场景一:停掉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)
场景二:停掉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)