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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 小白带你学习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
相关文章
|
19天前
|
存储 安全 Linux
|
22天前
|
Linux Shell 数据安全/隐私保护
|
17天前
|
关系型数据库 MySQL Linux
Linux-安装Mariadb
本文介绍了在 Alibaba Cloud Linux 系统上安装和配置 MariaDB 10.5 的步骤。包括下载安装、初始化数据库、启动服务、处理启动失败的常见问题(如权限问题),以及如何连接数据库、设置密码和允许外部连接。通过这些步骤,您可以顺利完成 MariaDB 的安装和基本配置。
33 0
|
1月前
|
Linux 编译器 C语言
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
|
1月前
|
网络协议 Linux
linux学习之套接字通信
Linux中的套接字通信是网络编程的核心,允许多个进程通过网络交换数据。套接字提供跨网络通信能力,涵盖本地进程间通信及远程通信。主要基于TCP和UDP两种模型:TCP面向连接且可靠,适用于文件传输等高可靠性需求;UDP无连接且速度快,适合实时音视频通信等低延迟场景。通过创建、绑定、监听及读写操作,可以在Linux环境下轻松实现这两种通信模型。
39 1
|
1月前
|
Linux 开发工具
【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)
【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)
|
2月前
|
Linux
使用qemu来学习Linux的休眠和唤醒
使用qemu来学习Linux的休眠和唤醒
|
2月前
|
Linux
linux内核原子操作学习
linux内核原子操作学习
|
2月前
|
Ubuntu Linux
用crash工具学习Linux内核 —— 查看cgroup_roots
用crash工具学习Linux内核 —— 查看cgroup_roots
|
2月前
|
Ubuntu Linux 调度
Linux内核学习
Linux内核学习
下一篇
无影云桌面