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

news2024/12/24 18:43:48

主要内容:

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: Yes
            Slave_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: Yes
            Slave_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 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软件包

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

[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: Yes
            Slave_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.coloradmin.cn/o/2202807.html

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

相关文章

Vue组件继承与扩展

Vue组件继承与扩展 前言 与Class继承类似&#xff0c;在Vue中可以通过组件继承来达到复用和扩展基础组件的目的&#xff0c;虽然它可能会带来一些额外的性能损耗和维护成本&#xff0c;但其在解决一些非常规问题时有奇效。本文将通过一些非常规的功能需求来讨论其实现过程。 …

广州自闭症寄宿学校有哪些?选择最适合孩子的学校

在广州这座繁华而充满人文关怀的城市里&#xff0c;有一群特殊的孩子&#xff0c;他们被称为“星星的孩子”——自闭症儿童。他们生活在自己的世界里&#xff0c;对外界的刺激反应迟钝或过度敏感&#xff0c;社交互动困难&#xff0c;语言表达受限。然而&#xff0c;在广州&…

高中数学基础

1.1函数的定义与性质 01函数定义 D是一个非&#xff0c;空时数集&#xff0c;对于D中的每一个X都有一个对应的规则f&#xff0c;能相应只对应唯一的一个实数Y&#xff0c;那么可以称Yf(X)&#xff0c;是一个函数。 判断是否为同一个函数&#xff0c;需要满足两个条件&#xff…

基于springboot和vue.js 养老院管理系统设计与实现

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm springcloud等开发框架&#xff09; vue .net php phython node.js uniapp小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆…

LLM-RAG相关常见面试题

#############【持续更新】############## LLM-RAG相关常见面试题 1. RAG技术体系的总体思路 RAG可分为5个基本流程&#xff1a;知识文档的准备&#xff1b;嵌入模型&#xff08;embedding model&#xff09;&#xff1b;向量数据库&#xff1b;查询检索和生产回答。 参考&a…

山西省中小学生学籍照片手机拍照集中采集指南

随着山西省教育信息化的持续发展&#xff0c;学校管理的数字化转型中&#xff0c;学籍信息的精确记录变得尤为关键。在这一背景下&#xff0c;学籍管理系统的优化升级显得尤为重要。为了保障学生资料的精确无误&#xff0c;山西省对中小学生学籍系统中的照片采集和上传流程提出…

5本一投就中的极速期刊,性价比高,1周-1个月录用,见刊极快!

在当今快节奏的学术界&#xff0c;研究者们不仅追求高质量的研究成果&#xff0c;还希望能够迅速地将这些成果分享给全球的同行。为此&#xff0c;科检易学术精心挑选了10本以高效审稿流程著称的期刊&#xff0c;这些期刊不仅性价比高&#xff0c;而且从投稿到录用的时间极短&a…

使用API有效率地管理Dynadot域名,设置域名服务器(NS)的ip信息

前言 Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮箱&…

决策树(descision tree)

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

【JDK17 | 16】Java 17 深入剖析:密封类(二)

一、密封类的使用场景和优势 什么是密封类&#xff1f; 密封类&#xff08;sealed class&#xff09;是 Java 17 引入的一种新特性&#xff0c;允许开发者控制哪些类可以继承或实现某个类或接口。通过使用密封类&#xff0c;开发者可以定义一组特定的子类&#xff0c;从而提供…

【springboot9733】基于springboot+vue的藏区特产销售平台

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 项目描述 “互联网”的战略实施后&#xff0c;很多行业的信息化水…

好用的AI工具

目录 1.常用AI工具 1.1.语音助手 1.1.1. 华为小艺 1.1.2. 小米小爱同学 1.2.智能客服 1.2.1. 银行客服 1.2.2. 酒店语音电话 1.3.编程助手 1.3.1. 百度Comate 1.3.2. 华为CodeArts 2.创新AI应用 2.1. 生成式AI 2.2. 自动驾驶技术 2.3. 医疗AI 2.4. 智能客服机器…

简单的maven nexus私服学习

简单的maven nexus私服学习 1.需求 我们现在使用的maven私服是之前同事搭建的&#xff0c;是在公司的一台windows电脑上面&#xff0c;如果出问题会比较难搞&#xff0c;所以现在想将私服迁移到我们公司的测试服务器上&#xff0c;此处简单了解一下私服的一些配置记录一下&am…

conda新建环境中存在大量ros相关python包

1 问题现象 新建的conda环境&#xff0c;执行pip list&#xff0c;出现了大量的ros相关包&#xff0c;环境不纯净。重新安装anaconda没有用。 2 问题原因 2.1 执行python -m site 执行python -m site获得以下结果 其中sys.path包含了’/opt/ros/noetic/lib/python3/dist-…

想要项目顺利进行,企业如何做好节点计划管理?

项目的成功实施对于企业的发展和竞争力提升至关重要。然而&#xff0c;要确保项目顺利进行并非易事&#xff0c;其中做好节点计划管理是关键所在。一个精心策划和有效执行的节点计划&#xff0c;能够为项目的推进提供清晰的路线图&#xff0c;帮助企业合理分配资源、控制进度、…

VR虚拟场景:重塑沉浸式购物体验的新篇章

在科技日新月异的今天&#xff0c;虚拟现实&#xff08;VR&#xff09;技术正以前所未有的速度改变着我们的生活方式&#xff0c;特别是在消费领域&#xff0c;它正引领着一场前所未有的购物体验革命。通过构建高度逼真的虚拟场景&#xff0c;VR技术为消费者打造了一个超越现实…

修改 antd a-popover气泡卡片弹窗背景颜色

antdv 中 a-popover 样式修改不生效的问题 因为 popover 元素添加到了 body 下面&#xff0c;增加下面这几行代码&#xff0c;将 popover 添加到它原本的父级下面&#xff0c;然后用 ::v-deep 去修改样式就可以 1.效果图 2.代码 主要的代码就是 :getPopupContainer"(tri…

【笔记】Day2.4表设计说明

主键ID一般使用bigint类型 运送类型 使用比int更小的tinyint类型 eg&#xff1a;普快代表1 特快代表2&#xff08;没写反&#xff09; 关联城市 varchar 2代表京津冀 3代表江浙沪 4代表川渝 首重和续重都有小数点 故使用double 轻抛系数都为整数 故使用int 创建时间和修改…

Perforce静态分析工具2024.2新增功能:Helix QAC全新CI/CD集成支持、Klocwork分析引擎改进和安全增强

Perforce Helix QAC和Klocwork的最新版本对静态分析工具进行了重大改进&#xff0c;通过尽早修复错误、降低开发成本和加快发布速度&#xff0c;使开发团队实现左移。 本文中&#xff0c;我们将概述2024.2版本的新特性和新功能。 CI/CD和左移以实现持续合规性 现代软件开发实…

《Programming from the Ground Up》阅读笔记:p217-p238

《Programming from the Ground Up》学习第11天&#xff0c;p217-p238总结&#xff0c;总计22页。 一、技术总结 1.C compiling p216, C compiling is split into two stages - the preprocessor and the main compiler。 注&#xff1a;感觉这个写法不好&#xff0c;因为p…