关于Linux中前端负载均衡之VIP(LVS+Keepalived)自动化部署的一些笔记

news/2024/5/8 23:04:26/文章来源:https://blog.csdn.net/sanhewuyang/article/details/132000038

写在前面


  • 整理一些 LVS 相关的笔记
  • 理解不足小伙伴帮忙指正

傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡更可怕的事。--------王小波


LVS & Keepaliveed 简单介绍

关于 LVS 是什么,即 Linux 虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前 LVS 已经被集成到 Linux 内核模块中。使用只需要安装一个操作工具就可以。

使用 ansible 进行相关的操作 ,下面为清单文件,这里 master 作为代理节点,node 作为负载节点。

┌──[root@vms152.liruilongs.github.io]-[~]
└─$cat inventory
[master]
192.168.26.152
[node]
192.168.26.153
192.168.26.154

在使用之前我们需要安装工具包 ipvsadm

┌──[root@vms152.liruilongs.github.io]-[~]
└─$ansible master -m yum -a 'name=ipvsadm state=installed'

LVS 负载均衡环境 由一个或多个 VIP 加上多个真实服务器构成,多个 VIP 的情况需要配合 Keepalived 使用。

LVS 工作原理即用户请求 LVS 的 VIP 地址,LVS 根据 转发方式负载均衡算法,将请求转发给后端服务器。

实现 LVS 负载均衡转发方式有三种,分别为 NAT、DR、TUN 模式,负载均衡算法相对较多。

  • NAT: 即网络地址转换,简单理解,即可以实现两个不通网段的通信。通过 LVS 服务器实现用户私网和公网的通信。
  • TUN :TUN的思路就是将请求与响应数据分离,请求还走 LVS 机器,响应走单独的通道,所以 TUN 模式要求真实服务器可以直接与外部网络连接,真实服务器在收到请求数据包后直接给客户端主机响应数据。
  • DR: DR模式也叫直接路由模式,直接路由模式(DR模式)要求LVS与后端服务器必须在同一个局域网内。

LVS负载均衡算法:

  • RR算法:轮叫调度(Round-RobinScheduling)
  • WRR算法:加权轮叫调度(WeightedRound-RobinScheduling)
  • LC算法:最小连接调度(Least-ConnectionScheduling)
  • WLC算法: 加权最小连接调度(WeightedLeast-ConnectionScheduling)
  • LBLC算法:基于局部性的最少链接(Locality-BasedLeastConnectionsScheduling)
  • LBLCR算法:带复制的基于局部性最少链接(Locality-BasedLeastConnectionswithReplicationScheduling)
  • DH算法:目标地址散列调度(DestinationHashingScheduling)
  • SH算法:源地址散列调度(SourceHashingScheduling)

ipvsadm 常用命令

  • -A 增加一台虚拟服务器VIP地址;
  • -t 虚拟服务器提供的是tcp服务;
  • -s 使用的调度算法;
  • -a 在虚拟服务器中增加一台后端真实服务器;
  • -r 指定真实服务器地址;
  • -w 后端真实服务器的权重;
  • -m 设置当前转发方式为NAT模式;
  • -g 为直接路由模式;
  • -i 模式为隧道模式。

通过命令行方式简单使用

这里利用 ipvsadm 工具搭建简单的 LVS 负载均衡 Demo

“ipvsadm -C” 命令用于清除所有 IPVS 虚拟服务器条目。这意味着所有虚拟服务器及其关联的连接都将被删除。

┌──[root@vms152.liruilongs.github.io]-[~]
└─$ipvsadm -C

下面的命令用于将新的虚拟服务添加到 IP Virtual Server (IPVS) 表 中。其中:

  • -A 选项指定添加新的虚拟服务,
  • -t 选项指定虚拟服务的 IP 地址和端口号,本例中为 192.168.26.200:80。
  • -s 选项指定虚拟服务使用的调度算法,本例中指定为 rr,即“轮询”。这意味着连接将在 IPVS 表中的真实服务器之间均匀分布。
┌──[root@vms152.liruilongs.github.io]-[~]
└─$ipvsadm -A -t  192.168.26.200:80 -s rr

向刚刚创建的虚拟服务添加新的真实的服务器

  • -a:此选项指定我们要向虚拟服务添加新的真实服务器。
  • -t 192.168.26.200:80:此选项指定要向其添加新的真实服务器的虚拟服务。在本例中,虚拟服务位于 IP 地址 192.168.26.200 和端口 80 上。
  • -r 192.168.26.153:80:此选项指定我们要添加到虚拟服务的新真实服务器的 IP 地址和端口。在本例中,新真实服务器的 IP 地址为 192.168.26.153,端口为 80。
  • -m:此选项指定我们要为虚拟服务使用 NAT 模式。这意味着当流量转发到真实服务器时,真实服务器的 IP 地址将被转换为负载均衡器的 IP 地址。
  • -w 2:此选项指定新真实服务器的权重。权重用于在虚拟服务中分配流量。在本例中,新真实服务器的权重设置为 2。
┌──[root@vms152.liruilongs.github.io]-[~]
└─$ipvsadm -a -t 192.168.26.200:80 -r  192.168.26.153:80 -m -w 2

相同的方式在添加一台真实的机器

┌──[root@vms152.liruilongs.github.io]-[~]
└─$ipvsadm -a -t 192.168.26.200:80 -r  192.168.26.154:80 -m -w 2

负载节点上启动 httpd 服务

┌──[root@vms152.liruilongs.github.io]-[~]
└─$ansible node -m service -a 'name=httpd state=started'

简单测试,轮询模式返回

┌──[root@vms152.liruilongs.github.io]-[~]
└─$curl 192.168.26.200:80
vms154.liruilongs.github.io
┌──[root@vms152.liruilongs.github.io]-[~]
└─$curl 192.168.26.200:80
vms153.liruilongs.github.io
┌──[root@vms152.liruilongs.github.io]-[~]
└─$curl 192.168.26.200:80
vms154.liruilongs.github.io
┌──[root@vms152.liruilongs.github.io]-[~]
└─$

通过 ipvsadm -Ln 命令查看,将以数字格式列出 IPVS 中的所有虚拟服务和真实服务器:

  • -L:此选项指定我们要列出 IPVS 中的所有虚拟服务和真实服务器。
  • -n:此选项指定我们要以数字格式显示 IP 地址和端口号。
┌──[root@vms152.liruilongs.github.io]-[~]
└─$ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.26.200:80 rr-> 192.168.26.153:80            Masq    2      0          0-> 192.168.26.154:80            Masq    2      0          0

ipvsadm -C 清理 ipvs 表。

┌──[root@vms152.liruilongs.github.io]-[~]
└─$ipvsadm -C
┌──[root@vms152.liruilongs.github.io]-[~]
└─$ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
┌──[root@vms152.liruilongs.github.io]-[~]
└─$

LVS 无法对真实负载机器进行监控检测,即无法判断负载节点是否健康,能够提供能力,由此引入 Keepalived:

Keepalived 可以按照配置的规则自动检测服务器的运行状态,并进行剔除和添加的动作,使用户完全感受不到后台服务器是否存在宕机的状态,当后端一台 WEB 服务器工作正常后 Keepalived 自动将 WEB 服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的WEB服务器。

另外使用 keepalived 可进行 HA 故障切换,也就是有一台备用的 LVS,主 LVS 宕机,LVS VIP 自动切换到从,可以基于 LVS+Keepalived 实现负载均衡及高可用功能,满足网站7x24小时稳定高效的运行。

Keepalived 基于三层检测(IP层,TCP传输层,及应用层),需要注意,如果使用了 keepalived.conf 配置,就不需要再执行 ipvsadm -A 命令去添加均衡的 realserver 命令了,所有的配置都在 keepalived.conf里面设置即可。它可以自动地将真实服务器添加到 IPVS 中。当然,您需要在 keepalived.conf 文件中配置虚拟服务和真实服务器。

通过 ansible 剧本的方式实现 keepalived+LVS 自动化部署

剧本编写

┌──[root@vms152.liruilongs.github.io]-[~]
└─$cat keepalived_lvs.yaml
---# 初始化工作,安装 keepalived 和 ipvsadm ,关闭防火墙
- name: ipvsadm  keepalived inithosts: nodetasks:- name: installyum:name:- keepalived- ipvsadmstate: installed- name: firewall clonsshell: firewall-cmd --set-default-zone=trusted- name: ipvsadm cleanshell: ipvsadm -C# 在主节点安装 keepalived
- name: vms153.liruilongs.github.io confighosts: 192.168.26.153tags:- mastervars:role: MASTERpriority: 100tasks:- name: copy keeplived configtemplate:src: keepalived.conf.j2dest: /etc/keepalived/keepalived.conf- name: restart keeplivedservice:name: keepalivedstate: restarted# 在从节点安装 keepalived
- name: vms154.liruilongs.github.io confighosts: 192.168.26.154tags:- backupvars:role: BACKUPpriority: 50tasks:- name: copy keepalived configtemplate:src: keepalived.conf.j2dest: /etc/keepalived/keepalived.conf- name: restart keepalivedservice:name: keepalivedstate: restarted┌──[root@vms152.liruilongs.github.io]-[~]
└─$

对应的 keepalived.conf.j2 模板配置文件,部分变量在剧本中指定了,这里配置文件格式需要注意一下,不同版本配置略有区别。

┌──[root@vms152.liruilongs.github.io]-[~]
└─$cat keepalived.conf.j2
! Configuration File for keepalivedglobal_defs {router_id LVS_DEVELvrrp_iptables
}vrrp_instance VI_1 {state {{ role }}interface ens32virtual_router_id 51priority {{ priority }}advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.26.200}}virtual_server 192.168.26.200 80 {delay_loop 1lb_algo rrlb_kind DRprotocol TCPreal_server 192.168.26.155 80 {weight 3TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3connect_port 80}}real_server 192.168.26.156 80 {weight 3TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3connect_port 80}}
}

web服务配置,内核参数修改,本地回环网卡修改

ifcfg-lo:0 接口是一个虚拟环回接口,用于为系统分配虚拟IP地址。在 keepalived 和 LVS 的上下文中,此虚拟 IP 地址用作在集群中活动节点和备用节点之间共享的 VIP(虚拟IP)。此 VIP 用于将流量路由到运行 httpd 服务的活动节点。

这里最开始有些不理解,当 LVS 和 keepalived 结合之后,原来的 VIP 变成虚拟 VIP,我们上面的Demo中使用的 VIP 是一个实际的 IP 地址,变成虚拟VIP之后,需要修改本地回环地址。

┌──[root@vms152.liruilongs.github.io]-[~]
└─$cat deploy_web.yaml
---
- name: web inithosts: webtasks:- name: 网卡配置copy:dest: /etc/sysconfig/network-scripts/ifcfg-lo:0src: ifcfg-loforce: yes- name: 内核参数修改copy:dest: /etc/sysctl.confsrc: sysctl.confforce: yes- name: sysctlshell: sysctl -p- name : install httpdyum:name: httpdstate: installed- name: restart networkservice:name: networkstate: restarted- name: httpd contentshell: "echo `hostname` > /var/www/html/index.html"- name: Restart service httpd, in all casesservice:name: httpdstate: restarted- name: firewall clonsshell: firewall-cmd --set-default-zone=trusted- name: iptablesshell: "iptables -F"
┌──[root@vms152.liruilongs.github.io]-[~]
└─$

涉及到的配置文件

┌──[root@vms152.liruilongs.github.io]-[~]
└─$cat ifcfg-lo
DEVICE=lo:0
IPADDR=192.168.26.200
NETMASK=255.255.255.255
NETWORK=192.168.26.200
BROADCAST=192.168.26.200
ONBOOT=yes
NAME=lo:0

关于为什么要修改本地回环地址为 VIP 地址?

VIP地址是客户端用来访问服务的地址。负载均衡器然后将传入的流量分配到真实服务器上。

为了确保真实服务器能够处理来自负载均衡器的流量,我们需要将它们的环回地址修改为VIP地址。这是因为真实服务器将从VIP地址作为源地址接收来自负载均衡器的流量。如果真实服务器使用自己的环回地址作为源地址响应此流量,则响应将无法路由回负载均衡器。

┌──[root@vms152.liruilongs.github.io]-[~]
└─$cat sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).net.ipv4.ip_forward = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
┌──[root@vms152.liruilongs.github.io]-[~]
└─$

部署测试

剧本运行完成之后,通过下面的命令检查

┌──[root@vms152.liruilongs.github.io]-[~]
└─$ansible node -a 'ipvsadm -Ln'
192.168.26.153 | CHANGED | rc=0 >>
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.26.200:80 rr persistent 2-> 192.168.26.155:80            Route   3      0          0-> 192.168.26.156:80            Route   3      0          0
192.168.26.154 | CHANGED | rc=0 >>
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.26.200:80 rr persistent 2-> 192.168.26.155:80            Route   3      0          0-> 192.168.26.156:80            Route   3      0          0
┌──[root@vms152.liruilongs.github.io]-[~]
└─$

查看本地回环地址

┌──[root@vms152.liruilongs.github.io]-[~]
└─$ansible web -m shell -a 'ip a | grep lo:'
192.168.26.156 | CHANGED | rc=0 >>
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1inet 192.168.26.200/32 brd 192.168.26.200 scope global lo:0
192.168.26.155 | CHANGED | rc=0 >>
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1inet 192.168.26.200/32 brd 192.168.26.200 scope global lo:0
┌──[root@vms152.liruilongs.github.io]-[~]
└─$
┌──[root@vms152.liruilongs.github.io]-[~]
└─$curl 192.168.26.200
vms156.liruilongs.github.io
┌──[root@vms152.liruilongs.github.io]-[~]
└─$curl 192.168.26.200
vms155.liruilongs.github.io
┌──[root@vms152.liruilongs.github.io]-[~]
└─$

遇到问题处理

  1. 遇到问题要看官方文档,网上的好的有些旧了
  2. 版本不同,配置文件略有差别,以官方文档为主,可以参考帮助文档中的一些配置模板
┌──[root@vms152.liruilongs.github.io]-[~]
└─$rpm -ql keepalived  | grep doc | grep conf
/usr/share/doc/keepalived-1.3.5/keepalived.conf.SYNOPSIS
/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.HTTP_GET.port
/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.IPv6
/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.SMTP_CHECK
/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.SSL_GET
/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.fwmark
/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.inhibit
/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.misc_check
/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.misc_check_arg
/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.quorum
/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.sample
/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.status_code
/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.track_interface
/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.virtual_server_group
/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.virtualhost
/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.vrrp
/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.vrrp.localchec
/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.vrrp.lvs_syncd
/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.vrrp.routes
/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.vrrp.rules
/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.vrrp.scripts
/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.vrrp.static_ipaddress
/usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.vrrp.sync
┌──[root@vms152.liruilongs.github.io]-[~]
└─$
  1. 如果配置没有生效但是,服务正常启动,可能配置文件中的空格影响的,部分配置走了默认配置,需要通过 vim + set list 修改配置

博文部分内容参考

© 文中涉及参考链接内容版权归原作者所有,如有侵权请告知


https://blog.csdn.net/weixin_42808782/article/details/115671278


© 2018-2023 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)

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

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

相关文章

绝美!轮到AI写真爆火了!18种AI视频制作教程;Llama 2微调的极速指南;Nijijourney官方AI绘画课 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 摄影写真面临AI技术洗牌&#xff0c;一键生成杂志大片的时代来了 软件&#xff1a;midjourney & Stable Diffusion 模型&#xff…

TypeScript基础篇 - TS模块

目录 模块的概念 Export 语法&#xff08;default&#xff09; Export 语法&#xff08;non-default&#xff09; import 别名 Type Export语法【TS】 模块相关配置项&#xff1a;module【tsconfig.json】 模块相关配置项&#xff1a;moduleResolution 小节总结 模块的…

【LLM】大语言模型学习之LLAMA 2:Open Foundation and Fine-Tuned Chat Model

大语言模型学习之LLAMA 2:Open Foundation and Fine-Tuned Chat Model 快速了解预训练预训练模型评估微调有监督微调(SFT)人类反馈的强化学习(RLHF)RLHF结果局限性安全性预训练的安全性安全微调上手就干使用登记代码下载获取模型转换模型搭建Text-Generation-WebUI分发模型…

pytorch的发展历史,与其他框架的联系

我一直是这样以为的&#xff1a;pytorch的底层实现是c(这一点没有问题&#xff0c;见下边的pytorch结构图),然后这个部分顺理成章的被命名为torch,并提供c接口,我们在python中常用的是带有python接口的&#xff0c;所以被称为pytorch。昨天无意中看到Torch是由lua语言写的&…

M 芯片的 macos 系统安装虚拟机 centos7 网络配置

centos 安装之前把网络配置配好或者是把网线插好 第一步找到这个 第二步打开网络适配器 选择图中所指位置 设置好之后 开机启动 centos 第三步 开机以后 编写网卡文件保存 重启网卡就可以了&#xff0c;如果重启网卡不管用&#xff0c;则重启虚拟机即可 “ ifcfg-ens160 ” 这…

【java入门学习】

文章目录 java学习章节目录学习前的准备main函数怎么写&#xff1f;Java程序运行的步骤如何让代码运行起来&#xff1f;java程序由三部分构成&#xff1a;注释注释规范 标识符练习 总结 java学习章节目录 SE语法 初阶段主要来熟悉java的语法&#xff1a; 1.初始java 2.数据类型…

黑苹果如何在macOS Sonoma中驱动博通网卡

准备资源&#xff08;百度&#xff1a;黑果魏叔 下载&#xff09; 资源包中包含&#xff1a;AirportBrcmFixup.kext/IOSkywalkFamily.kext/IO80211FamilyLegacy.kext/OpenCore-Patcher 使用方法&#xff1a; 1.将 csr-active-config 设置为 03080000 全选代码 复制 2.在 …

kafka集群搭建(Linux环境)

zookeeper搭建&#xff0c;可以搭建集群&#xff0c;也可以单机&#xff08;本地学习&#xff0c;没必要搭建zookeeper集群&#xff0c;单机完全够用了&#xff0c;主要学习的是kafka&#xff09; 1. 首先官网下载zookeeper&#xff1a;Apache ZooKeeper 2. 下载好之后上传到…

layui框架学习(33:流加载模块)

Layui中的流加载模块flow主要支持信息流加载和图片懒加载两部分内容&#xff0c;前者是指动态加载后续内容&#xff0c;示例的话可以参考csdn个人博客主页&#xff0c;鼠标移动到页面底部时自动加载更多内容&#xff0c;而后者是指页面显示图片时才会延迟加载图片信息。   fl…

记录vue的一些踩坑日记

记录vue的一些踩坑日记 安装Jq npm install jquery --save vue列表跳转到详情页&#xff0c;再返回列表的时候不刷新页面并且保持原位置不变&#xff1b; 解决&#xff1a;使用keepAlive 在需要被缓存的页面的路由中添加&#xff1a;keepAlive: true, {path: /viewExamine,nam…

怎么在线修改图片?分享一个图片修改工具

无论是在个人或商业领域&#xff0c;我们都需要使用高质量的图片来传达信息或提高品牌形象。大尺寸的图片也会占据大量的存储空间和带宽&#xff0c;影响网站的加载速度和用户体验。因此&#xff0c;我们需要一种高效的工具来解决这个问题。今天向大家介绍一款非常实用的图片处…

Android 开发代码规范

一. AndroidStudio开发工具规范 使用最新的稳定版本.统一文件的编码格式为utf-8. 清除每个类里面的无效的import导包.代码样式统一,比如&#xff0c;tab缩进4个空格&#xff0c;或者 tab size等如果没有特殊情况使用默认的配置即可。每行字数每行字符数不得超过 160 字符&…

C++--菱形继承

1.什么是菱形继承 单继承&#xff1a;一个子类只有一个直接父类时称这个继承关系为单继承 多继承&#xff1a;一个子类有两个或以上直接父类时称这个继承关系为多继承 菱形继承的问题&#xff1a;菱形继承有数据冗余和二义性的问题&#xff0c;数据冗余是由于创建多个相同类型的…

SpringBoot 如何进行 统一异常处理

在Spring Boot中&#xff0c;可以通过自定义异常处理器来实现统一异常处理。异常处理器能够捕获应用程序中抛出的各种异常&#xff0c;并提供相应的错误处理和响应。 Spring Boot提供了ControllerAdvice注解&#xff0c;它可以将一个类标记为全局异常处理器。全局异常处理器能…

Glow: Generative Flow with Invertible 1×1 Convolutions论文解析及实现(二)

Glow: Generative Flow with Invertible 11 Convolutions 代码github: https://github.com/rosinality/glow-pytorch添加链接描述 1 模型架构如下 1.1 左边图flow模型 Flow model ① ActNorm ② InvConv2dLU ③ AffineCoupling 1.2 右边模型结构Glow模型 Glow Model Block…

万年历【小游戏】(Java课设)

系统类型 Java实现的小游戏 使用范围 适合作为Java课设&#xff01;&#xff01;&#xff01; 部署环境 jdk1.8Idea或eclipse 运行效果 更多Java课设系统源码地址&#xff1a;更多Java课设系统源码地址 更多Java小游戏运行效果展示&#xff1a;更多Java小游戏运行效果展…

解决Font family [‘sans-serif’] not found问题

序言 以下测试环境都是在 anaconda3 虚拟环境下执行。 激活虚拟环境 conda activate test_python_env 或 source activate test_python_env工具&#xff1a; WinSCP Visual Studio Code 这里笔者使用 WinSCP 工具连接&#xff0c;编辑工具是 Visual Studio Code 一、字体…

mysql(六)读写分离

目录 前言 一、概述 二、配置JAVA环境及安装阿米巴 三、配置阿米巴 四、测试 总结 前言 MySQL读写分离是一种常见的数据库架构设计模式&#xff0c;旨在提高系统的性能和可用性。它通过将读操作和写操作分离到不同的MySQL实例上来实现。 读写分离的原理是&#xff1a; 1. 主…

UE5.1.1 创建C++项目失败

因一直使用Unity开发环境&#xff0c;安装Unreal后&#xff0c;并未详细配置过其开发环境&#xff0c;默认创建蓝图工程无异常&#xff0c;但创建UE C项目时总共遇到两个错误&#xff1a; 错误一 Running /Epic/UE/UE_5.1/Engine/Build/BatchFiles/Build.bat -projectfiles -…

郑州主域名和多个子域名的泛域名https证书

随着网络的发展&#xff0c;一个站长往往会创建多个域名网站&#xff0c;为了与主站有联系&#xff0c;站长会选择主站域名的二级域名来创建网站&#xff0c;比如主站是www .***. com&#xff0c;那么新创建的网站的域名就是top .***. com、vip .***. com等。 1.在安装部署htt…