小白带你学习linux的mariadb高可用MAH

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 小白带你学习linux的mariadb高可用MAH



一、概述

1、概念

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

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

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

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

2、组成

MHA manager            管理节点

MHA node            数据节点

                            每个节点上都需要安装

3、特点

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

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

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

4、工作原理

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

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

应用差异的中继日志(relay log)到其他的slave

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

提升一个slave为新的master

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

二、案例

192.168.28.3         manager(MHA)           mgt

192.168.28.4        master          master

192.168.28.5       slave               slave1

192.168.28.6      slave              slave2

三、构建MHA

1、ssh免密登录

所有节点配置hosts

vim /etc/hosts

192.168.28.3    mgt

192.168.28.4    master

192.168.28.5   slave1

192.168.28.6    slave2

scp /etc/hosts 192.168.28.4:/etc/
scp /etc/hosts 192.168.28.5:/etc/
scp /etc/hosts 192.168.28.6:/etc/

更改主机名字

192.168.28.3

ssh-keygen

ssh-keygen

先给自己拷贝一个

在其余三台主机上都分别拷贝给mgt

ssh-copy-id mgt

拷贝完成之后在从新考回给其余三台主机

for i in 4 5 6;do scp authorized_keys  192.168.28.$i:/root/.ssh/;done

 for i in 4 5 6;do ssh-copy-id root@192.168.28.$i;done

192.168.28.4

 ssh-keygen

 for i in 3 5 6;do ssh-copy-id root@192.168.28.$i;done

192.168.28.5

ssh-keygen

for i in 4 3 6;do ssh-copy-id root@192.168.28.$i;done

192.168.28.6

ssh-keygen

for i in 4 5 3;do ssh-copy-id root@192.168.28.$i;done

测试

for i in 3 4 5;do ssh 192.168.28.$i hostname;done

每台主机都需要验证一下四台一起

ssh master
ssh slave1
ssh slave2
ssh mgt

 

2、主从复制

安装mariadb数据库并启动

mount /dev/sr0 /mnt
yum -y install mariadb mariadb-server

 

for i in 4 5 6;do ssh 192.168.28.$i yum install -y mariadb mariadb-server  mariadb;done

配置主从复制

2.1master

vim  /etc/my.cnf

[mysqld]

server-id = 20

log-bin = master-bin

log-slave-updates = true

 

systemctl restart mariadb
systemctl enable mariadb

 

mysql -e "grant replication slave on *.* to 'myslave'@'192.168.28.%' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.28.%' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.28.3' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.28.5' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.28.6' identified by '123.com';"

回mgt查看状态需要三台配置完mysql-e

mysql -e "show master status";

2.2slave

scp /etc/my.cnf slave2:/etc

server-id=30

log-bin=master-bin

relay-log=relay-log-bin

relay-log-index=relay-log-bin.index

mysql -e "grant replication slave on *.* to 'myslave'@'192.168.28.%' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.28.%' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.28.3' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.28.4' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.28.6' identified by '123.com';"

2.3slave2

systemctl restart mariadb
systemctl enable mariadb

两台slave都需要这么操作

mysql -e "change master to master_host='192.168.28.4',master_user='myslave',master_password='123.com',master_log_file='master-bin.000003',master_log_pos=1002;"

三条红线是的意思是mgt主机ip

第二条是状态码

mgt的状态

验证

master           mysql -e "create database jx;"

slave              mysql -e "show databases;"

主从复制已开启

3、MHA安装

所有节点安装perl环境

mgt,mysql,slave1,slave2都需要来一遍

yum -y install epel-release
 yum -y install epel-release
yum -y install perl-DBD-MySQL perl-ExtUtils-MakeMaker perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes perl-CPAN

node

所有节点安装node

for i in master slave1 slave2;do scp mha4mysql-node-0.57.tar.gz  $i:/root/;done

 

tar xf mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57
 perl Makefile.PL && make && make install

解压其他master slave1 slave2

for i in master slave1 slave2;do ssh   $i tar xf /root/mha4mysql-node-0.57.tar.gz ;done

去解压

 

验证

mgt

cd /usr/local/bin

看到脚本就OK

ssh master ls -l /usr/local/bin
 ssh slave1 ls -l /usr/local/bin
 ssh slave2 ls -l /usr/local/bin

manager

tar xf mha4mysql-manager-0.57.tar.gz
 cd /root/mha4mysql-manager-0.57
 perl Makefile.PL && make && make install

 

cp sample/scripts/master_ip_failover /usr/local/bin/

cp sample/scripts/master_ip_online_change     /usr/local/bin/

cd samples/ 
 cd scripts/
 cp master_ip_failover  master_ip_online_change  /usr/local/bin/
 cd /usr/local/bin/

 

脚本说明

master_ip_failover    自动切换时 VIP 管理的脚本

master_ip_online_change    在线切换时 vip 的管理

power_manager    故障发生后关闭主机的脚本

send_report   因故障切换后发送报警的脚本

配置文件建立

 

mkdir /etc/masterha
vim /etc/masterha/app1.cnf

 

mkdir /var/log/masterha/app1 -p

 

测试MHA

vim /usr/local/bin/master_ip_failover

 

masterha_check_ssh --conf=/etc/masterha/app1.cnf

masterha_check_repl --conf=/etc/masterha/app1.cnf

出现的问题

去slaves1 下重新赋权登录

 

启动命令

nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &

启动时masterIP异常                需要工程手动配置VIP

4、测试

停用master的mariadb服务

systemctl stop mariadb

切换到slave1上 ip a

成功

5、故障恢复

修改app1.cnf启动配置               添加master主机配置信息

分别在slave上重新指定master主机及binlog日志同步信息

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
11天前
|
Ubuntu Linux vr&ar
IM跨平台技术学习(十二):万字长文详解QQ Linux端实时音视频背后的跨平台实践
本文详细记录了新版QQ音视频通话在 Linux 平台适配开发过程中的技术方案与实现细节,希望能帮助大家理解在 Linux 平台从 0 到 1 实现音视频通话能力的过程。
32 2
|
2天前
|
Ubuntu 应用服务中间件 Linux
Linux学习之Ubuntu 20中OpenResty的nginx目录里内容和配置文件
总的来说,OpenResty的Nginx配置文件是一个强大的工具,它允许你以非常灵活的方式定义你的Web服务的行为。
8 2
|
18天前
|
安全 Linux
蓝易云 - Linux学习之RAID
以上就是Linux中RAID的基本概念和使用方法。
16 1
|
20天前
|
安全 Linux
蓝易云 - Linux学习之RAID
最后,你可以使用 `mdadm --detail /dev/md0`命令检查RAID状态。
19 2
|
23天前
|
安全 物联网 Linux
学习Linux对网络安全的重要性
**学习Linux对网络安全至关重要:** 1. 开源操作系统广泛应用于服务器、网络设备,掌握Linux是安全专家必备技能。 2. Linux内置安全特性,如最小权限和防火墙,加上丰富的安全工具,提供强大保障。 3. 可定制性允许灵活配置,满足安全需求,开源社区提供持续更新和教育资源。 4. 学习Linux能提升攻防能力,用于系统加固和渗透测试,适应跨平台安全场景。 5. 随着云计算和物联网发展,Linux在网络安全中的角色日益关键。
48 3
|
17天前
|
Unix 关系型数据库 Linux
技术笔记:linux学习心得
技术笔记:linux学习心得
12 0
|
18天前
|
网络协议 算法 Linux
技术笔记:Linux学习:TCP粘包问题
技术笔记:Linux学习:TCP粘包问题
15 0
|
20天前
|
人工智能 运维 中间件
Linux-shell简单学习
Linux-shell简单学习
11 0
|
25天前
|
Linux
杨校老师带你走进Linux操作系统的学习(一)
杨校老师带你走进Linux操作系统的学习(一)
21 0
|
28天前
|
Linux
【Linux驱动学习(1)】USB与input子系统,linux统一设备模型,枚举,USB描述符深入剖析
【Linux驱动学习(1)】USB与input子系统,linux统一设备模型,枚举,USB描述符深入剖析