MYSQL集群技术

news2024/11/14 0:14:14

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

一.mysql源码部署

环境:rhel7.9

1.1.下载安装包

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

1.2.在linux下部署mysql

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 

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.同步测试(异步)
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;

[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配置同步
#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要等多久进行回放

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

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的次数,从而提高数据库的整体性能。

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都需要做)

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

④半同步查看

三台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   |

⑤测试:

模拟故障:

模拟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实现

每个节点都做:
[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;


注意:其他组内的机器要适当修改配置文件内容,若是某一台机器故障,那么会自动退出组,等他恢复是不会自动加入组中,需要在第一台机器上重新开启组,在故障机器上面加入即可。
[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:

环境: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

[root@db_server ~]# systemctl start mysqlrouter.service
[root@db_server ~]# /etc/init.d/mysqld restart

172.25.254.161/162

创建登录用户及密码:
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.搭建一主两从架构
主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)

从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.免密连接
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
#安装软件
[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.手动切换
#在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 #切换的超时时间

#模拟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/目录中在切换过程中生成的锁文件

 

 恢复故障节点:

[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.自动切换
[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

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

[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

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

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

相关文章

Delphi5实现秒钟程序

效果图 目的 这个项目非常简单,开发这个是为了方便看秒钟,进行秒杀活动。 虽然目前啥也抢不到,但是有志者事竟成。 完整代码 unit Unit1;interfaceusesSysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,Dialogs, For…

了解prolog规则

要推理先要有规则; 假设有一条规则, 如果X和Y是朋友,那么Y和X也是朋友; 这条规则写成这样, friend(X,Y) :- friend(Y, X). X和Y都是大写,表示这是两个变量;符号 :- 表示推理关系&…

多语言无障碍沟通:2024年英语翻译工具新趋势

随着科技的快速发展,一系列以人工智能为核心驱动的英语翻译工具应运而生,它们如同桥梁简化了跨越语言障碍的交流过程。本文将引领你深入探索这些神奇的英语翻译工具,揭示它们如何助力我们轻松跨越语言鸿沟,实现无缝的跨文化沟通。…

谷歌、火狐及Edge等浏览器中实现allWebPlugin中间件自动安装及升级

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品,致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX控件直接嵌入浏览器,实现插件加载、界面显示、接口调用、事件回调等。支持Chrome、Firefo…

wp-autopost-pro 3.7.8最新完美版

插件简介: 插件是wp-autopost-pro 3.7.8最新版本。 采集插件适用对象 1、刚建的wordpress站点内容比较少,希望尽快有比较丰富的内容; 2、热点内容自动采集并自动发布; 3、定时采集,手动采集发布或保存到草稿&#xff…

Python酷库之旅-第三方库Pandas(099)

目录 一、用法精讲 426、pandas.DataFrame.at属性 426-1、语法 426-2、参数 426-3、功能 426-4、返回值 426-5、说明 426-6、用法 426-6-1、数据准备 426-6-2、代码示例 426-6-3、结果输出 427、pandas.DataFrame.iat属性 427-1、语法 427-2、参数 427-3、功能 …

LeetCode //C - 331. Verify Preorder Serialization of a Binary Tree

331. Verify Preorder Serialization of a Binary Tree One way to serialize a binary tree is to use preorder traversal. When we encounter a non-null node, we record the node’s value. If it is a null node, we record using a sentinel value such as ‘#’. For…

ZMQ管道模型

案例一 生产者Producer #include <zmq.hpp> #include <iostream> #include <string> #include<chrono> #include<thread>using namespace std; using namespace zmq;int main() {context_t context(1);// 创建 PUSH 套接字&#xff0c;用于发送…

2000-2023年上市公司财务困境RLPM模型数据(含原始数据+计算结果)

2000-2023年上市公司财务困境RLPM模型数据&#xff08;含原始数据计算结果&#xff09; 1、时间&#xff1a;2000-2023年 2、来源&#xff1a;上市公司年报 3、指标&#xff1a;证券代码、证券简称、统计截止日期、是否剔除ST或*ST或PT股、是否剔除上市不满一年、已经退市或…

《深度学习》OpenCV 计算机视觉入门 (上篇)

目录 一、了解OpenCV 1、简介 2、导包 3、了解图片构成 二、函数运用 1、展示图片 2、展示图片属性 1&#xff09;img.shape 形状 2&#xff09;img.dtype 类型 像素值类型&#xff1a; 3&#xff09;img.size 尺寸 4&#xff09;演示&#xff0c;img为上图 …

【轨物方案】红外抄表装置在光伏电站项目中的应用

首先&#xff0c;红外抄表装置能够实现远程自动抄表&#xff0c;这对于光伏电站来说至关重要。由于光伏电站往往分布在广阔的区域&#xff0c;且电站设备可能位于偏远或难以到达的位置&#xff0c;使用红外抄表装置可以减少人工抄表的需要&#xff0c;提高数据采集的效率和准确…

79、ansible-----playbook2

1、作业 [roottest1 opt]# vim test2.yaml - name: this is muluhosts: 192.168.168.22gather_facts: falsevars: ##定义变量testtest:- /opt/test1 ##对变量进行赋值- /opt/test2- /opt/test3- /opt/test4tasks:- name: create mulufile:path: "{{item}}&q…

K8s之自动扩缩容

Kubernetes (K8s) 的动态扩缩容&#xff08;自动伸缩&#xff09;功能是集群管理中非常关键的一部分&#xff0c;能够根据工作负载的变化自动调整应用程序的副本数&#xff0c;以确保资源的高效利用和服务的稳定性。 K8s介绍文章 容器之k8s(Kubernetes)-CSDN博客 1. 动态扩缩容…

文件包含漏洞(1)

目录 PHP伪协议 php://input Example 1&#xff1a; 造成任意代码执行 Example 2&#xff1a; 文件内容绕过 php://filer zip:// PHP伪协议 php://input Example 1&#xff1a; 造成任意代码执行 搭建环境 <meta charset"utf8"> <?php error_repo…

代码随想录算法训练营第51天|卡码网99. 岛屿数量、100. 岛屿的最大面积

1.卡码网99. 岛屿数量 题目链接&#xff1a;https://kamacoder.com/problempage.php?pid1171 文章链接&#xff1a;https://www.programmercarl.com/kamacoder/0099.岛屿的数量深搜.html#_99-岛屿数量 本题思路: 遇到一个没有遍历过的节点陆地&#xff0c;计数器就加一&#x…

银河麒麟桌面操作系统V10:如何设置应用开机自启动?

银河麒麟桌面操作系统V10&#xff1a;如何设置应用开机自启动&#xff1f; 1、图形界面设置2、命令行设置3、注意 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、图形界面设置 打开“设置”->“系统”->“开机启动”。点击“添加…

秋招突击——笔试整理——8/25——拼多多笔试整理

文章目录 引言正文第一题——多多删树个人解答 第二题、多多的奇数序列个人解答 第三题&#xff1a;多多换礼物个人解答参考实现 第四题、多多的字符反转个人实现 总结 引言 今天的拼多多笔试挺难的&#xff0c;感觉自己在技巧性还差很多&#xff0c;很多东西需要看很久&#…

第3章-02-Python库Selenium安装与讲解

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年CSDN全站百大博主。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于专栏:Web爬虫入门与实战精讲,后续完整更新内容如下。 文章…

windows javascript 打开、关闭摄像头

1. 效果 打开摄像头 关闭摄像头&#xff08;包括指示灯也关了的&#xff09; 2. 代码 open_close_camera.html // open_close_camera.html <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>use camera</title>…

CPP中lamada表达式作用一览[more cpp-6]

一般语法 CPP中的lambda 表达式的本质就是匿名函数&#xff0c;它可以在代码中定义一个临时的、局部的函数.为什么需要lamada表达式&#xff1f; 因为命名是个大问题 想名字以及避免命名冲突是很劳神费力的事&#xff0c;这就是lamada表达式的优点(lamada优点表现为简洁性)总…