【MySQL】MHA高可用(上)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【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服务器上


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
SQL 容灾 关系型数据库
rds容灾与高可用
rds容灾与高可用
222 4
|
存储 关系型数据库 MySQL
Mysql高可用|索引|事务 | 调优
Mysql高可用|索引|事务 | 调优
|
10月前
|
存储 SQL 关系型数据库
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
781 3
Mysql高可用架构方案
|
7月前
|
监控 关系型数据库 MySQL
云数据库:从零到一,构建高可用MySQL集群
在互联网时代,数据成为企业核心资产,传统单机数据库难以满足高并发、高可用需求。云数据库通过弹性扩展、分布式架构等优势解决了这些问题,但也面临数据安全和性能优化挑战。本文介绍了如何从零开始构建高可用MySQL集群,涵盖选择云服务提供商、创建实例、配置高可用架构、数据备份恢复及性能优化等内容,并通过电商平台案例展示了具体应用。
|
运维 容灾 关系型数据库
MySQL高可用方案--Xenon全解
MySQL高可用方案--Xenon全解
|
运维 容灾 关系型数据库
介绍几种 MySQL 官方高可用方案
MySQL 官方提供了多种高可用部署方案,从最基础的主从复制到组复制再到 InnoDB Cluster 等等。本篇文章以 MySQL 8.0 版本为准,介绍下不同高可用方案架构原理及使用场景。
2691 3
介绍几种 MySQL 官方高可用方案
|
SQL 关系型数据库 MySQL
orchestrator搭建mysql高可用
orchestrator搭建mysql高可用
230 0
|
缓存 关系型数据库 MySQL
如何实现mysql高可用集群
如何实现mysql高可用集群
131 0
|
安全 关系型数据库 MySQL
【MySQL】Orchestrator最简单的 mysql 高可用方案最细细细细~
【MySQL】Orchestrator最简单的 mysql 高可用方案最细细细细~
|
SQL 关系型数据库 MySQL
MySQL高可用架构设计:从主从复制到分布式集群
MySQL高可用性涉及主从复制、半同步复制和Group/InnoDB Cluster。主从复制通过二进制日志同步数据,保证故障时可切换。半同步复制确保事务在至少一个从服务器确认后才提交。Group Replication是多主复制,支持自动故障切换。InnoDB Cluster是8.0的集成解决方案,简化集群管理。使用这些技术能提升数据库的稳定性和可靠性。
1088 2

推荐镜像

更多