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操作)

[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操作)

[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操作)

[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操作)

[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操作)

[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操作)

[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操作)

- 实现免密连接三台数据库服务器

[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)

[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操作)

[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操作)

[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日志文件及偏移量

[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操作)

[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: YesSlave_SQL_Running: Yes
…

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

[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: YesSlave_SQL_Running: Yes
…

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

① 安装软件

# 安装mha-node软件包

[root@monitor ~]# yum -y install mha4mysql-node-0.56-0.el6

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

[root@localhost ~]# scp mha/mha4mysql-manager-0.56.tar.gz root@192.168.2.15:/root

# 源码安装MHA服务端

[root@monitor ~]# tar -xf mha4mysql-manager-0.56.tar.gz
[root@monitor ~]# cd mha4mysql-manager-0.56/
[root@monitor mha4mysql-manager-0.56]# ls

[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

② 修改配置文件

[root@monitor ~]# mkdir /etc/mha       //创建工作目录

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

[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)

[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操作)

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

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

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

[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)

[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配置

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

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

[root@monitor ~]# masterha_check_repl --conf=/etc/mha/app1.cnf
…
MySQL Replication Health is OK.

③ 启动管理服务

[root@monitor ~]# masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover

补充:

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

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

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

[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)

[root@monitor ~]# ls /etc/mha/

[root@monitor ~]# ls /var/log/manage.log    //日志文件
/var/log/manage.log

步骤8:测试访问集群

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

[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)

[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操作)

[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操作)

[root@master ~]# systemctl stop mysqld

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

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

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

[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清除)

[root@monitor ~]# vim /etc/mha/app1.cnf

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

[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)

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

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

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

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

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

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

[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操作)

[root@master ~]# systemctl start mysqld

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

[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日志文件和偏移量

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

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

[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: YesSlave_SQL_Running: Yes
…

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

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

# 测试集群环境

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

# 测试主从同步

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

⑤ 重启管理服务

[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集群,除此之外推荐参考相关学习网址:

  • MySQL高可用浅析:MySQL HA方案-PingCAP | 平凯星辰
  • mysql-master-ha 实现mysql master的高可用。 - 施文涛 - 博客园

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1559979.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Jenkins pipeline语法笔记

Jenkins pipeline 简介Jenkins Pipeline 优势DSL 是什么 pipeline支持两种语法&#xff1a;声明式pipeline语法&#xff1a;Pipelineagent Pipeline 声明式语法DeclarativeenvironmentoptionsparameterstriggerstoolsinputwhenParallel Pipeline Scripted语法流程控制Declarati…

罗永浩力荐格行随身WiFi,背后原因竟是...你绝对想不到!

一、罗永浩的“严选”哲学 虽然罗永浩做的是直播带货&#xff0c;但是他的形象与其他头部主播之间有着明显的不同。那些头部主播&#xff0c;都可以统称为“电商主播”&#xff0c;他们与那些淘宝店、京东店里直播的商家本质是一样的&#xff0c;只有流量和名气大小不同罢了。…

SpringBoot开发部署(热部署+常规部署+Docker部署)

开发热部署 SpringBoot模板引擎的页面默认是开启缓存的&#xff0c;如果修改了页面&#xff0c;则刷新页面是得不到修改后的页面的 在application.properties中关闭模板引擎缓存 Thymeleaf spring.thymeleaf.cachefalseFreeMarker spring.freemarker.cachefalseGroovy spring…

拓扑排序与入度为0的结点算法解析及实现

拓扑排序与入度为0的结点算法解析及实现 算法思想时间复杂度分析伪代码C语言实现环路检测结论拓扑排序是一种用于有向无环图(DAG, Directed Acyclic Graph)的重要操作,它可以对图中的结点进行排序,使得对于每一条有向边 (u, v),顶点 u 在排序中都出现在顶点 v 之前。本文介…

PVC刻字膜高精度模切应用

PVC刻字膜是一种由聚氯乙烯&#xff08;PVC&#xff09;为主要成分制成的薄膜材料&#xff0c;具有耐磨、耐刮、耐水、耐油以及良好的化学稳定性等特点。这种薄膜在多个行业中得到广泛应用&#xff0c;特别是在服装、鞋业、箱包、汽车内饰等领域&#xff0c;用于制作各种标识、…

C语言 | 第十四章 | 指针运算 指针数组 多重指针

P 131 断点调试应用案例&#xff08;2&#xff09;2023/2/3 一、应用案例 案例一&#xff1a;用调试查看数组越界异常。 #include<stdio.h> void main(){int arr[] {1,2,3,4,5};int i 0;int len sizeof(arr) / sizeof(int);for(i 0; i < len; i) { // 这里不…

代码随想录训练营Day29 | 93.复原IP地址 | 78.子集 | 90.子集II

学习文档&#xff1a;代码随想录 (programmercarl.com) 学习视频&#xff1a;代码随想录算法公开课 | 最强算法公开课 | 代码随想录 (programmercarl.com) Leetcode 93. 复原 IP 地址 题目描述 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&…

6. PH47 代码框架硬件开发环境搭建

概述 PH47代码框架的硬件开发环境搭建同样简单&#xff0c; 建立基本的 PH47 框架学习或二次开发的硬件开发环境所需设备如下&#xff1a; BBP 飞控板及相关软硬件: BBP飞控板&#xff0c;或者至少一块Stm32F411核心板&#xff08;WeAct Studio&#xff09;Stm32程序烧录工具…

【Vue3 + TS + Vite】从0到1搭建项目框架

前言 没搭建过Vue3的项目&#xff0c;从0开始搭建一下&#xff0c;记录一下自己的步骤。 技术栈&#xff1a; vue3 ts scss pinia vite 我尽量写的详细一些&#xff0c;后续也会记录我在项目过程中&#xff0c;遇到的一些问题。 文章目录 前言环境搭建一、创建项目1. 使用…

Java->排序

目录 一、排序 1.概念 2.常见的排序算法 二、常见排序算法的实现 1.插入排序 1.1直接插入排序 1.2希尔排序(缩小增量法) 1.3直接插入排序和希尔排序的耗时比较 2.选择排序 2.1直接选择排序 2.2堆排序 2.3直接选择排序与堆排序的耗时比较 3.交换排序 3.1冒泡排序…

【WEB应用安全测试指南–蓝队安全测试2】--超详细-可直接进行实战!!!亲测-可进行安全及渗透测试

安全基础理论入门知识参考上一篇《WEB应用安全测试指南蓝队安全测试1》 WEB应用安全测试指南2 一、文件 I/O 类1.1、任意文件上传1.2、任意文件下载1.3、文件包含 二、接口安全类2.1、短信炸弹2.2、邮件炸弹2.3、短信内容可控2.4、邮件内容可控 三、逻辑流程类3.1、越权3.2、未…

变阻器的未来发展趋势和前景如何?是否有替代品出现?

变阻器是一种用于调节电路中电阻值的电子元件&#xff0c;广泛应用于各种电子设备和系统中。随着科技的不断进步和应用领域的扩展&#xff0c;变阻器的未来发展趋势和前景备受关注。 未来变阻器将趋向于智能化和多功能化&#xff0c;随着物联网、人工智能等技术的快速发展&…

其他:python语言绘制案例

文章目录 介绍导入python包图1图2 介绍 python语言的科研绘图合集&#xff0c;数据来源Hydrogen-diffusion-and-water-rock-reaction 导入python包 import pandas as pd import glob import proplot as pplt import seaborn as sns import numpy as np import matplotlib.py…

java时间复杂度与空间复杂度的排序

怎么理解时间复杂度和空间复杂度 时间复杂度和空间复杂度一般是针对算法而言&#xff0c;是衡量一个算法是否高效的重要标准。先纠正一个误区&#xff0c;时间复杂度并不是算法执行的时间&#xff0c;再纠正一个误区&#xff0c;算法不单单指冒泡排序之类的&#xff0c;一个循…

小程序智能视频制作SDK解决方案,云端智能视频制作

无论是个人分享生活的点滴&#xff0c;还是企业展示品牌故事&#xff0c;一段精心制作的视频总能迅速抓住观众的眼球&#xff0c;传递无限价值。专业视频制作往往门槛较高&#xff0c;不仅需要专业的技能和设备&#xff0c;还耗费大量时间和精力。面对这一挑战&#xff0c;美摄…

决策树(descision tree)

一&#xff1a;决策树的基础介绍 决策树(descision tree)是一种基本的分类与回归的方法。决策树是一种对实例进行预测的树型结构。 下面是一个完整的二叉决策树&#xff0c;根据西瓜的几个特征判断西瓜的好坏。 纹理<1.5代表第一个判断条件&#xff0c;根据纹理<1.5是…

PPT技巧:保护PPT文件的方法有哪些?

PPT文件制作好之后保证文件不出错应该是很重要的&#xff0c;毕竟是要拿出去展示的&#xff0c;今天分享PPT加密方法给大家。希望能够帮助大家保护好自己的PPT文件。 打开密码 如果想要其他人需要输入正确的密码才能够打开文件查看并编辑&#xff0c;我们可以给PPT文件设置打…

Android -- [SelfView] 自定义多色渐变背景板

Android – 自定义多色渐变背景板 前言&#xff1a; Android 自带的 xml 文件内 gradient 设置渐变最多只有三种颜色&#xff0c;使用方便但范围受限&#xff0c;不能很好满足各种需求&#xff1b; 本款多色渐变背景板应运而生&#xff1a;* 1. 支持圆角模式&#xff0c;矩形模…

二、IOC容器

文章目录 1. IOC的底层原理1.1 什么是IOC1.2 IOC 底层原理1.3 画图讲解 IOC 底层原理 2. IOC接口&#xff08;BeanFactory&#xff09;3. IOC 操作 Bean 管理&#xff08;概念&#xff09;3.1 什么是Bean管理3.2 Bean管理操作的两种方式 4. IOC操作 Bean 管理&#xff08;基于 …

【Redis】Set类型常用命令

目录 一. Set集合类型简介.二. 增加元素相关命令2.1 向集合中添加元素(sadd)2.2 从集合中移动元素( smove ) 三. 查询元素相关操作.3.1 查询集合中存在的所有元素.( smembers )3.2 查询集合中是否存在member( sismember ) 四. 随机获取集合中的元素4.1 随机获取集合中的n个元素…