(九)Mysql之 【MySQL MHA】

news2024/11/25 12:44:43

前置资源


一、什么是 MHA

MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。
MHA 的出现就是解决MySQL 单点的问题
MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。
MHA能在故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用。

1.1、MHA 的组成

  • MHA Node(数据节点)

MHA Node 运行在每台 MySQL 服务器上。

  • MHA Manager(管理节点)

MHA Manager 可以单独部署在一台独立的机器上,管理多个 master-slave 集群;也可以部署在一台 slave 节点上。
MHA Manager 会定时探测集群中的 master 节点。当 master 出现故障时,它可以自动将最新数据的 slave 提升为新的 master,然后将所有其他的 slave 重新指向新的 master。整个故障转移过程对应用程序完全透明。


 
1.2、MHA 的特点

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

MHA Manger 管理多组主从复制。

1.3、MHA工作原理总结如下:

1、保存二进制日志事件:当主数据库(master)宕机崩溃时,MHA会从该master上保存二进制日志事件(binlog events),这些日志记录了数据库的所有变更操作。
2、识别最新更新的从数据库:MHA会识别出含有最新更新的从数据库(slave),这个从数据库将作为数据一致性的基准。
3、应用差异的中继日志:MHA会将差异的中继日志(relay log)应用到其他从数据库上,以确保这些从数据库的数据与最新更新的从数据库保持一致。
4、应用二进制日志事件:接着,MHA会将从原master上保存的二进制日志事件应用到所有从数据库上,进一步确保数据的一致性。
5、提升从数据库为新的主数据库:完成上述步骤后,MHA会提升一个从数据库为新的主数据库(master),接替原master的工作。
6、配置其他从数据库连接到新的主数据库:最后,MHA会配置其他从数据库连接到新的主数据库,并继续进行数据复制,以维持系统的高可用性和数据一致性。


MHA通过这些步骤,实现了在主数据库故障时的快速故障切换和数据一致性保障,从而提高了MySQL数据库的高可用性。

MHA :为了解决的了是故障切换、数据尽可能的保存,以及所有节点日志的一致性
 

二、搭建 MySQL MHA

实验思路:
1.MHA架构

  • 数据库安装
  • 一主两从
  • MHA搭建

2.故障模拟

  • 主库失效
  • 备选主库成为主库
  • 原故障主库恢复重新加入到MHA成为从库

服务器系统       CentOS7.6(64 位)

MHA manager 节点服务器: manager/192.168.88.200 ,安装MHA node 和 manager 组件
Master 节点服务器: mysql1/192.168.88.77 ,安装mysql5.7、MHA node 组件
Slave1 节点服务器: mysql2/192.168.88.78 ,安装mysql5.7、MHA node 组件
Slave2 节点服务器: mysql3/192.168.88.79 ,安装mysql5.7、MHA node 组件

前置在前置条件

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

A、数据库安装

1、在Master、Slave1、Slave2 节点上安装 mysql5.7

可以通过之前内容安装

2、修改 Master、Slave1、Slave2 节点的主机名

hostnamectl set-hostname Master
hostnamectl set-hostname Slave1
hostnamectl set-hostname Slave2

B、一主两从同步

3.修改 Master、Slave1、Slave2 节点的 Mysql主配置文件


Master 节点

vim /etc/my.cnf

[mysqld]
server-id = 1
log_bin = master-bin
log-slave-updates = true

systemctl restart mysqld
 

Slave1 ~2节点


vim /etc/my.cnf

server-id = 2                         #三台服务器的 server-id 不能一样
log_bin = master-bin
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index

systemctl restart mysqld

4.在 Master、Slave1、Slave2 节点上都创建两个软链接

ln -s /usr/local/mysql/bin/mysql /usr/sbin/
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/

5.配置 mysql
(1)所有数据库节点进行 mysql 授权
mysql -uroot -p

#从数据库同步使用
grant replication slave on *.* to 'myslave'@'192.168.88.%' identified by '123456';
#manager 使用
grant all privileges on *.* to 'mha'@'192.168.88.%' identified by 'manager';  
#防止从库通过主机名连接不上主库
grant all privileges on *.*  to 'mha'@'master' identified by 'manager';               
grant all privileges on *.*  to 'mha'@'slave1' identified by 'manager';
grant all privileges on *.*  to 'mha'@'slave2' identified  by 'manager';

flush privileges;

(2)在 Master 节点查看二进制文件和同步点
show master status;

(3)在 Slave1、Slave2 节点执行同步操作

需要加工
change master to master_host='192.168.88.77',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=1745; 

start slave;

(4)在 Slave1、Slave2 节点查看数据同步结果
show slave status\G;    
确保 IO 和 SQL 线程都是 Yes,代表同步正常。

注意:有时候注意id不能相同或者多

(5)两个从库必须设置为只读模式:

set global read_only=1;


(6)插入数据测试数据库同步
在 Master 主库插入条数据,测试是否同步
create database test_db;
use test_db;
create table test(id int);
insert into test(id) values (1);

从库

show databases;

C、安装MHA所有组件

6.安装 MHA 软件
(1)所有服务器上都安装 MHA 依赖的环境,首先安装 epel 源

yum install epel-release --nogpgcheck -y

yum install -y perl-DBD-MySQL \
perl-Config-Tiny \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
perl-CPAN

(2)安装 MHA 软件包,先在所有服务器上必须先安装 node 组件
对于每个操作系统版本不一样,这里 CentOS7.6选择 0.57 版本。
在所有服务器上必须先安装 node 组件,最后在 MHA-manager 节点上安装 manager 组件,因为 manager 依赖 node 组件。

【安装包在前置资源】
cd /opt
tar xzvf mha4mysql-node-0.57.tar.gz

cd mha4mysql-node-0.57/

perl Makefile.PL
make && make install

  • Perl中,Makefile.PL 是一个Perl脚本,用于生成一个Makefile,该Makefile随后被make命令用来编译、测试、安装或卸载Perl模块及其相关文件

(3)在 MHA manager 节点上安装 manager 组件
cd /opt
tar zxvf mha4mysql-manager-0.57.tar.gz
cd mha4mysql-manager-0.57/

perl Makefile.PL
make && make install


#node 组件安装后会在/usr/local/bin 下面会生成几个脚本(这些工具通常由 MHAManager 的脚本触发,无需人为操作)主要如下:

  • save_binary_logs 保存和复制 master 的二进制日志
  • apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他的 slave
  • filter_mysqlbinlog 去除不必要的 ROLLBACK 事件(MHA 已不再使用这个工具)
  • purge_relay_logs 清除中继日志(不会阻塞 SQL 线程)

#manager 组件安装后在/usr/local/bin 下面会生成几个工具,主要包括以下几个:

  • masterha_check_ssh 检查 MHA 的 SSH 配置状况
  • masterha_check_repl 检查 MySQL 复制状况
  • masterha_manger 启动 manager的脚本
  • masterha_check_status 检测当前 MHA 运行状态
  • masterha_master_monitor 检测 master 是否宕机
  • masterha_master_switch 控制故障转移(自动或者 手动)
  • masterha_conf_host 添加或删除配置的 server 信息
  • masterha_stop  关闭manager

7.在所有服务器上配置无密码认证
(1)在 manager 节点上配置到所有数据库节点的无密码认证
ssh-keygen -t rsa                 #一路按回车键
ssh-copy-id 192.168.88.77
ssh-copy-id 192.168.88.78
ssh-copy-id 192.168.88.79    #yes + 服务器密码

(2)在 master 上配置到数据库节点 slave1 和 slave2 的无密码认证
ssh-keygen -t rsa
ssh-copy-id 192.168.88.78
ssh-copy-id 192.168.88.79

(3)在 slave1 上配置到数据库节点 master 和 slave2 的无密码认证
ssh-keygen -t rsa
ssh-copy-id 192.168.88.77
ssh-copy-id 192.168.88.79

(4)在 slave2 上配置到数据库节点 master 和 slave1 的无密码认证
ssh-keygen -t rsa
ssh-copy-id 192.168.88.77
ssh-copy-id 192.168.88.78

ps:高版本ssh好像没有ssh-copy-id可以自行解决或者(不确定)

curl -L https://raw.githubusercontent.com/beautifulcode/ssh-copy-id-for-OSX/master/install.sh | sh

8.manager 节点上配置 MHA

(1)在 manager 节点上复制相关脚本到/usr/local/bin 目录

cp -rp /opt/mha4mysql-manager-0.57/samples/scripts   /usr/local/bin

//拷贝后会有四个执行文件

ll /usr/local/bin/scripts/

 以下


master_ip_failover                 #自动切换时 VIP 管理的脚本
master_ip_online_change     #在线切换时 vip 的管理
power_manager                    #故障发生后关闭主机的脚本
send_report                           #因故障切换后发送报警的脚本


(2)复制上述的自动切换时 VIP 管理的脚本到 /usr/local/bin 目录,这里使用master_ip_failover脚本来管理 VIP 和故障切换
cp /usr/local/bin/scripts/master_ip_failover  /usr/local/bin

(3)修改内容如下:(删除原有内容,直接复制并修改vip相关参数)
vim /usr/local/bin/master_ip_failover

#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';

use Getopt::Long;

my (
$command, $ssh_user, $orig_master_host, $orig_master_ip,
$orig_master_port, $new_master_host, $new_master_ip, $new_master_port
);
#############################添加内容部分#########################################
my $vip = '192.168.88.100';									#指定vip的地址
my $brdc = '192.168.88.255';								#指定vip的广播地址
my $ifdev = 'ens33';										#指定vip绑定的网卡
my $key = '1';												#指定vip绑定的虚拟网卡序列号
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";		#代表此变量值为ifconfig ens33:1 192.168.88.200
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";		#代表此变量值为ifconfig ens33:1 192.168.88.200 down
my $exit_code = 0;											#指定退出状态码为0
#my $ssh_start_vip = "/usr/sbin/ip addr add $vip/24 brd $brdc dev $ifdev label $ifdev:$key;/usr/sbin/arping -q -A -c 1 -I $ifdev $vip;iptables -F;";
#my $ssh_stop_vip = "/usr/sbin/ip addr del $vip/24 dev $ifdev label $ifdev:$key";
##################################################################################
GetOptions(
'command=s' => \$command,
'ssh_user=s' => \$ssh_user,
'orig_master_host=s' => \$orig_master_host,
'orig_master_ip=s' => \$orig_master_ip,
'orig_master_port=i' => \$orig_master_port,
'new_master_host=s' => \$new_master_host,
'new_master_ip=s' => \$new_master_ip,
'new_master_port=i' => \$new_master_port,
);

exit &main();

sub main {

print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";

if ( $command eq "stop" || $command eq "stopssh" ) {

my $exit_code = 1;
eval {
print "Disabling the VIP on old master: $orig_master_host \n";
&stop_vip();
$exit_code = 0;
};
if ($@) {
warn "Got Error: $@\n";
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq "start" ) {

my $exit_code = 10;
eval {
print "Enabling the VIP - $vip on the new master - $new_master_host \n";
&start_vip();
$exit_code = 0;
};
if ($@) {
warn $@;
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq "status" ) {
print "Checking the Status of the script.. OK \n";
exit 0;
}
else {
&usage();
exit 1;
}
}
sub start_vip() {
`ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;
}
## A simple system call that disable the VIP on the old_master
sub stop_vip() {
`ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;
}

sub usage {
print
"Usage: master_ip_failover --command=start|stop|stopssh|status --orig_master_host=host --orig_master_ip=ip --orig_master_port=port --new_master_host=host --new_master_ip=ip --new_master_port=port\n";
}

(4)创建 MHA 软件目录并拷贝配置文件,这里使用app1.cnf配置文件来管理 mysql 节点服务器

mkdir /etc/masterha

cp /opt/mha4mysql-manager-0.57/samples/conf/app1.cnf   /etc/masterha

#删除原有内容,直接复制并修改节点服务器的IP地址

vim /etc/masterha/app1.cnf

(有需要改的地方) 

[server default]
manager_log=/var/log/masterha/app1/manager.log
manager_workdir=/var/log/masterha/app1
master_binlog_dir=/usr/local/mysql/data
master_ip_failover_script=/usr/local/bin/master_ip_failover
master_ip_online_change_script=/usr/local/bin/master_ip_online_change
password=manager
ping_interval=1
remote_workdir=/tmp
repl_password=123456
repl_user=myslave
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.88.78 -s 192.168.88.79
shutdown_script=""
ssh_user=root
user=mha

[server1]
hostname=192.168.88.77
port=3306

[server2]
candidate_master=1
check_repl_delay=0
hostname=192.168.88.78
port=3306

[server3]
hostname=192.168.88.79
port=3306

一些解释 

[server default]
manager_log=/var/log/masterha/app1/manager.log      #manager日志
manager_workdir=/var/log/masterha/app1            #manager工作目录
master_binlog_dir=/usr/local/mysql/data/         #master保存binlog的位置,这里的路径要与master里配置的binlog的路径一致,以便MHA能找到
master_ip_failover_script=/usr/local/bin/master_ip_failover  #设置自动failover时候的切换脚本,也就是上面的那个脚本
master_ip_online_change_script=/usr/local/bin/master_ip_online_change  #设置手动切换时候的切换脚本
password=manager            #设置mysql中root用户的密码,这个密码是前文中创建监控用户的那个密码
ping_interval=1                #设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自动进行failover
remote_workdir=/tmp            #设置远端mysql在发生切换时binlog的保存位置
repl_password=123            #设置复制用户的密码
repl_user=myslave            #设置复制用户的用户
report_script=/usr/local/send_report     #设置发生切换后发送的报警的脚本
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.10.14 -s 192.168.10.15    #指定检查的从服务器IP地址
shutdown_script=""            #设置故障发生后关闭故障主机脚本(该脚本的主要作用是关闭主机防止发生脑裂,这里没有使用)
ssh_user=root                #设置ssh的登录用户名
user=mha                    #设置监控用户root

[server1]
hostname=192.168.10.16
port=3306

[server2]
hostname=192.168.10.14
port=3306
candidate_master=1
#设置为候选master,设置该参数以后,发生主从切换以后将会将此从库提升为主库,即使这个从库不是集群中最新的slave

check_repl_delay=0
#默认情况下如果一个slave落后master 超过100M的relay logs的话,MHA将不会选择该slave作为一个新的master, 因为对于这个slave的恢复需要花费很长时间;通过设置check_repl_delay=0,MHA触发切换在选择一个新的master的时候将会忽略复制延时,这个参数对于设置了candidate_master=1的主机非常有用,因为这个候选主在切换的过程中一定是新的master

[server3]
hostname=192.168.10.15
port=3306


9.第一次配置需要在 Master 节点上手动开启虚拟IP

/sbin/ifconfig ens33:1 192.168.88.100/24


10.在 manager 节点上测试 ssh 无密码认证,如果正常最后会输出 successfully,如下所示。

masterha_check_ssh -conf=/etc/masterha/app1.cnf

Tue Nov 26 23:09:45 2020 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Tue Nov 26 23:09:45 2020 - [info] Reading application default configuration from /etc/masterha/app1.cnf..
Tue Nov 26 23:09:45 2020 - [info] Reading server configuration from /etc/masterha/app1.cnf..
Tue Nov 26 23:09:45 2020 - [info] Starting SSH connection tests..
Tue Nov 26 23:09:46 2020 - [debug] 
Tue Nov 26 23:09:45 2020 - [debug]  Connecting via SSH from root@192.168.80.11(192.168.80.11:22) to root@192.168.80.12(192.168.80.12:22)..
Tue Nov 26 23:09:46 2020 - [debug]   ok.
Tue Nov 26 23:09:47 2020 - [debug] 
Tue Nov 26 23:09:46 2020 - [debug]  Connecting via SSH from root@192.168.80.12(192.168.80.12:22) to root@192.168.80.11(192.168.80.11:22)..
Tue Nov 26 23:09:47 2020 - [debug]   ok.
Tue Nov 26 23:09:47 2020 - [info] All SSH connection tests passed successfully.

11.在 manager 节点上测试 mysql 主从连接情况,最后出现 MySQL Replication Health is OK 字样说明正常。如下所示。

masterha_check_repl -conf=/etc/masterha/app1.cnf

Tue Nov 26 23:10:29 2020 - [info] Slaves settings check done.
Tue Nov 26 23:10:29 2020 - [info] 
192.168.80.11(192.168.80.11:3306) (current master)
 +--192.168.80.12(192.168.80.12:3306)

Tue Nov 26 23:10:29 2020 - [info] Checking replication health on 192.168.80.12..
Tue Nov 26 23:10:29 2020 - [info]  ok.
Tue Nov 26 23:10:29 2020 - [info] Checking master_ip_failover_script status:
Tue Nov 26 23:10:29 2020 - [info]   /usr/local/bin/master_ip_failover --command=status --ssh_user=root --orig_master_host=192.168.80.11 --orig_master_ip=192.168.80.11 --orig_master_port=3306 


IN SCRIPT TEST====/sbin/ifconfig ens33:1 down==/sbin/ifconfig ens33:1 192.168.80.200===

Checking the Status of the script..O K 
Tue Nov 26 23:10:29 2020 - [info]  OK.
Tue Nov 26 23:10:29 2020 - [warning] shutdown_script is not defined.
Tue Nov 26 23:10:29 2020 - [info] Got exit code 0 (Not master dead).

MySQL Replication Health is OK.

12.在 manager 节点上启动 MHA

nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &

#生产中java 服务启动的方式
nohup  java -jar  微服务名称-( war jar)   &   

----------------------------------------------------------------------------------------------------------
--remove_dead_master_conf:该参数代表当发生主从切换后,老的主库的 ip 将会从配置文件中移除。
--manger_log:日志存放位置。
--ignore_last_failover:在缺省情况下,如果 MHA 检测到连续发生宕机,且两次宕机间隔不足 8 小时的话,则不会进行 Failover, 之所以这样限制是为了避免 ping-pong 效应。该参数代表忽略上次 MHA 触发切换产生的文件,默认情况下,MHA 发生切换后会在日志记录,也就是上面设置的日志app1.failover.complete文件,下次再次切换的时候如果发现该目录下存在该文件将不允许触发切换,除非在第一次切换后收到删除该文件,为了方便,这里设置为--ignore_last_failover。
----------------------------------------------------------------------------------------------------------

13.查看 MHA 状态,可以看到当前的 master 是 master 节点。

masterha_check_status --conf=/etc/masterha/app1.cnf

14. 查看 MHA 日志,也以看到当前的 master 是 192.168.10.16,如下所示。

cat /var/log/masterha/app1/manager.log | grep "current master"

15. 查看master 的 VIP 地址 192.168.88.100 是否存在,这个 VIP 地址不会因为 manager 节点停止 MHA 服务而消失。

ifconfig

//若要关闭 manager 服务,可以使用如下命令。

masterha_stop --conf=/etc/masterha/app1.cnf

或者可以直接采用 kill 进程 ID 的方式关闭。

三、故障模拟

#在 manager 节点上监控观察日志记录

tail -f /var/log/masterha/app1/manager.log

#在 Master 节点 master 上停止mysql服务

systemctl stop mysqld

pkill -9 mysql

#正常自动切换一次后,MHA 进程会退出。HMA 会自动修改 app1.cnf 文件内容,将宕机的 master 节点删除。查看 slave1 是否接管 VIP

ifconfig

3.1、故障切换备选主库的算法:


1.一般判断从库的是从(position/GTID)判断优劣,数据有差异,最接近于master的slave,成为备选主。
2.数据一致的情况下,按照配置文件顺序,选择备选主库。
3.设定有权重(candidate_master=1),按照权重强制指定备选主。
(1)默认情况下如果一个slave落后master 100M的relay logs的话,即使有权重,也会失效。
(2)如果check_repl_delay=0的话,即使落后很多日志,也强制选择其为备选主。

3.2、故障修复步骤:

1.修复mysql
systemctl restart mysqld

2.修复主从
#在现主库服务器 Mysql2 查看二进制文件和同步点
show master status;

#在原主库服务器 mysql1 执行同步操作
change master to master_host='192.168.88.接替的地址',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=1745;

start slave;


3.在 manager 节点上修改配置文件app1.cnf(再把这个记录添加进去,因为它检测掉失效时候会自动消失)
vi /etc/masterha/app1.cnf
......
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.10.14 -s 192.168.10.15
......
[server1]
hostname=192.168.10.16
port=3306

[server2]
candidate_master=1
check_repl_delay=0
hostname=192.168.10.14
port=3306

[server3]
hostname=192.168.10.15
port=3306

4.在 manager 节点上启动 MHA
nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &

#解决中英字不兼容报错的问题
dos2unix /usr/local/bin/master_ip_failover 

四、总结

1、mha 

① 作用:mysql的高可用 + 故障切换
② 核心部分:
    MHA组件:manager:主要的功能:做MHA 启动、关闭管理和检测mysql各种健康状态
    node:在发生故障时,尽可能的保存二进制日志,并且实现故障切换(VIP地址飘逸)
③ MHA需要配置的文件(2个):
        master ip failover:命令工具 ,定义的是基于VIP的检测和故障转移 (VIP从master----->新的 master)
        app1.conf:mha的主要配置文件,主要定义了mha的工作目录、日志    
                    mysal二进制日志位置
                    使用mha的登录mysql的用户、密码使用从服务器
                    身份同步master的账号、密码   (五个)
                    
④ 故障切换mha会做哪些动作:
1)mha会多次尝试检测master的存活状态
2)mhah会多次尝试、尽可能的保存master的二进制日志
3)mha会根据app1.cnf中的配置部分,进行从服务器------》 主服务器的位置
4)mha最后会将master的VIP地址切换到从服务器的位置
5)mha再选择完行的master周,会在其余的salve上执行change master操作,指向性的master, 来保证Mysql的集群的健康性


2、mha故障问题
① 软件连接
② 免交互
③ 五个账号授权(其中三个账号是测试环境需要做的)
④ 初次运行MHA功能是,需要临时添加虚拟IP
⑤ 配置文件--效验 (master_ip_failover 1个故障切换的脚本,app1.cnf mha的主配置文件)
⑥ 先安装node节点 再安装主节点

3、过程

①修改主机名,配置主从同步(id),软连接,配置mysql授权5个,从库设为只读

②测试

③epel环境,都安装node,在manager

④配置无密码认证

⑤复制相关脚本到/usr/local/bin,修改master_ip_failover(自动切换vip)

⑥操作/etc/masterha/app1.cnf

⑦第一次配置需要在 Master 节点上手动开启虚拟IP












 

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

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

相关文章

洁净区在线环境粒子浮游菌监测取样点的选择知多少?

洁净环境在线监测系统的参考法规标准包括国内外GMP标准、国家标准、国际标准以及洁净室设计和施工规范等。企业应根据自身生产需求和法规要求&#xff0c;选择合适的监测系统和监测方案&#xff0c;确保洁净环境的有效控制和产品质量的安全可靠。 【北京中邦兴业洁净环境在线监…

如何在YoloV8中添加注意力机制(两种方式)

文章目录 概要添加注意力机制流程#添加方式一&#xff1a;将注意力机制添加到额外的一层添加方式二&#xff1a;将注意力机制添加到其中一层&#xff0c;不引入额外的层 概要 提示&#xff1a;这里可以添加技术概要 例如&#xff1a; openAI 的 GPT 大模型的发展历程。 添加…

堡垒机的部署方式与防火墙有何不同

在现代网络安全架构中&#xff0c;堡垒机是关键的安全设备之一&#xff0c;它用于管理和控制服务器的访问权限&#xff0c;保障内部网络的安全性。越来越多的企业选择堡垒机来增强网络安全管理。那么堡垒机该如何部署呢?同时&#xff0c;堡垒机与防火墙有何区别?本文将带您深…

sql中索引查看是否生效

在pg数据库中有多种索引存在&#xff0c;在一般情况下我们取使用普通索引 以下是一些常见导致索引未命中的原因和优化策略 1.如果查询中的条件与索引字段的顺序不匹配&#xff0c;或者索引字段没有完全包含在查询条件中&#xff0c;索引可能不会被使用。 2.在查询中使用函数…

OpenAI 草莓模型即将发布,人工智能变革在即

近日&#xff0c;人工智能领域的领军者 OpenAI 即将推出的 “草莓”&#xff08;Strawberry&#xff09;模型引发了广泛关注和热议。据可靠消息&#xff0c;该模型计划在未来两周内作为 ChatGPT 服务的一部分正式发布。 “草莓” 模型作为 OpenAI 盛传已久的神秘项目&#xff…

判断奇偶数的小妙招

要判断一个数是奇数还是偶数&#xff0c;一般首先想到的都是对2取余&#xff0c;但其实有更高明的算法。 首先咱们要知道一个知识点&#xff1a;偶数的二进制末位为0&#xff0c;奇数的二进制末位为1。 这是进位制本身的规则决定的&#xff0c;二进制是“逢二进一”。如果末位…

【ArcGIS Pro实操第一期】研究区域制图-以粤港澳GBA地区为例

ArcGIS Pro实操第一期&#xff1a;研究区域制图-以粤港澳GBA地区为例 数据准备1 ArcGIS Pro绘制研究区域图1.1 基本处理1.2 导入数据并制图1.3 添加整饰要素 参考 数据准备 DEM高程数据市区边界文件&#xff08;.shp文件&#xff09; 目标成图如下&#xff1a; 1 ArcGIS Pr…

电脑与电脑之间怎么快速传输文件?

若两台电脑在同一局域网&#xff0c;可以使用Windows远程桌面传输文件&#xff0c;或者使用远程看看这款免费的远程桌面软件&#xff0c;它支持在不同的网络之间传输文件&#xff0c;而且速度快、安全性高。 步骤1. 在两台电脑上下载、安装并运行远程看看。 步骤2. 注册一个远…

如何在Windows上搭建并运行DolphinScheduler前后端开发环境

作者&#xff1a;海豚调度研究随笔 编辑整理&#xff1a;曾辉 前言 Apache DolphinScheduler 是一个优秀的分布式调度系统&#xff0c;广泛应用于大数据处理和自动化任务管理中。本文详细介绍了如何在Windows环境下搭建Apache DolphinScheduler的前后端开发环境。 包括从源码…

PowerShell收集信息及绕过PowerShell权限

PowerShell脚本的4种执行权限&#xff1a; Restricted&#xff1a;默认设置&#xff0c;不允许任何script运行 AllSigned&#xff1a;只能运行经过数字证书签名的script RemoteSigned&#xff1a;本地脚本不做限制&#xff0c;网络上下载的script就必须有数字签名 Unrestri…

语言模型与人类反馈的深度融合:Chain of Hindsight技术

人工智能咨询培训老师叶梓 转载标明出处 语言模型在理解和执行指令方面取得了显著成功&#xff0c;但依赖人工标注数据的监督式微调需要大量标记数据&#xff0c;这不仅成本高昂&#xff0c;而且可能限制了模型识别和纠正负面属性或错误能力。另一方面&#xff0c;基于人类反馈…

在职研生活学习--20240908

文章目录 九月八日清晨&#xff0c;我们在鸟鸣声中醒来&#xff0c;精神饱满地迎接大汇演的挑战。上午&#xff0c;我们被分成舞龙队、旗手队、拳队、鼓队四个特色团队进行练习。阳光下&#xff0c;我们挥汗如雨&#xff0c;却乐此不疲。鼓声隆隆&#xff0c;龙舞飞扬&#xff…

使用ESP8266和OLED屏幕实现一个小型电脑性能监控

前言 最近大扫除&#xff0c;发现自己还有几个ESP8266MCU和一个0.96寸的oled小屏幕。又想起最近一直想要买一个屏幕作为性能监控&#xff0c;随机开始自己diy。 硬件&#xff1a; ESP8266 MUColed小屏幕杜邦线可以传输数据的数据线 环境 Windows系统Qt6Arduino Arduino 库…

企业图纸加密软件哪个最好用?10款常用图纸加密软件强力推荐!

在现代企业中&#xff0c;保护图纸和设计文件的安全性至关重要。以下是十款常用且功能强大的图纸加密软件推荐&#xff0c;帮助企业更好地保护其知识产权和敏感数据。 1. 安秉网盾 安秉网盾凭借其强大的加密技术和灵活的权限管理功能&#xff0c;成为企业保护图纸安全的首选。…

源码编译安装python3.12没有ssl模块,python3.12 ModuleNotFoundError: No module named ‘_ssl‘

已经编译安装了opensll 3.3 源码编译安装python3.12没有ssl模块&#xff0c;python3.12 ModuleNotFoundError: No module named ‘_ssl’ 报错如下&#xff1a; [rootlocalhost ~]# python Python 3.12.5 (main, Sep 9 2024, 10:33:15) [GCC 4.8.5 20150623 (Red Hat 4.8.5-4…

vue3 指定元素全屏 screenfull(可直接粘贴使用)

业务需求 由于输入的文字较多&#xff0c;需要将输入框进行全屏展示&#xff0c;方便输入和查看&#xff01; 效果图 实现方式 下载插件"screenfull": “^6.0.2” yarn add screenfull -S项目中使用 import screenfull from "screenfull"templte中代码…

性能测试的复习3-jmeter的断言、参数化、提取器

一、断言、参数化、提取器 需求&#xff1a; 提取查天气获取城市名请求的响应结果&#xff1a;城市对查天气获取城市名的响应结果进行响应断言和json断言对查天气获取城市名添加用户参数 1、步骤 查看天气获取城市名 json提取器&#xff08;对响应结果提取、另一个接口请求…

软考系统分析师难吗?现在开始准备需要多久能考试?

先说结论&#xff1a;作为软考中的高级科目&#xff0c;难度肯定是不小的&#xff0c;一般系分的通过率只有10%-20%&#xff0c;其实和高项差不多。但是系分上限高&#xff0c;知识点不会变来变去&#xff0c;按照套路学就会更有把握。 一、什么是系统分析师 要备考系统分析师…

Oracle绑定变量窥视与自适应游标共享

一.Oracle的绑定变量窥视与自适应游标共享 创建test表&#xff0c;列status存在2个值&#xff0c;有数据倾斜&#xff0c;在列status create table test as select rownum id,DBMS_RANDOM.STRING(A,12) name,DECODE(MOD(ROWNUM,500),0,Inactive,Active) status from all_obj…

这本真绝!《自然语言处理新范式:基于预训练模型的方法》真的不要太强(附PDF)

今天给大家推荐一本超绝的大模型书——《自然语言处理新范式&#xff1a;基于预训练模型的方法》 为什么推荐这本书&#xff1f; 近些年来&#xff0c;以GPT、BERT为代表的预训练模型在自然语言处理领域掀起了一股浪潮&#xff0c;打开了“预训练精调”的自然语言处理新范式…