当前位置: 首页 > news >正文

Mysql8.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)
    
http://www.dtcms.com/a/268487.html

相关文章:

  • MySQL 8.0 OCP 1Z0-908 题目解析(21)
  • 熟练掌握ModbusTCP转PROFINET网关的互转技术
  • 深入解析迭代器模式:优雅地遍历聚合对象元素
  • 数据挖掘:深度解析与实战应用
  • IRF堆叠技术的主要优势
  • 学车笔记6
  • 李宏毅genai 笔记:预训练-对齐
  • 【Pyhton】文件读取:读取整个(大型)文件
  • 锁和事务的关系
  • Web攻防-XMLXXE上传解析文件预览接口服务白盒审计应用功能SRC报告
  • Linux系统的常用操作命令——文件远程传输、文件编辑、软件安装的四种方式
  • .golangci.yml文件配置
  • 机器学习之线性回归
  • mybatis-plus从入门到入土(二):单元测试
  • Podman与Docker详细比较:从原理到使用
  • 深度学习图像分类数据集—蘑菇可食性识别分类
  • 深度学习篇---深度学习常见的应用场景
  • IndexedDB(概念、基本使用、Dexie.js的使用)
  • 用Python玩转医学影像实时配准:算法揭秘与实战体验
  • 单片机:STM32F103的开发环境搭建
  • Web-API-day2 间歇函数setInterval与事件监听addEvenListener
  • Win11 安装 Visual Studio(保姆教程 - 更新至2025.07)
  • 每天一个前端小知识 Day 23 - PWA 渐进式 Web 应用开发
  • [Java恶补day39] 整理模板·考点六【反转链表】
  • 【C#】MVVM知识点汇总-2
  • 李宏毅genai笔记: post training 和遗忘
  • OneCode UI组件自主设计支持:深入解析对象生命周期、样式模板与事件管理
  • C++中NULL等于啥
  • Denso Create Programming Contest 2025(AtCoder Beginner Contest 413)
  • 多人协同开发时Git使用命令