Mysql8.0高可用集群架构实战

发布于:2025-07-08 ⋅ 阅读:(19) ⋅ 点赞:(0)

MySQL 8.0高可用集群架构实战笔记

1. InnoDB Cluster概述

InnoDB Cluster是MySQL官方实现高可用+读写分离的架构方案,包含三大核心组件:

  • MySQL Group Replication (MGR):主从同步高可用方案
  • MySQL Shell:集群管理工具
  • MySQL Router:业务流量入口,实现读写分离

官方文档:https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-innodb-cluster.html

2. 集群架构设计

典型的一主两从架构:

  • 1个Primary节点(读写)
  • 2个Secondary节点(只读)
  • 数据通过组复制从主节点同步到从节点

3. 环境准备

3.1 容器化部署

# 创建专用网络
docker network create --driver bridge --subnet 172.19.0.0/24 --gateway 172.19.0.1 mgr-network

# 创建数据目录
mkdir -p /mysql/mgr/node{1..3}/{data,conf,log}

3.2 关键配置项(以node1为例)

[mysqld]
server_id=1
gtid_mode=ON
log-bin=mysql-bin
binlog_transaction_dependency_tracking=WRITESET
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"

4. 集群搭建步骤

4.1 初始化检查

dba.checkInstanceConfiguration('root@mgr-node1:3306')
dba.configureInstance('root@mgr-node1:3306')

4.2 创建集群

var cluster = dba.createCluster('myCluster');
cluster.addInstance('root@mgr-node2:3306');
cluster.addInstance('root@mgr-node3:3306');

4.3 验证集群状态

cluster.status();

正常状态应显示:

"status": "OK",
"statusText": "Cluster is ONLINE and can tolerate up to ONE failure."

5. 故障转移测试

5.1 主节点切换

cluster.setPrimaryInstance('mgr-node2:3306')

5.2 节点恢复

cluster.rejoinInstance("root@mgr-node1:3306")

6. MySQL Router配置

# 安装Router
wget https://downloads.mysql.com/archives/get/p/41/file/mysql-router-community-8.0.27-1.el7.x86_64.rpm
rpm -ivh mysql-router-*.rpm

# 启动路由
mysqlrouter &

端口说明:

  • 6446:读写端口
  • 6447:只读端口

7. InnoDB ReplicaSet方案

适用于主从复制场景,相比集群方案限制更多:

  • 无自动故障转移
  • 可能丢失部分数据
  • 需要手动处理不一致情况

搭建命令:

var rs = dba.createReplicaSet("myrs");
rs.addInstance('root@rs-node2:3306');

8. 常用管理命令

功能 命令
检查实例 dba.checkInstanceConfiguration()
添加节点 cluster.addInstance()
删除节点 cluster.removeInstance()
解散集群 cluster.dissolve()
切换主节点 cluster.setPrimaryInstance()

9. 注意事项

  1. 所有表必须包含主键,否则报错:
    ERROR 3098 (HY000): The table does not comply with the requirements by an external plugin.
    
  2. 节点权重配置影响选举:
    cluster.setInstanceOption('mgr-node1:3306', 'memberWeight', 80)
    

网站公告

今日签到

点亮在社区的每一天
去签到