【MySQL】MHA高可用(上)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 【MySQL】MHA高可用

一、 MHA概述


1.1什么是MHA

MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件


MHA的出现就是解决MySQL 单点的问题


MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作


MHA能在故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用


1.2MHA的组成

1.2.1MHA node(数据节点)

MHA node运行在每台mysql服务器上


1.2.2MHA manager(管理节点)

MHA Manager 可以单独部署在一台独立的机器上,管理多个 master-slave 集群;也可以部署在一台 slave 节点上


MHA Manager 会定时探测集群中的 master 节点。当 master 出现故障时,它可以自动将最新数据的 slave 提升为新的 master, 然后将所有其他的 slave 重新指向新的 master。整个故障转移过程对应用程序完全透明


1.3MHA的特点

自动故障切换过程中,A试图从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失


使用半同步复制,可以大大降低数据丢失的风险,如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性


目前MHA支持一主多从架构,最少三台服务,即一主两从


1.4MHA工作原理总结

从宕机崩溃的master保存二进制日志事件(binlog events);


识别含有最新的更新的slave 日志


应用差异的中继日志(relay log)到其他的slave 达到数据的一致性


应用从master保存的二进制日志事件


提升一个slave为新的master


使其他的slave连接新的master进行复制


二、MHA搭建准备

2.1实验思路

MHA架构 :①数据库安装 ②一主两从 ③MHA搭建


故障模拟: ①主库失效 ②备选主库成为主库 ③原故障主库恢复重新加入到MHA成为从库


2.2实验准备

节点服务器 系统 主机名 IP地址 安装服务及工具
MHA manager节点服务器 CentOS7.4(64 位) manage 192.168.145.22 安装MHA node和manager组件
Master节点服务器 CentOS7.4(64 位) mysql1 192.164.145.10 安装mysql5.7和MHA node组件
Slave1节点服务器 CentOS7.4(64 位) mysql2 192.168.145.21 安装mysql5.7和MHA node组件
Slave2节点服务器 CentOS7.4(64 位) mysql3 192.168.145.12 mysql5.7和MHA node组件

三、搭建MySQL+MHA

3.1初始化环境

3.1.1关闭防火墙和增强机制

每台服务器上


systemctl stop firewalld
systemctl disable firewalld
setenforce 0

3.1.2查看是否有mysql

Master、Slava1、Slava2上

netstat -anpt | grep 3306



3.2配置主从复制

3.2.1修改 Master、Slave1、Slave2 节点的主机名

Master、Slava1、Slava2上


#在master上(192.168.137.20)
hostnamectl set-hostname mysql1
bash
#在Slave1(192.168.137.15)
hostnamectl set-hostname mysql2
bash
#在Slave2(192.168.137.10)
hostnamectl set-hostname mysql3
bash

3.2.2在master、slave1、slave2添加域名解析

Master、Slava1、Slava2上


vim /etc/hosts
192.168.145.10 Mysql1
192.168.145.21 Mysql2
192.168.145.12 Mysql3


3.2.3配置主从同步

Master、Slava1、Slava2上

修改 master、Slave1、Slave2 节点的 Mysql主配置文件/etc/my.cnf


##Master 节点##
vim /etc/my.cnf
[mysqld]
server-id = 1
log_bin = master-bin
log-slave-updates = true
systemctl restart mysqld
##Slave1 节点##
vim /etc/my.cnf
server-id = 2       #三台服务器的 server-id 不能一样
log_bin = master-bin
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index
systemctl restart mysqld
###Slave2 节点##
vim /etc/my.cnf
server-id = 3 
log_bin = master-bin
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index
systemctl restart mysqld


3.2.4master、Slave1、Slave2 节点上都创建两个软链接

Master、Slava1、Slava2上


ln -s /usr/local/mysql/bin/mysql /usr/sbin/
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/
ls /usr/sbin/mysql*



3.2.5登录数据库主从配置授权

Master、Slava1、Slava2上


###master、Slave1、Slave2 节点上都授权###
grant replication slave on *.* to 'myslave'@'192.168.145.%' identified by '123456';
#授权主从用户
grant all privileges on *.* to 'mha'@'192.168.145.%' identified by 'manager';
grant all privileges on *.* to 'mha'@'mysql1' identified by 'manager';
grant all privileges on *.* to 'mha'@'mysql2' identified by 'manager';
grant all privileges on *.* to 'mha'@'mysql3' identified by 'manager';
刷新数据库
flush privileges;
相同操作图可能不太全



3.2.6master 节点查看二进制文件和同步点 、在 slave1、slave2 节点执行同步操作




###在master上###
show master status;
###在slave1、slave2节点执行同步操作##
change master to master_host='192.168.145.10',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=1747;
start slave;
show slave status\G;


master服务器上


master服务器上
show master status;


slave1服务器上


slave1服务器上


change master to master_host='192.168.145.10',master_user='myslave',master_password='123456',master_log_file='master-bin.000003',master_log_pos=1747;
start slave;
show slave status\G;

slave2服务器上


slave2服务器上


change master to master_host='192.168.145.10',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=1747;
start slave;
show slave status\G;


3.2.7设置两个从节点 只读模式

Slava1、Slava2上


set global read_only=1;




3.2.8验证主从同步

##在主master上创建库##
create database school;
##在slave1、slave2上验证##
show databases;

master服务器上


slave1服务器上



slave2服务器上


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
SQL 容灾 关系型数据库
rds容灾与高可用
rds容灾与高可用
115 4
|
7月前
|
存储 关系型数据库 MySQL
Mysql高可用|索引|事务 | 调优
Mysql高可用|索引|事务 | 调优
|
1月前
|
存储 SQL 关系型数据库
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
163 3
Mysql高可用架构方案
|
4月前
|
运维 容灾 关系型数据库
MySQL高可用方案--Xenon全解
MySQL高可用方案--Xenon全解
|
6月前
|
运维 容灾 关系型数据库
介绍几种 MySQL 官方高可用方案
MySQL 官方提供了多种高可用部署方案,从最基础的主从复制到组复制再到 InnoDB Cluster 等等。本篇文章以 MySQL 8.0 版本为准,介绍下不同高可用方案架构原理及使用场景。
1418 3
介绍几种 MySQL 官方高可用方案
|
4月前
|
SQL 关系型数据库 MySQL
orchestrator搭建mysql高可用
orchestrator搭建mysql高可用
56 0
|
4月前
|
缓存 关系型数据库 MySQL
如何实现mysql高可用集群
如何实现mysql高可用集群
58 0
|
4月前
|
安全 关系型数据库 MySQL
【MySQL】Orchestrator最简单的 mysql 高可用方案最细细细细~
【MySQL】Orchestrator最简单的 mysql 高可用方案最细细细细~
|
4月前
|
缓存 关系型数据库 MySQL
MySQL调优秘籍曝光!从索引到事务,全方位解锁高可用秘诀,让你的数据库性能飞起来!
【8月更文挑战第6天】MySQL是顶级关系型数据库之一,其性能直接影响应用的高可用性与用户体验。本文聚焦MySQL的高性能调优,从索引设计到事务管理,逐一解析。介绍如何构建高效索引,如联合索引`CREATE INDEX idx_order_customer ON orders(order_id, customer_id);`,以及索引覆盖查询等技术。
85 0
|
6月前
|
SQL 关系型数据库 MySQL
MySQL高可用架构设计:从主从复制到分布式集群
MySQL高可用性涉及主从复制、半同步复制和Group/InnoDB Cluster。主从复制通过二进制日志同步数据,保证故障时可切换。半同步复制确保事务在至少一个从服务器确认后才提交。Group Replication是多主复制,支持自动故障切换。InnoDB Cluster是8.0的集成解决方案,简化集群管理。使用这些技术能提升数据库的稳定性和可靠性。
548 2