【MySQL】MHA高可用(上)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 【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服务器上


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
存储 关系型数据库 MySQL
Mysql高可用|索引|事务 | 调优
Mysql高可用|索引|事务 | 调优
|
3月前
|
SQL 容灾 关系型数据库
rds容灾与高可用
rds容灾与高可用
30 4
|
3月前
|
关系型数据库 MySQL
电子好书发您分享《MySQL MGR 8.0高可用实战》
电子好书发您分享《MySQL MGR 8.0高可用实战》 电子好书发您分享《MySQL MGR 8.0高可用实战》
90 1
|
4月前
|
监控 关系型数据库 MySQL
MySQL高可用MHA
MySQL高可用管理工具(MHA,Master High Availability)是一个用于自动管理MySQL主从复制的工具,它可以提供高可用性和自动故障转移。MHA由原版的MHA工具和MHA Manager组成,它们协同工作以实现自动主从切换和监控。
136 0
|
6月前
|
关系型数据库 MySQL Nacos
生产环境下的终极指南:在生产环境部署 Nacos 集群和高可用 MySQL 使用 Docker
生产环境下的终极指南:在生产环境部署 Nacos 集群和高可用 MySQL 使用 Docker
311 0
|
2月前
|
监控 容灾 关系型数据库
rds容灾与高可用
rds容灾与高可用
50 6
|
3月前
|
SQL 关系型数据库 MySQL
Mysql高可用,索引,事务与调优:提高数据库性能的关键技术
在当今互联网时代,高可用性、稳定性和性能是数据库的三大关键要素。本文将深入探讨Mysql高可用、索引、事务和调优等方面的技术,为读者提供实用的解决方案和经验。
24 0
|
3月前
|
监控 关系型数据库 MySQL
MySQL高可用与性能优化综述
MySQL作为一种常用的关系型数据库管理系统,高可用性、索引优化、事务处理和性能调优一直是开发人员和运维人员关注的重点。本文将从MySQL高可用性解决方案、索引设计与优化、事务处理最佳实践以及性能调优策略等方面进行探讨,为读者提供全面的MySQL技术知识概览。
|
3月前
|
SQL 缓存 关系型数据库
MySQL高可用与性能优化——从索引到事务
MySQL是一款常用的关系型数据库,但在实际应用中,如何保证其高可用性与性能优化依然是一个值得探讨的话题。本文将从索引的创建和优化、事务的处理以及常见的性能瓶颈入手,为读者提供MySQL高可用与性能优化的实践经验。
|
3月前
|
缓存 固态存储 关系型数据库
从索引到事务,MySQL高可用调优全攻略
MySQL是目前最流行的关系型数据库之一,但是在高并发情况下,它的性能和可靠性会受到很大的挑战。本文将介绍MySQL高可用方案中的索引优化、事务管理以及调优技巧,帮助读者提升MySQL应用的性能和可靠性。
50 0