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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,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
相关文章
|
2月前
|
NoSQL 关系型数据库 MySQL
Linux学习记录---(1、基本命令)
该博客文章提供了Linux系统中基本命令的使用记录,包括文件和目录操作、Redis服务管理、MySQL数据库操作以及Tomcat服务器的启动和检查。
Linux学习记录---(1、基本命令)
|
2月前
|
NoSQL Ubuntu Linux
Linux内核学习
Linux内核学习
57 3
|
2月前
|
关系型数据库 Java MySQL
Linux安装JDK1.8 & tomcat & MariaDB(MySQL删减版)
本教程提供了在Linux环境下安装JDK1.8、Tomcat和MariaDB的详细步骤。这三个组件的组合为Java Web开发和部署提供了一个强大的基础。通过遵循这些简单的指导步骤,您可以轻松建立起一个稳定、高效的开发和部署环境。希望这个指导对您的开发工作有所帮助。
110 8
|
1月前
|
Linux
使用qemu来学习Linux的休眠和唤醒
使用qemu来学习Linux的休眠和唤醒
|
1月前
|
Linux
linux内核原子操作学习
linux内核原子操作学习
|
1月前
|
Ubuntu Linux
用crash工具学习Linux内核 —— 查看cgroup_roots
用crash工具学习Linux内核 —— 查看cgroup_roots
|
1月前
|
Ubuntu Linux 调度
Linux内核学习
Linux内核学习
|
2月前
|
存储 人工智能 Ubuntu
Linux指令学习(一)
Linux指令学习(一)
65 0
|
3月前
|
Ubuntu 算法 Linux
嵌入式Linux的学习误区
**嵌入式Linux学习误区摘要** 1. **过度聚焦桌面Linux** - 许多学习者误将大量时间用于精通桌面Linux系统(如RedHat、Fedora、Ubuntu),认为这是嵌入式Linux开发的基石。 - 实际上,桌面Linux仅作为开发工具和环境,目标不应是成为Linux服务器专家,而应专注于嵌入式开发工具和流程。 2. **盲目阅读Linux内核源码** - 初学者在不了解Linux基本知识时试图直接研读内核源码,这往往导致困惑和挫败感。 - 在具备一定嵌入式Linux开发经验后再有针对性地阅读源码,才能有效提升技能。
35 4
|
3月前
|
Ubuntu 应用服务中间件 Linux
Linux学习之Ubuntu 20中OpenResty的nginx目录里内容和配置文件
总的来说,OpenResty的Nginx配置文件是一个强大的工具,它允许你以非常灵活的方式定义你的Web服务的行为。
40 2
下一篇
无影云桌面