MHA 高可用配置 及故障切换

news2025/2/1 16:59:15

目录

一     什么是 MHA

1,  MHA 概念

2,MHA 架构

2,1 传统mysql 架构存在问题

2.2 MHA高可用

3,MHA 的组成

4,数据同步方式

4.1 同步复制

4.2 异步复制

 ​编辑

4.3 半同步复制

5,MHA 的特点

6, MHA工作原理

7  MHA作用

8,当master 挂了 哪个slave当选master?

9,挂了的主 还能变成主吗

二    实验模拟MHA 高可用配置 及故障切换

(一) 实验环境

(二)搭建mysql 主从复制

1,修改三台mysql 的配置文件vim /etc/my.cnf

2,三台mysql服务器  重启

3,三台mysql服务器都创建两个软链接

4,所有数据库节点进行 mysql 授权

5,在 Master 节点查看二进制文件和同步点

6,在 Slave1、Slave2 节点执行同步操作

7,在 Slave1、Slave2 节点查看数据同步结果

8,两个从库必须设置为只读模式

9,插入数据测试数据库同步

(三)安装MHA所有组件

1,所有服务器上首先安装 epel 源

2,所有服务器都安装 MHA 依赖的环境

3,所有服务器上必须先安装 node 组件

3.1 manager 机器做映射: scp速度快

3.2 manager 机器把node 包发给 三台mysql

3.3 所有服务器解压

3.4 所有服务器安装node 组件

4,在 MHA manager 节点上安装 manager 组件

5,manager 组件  node 组件 的脚本

5.1  manager 组件

5.2  node 组件

(四) 在所有服务器上配置ssh无密码认证

1 在 manager 节点上配置到所有数据库节点的无密码认证

​编辑

2  在 master 上配置到数据库节点 slave1 和 slave2 的无密码认证

3  在 slave1 上配置到数据库节点 master 和 slave2 的无密码认证

4  在 slave2 上配置到数据库节点 master 和 slave1 的无密码认证

(五)  在 manager 节点上配置 MHA

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

 2,复制上述的自动切换时 VIP 管理的脚本到 /usr/local/bin 目录

3,修改自动切换时 VIP 管理的脚本

4,  创建 MHA 软件目录并拷贝配置文件

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

6,在 manager 节点上测试 ssh 无密码认证,如果正常最后会输出 successfully

7  ,在 manager 节点上测试 mysql 主从连接情况

8,  在 manager 节点上启动 MHA

9 ,查看 MHA 状态和日志

(六)   故障模拟 

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

2,在 Master 节点 master 上停止mysql服务

3,查看模拟故障成果

3.1  查看 manager日志

3.2 查看 app1.cnf 文件内容

3.3  查看vip

4,故障切换备选主库的算法

(七)   故障修复步骤

1,修复原来的主服务器mysql

2,修复主从

2.1  先查看现主库服务器 Mysql2二进制文件和同步点

2.2 在原主库服务器 mysql1 执行同步操作

3,在 manager 节点上修改配置文件app1.cnf

4,在 manager 节点上启动 MHA

5,检测是否修复故障成功

三    总结

1,mha 

① 作用:

② 核心部分

③ MHA需要配置的文件(2个)

④ 故障切换mha会做哪些动作

2,mha故障问题


一     什么是 MHA

1,  MHA 概念

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

2,MHA 架构

2,1 传统mysql 架构存在问题

如图所示:以下是mysql   主从复制,主服务器负责写,两个从服务器负责读。但是主服务器容易单点故障,如果主服务器没有备胎,数据容易丢失,这在生产环境是不被允许的。

2.2 MHA高可用

vip 是虚拟ip   飘在主服务器上   当原来的主服务器挂了  ,会飘到新的主服务器上

3,MHA 的组成

●MHA Node(数据节点)
MHA Node 运行在每台 MySQL 服务器上。(作用看mysql 是否正常 看有没有挂

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

4,数据同步方式

4.1 同步复制

4.2 异步复制
 
4.3 半同步复制

5,MHA 的特点

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

MHA Manger 管理多组主从复制。

6, MHA工作原理

1、从宕机崩溃的master 保存二进制日志事件(binlog  events);
2、识别含有最新的更新 slave 日志
3、应用差异的中继日志(relay log)到其他的slave
4、应用从master保存的二进制日志事件
5、提升一个 salve 为新的master
6、使其他的slave连接行的master 进行复制。
 

7  MHA作用

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

8,当master 挂了 哪个slave当选master?

两种方式:

1,哪个从同步的数据最全  哪个从变成主

2,可以人为指定

9,挂了的主 还能变成主吗

不能,要变成从 指向主

二    实验模拟MHA 高可用配置 及故障切换

(一) 实验环境

MHA manager 节点服务器:CentOS7.6(64 位) manager/192.168.217.66 ,安装MHA node 和 manager 组件
Master 节点服务器:CentOS7.6(64 位) mysql1/192.168.217.99 ,安装mysql5.7、MHA node 组件
Slave1 节点服务器:CentOS7.6(64 位) mysql2/192.168.217.77,安装mysql5.7、MHA node 组件
Slave2 节点服务器:CentOS7.6(64 位) mysql3/192.168.217.88 ,安装mysql5.7、MHA node 组件
 

(二)搭建mysql 主从复制

1,修改三台mysql 的配置文件vim /etc/my.cnf

99主:

77从:

88从:

2,三台mysql服务器  重启

3,三台mysql服务器都创建两个软链接

作用:防止报错

mysqlbinlog 可以识别二进制日志

4,所有数据库节点进行 mysql 授权

代码如下;

grant replication slave on *.* to 'myslave'@'192.168.217.%' identified by '123456';		#从数据库同步使用
grant all privileges on *.* to 'mha'@'192.168.217.%' identified by 'manager';		#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;

解释:

1,从数据库能从主数据库       捞数据(因为谁都可能成为主数据库)

2,mha 程序能  来捞数据

3,4,5  也是mha 能来捞数据  (防止因为主机名被拒绝)

6,刷新权限

5,在 Master 节点查看二进制文件和同步点

6,在 Slave1、Slave2 节点执行同步操作

解释:规定  主服务器是谁    从服务器以什么账户和密码   去主服务器捞数据

规定捞什么数据源

开启从服务器

7,在 Slave1、Slave2 节点查看数据同步结果

show slave status\G        
//确保 IO 和 SQL 线程都是 Yes,代表同步正常。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

88从:

77从:

8,两个从库必须设置为只读模式

9,插入数据测试数据库同步

##在 Master 主库插入条数据,测试是否同步##

99 主:

77 从:

(三)安装MHA所有组件

1,所有服务器上首先安装 epel 源

2,所有服务器都安装 MHA 依赖的环境

代码如下:

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

3,所有服务器上必须先安装 node 组件

防止生产环境碰不到三台mysql 服务器,可以通过scp命令把node 包发给 三台mysql服务器

3.1 manager 机器做映射: scp速度快

3.2 manager 机器把node 包发给 三台mysql
3.3 所有服务器解压

3.4 所有服务器安装node 组件

perl Makefile.PL
make && make install
 

4,在 MHA manager 节点上安装 manager 组件

解压 manager包  

perl Makefile.PL
make && make install     安装manager 组件

5,manager 组件  node 组件 的脚本

5.1  manager 组件

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

 

5.2  node 组件

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

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

(四) 在所有服务器上配置ssh无密码认证

1 在 manager 节点上配置到所有数据库节点的无密码认证

2  在 master 上配置到数据库节点 slave1 和 slave2 的无密码认证

3  在 slave1 上配置到数据库节点 master 和 slave2 的无密码认证

4  在 slave2 上配置到数据库节点 master 和 slave1 的无密码认证

(五)  在 manager 节点上配置 MHA

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

拷贝后会有四个执行文件

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

 

 2,复制上述的自动切换时 VIP 管理的脚本到 /usr/local/bin 目录

这里使用master_ip_failover脚本来管理 VIP 和故障切换

3,修改自动切换时 VIP 管理的脚本

vim /usr/local/bin/master_ip_failover

修改内容如下:(删除原有内容,直接复制并修改vip相关参数)

根据自己需求 如果是linux 改虚拟地址  和虚拟广播地址就可

代码如下:注意此处代码较长  复制时  先末行模式输入   set paste 

                   注意注意脚本解释器有没有复制完整 此处非常容易复制丢失

#!/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.10.200';									#指定vip的地址
my $brdc = '192.168.10.255';								#指定vip的广播地址
my $ifdev = 'ens33';										#指定vip绑定的网卡
my $key = '1';												#指定vip绑定的虚拟网卡序列号
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";		#代表此变量值为ifconfig ens33:1 192.168.10.200
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";		#代表此变量值为ifconfig ens33:1 192.168.10.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 节点服务器   规定谁做主

vim /etc/masterha/app1.cnf                        #删除原有内容,直接复制并修改节点服务器的IP地址

代码如下:

[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

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

6,在 manager 节点上测试 ssh 无密码认证,如果正常最后会输出 successfully

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

7  ,在 manager 节点上测试 mysql 主从连接情况

最后出现 MySQL Replication Health is OK 字样说明正常。

代码如下:

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

输入下面命令

看到这个说明正常  

8,  在 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 &

解释:

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

9 ,查看 MHA 状态和日志

可以看到当前的 master 是 master 节点。

查看 MHA 日志,也以看到当前的 master 是 192.168.217.99

代码如下:

masterha_check_status --conf=/etc/masterha/app1.cnf 
#查看 MHA 状态


cat /var/log/masterha/app1/manager.log | grep "current master"
#查看 MHA 日志

备注:若要关闭 manager 服务,可以使用如下命令。
masterha_stop --conf=/etc/masterha/app1.cnf

(六)   故障模拟 

即模拟生产环境中    主服务器故障,此时我们设置的备用 主服务器slave1  应该会顶上来,

并且虚拟ip 会飘到slave1 (新的主服务器)上

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

2,在 Master 节点 master 上停止mysql服务

3,查看模拟故障成果

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

3.1  查看 manager日志

日志此段话意思为:

3.2 查看 app1.cnf 文件内容

3.3  查看vip

可以看到vip 会飘到slave1 (新的主服务器)上

4,故障切换备选主库的算法

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

 

(七)   故障修复步骤

注意:当原主服务器  挂了后,再次启动原本的主服务器,他做不回主人了。

故障修复的步骤就是   将原主mysql服务器向  现在的主服务器同步

1,修复原来的主服务器mysql

2,修复主从

2.1  先查看现主库服务器 Mysql2二进制文件和同步点

2.2 在原主库服务器 mysql1 执行同步操作

3,在 manager 节点上修改配置文件app1.cnf

再把server1添加进去,因为它检测掉失效时候会自动消失

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 &

5,检测是否修复故障成功

新的主服务器77:

原主服务器 现在是从服务器99:

从服务器88:

三    总结

#解决中英字不兼容报错的问题
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节点 再安装主节点                
 

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

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

相关文章

OpenAI发布Voice Engine模型!用AI合成你的声音!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

解决WSL更新速度慢的方案

在Windows上安装Docker Desktop时&#xff0c;如果选择使用WSL&#xff0c;则可能会出现在运行程序前要求升级WSL的步骤。程序会提示使用下面指令来升级 wsl.exe --update但是升级速度特别慢&#xff0c;于是在网络不稳定的情况下经常会出现下载失败的情况。 百度里一直没搜到…

shell的工作原理

本文旨在讲解shell的工作原理&#xff0c;希望读完本文&#xff0c;能使读者对shell的工作原理有一定的认识&#xff0c;废话不多说&#xff0c;开唠&#xff01; 在讲解shell的工作原理之前&#xff0c;我要首先给大家讲一下什么是操作系统&#xff0c;以Linux操作系统为例&am…

【Springboot整合系列】SpringBoot整合WebService

目录 Web服务介绍Web服务的两种类型Web服务架构Web服务的主要特点Web服务使用场景Web服务标准和技术 WebService介绍WebService的作用适用场景不适用场景 WebService的原理三个角色相关概念 WebService开发框架代码实现服务端1.引入依赖2.实体类3.业务层接口接口实现类 4.配置类…

vue中使用图片url直接下载图片

vue中使用图片url直接下载图片 // 下载图片downloadByBlob(url, name) {let image new Image()image.setAttribute(crossOrigin, anonymous)image.src urlimage.onload () > {let canvas document.createElement(canvas)canvas.width image.widthcanvas.height image…

YoloV8实战:使用YoloV8检测钢材表面缺陷

摘要 本文讲解一下实战,使用YoloV8检测钢材表面缺陷。起因是有粉丝搞不定这个数据集,检测的时候出现了不收敛的情况。所以,给大家讲讲如何去做。 不收敛的原因 一般遇到不收敛的情况,就是数据转化的时候出错了,大家可以打开runs下面的训练日志,观察一下是否正常。 如…

CTF题型 nodejs(2) Js沙盒vmvm2逃逸原理总结典型例题

CTF题型 nodejs(2) Js沙盒逃逸原理&典型例题 文章目录 CTF题型 nodejs(2) Js沙盒逃逸原理&典型例题一.vm原理以及逃逸1.基本用法2.如何逃逸汇总1)this为对象2)this为null( Object.create(null))a .可用输出直接触发toString方法b.调用属性触发 3)Object.create(null)沙…

Verilog语法之if-else语句学习

if_else 条件分支语句的作用是根据指定的判断条件是否满足来确定下一步要执行的操作。它在使用时可以采用如下三种形式&#xff1a; if(<条件表达式>) 语句或语句块&#xff1a; 在 if_else 条件语句的这种使用形式中没有出现else 项&#xff0c;这种情况下条件分支…

java入门学习Day02

本文介绍的内容主要有&#xff1a;java的注释&#xff08;样式&#xff09;、关键字、字面量。 一、java中的注释 1、基本语法 ① 单行注释 //注释信息 ② 多行注释 /* 注释信息1 注释信息2&#xff0c; */ ③ 文档注释 /** 注释信息1 注释信息2&#xff0c; */ public class…

OpenHarmony:RichEditor组件样例开发

使用 richEditor 组件实现一个富文本编辑框&#xff0c;包含富文本编辑区域和功能栏&#xff0c;功能栏中有多个按键&#xff0c;可以调整字体大小、字体样式、字体颜色、布局&#xff0c;并可以插入图片。 api 版本&#xff1a;api11 主页面 import { TitleBar } from ../.…

iOS - Runloop介绍

文章目录 iOS - Runloop介绍1. 简介1.1 顾名思义1.2. 应用范畴1.3. 如果没有runloop1.4. 如果有了runloop 2. Runloop对象3. Runloop与线程4. 获取Runloop对象4.1 Foundation4.2 Core Foundation4.3 示例 5. Runloop相关的类5.1 Core Foundation中关于RunLoop的5个类5.2 CFRunL…

【机器学习】深度解析KNN算法

深度解析KNN算法 KNN&#xff08;K-最近邻&#xff09;算法是机器学习中一种基本且广泛应用的算法&#xff0c;它的实现简单直观&#xff0c;应用范围广泛&#xff0c;从图像识别到推荐系统都有其身影。然而&#xff0c;随着数据量的增长&#xff0c;KNN算法面临着严峻的效率挑…

常见的数学方法

Math类表示数学类&#xff0c;其中的数学方法都被定义成为static形式&#xff0c;所以可以直接通过Math类的类名调用某个数学方法。语法格式&#xff1a; Math.xxx(参数)&#xff1b; 例题 输入n个整数a1,a2,a3,......an,求这n个数的最大值max&#xff0c;最小值min&#xff0…

CSS(三)---【盒子模型、边框、外边距合并】

零.前言 本篇主要介绍CSS中最重要的一种概念模型&#xff1a;“盒子模型”。 关于CSS的更多内容&#xff0c;可以查看作者之前的文章&#xff1a; CSS(一)---【CSS简介、导入方式、八种选择器、优先级】-CSDN博客 CSS(二)---【常见属性、复合属性使用】-CSDN博客 一.盒子模…

课时79:流程控制_循环控制_控制解析

1.4.1 控制解析 学习目标 这一节&#xff0c;我们从 基础知识、简单实践、小结 三个方面来学习。 基础知识 简介 所谓的流程控制&#xff0c;主要针对的是&#xff0c;当我们处于流程步骤执行的过程中&#xff0c;因为某些特殊的原因&#xff0c;不得不停止既定的操作进行步…

素材投放效果追踪与精准识别:从数据洞察到策略优化的全方位解析

一、数据洞察&#xff1a;深度解析投放效果的核心指标在数字广告的世界里&#xff0c;数据是投放效果的晴雨表。通过深入的数据洞察&#xff0c;广告主可以清晰地掌握广告的实际表现&#xff0c;为后续的策略调整提供有力的支持。曝光量、点击率、转化率和投资回报率等指标&…

MS Edge浏览器坏了?网页播放视频的速度不对

前言 小白是MS Edge浏览器的重度用户。电脑上必须有的两个浏览器&#xff1a;Google Chrome和Microsoft Edge。 前段时间小白在使用MS Edge的时候出了问题&#xff1a;播放视频或者音频的时候总是被莫名其妙加速或者减速&#xff0c;类似于播放视频时候的0.5x或者2.0x。 当时…

Leetcode的正确打开方式

很多新手朋友在学习完数据结构与算法之后&#xff0c;都想找个平台磨练自己的技艺。那么LeetCode绝对是不二之选。但是官网刷题不是很友好&#xff0c;那么今天给大家介绍一款刷LeetCode神器。也是未来工作之后的摸鱼神器。 leetcode-editor 本打工人的摸&#xff08;nei&am…

OSCP靶场--Zipper

OSCP靶场–Zipper 考点(php zip:// rce[文件上传] CVE-2021-4034提权7z 通配符提权) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.249.229 -sV -sC -Pn --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-29 07:40 EDT …

知识图谱-图数据库-neo4j (1)踩坑记录

1、neo4j 安装 材料 &#xff1a; openjdk11 (neo4j 最低jdk版本要求) neo4j-community-4.4.30 CentOS 7.8 Release Date: 25 January 2024 Neo4j 4.4.30 is a maintenance release with many important improvements and fixes. Neo4j Deployment Center - Graph Database…