首页 > 其他分享 >MHA高可用配置及故障切换

MHA高可用配置及故障切换

时间:2024-08-02 17:53:50浏览次数:15  
标签:log MHA 故障 manager master 切换 root localhost

目录

MHA高可用配置及故障切换

MHA定义

MAH的组成

MHA特点

MHA工作原理

实验:搭建MySQL MHA

案例拓扑图

案例实施

四台服务器关闭防火墙防护,连接所有会话101、102、103、104

设置host文件

安装MySQL数据库 连接会话102、103、104

设置主库配置

从服务器配置

启动

修改登录密码

在所有Mylsq节点上配置授权 在102上授权

取消用户同步,单独针对一个节点去做操作

在mysql上查看mastar信息

在mysql2和mysql3设置slave配置主从环境

安装MHA软件

同时托入四个主机,连接101、102、103、104会话

设置阿里的yum基础源都安装MHA依赖的环境

在所有节点安装node组件

在 MHA-manager上安装manager组件

配置无密码认证

在 manager 上配置到所有节点的无密码认证

在 Mysql1 上配置到数据库节点的无密码认证

在 Mysql2 上配置到数据库节点的无密码认证

在 Mysql3 上配置到数据库节点的无密码认证

配置MHA

在 manager 节点上复制相关的脚本到/usr/local/bin目录

脚本具体作用

完整替换master_ip_failover文件的内容,IP部分更换为自己的IP地址

测试ssh无密码认证,如果正常最后输出successfully就是运行成功

测试mysql主从连接情况,最后出现MySQL Replication Health is ok 字样说明正常

首次配置MHA的VIP地址需要手动配置(在mysql上)102主机

启动HMA(在mha-manager主机上)101主机

查看MHA状态,可以看到当前的master是Mysql1节点

查看MHA日志

模拟master故障

用客户端链接群集 105主机

关闭当前的master 102

观察MHA日志,如果自动切换成功,最后输出successfully字样

在mysql2上查看状态


MHA高可用配置及故障切换

MHA定义

HMA(MasterHigh Availablity)是一套优秀的Mysql高可用环境下的故障切换和主从复制的软件

解决MySLQ单点的问题

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

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

MHA是建在主从复制的基础上的;0-30秒自动完成故障切换是MHA的特性 

MAH的组成

  • MHA Manager(管理节点)
  • NHA Node(数据节点)

MHA特点

  • 自动故障奇幻过程种,MHA试图从宕机的主服务器上保存二进制日志,最大程度保证数据不丢失
  • 使用半同步复制,可以大大降低数据丢失的风险
  • 目前MHA支持一主多从架构,最少三台服务,即一主两从

MHA工作原理

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

识别含有最新的更新 slave 日志(可以理解为主从复制数据最新的从服务器)

应用差异的中继日志(relay log)到其他的slave(将数据信息最全最新的从服务器的中继日志给其他的从服务器)

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

提升一个 salve 为新的master

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

实验:搭建MySQL MHA

目的:解决故障切换、尽可能的保存数据,以及所有节点日志的一致性

实验思路:搭建MHA机构---->数据库安装---->一主两从---->MHA搭建

故障模拟:主服务器失效---->主服务器的备胎服务器成为主服务器---->原故障

配置四台虚拟机

服务器

操作系统

主机名/IP 地址

角色

服务器

CentOS7.9

192.168.10.101

管理节点,安装 manager 组件

服务器

CentOS7.9

192.168.10.102

Master 节点,安装 node 组件

服务器

CentOS7.9

192.168.10.103

Slave 节点,安装 node 组件

服务器

CentOS7.9

192.168.10.104

Slave 节点,安装 node 组件

案例拓扑图

案例实施

四台服务器关闭防火墙防护,连接所有会话101、102、103、104

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# vim /etc/sysconfig/selinux 
SELINUX=disabled

设置host文件

修改每个节点的hosts文件

[root@localhost ~]# vim /etc/hosts
192.168.10.101 MHA-manager
192.168.10.102 Mysql1
192.168.10.103 Mysql2
192.168.10.104 Mysql3

安装MySQL数据库 连接会话102、103、104

[root@localhost ~]# yum -y install mariadb-server mysql

关闭掉101的同步

设置主库配置

[root@localhost ~]# vim /etc/my.cnf
server-id=102
log-bin=master-bin
binlog-format=MIXED
relay-log-purge=0
log-slave-updates=true

当relay-log-purge=1时,旧relay logs会在SQL线程执行完毕后被自动删除;当relay-log-purge=0时,旧的 relaylog则会被保留

从服务器配置

server-id=103
log-bin=master-bin
binlog-format=MIXED
relay-log-purge=0
log-slave-updates=true

server-id=104
log-bin=master-bin
binlog-format=MIXED
relay-log-purge=0
log-slave-updates=true

relay-log-purge=0 不自动删除中继日志,以便宕机后恢复数据

log-slave-updates=true Slave可以是其他Slave的Master,从而扩散Master的更新

启动

[root@localhost ~]# systemctl start mariadb

修改登录密码

[root@localhost ~]# mysqladmin -uroot password 'pwd123';

在所有Mylsq节点上配置授权 在102上授权

[root@localhost ~]# mysql -uroot -ppwd123
MariaDB [(none)]> grant replication slave on *.* to 'myslave'@'192.168.10.%' identified by '123456';
MariaDB [(none)]> grant all privileges on *.* to 'mha'@'192.168.10.%' identified by 'manager';
#创建以恶搞用户名为mha,密码为manager的用户允许该用户从以 192.168.10. 开头的IP地址段连接到MariaDB数据库,并且拥有对所有数据库和表的所有操作权限。
MariaDB [(none)]> grant all privileges on *.* to 'mha'@'mysql1' identified by 'manager';
MariaDB [(none)]> grant all privileges on *.* to 'mha'@'mysql2' identified by 'manager';
MariaDB [(none)]> grant all privileges on *.* to 'mha'@'mysql3' identified by 'manager';
用主机名去进行连接
MariaDB [(none)]> flush privileges;

取消用户同步,单独针对一个节点去做操作

在mysql上查看mastar信息
MariaDB [(none)]> show master status;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000003 |     1346 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

同步103、104会话

在mysql2和mysql3设置slave配置主从环境

MariaDB [(none)]> change master to master_host='192.168.10.102',master_user='myslave',master_password='123456',master_log_file='master-bin.000003',master_log_pos=1346;
#
master_host='192.168.10.102'
: 这是主服务器(master)的IP地址或主机名,从服务器将连接到该地址获取主服务器的更新数据。
master_user='myslave'
: 这是连接到主服务器所使用的用户名。在这个例子中,从服务器将使用用户名 myslave 来连接到主服务器。
master_password='123456'
: 这是连接到主服务器所使用的密码。在这个例子中,密码是 123456。
master_log_file='master-bin.000003'
: 这是主服务器上当前的二进制日志文件名,从服务器将从这个日志文件开始读取日志信息。
master_log_pos=1346
: 这是主服务器上二进制日志文件的位置(偏移量),从服务器将从这个位置开始读取日志信息。

MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G

安装MHA软件

所有服务器上安装MHA依赖环境

同时托入四个主机,连接101、102、103、104会话

但我们这里用ftp的基础源去安装(快一点)

ftp的基础源
rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo ftp://192.168.2.149/repo/CentOS-Base.repo
curl -o /etc/yum.repos.d/epel.repo ftp://192.168.2.149/repo/epel.repo
yum clean all

阿里的基础源
rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
yum clean all

设置阿里的yum基础源都安装MHA依赖的环境

yum install -y perl-DBD-MySQLperl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-ExtUtils-CBuilderperl-ExtUtils-MakeMaker perl-CPAN

> perl-DBD-MySQL   //perl针对于mysql数据库

> perl-Config-Tiny    //从配置文件中提拿其中的值

> perl-Log-Dispatch    //log-日志

> perl-Parallel-ForkManager      //多线程管理

> perl-ExtUtils-CBuilder       //扩展工具

> perl-ExtUtils-MakeMaker

> perl-CPAN        //cpan perl中的数据库

在所有节点安装node组件

[root@localhost ~]# tar zxvf  mha4mysql-node-0.57.tar.gz
[root@localhost ~]# cd mha4mysql-node-0.57
[root@localhost mha4mysql-node-0.57]# perl Makefile.PL 
[root@localhost mha4mysql-node-0.57]# make && make install

node工具(这些工具通常由MHAManager的脚本触发,无需人为操作)

  • save_binary_logs:保存和复制 master 的二进制日志。
  • apply_diff_relay_logs:识别差异的中继日志事件并将其差异的事件应用于其他的 slave。
  • filter_mysqlbinlog:去除不必要的 ROLLBACK 事件(MHA 已不再使用这个工具)。
  • purge_relay_logs:清除中继日志(不会阻塞 SQL 线程)。

在 MHA-manager上安装manager组件

不用同步只在manager上

[root@localhost ~]# tar zxvf mha4mysql-manager-0.57.tar.gz
[root@localhost ~]# cd mha4mysql-manager-0.57
[root@localhost mha4mysql-manager-0.57]# perl Makefile.PL
[root@localhost mha4mysql-manager-0.57]# make && make install

manager工具

  • masterha_check_ssh:检查 MHA 的 SSH 配置状况。
  • masterha_check_repl:检查 MySQL 复制状况。第12 页 共 31 页
  • masterha_manger:启动 MHA
  • masterha_check_status:检测当前 MHA 运行状态。
  • masterha_master_monitor:检测 master 是否宕机。
  • masterha_master_switch:控制故障转移(自动或者手动)。
  •  masterha_conf_host:添加或删除配置的 server 信息。

配置无密码认证

实现无密码认证方式,一种是账号密码,一种是密钥对

生成密钥对,取消同步功能

在 manager 上配置到所有节点的无密码认证

[root@localhost ~]# ssh-keygen -t rsa
ssh-copy-id192.168.10.102
ssh-copy-id192.168.10.103
ssh-copy-id192.168.10.104

yes
密码就是你root用户的密码(aptech)

在 Mysql1 上配置到数据库节点的无密码认证

[root@localhost ~]# ssh-keygen -t rsa
ssh-copy-id192.168.10.103
ssh-copy-id192.168.10.104

在 Mysql2 上配置到数据库节点的无密码认证

[root@localhost ~]# ssh-keygen -t rsa
ssh-copy-id192.168.10.102
ssh-copy-id192.168.10.104

在 Mysql3 上配置到数据库节点的无密码认证

[root@localhost ~]# ssh-keygen -t rsa
ssh-copy-id192.168.10.102
ssh-copy-id192.168.10.103

配置MHA

在 manager 节点上复制相关的脚本到/usr/local/bin目录

cd/mha4mysql-manager-0.57/samples
[root@localhost samples]# cd scripts/
[root@localhost scripts]# ls
master_ip_failover  master_ip_online_change  power_manager  send_report
[root@localhost scripts]# cp * /usr/local/bin/
[root@localhost scripts]# cd /usr/local/bin/
脚本具体作用
  • master_ip_failover:自动切换时 VIP 管理的脚本
  •  master_ip_online_change:在线切换时 vip 的管理
  • power_manager:故障发生后关闭主机的脚本
  • send_report:因故障切换后发送报警的脚本

完整替换master_ip_failover文件的内容,IP部分更换为自己的IP地址

复制master_ip_failover脚本到/usr/local/bin目录,这里使用脚本管理VIP

[root@localhost bin]# rm -rf master_ip_failover              #删除该文件
[root@localhost bin]# chmod +x master_ip_failover          给该文件添加执行权

[root@localhost bin]# cd
[root@localhost ~]# cd /etc/
[root@localhost etc]# mkdir masterha
[root@localhost ~]# cd mha4mysql-manager-0.57
[root@localhost mha4mysql-manager-0.57]# cd samples/
[root@localhost samples]# ls
conf  scripts
[root@localhost samples]# cd conf/
[root@localhost conf]# ls
app1.cnf  masterha_default.cnf
[root@localhost conf]# cp app1.cnf /etc/masterha/
[root@localhost conf]# vim /etc/masterha/app1.cnf 

[server default] 
manager_workdir=/var/log/masterha/app1 
manager_log=/var/log/masterha/app1/manager.log 
master_binlog_dir=/usr/local/mysql/data 
#master_binlog_dir=/var/lib/mysql
master_ip_failover_script= /usr/local/bin/master_ip_failover 
master_ip_online_change_script=/usr/local/bin/master_ip_online_change 
user=mha 
password=manager 
ping_interval=1 
remote_workdir=/tmp 
repl_user=myslave 
repl_password=123456 
secondary_check_script= /usr/local/bin/masterha_secondary_check -s192.168.10.103 -s 192.168.10.104
shutdown_script="" 
ssh_user=root 
[server1] 
hostname=192.168.10.102
port=3306 
[server2] 
hostname=192.168.10.103
port=3306 
candidate_master=1
check_repl_delay=0
[server3] 
hostname=192.168.10.104 
port=3306
[root@localhost conf]# mkdir -p /var/log/masterha/app1       #创建这个目录
[root@localhost conf]# vim /etc/masterha/app1.cnf
注释master_binlog_dir=/usr/local/mysql/data
使用master_binlog_dir=/var/lib/mysql确认路径位置

测试ssh无密码认证,如果正常最后输出successfully就是运行成功

[root@localhost ~]# masterha_check_ssh -conf=/etc/masterha/app1.cnf 

测试mysql主从连接情况,最后出现MySQL Replication Health is ok 字样说明正常

[root@localhost ~]# masterha_check_repl -conf=/etc/masterha/app1.cnf 

MySQL Replication Health is OK.

首次配置MHA的VIP地址需要手动配置(在mysql上)102主机

[root@localhost ~]# ifconfig ens33:1 192.168.10.200
ifconfig        #查看和配置网络接口

启动HMA(在mha-manager主机上)101主机

[root@localhost ~]# mkdir -p /var/log/masterha/app1
[root@localhost ~]# 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 &
[1] 14002

查看MHA状态,可以看到当前的master是Mysql1节点

[root@localhost ~]# masterha_check_status --conf=/etc/masterha/app1.cnf

查看MHA日志

[root@localhost ~]# cat /var/log/masterha/app1/manager.log

模拟master故障

用客户端链接群集 105主机

yum -y install mysql
[root@localhost ~]# mysql -umha -pmanager -h 192.168.10.200

关闭当前的master 102

[root@localhost ~]# systemctl stop mariadb

观察MHA日志,如果自动切换成功,最后输出successfully字样

[root@localhost ~]# tailf /var/log/masterha/app1/manager.log

在mysql2上查看状态

mysql> show masterstatus;

标签:log,MHA,故障,manager,master,切换,root,localhost
From: https://blog.csdn.net/m0_70627741/article/details/140876709

相关文章

  • 如何优雅的应对线上故障?
    知识星球有同学遇到了这样一个问题:背景:线上抽奖活动,奖品价格与需求不符,产生了资损;根因:团队惯例全链路人员都负责,新来的产品认为事故与其无关;问题:内部为这个故障担责问题争论较大,作为测试负责人该如何应对?这是很典型的一个职场案例,基本上每个技术同学在工作中或多或少都会遇......
  • vue播放flv、hls(m3u8)视频及动态切换视频流
    【了解video.js】官方地址: https://github.com/videojs/video.js【用法】1、安装npminstallvideo.js--savenpminstallvideojs-flash--save//rtmp格式//flv格式npminstallflv.js--savenpminstallvideojs-flvjs-es6--save//hls格式video.js7.0以后版本......
  • RK3568之修改8250驱动实现RS485收发的自动切换
    最近项目需求,要用到RK3568搭配自制底板。整个软硬件联调过程并不顺利,特立此系列帖,记录调试中发生的一些问题和解决办法。文章目录前言调试过程及问题解决办法1.硬件修改2.软件解决1.修改设备树文件2.查找设备树对应的串口驱动文件3.修改serial.h2.修改8250_dw.c2.修改......
  • 基于KNN-GCN的滚动轴承故障诊断
    数据集:CRWU数据集框架:pytorchtorch-geometric一、数据集​CWRU轴承数据集采集实验台由1.5kW的电机、驱动端轴承、风扇端轴承、扭矩传感器、测功机、加速度传感器和电子控制器组成。待检测的轴承支撑着电动机的转轴,驱动端轴承型号为SKF6205,风扇端轴承型号为SKF6203,本文中使......
  • 在Vue3中创建动态主题切换功能
    随着现代Web开发的进步,用户体验变得愈发重要。在这方面,实现动态主题切换功能无疑是提高用户体验的有效方式。通过动态主题切换,用户可以根据自己的喜好选择明亮的主题或暗色主题,提供了更个性化、更舒适的使用体验。今天,我们将通过一个简洁的示例来展示,如何在Vue3中实现动态......
  • 在绘图破折号地图框中切换几何图层
    我使用下面的帖子在plotlymapbox上绘制maki符号。PlotlyMapbox标记未渲染(圆圈除外)importdashfromdashimportDash,dcc,html,Input,Outputimportdash_bootstrap_componentsasdbcimportplotly.expressaspximportplotly.graph_objsasgoimportnum......
  • 横竖屏切换,按home键,按返回键,锁屏与解锁屏幕,跳转透明Activity界面,启动一个 Theme
    A->B横竖屏切换:A走完ondestory才会走B的onCreate--会走pause按home键:本质上就是普通开B按返回键:也是开B但是会走关A锁屏与解锁屏幕:普通跳转透明Activity界面:会走pause但是不会走onstop启动一个Theme为Dialog的Activity:会onPause不会stop弹出Dialog时A......
  • windows下jdk版本切换(bat)
    1.jdk下载Oracle官网https://www.oracle.com/cn/资源->下载->Java下载jdk当前最新版本jdk22版本jdk8版本当前页面向下拉2.脚本如下:点击查看代码@echooffchcp65001>nulecho****************jdkchangeutil*************************echo此操作需要管理员权......
  • 记一个kvm虚拟器迁移后无法启动故障
    参考https://www.cnblogs.com/joshua317/p/18061002故障现象kvm虚拟机从一台主机迁移至另外一台主机后启动失败报错信息如下#Type"journalctl"toviewsystemlogs.使用命令查看错误信息#Failedtomount/sysroot原因分析CentOS系统启动时出现Failedtomount......
  • mysql的MHA以及故障模拟
    目录MHA概念MHA的组件MHA的特点实验:搭建完成MHA的架构实验:主备切换实验结果实验:故障切换实验:故障恢复MHA概念MHA:高可用模式下的故障切换,基于主从复制。它解决的是单点故障和主从复制不能切换的问题。它至少需要3台。故障切换过程0-30秒。它能根据VIP地址所在的主机......