MYSQL集群技术

---------------第一部分----------------------

一.mysql源码部署

环境:rhel7.9

1.1.下载安装包

官网:http://www.mysql.com

1.2.在linux下部署mysql

bash 复制代码
1.创建登录用户和数据目录,并给数据目录赋权,因为配置文件读取需要权限(my.cnf)
[root@db_node ~]# useradd -s /sbin/nologin -M mysql
[root@db_node ~]# mkdir /data/mysql -p
[root@db_node ~]# chown mysql.mysql -R /data/mysql/
2.生成启动脚本
[root@db_node ~]# cd /usr/local/mysql/support-files/
[root@db_node support-files]# cp mysql.server /etc/init.d/mysqld
3.编辑配置文件
[root@db_node support-files]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql #指定数据目录
socket=/data/mysql/mysql.sock #指定套接字
symbolic-links=0 #数据只能存放到数据目录中,禁止链接到数据目录
4.编辑环境变量
[root@db_node support-files]#  vim ~/.bash_profile
export PATH=$PATH:/usr/local/mysql/bin
[root@db_node support-files]# source ~/.bash_profile
注:环境变量写错,会导致所有基本命令无法找到,可以先在命令行输入临时命令,然后再修改配置文件
[root@db_node ~]# ll ~/.bash_profile
bash: ls: command not found
[root@db_node ~]# export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
5.数据库初始化
[root@db_node support-files]# mysqld --initialize --user=mysql(记住密码)
[root@db_node ~]# chkconfig mysqld on(启动)
6.修改密码并且进行数据库安全初始化
[root@db_node ~]# mysql_secure_installation
7.登录
[root@db_node ~]# mysql -uroot -p1234


注意:编译安装完成后的数据会存放在/usr/local/mysql下面,因此,后面需要源码安装时可以把之前压缩好的编译的目录解压,解压后进行数据库基本配置,如建立用户目录权限初始化修改配置文件等等(172.25.254.161:/root/mysql.tar)

验证查看数据库内置数据库:

二.mysql功能实现

2.1.mysql主从复制

最新版做到了主从可以同步5.7.44

2.2.1.master配置

环境:master:172.25.254.160

bash 复制代码
1.修改配置文件
[root@db_server support-files]# vim /etc/my.cnf
log-bin=mysql-bin    二进制
server-id=1          id唯一
2.重启服务
[root@db_server support-files]#/etc/init.d/mysqld restart
3.登录数据库
[root@db_server ~]# mysql -uroot -p
Enter password:
4.创建用户repl和密码lee
mysql> create user 'repl'@'%' identified by 'lee';
Query OK, 0 rows affected (0.00 sec)
5.给用户所有主机所有权限
mysql> grant replication slave on *.* to repl@'%';
Query OK, 0 rows affected (0.00 sec)
6.查看master状态
mysql> show master status;
+------------------+----------+--------------+------------------+-------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gt |
+------------------+----------+--------------+------------------+-------------+
| mysql-bin.000001 |      595 |              |                  |             |
2.1.2.slave配置

slave:172.25.254.161

2.1.3.同步测试(异步)
bash 复制代码
master上面创建表,插入数据,查看slave上面是否实现同步:
mysql> create database lee;
Query OK, 1 row affected (0.00 sec)

mysql> CREATE TABLE lee.userlist (
    -> username varchar(20) not null,
    -> password varchar(50) not null
    -> );
Query OK, 0 rows affected (0.02 sec)
mysql> insert into lee.userlist value ('lee','123');
Query OK, 1 row affected (0.01 sec)

master:

slave:

2.2.一主两从
2.2.1.原理剖析

slave端会设置master的ip,用户名,密码,日志和位置用于master认证,设置好后主库中数据记录在binlog二进制日志中,通过dump线程(mysqldump)把数据发送到slave,slave端的i/o线程用于接收二进制日志,写入中继日志中,且保存到本地磁盘,sql读取中继日志中的sql语句回放,把数据写入slave端的数据库。
什么时候我们需要多个slave?

当读取的而操作远远高与写操作时。我们采用一主多从架构 数据库外层接入负载均衡层并搭配高可用机制

2.2.2.基础配置环境
2.2.3. 数据拷贝

生产环境中备份时需要锁表,保证备份前后的数据一致 mysql> FLUSH TABLES WITH READ LOCK

备份后再解锁 mysql> UNLOCK TABLES;

bash 复制代码
[root@db_server ~]# mysqldump -uroot -p lee > lee.sql
[root@db_server ~]# scp lee.sql 172.25.254.162:/root
2.2.4.拉平数据
2.2.5.slave2配置同步
bash 复制代码
#master中查看日志文件和位置
mysql -uroot -plee -e "SHOW MASTER STATUS;"
#slaves2中配置异步同步:
mysql> change master to master_host='172.25.254.160',master_user='repl',mastersword='lee',master_log_file='mysql-bin.000002',master_log_pos=154;
#查看slave2状态:
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
#master中插入数据,在slaves端查看是否同步

mysql> select * from lee.userlist;
+----------+----------+
| username | password |
+----------+----------+
| lee      | 123      |
| user2    | 123      |
+----------+----------+
2 rows in set (0.00 sec)
2.3.延迟复制

延迟复制时用来控制sql线程的和i/o线程无关

这个延迟复制不是i/o线程过段时间来复制,i/o是正常工作的

是日志已经保存在slave端了,那个sql要等多久进行回放

举例:你发现操作失误,误删数据了,但是因为延迟复制,你所删除的数据会再从数据库里面多保存几分钟,完全可以把数据又恢复回来

bash 复制代码
slaves1上操作:
mysql> stop slave sql_thread;
mysql> change master to master_delay=60;
mysql> start slave sql_thread;
mysql> show slave status\G;


Slave_IO_Running: Yes
Slave_SQL_Running: Yes
SQL_Delay: 60

在master中写入数据后过了延迟时间才能被查询到 (60s)

2.4.mysql并行复制

默认情况下slave中使用的是sql单线程回放

在master中时多用户读写,如果使用sql单线程回放那么会造成组从延迟严重

开启MySQL的多线程回放可以解决上述问题

解决多用户读写时sql单线程回放的压力

MySQL 组提交(Group commit)是一个性能优化特性,它允许在一个事务日志同步操作中将多个 事务的日志记录一起写入。这样做可以减少磁盘I/O的次数,从而提高数据库的整体性能。

bash 复制代码
slave中设置:因为是只影响sql线程,因此不需要修改master
[root@db-node ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
server-id=2
gtid_mode=ON               #开启gtid
enforce-gtid-consistency=ON    #开启gtid强一致性
slave-parallel-type=LOGICAL_CLOCK #基于组提交,
slave-parallel-workers=16 #开启线程数量
master_info_repository=TABLE #master信息在表中记录,默认记录在/data/mysql//master.info
relay_log_info_repository=TABLE #回放日志信息在表中记录,默认记录在/data/mysql/relay-log.info
relay_log_recovery=ON #日志回放恢复功能开启
注意:数据信息记录在表中,没有直接存放在磁盘,加快了读取速度

/etc/init.d/mysql restart

优化后对比:

此时sql线程转化为协调线程,16个worker负责处理sql协调线程发送过来的处理请求

2.5.半同步模式(gtid)

之前的异步模式,数据从master通过dump线程发送到slave中,是否真正保存并不清楚,若是master挂掉那么恰好二进制日志没有到达slave,数据会丢失,无法达到数据的强
半同步模式在接收到数据并且通过io线程保存到中继日志中后,会向master返回确认信息,然后master收到确认信息才会将数据提交到自己磁盘(存储引擎)
当master挂掉后slave接管,一般会挑选一个和master延迟日 志最接近的充当新的master,我们无法为了知道新的master和slave之 间差多少,需要开启gtid,他不会去检测新的master的pos id,只需要继续读取自己gtid_next即可

2.5.1.设置gtid

①配置文件开启gtid(三台数据库都配置)

[root@db-server ~]# /etc/init.d/mysqld restar

②开启slave端的gtid: (两台slave都需要做)

③启用半同步模式并且加载模块

④半同步查看

bash 复制代码
三台mysql都需要查看:
1.下载插件
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

2.设置半同步模式开启
mysql> SET GLOBAL rpl_semi_sync_slave_enabled =1;

3.重启io线程半同步模式才会生效
mysql> STOP SLAVE IO_THREAD;
mysql> START SLAVE IO_THREAD;

4.查看半同步
mysql> SHOW VARIABLES LIKE 'rpl_semi_sync%'
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | ON   |
| rpl_semi_sync_slave_trace_level | 32   |

⑤测试:

模拟故障:

bash 复制代码
模拟io线程没有开启:
mysql> STOP SLAVE IO_THREAD;
#在master端插入数据
mysql> insert into lee.userlist values ('user5','555');
Query OK, 1 row affected (10.00 sec) #10秒超时

测试结果:

Rpl_semi_sync_master_no_tx | 1 | #一笔数据为同步

Rpl_semi_sync_master_status | OFF | #自动转为异步模式,除非slave恢复

Rpl_semi_sync_master_timefunc_failures | 0 | #会自动恢复

三.mysql高可用之组复制(MGR)

传统的mysql复制技术仅解决了数据同步的问题,MGR 对属于同一组的服务器自动进行协调。对于要提交的事务,组成员必须就全局事务序列中给定事务 的顺序达成一致

3.1.组复制流程

首先我们将多个节点共同组成一个复制组,在执行读写(RW)事务的时候,需要通过一致性协议层 (Consensus 层)的同意,也就是读写事务想要进行提交,必须要经过组里"大多数人"(对应 Node 节 点)的同意,大多数指的是同意的节点数量需要大于 (N/2+1),这样才可以进行提交,而不是原发起 方一个说了算。而针对只读(RO)事务则不需要经过组内同意,直接 提交 即可

3.2.单主和多主模式

3.3.mgr实现

bash 复制代码
每个节点都做:
[root@db_server ~]# vim /etc/my.cnf
[root@db_server ~]# rm -rf /data/mysql/
[root@db_server ~]# mysqld --user=mysql --initialize
[root@db_server ~]# /etc/init.d/mysqld start
[root@db_server ~]# mysql -uroot -p
Enter password:
#修改密码:
mysql> alter user root@localhost identified by 'lee';
#关闭日志:
mysql> set sql_log_bin=0;
#创建用户
mysql> create user rpl_user@'%' identified by 'lee';
#授权
mysql> grant replication slave on *.* to rpl_user@'%';
#刷新
mysql> flush privileges;
#开启日志
mysql> set sql_log_bin=1;
#加入组
mysql> change master to master_user='rpl_user',master_password='lee' for channelp_replication_recovery';
#指定初始成员,只在第一台机器上做
mysql> set global group_replication_bootstrap_group=on;
mysql> start group_replication;
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;


注意:其他组内的机器要适当修改配置文件内容,若是某一台机器故障,那么会自动退出组,等他恢复是不会自动加入组中,需要在第一台机器上重新开启组,在故障机器上面加入即可。
bash 复制代码
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
log_bin=binlog
server-id=1
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
gtid_mode=on
enforce-gtid-consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
#plugin_load_add=semisync_master
#rpl_semi_sync_master_enabled=1
binlog_format=ROW
plugin_load_add='group_replication.so'
transaction_write_set_extraction=XXHASH64
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address="172.25.254.160:33061"
group_replication_group_seeds="172.25.254.160:33061,172.25.254.161:33061,172.25.254.162:33061"
group_replication_ip_whitelist="172.25.254.0/24,127.0.0.1/8"
group_replication_bootstrap_group=off
group_replication_single_primary_mode=OFF
group_replication_enforce_update_everywhere_checks=ON
group_replication_allow_local_disjoint_gtids_join=1
3.4.测试:

模拟故障:

SERVER上面开启:

四.mysql-router(负载均衡)

4.1.简介

是一个对应用程序透明的InnoDB Cluster连接路由服务,提供负载均衡、应用连接故障转移 和客户端路 由。用户可以编写应用程序来连接到路由器,并令路由器使用相应的路由策略 来处理连接,使其连接到正确的MySQL数据库服务器 。

4.2.mysql router部署

mysql router 并不能限制数据库的读写,访问分流

172.25.254.160:

bash 复制代码
环境:160这台主机关闭mysql,充当mysql router,161,162两台主机充当后端服务器
下载软件
[root@db_server ~]# rpm -ivh mysql-router-community-8.4.0-1.el7.x86_64.rpm
[root@db_server ~]# vim /etc/mysqlrouter/mysqlrouter.conf
bash 复制代码
[root@db_server ~]# systemctl start mysqlrouter.service
[root@db_server ~]# /etc/init.d/mysqld restart

172.25.254.161/162

bash 复制代码
创建登录用户及密码:
mysql> create user lee@'%' identified by 'lee';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all on lee.* to lee@'%';
Query OK, 0 rows affected (0.00 sec)

4.3.测试:

五.mysql高可用之MHA

5.1.简介:

解决单点故障,MySQL高可用环境下故障切换和主从复制的软件。能在故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用。

自动故障切换过程中,MHA从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢,使用半同步复制,可以大大降低数据丢失的风险,如果只有一个slave已经收到了最新的二进制日 志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数 据一致性 目前MHA支持一主多从架构,最少三台服务,即一主两从

5.2.MHA部署

5.2.1.搭建一主两从架构
bash 复制代码
主master:
[root@db_server ~]# /etc/init.d/mysqld stop
[root@db_server ~]# rm -fr /data/mysql/*
[root@db_server ~]#  vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
server-id=1
log_bin=mysql_bin
gtid_mode=ON
enforce-gtid-consistency=ON
symbolic-links=0

[root@db_server ~]# mysqld --user mysql --initialize
[root@db_server ~]# /etc/init.d/mysqld start
[root@db_server ~]# mysql -p')yX#>+fms3Y6'
mysql> alter user root@localhost identified by 'lee';
[root@db_server ~]# mysql -plee
mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'lee';
mysql> GRANT REPLICATION SLAVE ON *.* TO repl@'%';
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
mysql> show variables like 'rpl_semi_sync%';
+-------------------------------------------+------------+
| Variable_name                             | Value      |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled              | ON         |
| rpl_semi_sync_master_timeout              | 10000      |
| rpl_semi_sync_master_trace_level          | 32         |
| rpl_semi_sync_master_wait_for_slave_count | 1          |
| rpl_semi_sync_master_wait_no_slave        | ON         |
| rpl_semi_sync_master_wait_point           | AFTER_SYNC |
+-------------------------------------------+------------+
6 rows in set (0.01 sec)
bash 复制代码
从slave:
[root@db_node ~]# /etc/init.d/mysqld stop
[root@db_node ~]# rm -fr /data/mysql/*
[root@db_node ~]#  vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
server-id=2
log_bin=mysql_bin
gtid_mode=ON
enforce-gtid-consistency=ON
symbolic-links=0


[root@db_node ~]# mysqld --user mysql --initialize
[root@db_node ~]# /etc/init.d/mysqld start
[root@db_node ~]# mysql -p'q:6(3.SL,-#q'
mysql> alter user root@localhost identified by 'lee'
    -> ;
mysql> CHANGE MASTER TO MASTER_HOST='172.25.254.160', MASTER_USER='repl',MASTER_PASSWORD='lee'AUTO_POSITION=1;
mysql> start slave;
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
mysql> SET GLOBAL rpl_semi_sync_slave_enabled =1;
mysql> STOP SLAVE IO_THREAD;
mysql> START SLAVE IO_THREAD;
mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON    |
+----------------------------+-------+
1 row in set (0.00 sec)
5.2.2.免密连接
bash 复制代码
ssh-keygen一路回车
ssh-copy-id -i ~/.ssh/ip_rsa.pub root@172.25.254.161
注意:若A要免密登录主机B,只需要将A的公钥上传到B的authorized_keys中即可,其中~/.ssh权限为700/600,/root权限为700,authorized_keys权限为600,然后重启sshd即可,最好设置下ssh服务的主配置文件,开启相应允许权限 
5.2.3.安装并配置MHA
bash 复制代码
#安装软件
[root@mysql-mha ~]# unzip MHA-7.zip
[root@mysql-mha MHA-7]# yum install *.rpm -y
[root@mysql-mha MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm 
root@172.25.254.160:/mnt
[root@mysql-mha MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm 
root@172.25.254.161:/mnt
[root@mysql-mha MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm 
root@172.25.254.162:/mnt
[root@db_server ~]# yum install /mnt/mha4mysql-node-0.58-
0.el7.centos.noarch.rpm -y
[root@db_node ~]# yum install /mnt/mha4mysql-node-0.58-
0.el7.centos.noarch.rpm -y
[root@db_node2 ~]# yum install /mnt/mha4mysql-node-0.58-
0.el7.centos.noarch.rpm -y
#配置文件生成
[root@mysql-mha ~]# mkdir /etc/masterha
[root@mysql-mha MHA-7]# tar zxf mha4mysql-manager-0.58.tar.gz
[root@mysql-mha MHA-7]# cd mha4mysql-manager-0.58/samples/conf/
[root@mysql-mha conf]# cat masterha_default.cnf app1.cnf > 
/etc/masterha/app1.cnf
#编辑配置文件
[root@mysql-mha ~]# vim /etc/masterha/app1.cnf
5.2.4.检测

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

#在数据节点master端 mysql> GRANT ALL ON *.* TO root@'%' identified by 'lee';

#允许root远程登陆 #执行检测

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

5.2.5.MHA故障检测

MHA的故障切换过程 共包括以下的步骤:

1.配置文件检查阶段,这个阶段会检查整个集群配置文件配置

2.宕机的master处理,这个阶段包括虚拟ip摘除操作,主机关机操作

3.复制dead master和最新slave相差的relay log,并保存到MHA Manger具体的目录下

4.识别含有最新更新的slave

5.应用从master保存的二进制日志事件(binlog events)

6.提升一个slave为新的master进行复制

7.使其他的slave连接新的master进行复制

5.2.6.故障切换
5.2.6.1.手动切换
bash 复制代码
#在master数据节点还在正常工作情况下 
[root@mysql-mha ~]# masterha_master_switch \
--conf=/etc/masterha/app1.cnf \ #指定配置文件
--master_state=alive \ #指定master节点状态
--new_master_host=172.25.254.161 \ #指定新master节点
--new_master_port=3306 \ #执行新master节点端口
--orig_master_is_new_slave \ #原始master会变成新的slave
--running_updates_limit=10000 #切换的超时时间
bash 复制代码
#模拟master故障
[root@db_node mysql]# /etc/init.d/mysqld stop
#在MHA-master中做故障切换
[root@mysql-mha masterha]# masterha_master_switch --master_state=dead --
conf=/etc/masterha/app1.cnf --dead_master_host=172.25.254.161 --
dead_master_port=3306 --new_master_host=172.25.254.160 --new_master_port=3306 --
ignore_last_failover
--ignore_last_failover 表示忽略在/etc/masterha/目录中在切换过程中生成的锁文件

恢复故障节点:

bash 复制代码
[root@db_node tmp]# /etc/init.d/mysqld start
mysql> CHANGE MASTER TO MASTER_HOST='172.25.254.160', MASTER_USER='repl', 
MASTER_PASSWORD='lee', MASTER_AUTO_POSITION=1;
mysql> start slave;
mysql> SET GLOBAL rpl_semi_sync_slave_enabled =1;
mysql> STOP SLAVE IO_THREAD;
mysql> START SLAVE IO_THREAD;
mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';
+----------------------------+-------+
| Variable_name             | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON   |
+----------------------------+-------+

#测试一主两从是否正常
[root@mysql-mha masterha]# masterha_check_repl --conf=/etc/masterha/app1.cnf
5.2.6.2.自动切换
bash 复制代码
[root@mysql-mha masterha]# rm -fr app1.failover.complete #删掉切换锁文件
#监控程序通过指定配置文件监控master状态,当master出问题后自动切换并退出避免重复做故障切换
[root@mysql-mha masterha]# masterha_manager --conf=/etc/masterha/app1.cnf 
[root@mysql-mha masterha]# cat /etc/masterha/manager.log
#恢复故障节点
#清除锁文件
[root@mysql-mha masterha]# rm -rf app1.failover.complete manager.log
自动切换故障需要清除锁文件‌的原因是为了确保故障切换过程的顺利进行和系统的可靠性。在MHA(MySQL High Availability Manager)进行自动故障切换时,它首先会识别出哪个从库是同步位置最靠前的,这个从库将成为新的主库。在切换过程中,如果存在锁文件,可能会阻碍MHA正确地识别和切换到正确的从库,因此需要清除这些锁文件以确保故障切换的准确性和效率。此外,清除锁文件也是为了防止在故障切换过程中出现竞争条件,确保MHA能够顺利地接管数据库服务,保持数据的一致性和系统的可用性‌

虽然MHA没有直接称为"锁文件"的文件,但它通过日志文件、工作目录、配置文件以及内部同步机制等方式来确保操作的原子性、一致性和安全性。
5.2.6.3.添加VIP

上传脚本(因为实验做完关机因此没来得及复制具体步骤,简单写下思路,具体实现前面步骤都有详细过程,只要找到对应位置即可)

bash 复制代码
[root@mysql-mha ~]# cp master_ip_failover master_ip_online_change 
/usr/local/bin/
[root@mysql-mha ~]# chmod +x /usr/local/bin/master_ip_*
#修改脚本在脚本中只需要修改下vip即可
[root@mysql-mha ~]# vim /usr/local/bin/master_ip_failover
my $vip = '172.25.254.180/24';
my $ssh_start_vip = "/sbin/ip addr add $vip dev ens33";
my $ssh_stop_vip = "/sbin/ip addr del $vip dev ens33";
[root@mysql-mha ~]# vim /usr/local/bin/master_ip_online_change
my $vip = '172.25.254.180/24';
my $ssh_start_vip = "/sbin/ip addr add $vip dev ens33";
my $ssh_stop_vip = "/sbin/ip addr del $vip dev ens33";
my $exit_code = 0;

#若是显示没有监控到日志目录,那么就创建目录,他会将日志写在你创建的目录里面
注意MHA配置文件里面需要开启设置,并且修改脚本的位置,最好再做下主从检验
[root@mysql-node10 tmp]# ip a a 172.25.254.180/24 dev eth0 #在master节点添加VIP
[root@mysql-mha masterha]# masterha_manager --conf=/etc/masterha/app1.cnf & 启动监
控程序


#发生故障后调用的脚本,用来迁移vip
# master_ip_failover_script= /script/masterha/master_ip_failover
#在线切换时调用的vip迁移脚本,手动
# master_ip_online_change_script= /script/masterha/master_ip_online_change

模拟故障: 会自动切换主数据库(至此,SERVER是故障的,master更换,VIP漂移)

[root@db-server~]# /etc/init.d/mysqld stop #关闭主节点服务

恢复故障节点(5.2.6.1有详细过程)

手动恢复故障节点,并且删除日志

手动切换后查看vip变化 (VIP不会因为主机恢复而再次漂移)

[root@mysql-mha masterha]# masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=172.25.254.160 --new_master_port=3306 -- orig_master_is_new_slave --running_updates_limit=10000

相关推荐
亦舒.1 分钟前
宝塔面板优化:提升服务器性能的实用指南
运维·服务器
申耀的科技观察16 分钟前
【观察】戴尔AI算力加速服务器“焕新上市”,打通AI落地行业“最后一公里”...
大数据·运维·服务器·人工智能
一名在八月份找工作的测试员17 分钟前
数据库的操作:SQL运算符(算法/比较/逻辑/位)
java·数据库·sql
666IDCaaa20 分钟前
选择适合你企业发展的服务器
运维·服务器
程序员佳倩24 分钟前
jsp+sevlet+mysql实验室设备管理系统2.0
java·开发语言·mysql
紫郢剑侠32 分钟前
Linux shell编程学习笔记78:cpio命令——文件和目录归档工具(上)
linux·学习笔记·shell编程·脚本编程·cpio
oulaqiao1 小时前
项目——负载均衡OJ
运维·服务器·负载均衡
gbase_lmax1 小时前
druid连接gbase8s数据库报错空指针
数据库
知知之之1 小时前
ShardingSphere事务
数据库·mysql