Linux云计算 |【第四阶段】RDBMS2-DAY4

主要内容:

MHA概述、部署MHA集群

一、MHA概述

1、MHA简介

MHA(Master High Availability)是一款开源的MySQL的高可用程序,由日本DeNA公司youshimaton开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件,数据库的自动故障切换操作能做到在0~30秒之内完成,MHA能确保在故障切换过程中最大限度保证数据的一致性,以达到真正意义上的高可用;

MHA为MySQL主从复制架构提供了automating master failover 自动故障切换功能。MHA在监控到master节点故障时,会提升其中拥有最新数据的slave节点成为新的master节点,在此期间,MHA会通过与其它从节点获取额外信息来避免一致性方面的问题。MHA还提供了master节点的在线切换功能,即按需切换master/slave节点。

相较于其它HA软件,MHA的目的在于维持MySQL Replication中Master库的高可用性,其最大特点是可以修复多个Slave之间的差异日志,最终使所有Slave保持数据一致,然后从中选择一个充当新的Master,并将其它Slave指向它。

1)主要功能

**自动故障检测:**MHA 能够实时监控 MySQL 主从复制集群的状态,检测主节点的故障

**自动故障转移:**当主节点发生故障时,MHA 能够自动选择一个合适的从节点,将其提升为新的主节点,并重新配置其他从节点以指向新的主节点

**数据一致性保证:**MHA 在故障转移过程中,会尝试从故障的主节点中恢复尽可能多的数据,以确保数据的一致性

**手动故障转移:**除了自动故障转移外,MHA 还支持手动故障转移,允许管理员在必要时手动进行主从切换

**监控和日志记录:**MHA 提供了详细的监控和日志记录功能,帮助管理员了解集群的状态和故障转移的过程

2)工作原理

MHA 的工作原理可以分为以下几个关键步骤:

① 监控主节点:

  • MHA 通过定期向主节点发送心跳检测(Heartbeat)来监控主节点的状态。如果主节点在一定时间内没有响应,MHA 会认为主节点发生故障。

② 检测从节点状态:

  • 在主节点故障后,MHA 会检查所有从节点的状态,包括复制延迟、数据一致性等,以选择一个合适的从节点作为新的主节点。

③ 数据恢复:

  • MHA 会尝试从故障的主节点中恢复尽可能多的数据。这通常包括从主节点的二进制日志(Binary Log)中提取未同步的事务,并将其应用到新的主节点上。

④ 提升从节点为主节点:

  • 选择合适的从节点后,MHA 会将其提升为新的主节点,并重新配置其他从节点以指向新的主节点。

⑤ 重新配置客户端:

  • MHA 会通知客户端(如应用程序)新的主节点的地址,以便客户端能够继续访问数据库服务。

2、MHA 的组件

① MHA Manager(管理节点)

MHA 的核心组件,负责监控 MySQL 集群的状态、执行故障检测和故障转移操作

  • 管理多个master/slave集群,每个master/slave集群称作一个application;

  • 通常单独部署在一台独立的机器上,或者直接部署在其中一台slave数据库服务器上(不建议后者)

  • master自动切换及故障转移命令运行;

  • 其他的帮助脚本运行:手动切换master;master/slave状态检测

② MHA Node(数据节点)

安装在每个 MySQL 节点上的组件,负责与 MHA Manager 通信,执行数据恢复和节点提升操作

  • 运行在每台MySQL服务器上(master/slave/manager),存储数据的MySQL服务器

  • 通过监控具备解析和清理logs功能的脚本来加快故障转移

  • 复制主节点的binlog数据

  • 对比从节点的中继日志文件

  • 无需停止从节点的SQL线程,定时删除中继日志

③ SSH 通信

MHA 依赖 SSH 进行节点之间的通信和操作。MHA Manager 通过 SSH 连接到各个 MySQL 节点,执行必要的操作。

3、MHA 切换过程

MHA(Master High Availability)的切换过程是指在主节点(Master)发生故障时,MHA 自动或手动将一个从节点(Slave)提升为新的主节点,并重新配置其他从节点以指向新的主节点的过程。

① 故障检测

MHA 通过定期向主节点发送心跳检测(Heartbeat)来监控主节点的状态。如果主节点在一定时间内没有响应,MHA 会认为主节点发生故障。

② 选择合适的从节点

在主节点故障后,MHA 会检查所有从节点的状态,以选择一个合适的从节点作为新的主节点。选择从节点的标准通常包括:

复制延迟:选择复制延迟最小的从节点,以确保数据的一致性

数据一致性:检查从节点的数据是否与主节点一致

配置优先级:根据配置文件中的优先级设置,选择优先级最高的从节点

③ 数据恢复

MHA 会尝试从故障的主节点中恢复尽可能多的数据,以确保数据的一致性。数据恢复的过程通常包括以下几个步骤:

提取未同步的事务: MHA 会从故障的主节点的二进制日志(Binary Log)中提取未同步的事务
应用未同步的事务: MHA 将提取的未同步的事务应用到新的主节点上,以确保新的主节点包含最新的数据
**同步其他从节点:**MHA 会确保其他从节点也同步到最新的数据,以避免数据不一致

④ 提升从节点为主节点

在数据恢复完成后,MHA 会将选择的从节点提升为新的主节点。提升过程通常包括以下几个步骤:

停止从节点的复制: MHA 会停止从节点的复制进程,以防止数据冲突
提升从节点为主节点: MHA 会将选择的从节点提升为新的主节点,并将其配置为可写状态
**更新配置文件:**MHA 会更新 MySQL 配置文件,将新的主节点的地址和端口配置为可写状态

⑤ 重新配置其他从节点

在新的主节点提升完成后,MHA 会重新配置其他从节点,使其指向新的主节点。重新配置的过程通常包括以下几个步骤:

更新从节点的配置:MHA 会更新其他从节点的配置文件,使其指向新的主节点。

启动从节点的复制:MHA 会启动其他从节点的复制进程,使其开始从新的主节点复制数据。

⑥ 通知客户端

在故障转移完成后,MHA 会通知客户端(如应用程序)新的主节点的地址,以便客户端能够继续访问数据库服务。通知客户端的过程通常包括以下几个步骤:

更新客户端配置:MHA 会更新客户端的配置文件,使其指向新的主节点

通知客户端:MHA 会通过某种机制(如配置中心、DNS 更新等)通知客户端新的主节点的地址

在所有步骤完成后,MHA 切换过程结束,新的主节点开始提供服务,其他从节点开始从新的主节点复制数据。整个切换过程通常在几秒钟内完成,最小化数据库服务的停机时间。

二、部署MHA集群

实验环境拓扑:

  • 服务器角色:monitor(MHA 管理节点)、master、slave1、slave2(MHA 数据节点)
  • Monitor:IP地址192.168.2.15
  • Master:IP地址192.168.2.11,安装MySQL,初始化密码NSD2021@tedu.cn
  • Slave1:IP地址192.168.2.12,安装MySQL,初始化密码NSD2021@tedu.cn
  • Slave2:IP地址192.168.2.13,安装MySQL,初始化密码NSD2021@tedu.cn

提示:提前关闭防火墙和SELinux

实验步骤:

① 数据库服务器基础配置(数据节点开启binlog和半同步复制、并授权主从用户repluser)

② 配置ssh免密登录(数据节点、管理节点)

③ 安装MHA及依赖包(数据节点、管理节点)

④ 配置一主多从结构(数据节点:Master主服务器、Slave1和Slave2从服务器)

⑤ 配置MHA管理节点(安装mha-node软件包、源码编译MHA压缩包、修改app1.cnf配置文件、修改failover配置文件、当前主服务器部署VIP地址)

⑥ 配置MHA数据节点(安装mha-node软件包、授权监控用户mhamon)

⑦ 测试集群环境(管理节点-测试ssh配置、管理节点-测试主从同步、 启动管理服务)

⑧ 测试访问集群

⑨ 测试高可用(关闭主服务器master的mysqld服务)

⑩ 修复故障服务器


步骤1:数据库服务器基础配置

每一台数据库服务器都有可能成为Master,所以都要开启binlog日志功能

① 配置服务器(master操作)

sql 复制代码
[root@master ~]# vim /etc/my.cnf
server_id = 11
log_bin = master11
plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl_semi_sync_master_enabled=1
rpl_semi_sync_slave_enabled=1
relay_log_purge=0   //不清理relay_log

[root@master ~]# systemctl restart mysqld        //重启服务
[root@master ~]# ls /var/lib/mysql/master11.*   //查看生成的binlog日志
/var/lib/mysql/master11.000001  /var/lib/mysql/master11.index

[root@master ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> grant replication slave on *.* to repluser@'%' identified by 'NSD2021@tedu.cn';
Query OK, 0 rows affected, 1 warning (10.01 sec)

补充:设置relay_log_purge=0,禁止SQL线程在执行完一个relay log后自动将其删除,用于高可用切换后的数据补齐;

② 配置服务器(slave1操作)

sql 复制代码
[root@slave1 ~]# vim /etc/my.cnf
server_id = 12
log_bin = master12
plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl_semi_sync_master_enabled=1
rpl_semi_sync_slave_enabled=1
relay_log_purge=0   //不清理relay_log

[root@slave1 ~]# systemctl restart mysqld        //重启服务
[root@slave1 ~]# ls /var/lib/mysql/master12.*   //查看生成的binlog日志
/var/lib/mysql/master12.000001  /var/lib/mysql/master12.index

[root@slave1 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> grant replication slave on *.* to repluser@'%' identified by 'NSD2021@tedu.cn';
Query OK, 0 rows affected, 1 warning (10.01 sec)

③ 配置服务器(slave2操作)

sql 复制代码
[root@slave2 ~]# vim /etc/my.cnf
server_id = 13
log_bin = master13
plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl_semi_sync_master_enabled=1
rpl_semi_sync_slave_enabled=1
relay_log_purge=0   //不清理relay_log

[root@slave2 ~]# systemctl restart mysqld       //重启服务
[root@slave2 ~]# ls /var/lib/mysql/master13.*   //查看生成的binlog日志
/var/lib/mysql/master13.000001  /var/lib/mysql/master13.index

[root@slave2 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> grant replication slave on *.* to repluser@'%' identified by 'NSD2021@tedu.cn';
Query OK, 0 rows affected, 1 warning (10.01 sec)

步骤2:配置ssh免密登录

① 配置服务器(master操作)

bash 复制代码
[root@master ~]# ssh-keygen -f /root/.ssh/id_rsa -N ''
[root@master ~]# for i in 12 13; do ssh-copy-id root@192.168.2.$i; done

② 配置服务器(slave1操作)

bash 复制代码
[root@slave1 ~]# ssh-keygen -f /root/.ssh/id_rsa -N ''
[root@slave1 ~]# for i in 11 13; do ssh-copy-id root@192.168.2.$i; done

③ 配置服务器(slave2操作)

bash 复制代码
[root@slave2 ~]# ssh-keygen -f /root/.ssh/id_rsa -N ''
[root@slave2 ~]# for i in 11 12; do ssh-copy-id root@192.168.2.$i; done

④ 配置管理服务器(monitor操作)

  • 实现免密连接三台数据库服务器
bash 复制代码
[root@monitor ~]# ssh-keygen -f /root/.ssh/id_rsa -N ''
[root@monitor ~]# for i in 11 12 13; do ssh-copy-id root@192.168.2.$i; done

步骤3:安装MHA及perl软件包

① 配置YUM源(参考:/linux-soft/4/mha)

bash 复制代码
[root@localhost ~]# cd mha/
[root@localhost mha]# cp *.rpm /var/www/html/mysql/
[root@ localhost mha]# cd /var/www/html/mysql/
[root@ localhost mysql]# createrepo -v .

② 在三台数据库服务器和管理节点上安装perl软件包

数据节点(master、slave1、slave2操作)

bash 复制代码
[root@master ~]# yum -y install gcc pcre-devel pkgconfig autoconf automake perl-ExtUtils-MakeMaker perl-CPAN perl-DBI perl-DBD-MySQL
[root@slave1 ~]# yum -y install gcc pcre-devel pkgconfig autoconf automake perl-ExtUtils-MakeMaker perl-CPAN perl-DBI perl-DBD-MySQL
[root@slave2 ~]# yum -y install gcc pcre-devel pkgconfig autoconf automake perl-ExtUtils-MakeMaker perl-CPAN perl-DBI perl-DBD-MySQL

管理节点(monitor操作)

bash 复制代码
[root@monitor ~]# yum -y install perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes perl-ExtUtils-MakeMaker perl-CPAN

步骤4:配置一主多从结构

① 配置主服务器(master操作)

查看当前binlog日志文件及偏移量

sql 复制代码
[root@master ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| master11.000001 |      441 |              |                  |                   |
+-----------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

② 配置从服务器同步主服务器(slave1操作)

sql 复制代码
[root@slave1 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> change master to
    -> master_host='192.168.2.11',
    -> master_user='repluser',
    -> master_password='NSD2021@tedu.cn',
    -> master_log_file='master11.000001',
    -> master_log_pos=441;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
mysql> start slave;    //开启slave
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G    //查看slave状态
*************************** 1. row ***************************
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
...

③ 配置从服务器同步主服务器(slave2操作)

sql 复制代码
[root@slave2 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> change master to
    -> master_host='192.168.2.11',
    -> master_user='repluser',
    -> master_password='NSD2021@tedu.cn',
    -> master_log_file='master11.000001',
    -> master_log_pos=441;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
mysql> start slave;    //开启slave
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G    //查看slave状态
*************************** 1. row ***************************
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
...

步骤5:配置MHA管理节点(monitor操作)

① 安装软件

安装mha-node软件包

bash 复制代码
[root@monitor ~]# yum -y install mha4mysql-node-0.56-0.el6

拷贝MHA服务端压缩包到管理节点(mha4mysql-manager-0.56.tar.gz)

bash 复制代码
[root@localhost ~]# scp mha/mha4mysql-manager-0.56.tar.gz root@192.168.2.15:/root

源码安装MHA服务端

bash 复制代码
[root@monitor ~]# tar -xf mha4mysql-manager-0.56.tar.gz
[root@monitor ~]# cd mha4mysql-manager-0.56/
[root@monitor mha4mysql-manager-0.56]# ls
sql 复制代码
[root@monitor mha4mysql-manager-0.56]# perl Makefile.PL
*** Module::AutoInstall version 1.03
*** Checking for Perl dependencies...
[Core Features]
- DBI                   ...loaded. (1.627)
- DBD::mysql            ...loaded. (4.023)
- Time::HiRes           ...loaded. (1.9725)
- Config::Tiny          ...loaded. (2.14)
- Log::Dispatch         ...loaded. (2.41)
- Parallel::ForkManager ...loaded. (1.18)
- MHA::NodeConst        ...loaded. (0.56)
*** Module::AutoInstall configuration finished.
Checking if your kit is complete...
Looks good     //提示Looks good,没有Waring即可
Writing Makefile for mha4mysql::manager

[root@monitor mha4mysql-manager-0.56]# make && make install    //编译安装
[root@monitor mha4mysql-manager-0.56]# ls

② 修改配置文件

bash 复制代码
[root@monitor ~]# mkdir /etc/mha       //创建工作目录

拷贝配置文件到MHA服务器,并修改(app1.cnf)

sql 复制代码
[root@localhost ~]# scp mha/app1.cnf root@192.168.2.15:/root/etc/mha/

[root@monitor ~]# vim /etc/mha/app1.cnf
[server default]
manager_log=/var/log/manage.log       //日志文件
manager_workdir=/etc/mha              //工作目录
master_ip_failover_script=/etc/mha/master_ip_failover     //故障切换脚本
 
repl_user=repluser       //主服务器数据同步授权用户
repl_password=NSD2021@tedu.cn     //授权用户密码
 
ssh_port=22        // ssh连接服务端口
ssh_user=root      //访问ssh服务用户
 
user=mhamon       //监控用户
password=NSD2021@tedu.cn    //监控用户密码
 
[server1]        //【第1台数据库服务器配置】
candidate_master=1
hostname=192.168.2.11   //指定数据节点IP
port=3306     //指定端口3306
 
[server2]        //【第2台数据库服务器配置】
candidate_master=1
hostname=192.168.2.12   //指定数据节点IP
port=3306     //指定端口3306
 
[server3]        //【第3台数据库服务器配置】
candidate_master=1
hostname=192.168.2.13   //指定数据节点IP
port=3306     //指定端口3306

③ 创建故障切换脚本

拷贝故障切换脚本文件到MHA服务器,并修改(mha/master_ip_failover)

sql 复制代码
[root@localhost ~]# scp mha/master_ip_failover root@192.168.2.15:/etc/mha/

[root@monitor ~]# vim +35 /etc/mha/master_ip_failover
...
my $vip = '192.168.2.100/24';  # Virtual IP    //修改VIP虚拟地址
my $key = "1";
my $ssh_start_vip = "/sbin/ifconfig eth1:$key $vip";   //开启
my $ssh_stop_vip = "/sbin/ifconfig eth1:$key down";    //关闭
...
[root@monitor ~]# chmod +x /etc/mha/master_ip_failover   //添加执行权限

④ 在当前主服务器部署vip地址(master操作)

bash 复制代码
[root@master ~]# ifconfig eth1:1 192.168.2.100/24
[root@master ~]# ifconfig
eth1:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.2.100  netmask 255.255.255.0  broadcast 192.168.2.255
        ether 00:0c:29:c9:57:01  txqueuelen 1000  (Ethernet)

步骤6:配置MHA数据节点(master、slave1、slave2操作)

① 在所有数据库服务器上,安装mha-node软件包

bash 复制代码
[root@master ~]# yum -y install mha4mysql-node-0.56-0.el6
[root@slave1 ~]# yum -y install mha4mysql-node-0.56-0.el6
[root@slave2 ~]# yum -y install mha4mysql-node-0.56-0.el6

② 在所有数据服务器上添加监控用户(mhamon)

sql 复制代码
[root@master ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> grant all on *.* to mhamon@'%' identified by 'NSD2021@tedu.cn';
mysql> show grants for mhamon@'%';
+---------------------------------------------+
| Grants for mhamon@%                         |
+---------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'mhamon'@'%' |
+---------------------------------------------+
1 row in set (0.00 sec)
 
[root@slave1 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> grant all on *.* to mhamon@'%' identified by 'NSD2021@tedu.cn';
mysql> show grants for mhamon@'%';
+---------------------------------------------+
| Grants for mhamon@%                         |
+---------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'mhamon'@'%' |
+---------------------------------------------+
1 row in set (0.00 sec)
 
[root@slave2 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> grant all on *.* to mhamon@'%' identified by 'NSD2021@tedu.cn';
mysql> show grants for mhamon@'%';
+---------------------------------------------+
| Grants for mhamon@%                         |
+---------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'mhamon'@'%' |
+---------------------------------------------+
1 row in set (0.00 sec)

步骤7:测试集群环境(monitor操作)

① 管理节点-测试ssh配置

sql 复制代码
[root@monitor ~]# masterha_check_ssh --conf=/etc/mha/app1.cnf
...
Tue Jun 15 15:49:40 2021 - [info] All SSH connection tests passed successfully.

② 管理节点-测试主从同步

bash 复制代码
[root@monitor ~]# masterha_check_repl --conf=/etc/mha/app1.cnf
...
MySQL Replication Health is OK.

③ 启动管理服务

bash 复制代码
[root@monitor ~]# masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover

补充:

--remove_dead_master_conf 删除已死的master服务器信息;

--ignore_last_failover 忽略上一次故障切换;

打开新终端查看服务状态,原终端不能关闭

bash 复制代码
[root@monitor ~]# masterha_check_status --conf=/etc/mha/app1.cnf
app1 (pid:3115) is running(0:PING_OK), master:192.168.2.11

查看工作目录文件列表(新增app1.master_status.health)

bash 复制代码
[root@monitor ~]# ls /etc/mha/
bash 复制代码
[root@monitor ~]# ls /var/log/manage.log    //日志文件
/var/log/manage.log

步骤8:测试访问集群

① 在主服务器上,创建数据库和表,再添加访问数据的连接用户(master操作)

sql 复制代码
[root@master ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> create database db1 default charset utf8mb4;   //创建db1库
Query OK, 1 row affected (0.00 sec)

mysql> create table db1.students(id int primary key auto_increment , name varchar(20));   //创建students表
Query OK, 0 rows affected (0.01 sec)

mysql> grant select,insert on db1.* to dbuser1@'%' identified by 'NSD2021@tedu.cn';   //授权测试用户
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

② 使用客户端192.168.2.5连接vip: 192.168.2.100地址访问集群(VIP即当前master)

sql 复制代码
[root@localhost ~]# ping 192.168.2.100
PING 192.168.2.100 (192.168.2.100) 56(84) bytes of data.
64 bytes from 192.168.2.100: icmp_seq=1 ttl=64 time=0.211 ms
64 bytes from 192.168.2.100: icmp_seq=2 ttl=64 time=0.235 ms
...
[root@localhost ~]# mysql -udbuser1 -pNSD2021@tedu.cn -h192.168.2.100
mysql> insert into db1.students values(1,'tom');      //插入语句
Query OK, 1 row affected (0.00 sec)
mysql> select * from db1.students;
+----+------+
| id | name |
+----+------+
|  1 | tom  |
+----+------+
1 row in set (0.00 sec)

③ 在两台从服务器查看数据(slave1、slave2操作)

sql 复制代码
[root@slave1 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> select * from db1.students;
+----+------+
| id | name |
+----+------+
|  1 | tom  |
+----+------+
1 row in set (0.00 sec)
 
[root@slave2 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> select * from db1.students;
+----+------+
| id | name |
+----+------+
|  1 | tom  |
+----+------+
1 row in set (0.00 sec)

步骤9:测试高可用

① 停止主服务器的mysql服务(master操作)

bash 复制代码
[root@master ~]# systemctl stop mysqld

② 查看MHA服务器管理服务 ,输出的监控信息(monitor操作)

bash 复制代码
[root@monitor ~]# masterha_check_status --conf=/etc/mha/app1.cnf
app1 is stopped(2:NOT_RUNNING).   //服务已停止运行

工作目录,新增故障切换完成文件,及master服务器的binlog日志

bash 复制代码
[root@monitor ~]# ls /etc/mha/   
app1.cnf  app1.failover.complete  master_ip_failover  saved_master_binlog_from_192.168.2.11_3306_20210615174011.binlog

查看app1.cnf配置文件,[server1]相关信息已被删除(--remove_dead_master_conf清除)

bash 复制代码
[root@monitor ~]# vim /etc/mha/app1.cnf

③ 客户端192.168.2.5依然可以连接VIP地址192.168.2.100,且可访问到数据

sql 复制代码
[root@localhost ~]# mysql -udbuser1 -pNSD2021@tedu.cn -h192.168.2.100
mysql> select * from db1.students;
+----+------+
| id | name |
+----+------+
|  1 | tom  |
+----+------+
1 row in set (0.00 sec)

④ 在工作的两台数据库服务器slave1和slave2上查看VIP地址,VIP地址将会转移到某一台主机上

(通过自动故障切换功能,将拥有最新数据的slave提升为新的master)

bash 复制代码
[root@slave1 ~]# ifconfig
eth1:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.2.100  netmask 255.255.255.0  broadcast 192.168.2.255
        ether 00:0c:29:5c:69:a7  txqueuelen 1000  (Ethernet)

查看slave2上的slave状态(自动将其他的slave重新指向新的master)

bash 复制代码
[root@slave2 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> show slave status\G    //主服务器已变成192.168.2.12

⑤ 在新的主服务器slave1上更新数据(客户端更新也可以)

bash 复制代码
[root@slave1 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> insert into db1.students values(2, 'jerry');
Query OK, 1 row affected (0.08 sec)

在从服务器slave2上查看数据是否同步

sql 复制代码
[root@slave2 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> select * from db1.students;
+----+-------+
| id | name  |
+----+-------+
|  1 | tom   |
|  2 | jerry |
+----+-------+
2 rows in set (0.00 sec)

步骤10:修复故障服务器

① 启动出现故障服务器的mysqld服务(master操作)

bash 复制代码
[root@master ~]# systemctl start mysqld

② 同步现有数据到修复的服务器(宕机期间其它数据库服务器产生的数据)

bash 复制代码
[root@slave1 ~]# mysqldump -uroot -pNSD2021@tedu.cn --master-data db1 > db1.sql
[root@slave1 ~]# scp db1.sql 192.168.2.11:/root/
 
[root@master ~]# mysql -uroot -pNSD2021@tedu.cn db1 < db1.sql

③ 配置修复的服务器为当前主服务器的从服务器

找到当前主服务器的binlog日志文件和偏移量

bash 复制代码
[root@master ~]# grep master db1.sql
CHANGE MASTER TO MASTER_LOG_FILE='master12.000001', MASTER_LOG_POS=986;

将恢复的服务器master同步当前的主服务器slave1,作为现有的从服务器

sql 复制代码
[root@master ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> change master to
    -> master_host='192.168.2.12',
    -> master_user='repluser',
    -> master_password='NSD2021@tedu.cn',
    -> master_log_file='master12.000001',
    -> master_log_pos=986;
Query OK, 0 rows affected, 2 warnings (0.42 sec)
mysql> start slave;
Query OK, 0 rows affected (0.03 sec)
mysql> show slave status\G
*************************** 1. row ***************************
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
...

④ 修改配置文件,将修复的服务器添加到服务器声明中(monitor操作)

bash 复制代码
[root@monitor ~]# vim /etc/mha/app1.cnf   //尾部追加以下内容
...
[server1]
candidate_master=1
hostname=192.168.2.11
port=3306

测试集群环境

bash 复制代码
[root@monitor ~]# masterha_check_ssh --conf=/etc/mha/app1.cnf
...
Thu Apr 15 20:52:53 2021 - [info] All SSH connection tests passed successfully.

测试主从同步

bash 复制代码
[root@monitor ~]# masterha_check_repl --conf=/etc/mha/app1.cnf
...
MySQL Replication Health is OK.

⑤ 重启管理服务

bash 复制代码
[root@monitor ~]# masterha_stop --conf=/etc/mha/app1.cnf
MHA Manager is not running on app1(2:NOT_RUNNING).

[root@monitor ~]# masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover &
[root@monitor ~]# masterha_check_status  --conf=/etc/mha/app1.cnf
app1 (pid:7856) is running(0:PING_OK), master:192.168.2.12

小结:

本篇章节为**【第四阶段】RDBMS2-DAY4**的学习笔记,这篇笔记可以初步了解到 MHA概述、部署MHA集群,除此之外推荐参考相关学习网址:


Tip:毕竟两个人的智慧大于一个人的智慧,如果你不理解本章节的内容或需要相关笔记、视频,可私信小安,请不要害羞和回避,可以向他人请教,花点时间直到你真正的理解。

相关推荐
Lightning-py30 分钟前
Linux-控制脚本
linux·运维·服务器
尘浮生37 分钟前
Java项目实战II基于Java+Spring Boot+MySQL的桂林旅游景点导游平台(源码+数据库+文档)
java·开发语言·数据库·spring boot·mysql·maven·intellij-idea
柠檬の夏季1 小时前
数据库表操作
数据库
零意@1 小时前
rk3588调试es8388语音编解码IC小结
linux·rk3588·音频编解码·es8388·声卡
听雪楼主.1 小时前
Oracle RAC IPC Send timeout detected问题分析处理
数据库·oracle
wangmeng08041 小时前
Linux C语言实现把微信Image的dat文件转成png图片
linux·c语言·微信
一个儒雅随和的男子1 小时前
连肝了多天学习MySQL索引与性能优化,详细总结一下索引的使用与数据库优化
数据库·学习·mysql
QuiteCoder2 小时前
【linux】冯诺依曼架构
linux
吃饭只吃七分饱2 小时前
字符设备驱动模块 dev和misc
linux·运维·服务器
huntenganwei2 小时前
Perf生成火焰图分析程序性能
linux