mysql之mha高可用

目录

一、MHA的相关知识

1)什么是 MHA

2)MHA 的组成 

(1)MHA Node(数据节点)

(2)MHA Manager(管理节点)

3)MHA 的特点

二、MHA的一主两从部署 

实验设计

实验组件 

实验具体操作 

步骤一: 配置主从复制

(1)修改mysql节点服务器的主机名 

(2)添加主从mysql的映射关系 

(3)修改Mysql主配置文件/etc/my.cnf 

注:

 ##Master 节点##

 ##Slave1节点## 

##Slave2节点##

(4)在mysql节点服务器创建软连接

(5)登录数据库进行授权 

(6)配置主从同步 

步骤二:配置MHA 

(1)所有服务器安装MHA软件 

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

(3)在 manager 节点上配置 MHA

(4)manager节点编辑配置文件,管理 mysql 节点服务器

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

(6)在 manager 节点上测试 ssh 无密码认证 

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

(8)在 manager 节点上启动 MHA

(9)在 manager 节点上查看 MHA 状态 和 MHA 日志,可以看到 master的地址 

(10)在Mysql1上查看 VIP 地址 是否存在

步骤三:故障测试 

三、修复故障的master 

1) 修复mysql1(即修复原来的主节点)

2)修复主从数据

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

4)在 manager 节点上启动 MHA  

5)对mysql1和mysql2  进行重启 


一、MHA的相关知识

1)什么是 MHA

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

2)MHA 的组成 

(1)MHA Node(数据节点)

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

(2)MHA Manager(管理节点)

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

3)MHA 的特点

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

二、MHA的一主两从部署 

实验设计

满足的需求:搭建一个一主二从的高可用读写复制mysql集群,当主服务器宕机后,数据更新最全的从服务器会取代主服务器,占用VIP,保证正常运行.

实验组件 

节点服务器系统主机名IP地址安装工具及服务
MHA manager 服务器CentOS7.4(64 位)manager192.168.73.109MHA node 和 manager 组件
Master 服务器CentOS7.4(64 位)mysql1192.168.73.105MHA node 组件
Slave1 服务器CentOS7.4(64 位)mysql2192.168.73.106MHA node 组件
Slave2 服务器CentOS7.4(64 位)mysql3192.168.73.107MHA node 组件
  VIP:192.168.73.66

实验具体操作 

步骤一: 配置主从复制

(1)修改mysql节点服务器的主机名 

 ##Master 节点##hostnamectl set-hostname mysql1su​##Slave1节点##hostnamectl set-hostname mysql2su​##Slave2节点##hostnamectl set-hostname mysql3su##manager##hostnamectl set-hostname managersu

(2)添加主从mysql的映射关系 

 三台主机均添加:

 vim /etc/hosts192.168.73.105 mysql1192.168.73.106 mysql2192.168.73.107 mysql3

(3)修改Mysql主配置文件/etc/my.cnf 

注:

Master节点,开启二进制日志。

Slave1、Slave2 节点,开启二进制日志和中继日志。

 ##Master 节点##
 vim /etc/my.cnf[mysqld]server-id = 1log-bin = master-bin         #开启二进制日志,指定存放位置log-slave-updates = true     #允许slave从master复制数据时可以写入到自己的二进制日志中​systemctl restart mysqld     #重启mysql
 ##Slave1节点## 
 vim /etc/my.cnf[mysqld]server-id = 2               #三台服务器的 server-id 不能相同log-bin = master-binrelay-log = relay-log-binrelay-log-index = slave-relay-bin.index​systemctl restart mysqld
##Slave2节点##
 vim /etc/my.cnf[mysqld]server-id = 3               #三台服务器的 server-id 不能相同log-bin = master-binrelay-log = relay-log-binrelay-log-index = slave-relay-bin.index​systemctl restart mysqld     #重启mysql

(4)在mysql节点服务器创建软连接

三个mysql节点服务器均创建:

 ln -s /usr/local/mysql/bin/mysql /usr/sbin/ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/​ls /usr/sbin/mysql*     #查看软链接

(5)登录数据库进行授权 

 ##----(1)所有数据库节点进行mysql主从同步的授权------##grant replication slave on *.* to 'myslave'@'192.168.73.%' identified by '123123';   #从服务器同步使用##---(2)所有数据库节点,授权给manager服务器-----##grant all privileges on *.* to 'mha'@'192.168.73.%' identified by 'manager';  #为了防止因主机名导致的连接不上问题,再次对登录地址进行授权​grant all privileges on *.* to 'mha'@'mysql1' identified by 'manager';              grant all privileges on *.* to 'mha'@'mysql2' identified by 'manager';grant all privileges on *.* to 'mha'@'mysql3' identified by 'manager';​flush privileges;   #刷新权限

(6)配置主从同步 

在 Master 节点查看二进制文件和同步点(即偏移量),在 Slave1、Slave2 节点执行同步操作

 ##(1)在 Master 节点查看二进制文件和同步点(即偏移量)##show master status;

#一般 "Slave_IO_Running: No" 的可能原因:

  1. 网络不通 
  2. my.cnf配置有问题(server-id重复)
  3. 密码、file文件名、pos偏移量不对 
  4. 防火墙没有关闭 

本次实验遇到的问题: 

  • io为no的问题: 起初我在设置好slave同步时,总是报错:Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file n
  • 对主库进行了多次排查,还刷新了日志,进行从新设置,最后才发现问题出在赋值,master_log_file='master-bin.000005'中我开始编写的为master_log_file=' master-bin.000005'
  • 因为一个空格之差,所以slave就找不到master的二进制文件
 ##在 Slave1、Slave2 节点执行同步操作##change master to master_host='192.168.73.105',master_user='myslave',master_password='123123',master_log_file='master-bin.000006',master_log_pos=154; ​start slave;     #开启同步,如有报错执行 reset slave;​##在 Slave1、Slave2 查看节点状态##show slave status\G     

 ##两个从库必须设置为只读模式##set global read_only=1;​##在Master主库插入数据,测试数据库同步##mysql> use db_testmysql> create table info(id int,name char(10));
mysql> insert into info values(1,'mysql1的数据');​#从数据库中验证是否同步成功

步骤二:配置MHA 

注意:这里的epel源安装,不能再用本地源安装,centos7的本地源并没有,需要修改为在线源进行安装 

(1)所有服务器安装MHA软件 

 ##(1)所有服务器上都安装 MHA 依赖的环境,首先安装 epel 源##yum install epel-release --nogpgcheck -y​#安装 MHA依赖环境
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 组件##
#将安装包上传到/opt/目录中,解压安装node组件##
cd /opt
tar zxvf mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57
perl Makefile.PL
make && make install​
##(3)最后在 MHA manager 节点上安装 manager 组件##(manager组件依赖node 组件)
cd /opt/
tar zxvf mha4mysql-manager-0.57.tar.gz
cd mha4mysql-manager-0.57
perl Makefile.PL
make && make install​​​------------------虚线以内是注释--------------------------------------------------​#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​#node 组件安装后也会在/usr/local/bin 下面会生成几个脚本(这些工具通常由 MHAManager 的脚本触发,无需人为操作)主要如下:save_binary_logs       #保存和复制 master 的二进制日志apply_diff_relay_logs  #识别差异的中继日志事件并将其差异的事件应用于其他的 slavefilter_mysqlbinlog     #去除不必要的 ROLLBACK 事件(MHA 已不再使用这个工具)purge_relay_logs       #清除中继日志(不会阻塞 SQL 线程)

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

修改vim /etc/ssh/ssh_config
##35行ack修改为noStrictHostKeyChecking no##(1)在 manager 节点上配置到所有数据库节点的无密码认证ssh-keygen -t rsa               #一路按回车键,生成密钥。"-t rsa"指定密钥的类型。ssh-copy-id 192.168.73.105    #将公钥传给所有数据库节点,形成免密码连接登录ssh-copy-id 192.168.73.106ssh-copy-id 192.168.73.107​##(2)在 mysql1 上配置到数据库节点 mysql2 和 mysql3 的无密码认证ssh-keygen -t rsassh-copy-id 192.168.73.106   #将公钥传给两个从节点,形成免密码连接登录ssh-copy-id 192.168.73.107​##(3)在 mysql2 上配置到数据库节点 mysql1 和 mysql3 的无密码认证ssh-keygen -t rsassh-copy-id 192.168.73.105ssh-copy-id 192.168.73.107​##(4)在 mysql3 上配置到数据库节点 mysql1 和 mysql2 的无密码认证ssh-keygen -t rsassh-copy-id 192.168.73.105ssh-copy-id 192.168.73.106

(3)在 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相关参数。可在拷贝前输入 :set paste 解决vim粘贴乱序问题)vim /usr/local/bin/master_ip_failover#!/usr/bin/env perluse 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.73.66';                             #指定vip的地址my $brdc = '192.168.73.255';                            #指定vip的广播地址my $ifdev = 'ens33';                                    #指定vip绑定的网卡my $key = '1';                                          #指定vip绑定的虚拟网卡序列号my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";   #代表此变量值为ifconfig ens33:1 192.168.72.100my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";    #代表此变量值为ifconfig ens33:1 192.168.72.100 downmy $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_mastersub 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)manager节点编辑配置文件,管理 mysql 节点服务器

 mkdir /etc/masterhacp /opt/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterha/   #复制配置文件​vim /etc/masterha/app1.cnf   #删除原有内容,直接复制并修改节点服务器的IP地址[server default]manager_log=/var/log/masterha/app1/manager.logmanager_workdir=/var/log/masterha/app1master_binlog_dir=/usr/local/mysql/datamaster_ip_failover_script=/usr/local/bin/master_ip_failovermaster_ip_online_change_script=/usr/local/bin/master_ip_online_changeuser=mhapassword=managerping_interval=1remote_workdir=/tmprepl_password=123123repl_user=myslavesecondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.73.106 -s 192.168.73.107shutdown_script=""ssh_user=rootuser=mha​[server1]hostname=192.168.73.105port=3306​[server2]candidate_master=1check_repl_delay=0hostname=192.168.73.106port=3306​[server3]hostname=192.168.73.107port=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  #设置手动切换时候的切换脚本user=mha                #设置mysql用户,给manager授权时创建的用户password=manager        #设置mysql用户的密码,这个密码是前文中创建监控用户的那个密码ping_interval=1         #设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自动进行failoverremote_workdir=/tmp     #设置远端mysql在发生切换时binlog的保存位置repl_password=123123    #设置复制用户的密码(主从同步授权时创建的用户和密码)repl_user=myslave       #设置复制用户的用户report_script=/usr/local/send_report    #设置发生切换后发送的报警的脚本secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.73.106 -s 192.168.73.107         #指定检查的从服务器IP地址shutdown_script=""      #设置故障发生后关闭故障主机脚本(该脚本的主要作用是关闭主机防止发生脑裂,这里没有使用,可以使用系统自带的power_manager )ssh_user=root           #设置ssh的登录用户名​[server1]                  #masterhostname=192.168.73.105port=3306​[server2]                  #slave1hostname=192.168.73.106port=3306candidate_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]                #slave2hostname=192.168.73.107port=3306

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

/sbin/ifconfig ens33:1 192.168.73.66/24

(6)在 manager 节点上测试 ssh 无密码认证 

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

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

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

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

(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。​-------------------------------------------------------------------------------------​●使用&后台运行程序:结果会输出到终端;使用Ctrl+C发送SIGINT信号,程序免疫;关闭session发送SIGHUP信号,程序关闭。●使用nohup运行程序:结果默认会输出到nohup.out;使用Ctrl+C发送SIGINT信号,程序关闭;关闭session发送SIGHUP信号,程序免疫。●使用nohup和&配合来启动程序 nohup ./test &:同时免疫SIGINT和SIGHUP信号。​-------------------------------------------------------------------------------------

(9)在 manager 节点上查看 MHA 状态 和 MHA 日志,可以看到 master的地址 

#查看 MHA 状态,可以看到当前的 master 是 Mysql1 节点。masterha_check_status --conf=/etc/masterha/app1.cnf​#查看 MHA 日志,也可以看到当前的 master 是 192.168.73.105cat /var/log/masterha/app1/manager.log | grep "current master"

(10)在Mysql1上查看 VIP 地址 是否存在

 ifconfig​#若要关闭 manager 服务,可以使用如下命令。masterha_stop --conf=/etc/masterha/app1.cnf#或者可以直接采用 kill 进程 ID 的方式关闭。

步骤三:故障测试 

------------------------故障切换备选主库的算法------------------------
 ​
 故障切换备选主库的算法:
 1.一般判断从库的是从(position/GTID)判断优劣,数据有差异,最接近于master的slave,成为备选主。
 
 2.数据一致的情况下,按照配置文件顺序,选择备选主库。
 ​
 3.设定有权重(candidate_master=1),按照权重强制指定备选主
 

  1. 默认情况下如果一个slave落后master 100M的relay logs的话,即使有权重,也会失效
  2. 如果 check_repl_delay=0 的话,即使落后很多日志,也强制选择其为备选主
 ##(1)在 Master 节点 Mysql1 上停止mysql服务systemctl stop mysqld或pkill -9 mysql​##(2)在 manager 节点上监控观察日志记录tail -f /var/log/masterha/app1/manager.log​​​##(3)正常自动切换一次后,MHA 进程会退出。MHA 会自动修改 app1.cnf 文件内容,将宕机的 mysql1 节点删除。vim /etc/masterha/app1.cnf   #查看manager节点的配置文件​##(4)查看 mysql2 是否接管 VIPifconfig

三、修复故障的master 

1) 修复mysql1(即修复原来的主节点)

systemctl restart mysqld

2)修复主从数据

mysql -u root -p
mysql> show master status;

mysql -u root -p
change master to master_host='192.168.73.106',master_user='myslave',master_password='123123',master_log_file='master-bin.000002',master_log_pos=154;

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

vi /etc/masterha/app1.cnf......secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.73.106 -s 192.168.73.107......[server1]hostname=192.168.73.105port=3306​[server2]candidate_master=1check_repl_delay=0hostname=192.168.73.106port=3306​[server3]hostname=192.168.73.107port=3306

4)在 manager 节点上启动 MHA  

masterha_stop --conf=/etc/masterha/app1.cnfnohup 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)对mysql1和mysql2  进行重启 

systemctl restart  mysqld

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

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

相关文章

并发——什么是线程死锁?如何避免死锁?

文章目录 1. 认识线程死锁2. 如何避免线程死锁? 1. 认识线程死锁 线程死锁描述的是这样一种情况&#xff1a;多个线程同时被阻塞&#xff0c;它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞&#xff0c;因此程序不可能正常终止。 如下图所示&#xff…

一位年薪40W的测试被开除,回怼的一番话,令人沉思

一位年薪40W测试工程师被开除回怼道&#xff1a;“反正我有技术&#xff0c;在哪不一样” 一技傍身&#xff0c;万事不愁&#xff0c;当我们掌握了一技之长后&#xff0c;在职场上说话就硬气了许多&#xff0c;不用担心被炒&#xff0c;反过来还可以炒了老板&#xff0c;这一点…

git clone 报错Filename too long

1.使用git clone代码&#xff0c;爆出Filename too long错误 2.原因分析 因为我很少看git clone日志&#xff0c;所以从未想过是clone异常&#xff0c;而且也看到代码clone下来了&#xff0c;所以我就显然以为代码clone成功&#xff0c;但是使用idea打开代码后发现大量代码无法…

【数据结构和算法】排序算法

说明&#xff1a;以下排序如无特别说明&#xff0c;都是从小到大升序排序 1. 冒泡排序 核心思想&#xff1a;每个元素与其相邻元素比较&#xff0c;如果前者大于后者则交换&#xff0c;每次循环结束后会将最大值放到最后&#xff0c;像小水泡从底下冒到上面成大水泡一样&…

【RL】Wasserstein距离-GAN背后的直觉

一、说明 在本文中&#xff0c;我们将阅读有关Wasserstein GANs的信息。具体来说&#xff0c;我们将关注以下内容&#xff1a;i&#xff09;什么是瓦瑟斯坦距离&#xff1f;&#xff0c;ii&#xff09;为什么要使用它&#xff1f;iii&#xff09; 我们如何使用它来训练 GAN&…

【Django】招聘面试管理01 创建项目运行项目

文章目录 前言一、创建项目二、运行项目三、访问后台管理页面四、配置项总结 前言 跟着视频学一学&#xff0c;记录一下。 一、创建项目 照着步骤创建虚拟环境&#xff0c;安装Django等依赖包&#xff0c;创建项目&#xff1a;【Django学习】01 项目创建、结构及命令 > d…

C字符串与C++ string 类:用法万字详解(上)

目录 引言 一、C语言字符串 1.1 创建 C 字符串 1.2 字符串长度 1.3 字符串拼接 1.4 比较字符串 1.5 复制字符串 二、C字符串string类 2.1 解释 2.2 string构造函数 2.2.1 string() 默认构造函数 2.2.2 string(const char* s) 从 C 风格字符串构造 2.2.3 string(co…

pytorch Stream 多流处理

CUD Stream https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#c-language-extensions 中指出在kenel的调用函数中最后一个可选参数表示该核函数处在哪个流之中。 - 参数Dg用于定义整个grid的维度和尺寸&#xff0c;即一个grid有多少个block。为dim3类型。…

无涯教程-Perl - foreach 语句函数

foreach 循环遍历列表值&#xff0c;并将控制变量(var)依次设置为列表的每个元素- foreach - 语法 Perl编程语言中的 foreach 循环的语法是- foreach var (list) { ... } foreach - 流程图 foreach - 示例 #!/usr/local/bin/perllist(2, 20, 30, 40, 50);# foreach loop ex…

【微信小程序创作之路】- 小程序远程数据请求、获取个人信息

【微信小程序创作之路】- 小程序远程数据请求、获取个人信息 第七章 小程序远程数据请求、获取个人信息 文章目录 【微信小程序创作之路】- 小程序远程数据请求、获取个人信息前言一、远程数据请求1.本地环境2.正式域名 二、获取用户个人信息1.展示当前用户的身份信息2.获取用…

Ubuntu安装docker

安装 要是之前安装过&#xff0c;可以进行卸载然后再安装&#xff0c;旧版本的 Docker 的名称为docker、docker.io或 docker-engine。安装新版本之前卸载任何此类旧版本 sudo apt-get remove docker docker-engine docker.io containerd runc使用存储库安装 在新主机上首次安…

kafka-保证数据不重复-生产者开启幂等性和事务的作用?

1. 生产者开启幂等性为什么能去重&#xff1f; 1.1 场景 适用于消息在写入到服务器日志后&#xff0c;由于网络故障&#xff0c;生产者没有及时收到服务端的ACK消息&#xff0c;生产者误以为消息没有持久化到服务端&#xff0c;导致生产者重复发送该消息&#xff0c;造成了消…

econml双机器学习实现连续干预和预测

连续干预 在这个示例中&#xff0c;我们使用LinearDML模型&#xff0c;使用随机森林回归模型来估计因果效应。我们首先模拟数据&#xff0c;然后模型&#xff0c;并使用方法来effect创建不同干预值下的效应&#xff08;Conditional Average Treatment Effect&#xff0c;CATE&…

vue3—SCSS的安装、配置与使用

SCSS 安装 使用npm安装scss&#xff1a; npm install sass sass-loader --save-dev 配置 配置到全局 &#x1f31f;附赠代码&#x1f31f; css: {preprocessorOptions: {scss: {additionalData:import "./src/Function/Easy_I_Function/Echarts/ToSeeEcharts/utill.…

Spring Boot Admin 环境搭建与基本使用

Spring Boot Admin 环境搭建与基本使用 一、Spring Boot Admin是什么二、提供了那些功能三、 使用Spring Boot Admin3.1搭建Spring Boot Admin服务pom文件yml配置文件启动类启动admin服务效果 3.2 common-apipom文件feignhystrix 3.3服务消费者pom文件yml配置文件启动类control…

Simulation 线性静力分析流程

有限元仿真分析软件有很多&#xff0c;但是分析的流程却是大同小异&#xff0c;今天给大家分享的是Simulation的线性静力分析流程。 1.构思分析方案。 确定研究对象&#xff0c;研究的方法、验证方案等等。听起来比较空洞&#xff0c;实践过程中我建议首先需要把目标和有限元分…

HDFS中的Trash垃圾桶回收机制

Trash垃圾桶回收机制 文件系统垃圾桶背景功能概述Trash Checkpoint Trash功能开启关闭HDFS集群修改core-site.xml删除文件到trash删除文件跳过从trash中恢复文件清空trash 文件系统垃圾桶背景 回收站&#xff08;垃圾桶&#xff09;是windows操作系统里的一个系统文件夹&#…

一起学SF框架系列7.1-spring-AOP-基础知识

AOP(Aspect-oriented Programming-面向切面编程&#xff09;是一种编程模式&#xff0c;是对OOP(Object-oriented Programming-面向对象编程&#xff09;一种有益补充。在OOP中&#xff0c;万事万物都是独立的对象&#xff0c;对象相互耦合关系是基于业务进行的&#xff1b;但在…

目标识别模型两种部署形态图

目标检测预训练模型基于新数据进行微调&#xff08;训练&#xff09;之后&#xff0c;得到一个权重文件。 在日常工业、车载等需求环境下&#xff0c;需要在嵌入式移动端的软件系统中调用该模型文件进行推断测试&#xff0c;软件系统追求性能经常使用C/C进行编码实现&#xff…

第十一次CCF计算机软件能力认证

第一题&#xff1a;打酱油 小明带着 N 元钱去买酱油。 酱油 10 块钱一瓶&#xff0c;商家进行促销&#xff0c;每买 3 瓶送 1 瓶&#xff0c;或者每买 5 瓶送 2 瓶。 请问小明最多可以得到多少瓶酱油。 输入格式 输入的第一行包含一个整数 N&#xff0c;表示小明可用于买酱油的…