【微服务部署】八、HAProxy+Keepalived高可用负载均衡集群配置
HAProxy是一种免费、快速、可靠的反向代理,为基于TCP和HTTP的应用程序提供高可用性、负载平衡和代理,它非常适合应用在高并发大流量的网站上。这些年来,HAProxy已成为事实上的标准开源负载均衡,目前HAProxy已与大多数主流Linux发行版一起提供,很多云平台也默认集成了HAProxy。
LVS、Nginx、HAProxy是常用的三款负载均衡,网上有很多三种负载均衡详细的对比文章,下面一句话总结LVS、Nginx、HAProxy的优缺点:
- LVS:工作在OSI七层协议模型的第四层传输层上,简单、稳定、性能最强,但可配置性逊于其他两种,不支持正则处理,不能做动静分离,不支持URL和目录转发。
- HAProxy:工作在OSI七层协议模型的第四层传输层和第七层应用层上,性能强但不如Lvs,但是配置比Lvs灵活,支持URL和目录转发,单不能作为web服务器。
- Nginx:工作在OSI七层协议模型的第七层应用层上,三种负载均衡软件Nginx配置最为简单灵活,但性能最差,可作为web服务器使用。
综合各方面的优缺点考虑,我们选择使用HAproxy+Keepalived作为负载均衡配置,Nginx作为前端静态页面Web服务器的架构使用。HAProxy的偶数发行版本为稳定且长期支持版本,追求系统极端稳定性的用户可以选择这个版本,目前(2023年08月09日)最新发布版本为 HAProxy 2.8.2 release,我们将在环境上部署并配置这个版本。
一、 HAProxy+Keepalived高可用负载均衡集群安装配置
通常我们把Keepalived和HAProxy一起使用,来实现Web服务器的高可用性和负载平衡。Keepalived是一个用C编写的路由软件,它使用虚拟路由冗余协议(VRRP)和健康检查机制的组合来确定服务器的状态,并在需要时触发故障转移。VRRP确保只有一个服务器在任何给定时间内 actively 响应请求,而健康检查则监视服务器的健康状态,并在主服务器失败时触发选举过程。
- Keepalived的作用:Keepalived负责管理虚拟IP(VIP)并确保高可用性。它监控服务器的健康状况,如果主服务器(主服务器)出现故障或无响应,Keepalive会触发到备份服务器(从服务器)的故障转移。在故障转移过程中,Keepalived会更新VIP以指向备份服务器,从而无缝地将流量重定向到备份服务器。
- HAProxy的作用:HAProxy是一款功能强大且可靠的负载均衡器,可跨多个服务器分配传入流量。它充当反向代理,接收来自客户端的请求并将其转发到适当的后端服务器。HAProxy的主要功能是平衡服务器之间的负载,确保最佳性能和可用性。
1. 集群服务器规划配置
- VIP(虚拟IP):192.168.1.200
- 主节点服务器:HAProxy-01,192.168.1.210
- 备节点服务器:HAProxy-02,192.168.1.195
关闭SELinux,尽管SELinux可以增强生产服务器的安全性,它是为每个软件配置控制权限,使用它的前提是必须详细了解每个需要部署的软件并为它配置。很多国内云服务器默认安装的Linux环境也是禁用SELinux,否则在安装部署时会有很多问题。
# 首先临时关闭SELinux
setenforce 0
# 修改配置文件,永久关闭SELinux
vi /etc/sysconfig/selinux
# 设置
SELINUX=disabled
2. Keepalived安装配置
VIP(虚拟IP)有两种实现方式:一种是直接配置Linux服务器网络,还有一种是使用Keepalived,我们这里直接使用Keepalived的方式来实现。在实际部署中发现,如果多网卡时,不同的虚拟IP绑定在同一网卡,在虚拟IP切换时会发生无法访问的情况,所以尽量将虚拟IP设置为统一网段绑定在同一网卡。
a. Keepalived软件安装步骤
- 查看 keepalived 软件包
yum list keepalived
- (二选一)使用 yum 方式安装软件包,因为yum 源的原因,无法安装最新稳定版本,根据自己需要进行选择。
yum install -y keepalived
- (二选一)使用源码包安装,因为yum源的原因,默认安装的版本是1.3.5,而最新版是2.2.8,我们为了使用最新版,所以这里使用编译源码的方式安装。
# 安装编译源码所需依赖
yum -y install gcc openssl-devel libnl3-devel ipset-devel iptables-devel libnfnetlink-devel net-snmp-devel glib2-devel
# 下载源码包
wget https://www.keepalived.org/software/keepalived-2.2.8.tar.gz
# 解压源码包
tar zxvf keepalived-2.2.8.tar.gz
# 编译源码包
cd keepalived-2.2.8
./configure --prefix=/
make && make install
# 从解压的源码包中将开机启动文件复制到/etc/rc.d/init.d/
cp /opt/software/keepalived-2.2.8/keepalived/etc/init.d/keepalived /etc/rc.d/init.d/
# 给keepalived赋权限/etc/init.d/是/etc/rc.d/init.d/的软链接
chmod +x /etc/init.d/keepalived
# 设置开机启动
echo "/etc/init.d/keepalived start" >> /etc/rc.local
b. 安装邮件通知服务
在生产环境中,高可用服务的状态变化需要及时通知系统管理员,以保障管理员及时处理服务故障,使服务正常运行。Keepalived提供notification_email、smtp_server等邮件发送配置,但是它不支持SMTP身份验证,也不支持SMTP的TLS,它是使用HELO且不使用身份验证的RFC821实现,所以Keepalived没有配置邮件服务器用户名、密码的方法,导致无法使用外部邮箱服务器,所以,这里选择网上大多数方法,编写脚本,当Keepalived状态切换时,调用Linux系统的mailx(mailx是一个命令行邮件客户端)进行邮件发送。
- 查看Linux是否已经安装mailx,如果显示no mailx in…,则表示没有安装,可以通过yum命令安装
[root@localhost /]# which mailx
/usr/bin/which: no mailx in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/java/bin:/root/bin)
- 安装邮件服务的yum命令
yum install mailx -y
- 在mail.rc文件中配置邮箱发送账号和密码,有些邮箱的密码是单独的授权码,这个根据自己的邮箱来获取。
vi /etc/mail.rc
# 一下内容加在mail.rc文件底部
set from=xxxxxxxxxxx@163.com
set smtp=smtp.163.com
set smtp-auth-user=xxxxxxxx@163.com
set smtp-auth-password=密码
set smtp-auth=login
set ssl-verify=ignore
- 通过命令行测试是否能够发送邮件
echo "虚拟IP发生浮动,请及时处理。" | mail -s "Keepalived告警邮件" gitegg@gitegg.com
- 编写邮件发送脚本keepalived_notify.sh
vi /etc/keepalived/keepalived_notify.sh
keepalived_notify.sh内容如下
# 填写一下内容
#!/bin/bash
mailto=收件人邮箱1,收件人邮箱2
notify() {mailsubject="【Keepalived状态切换告警邮件】$(hostname) 状态切换为 $1"mailbody="$(date +'%F %T'): Keepalived状态发生切换, $(hostname) 状态切换为 $1,请检查服务器运行状态。"echo "$mailbody" | mail -s "$mailsubject" $mailto
}
case $1 in
master)notify master;;
backup)notify backup;;
fault)notify fault;;
*)echo "Usage: $(basename $0) {master|backup|fault}"exit 1;;
esac
keepalived_notify.sh赋可执行权限
chmod +x /etc/keepalived/keepalived_notify.sh
# 测试脚本是否可以发送
bash /etc/keepalived/keepalived_notify.sh master
- 修改系统hostname,否则使用hostname,无法区分是哪台服务器出了问题,修改/etc/hostname文件即可
vi /etc/hostname
#修改hostname,注意格式
localhost.ServerA
#立即生效
hostname $(cat /etc/hostname)
c. Keepalived软件配置
- 配置防火墙firewalld,使VRRP组播通过防火墙:
1. net.ipv4.ip_forward = 1 开启允许数据包转发
2. net.ipv4.ip_nonlocal_bind = 1 开启允许绑定非本机的IP
3. --in-interface后面一定要修改为你自己的网卡
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf
sysctl -p
# 双网卡,网卡enp6s0f1
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface enp6s0f1 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --out-interface enp6s0f1 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
# 双网卡,网卡enp6s0f0
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface enp6s0f0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --out-interface enp6s0f0 --destination 224.0.0.18 --protocol vrrp -j ACCEPTfirewall-cmd --reload
- 配置Keepalived的虚拟IP(VIP),多网卡配置,虚拟一个内网VIP,一个外网VIP
主节点服务器192.168.1.210的keepalived.conf配置
! Configuration File for keepalivedglobal_defs {router_id NODE_MASTER #名称唯一vrrp_skip_check_adv_addr # 默认是不跳过检查。检查收到的VRRP通告中的所有地址可能会比较耗时,设置此命令的意思是,如果通告与接收的上一个通告来自相同的master路由器,则不执行检查(跳过检查)。#vrrp_strict # 严格遵守VRRP协议#vrrp_garp_interval 0 #在一个接口发送的两个免费ARP之间的延迟。可以精确到毫秒级。默认是0.#vrrp_gna_interval 0 #在一个网卡上每组na消息之间的延迟时间,默认为0script_user rootenable_script_securitymax_auto_priority 1
}vrrp_instance VI_1 {state MASTER # 设置初始状态均主interface enp6s0f1 enp6s0f0 # 设置绑定虚拟IP的网卡,多个网卡可以在后面添加virtual_router_id 51 # 集群的virtual_router_id值,主备一致priority 100 # 路由权重advert_int 1 #检查间隔,默认1秒notify_master "/etc/keepalived/keepalived_notify.sh master"notify_backup "/etc/keepalived/keepalived_notify.sh backup"notify_fault "/etc/keepalived/keepalived_notify.sh fault"authentication {auth_type PASS #认证方式auth_pass 11111111 #认证密码(密码只识别前8位)}virtual_ipaddress {内网虚拟ip dev enp6s0f1 # 内网虚拟ip,后面可以加网卡名称绑定不同网卡公网虚拟ip dev enp6s0f0 # 公网虚拟ip,后面可以加网卡名称绑定不同网卡}
}
备节点服务器192.168.1.195的keepalived.conf配置
! Configuration File for keepalivedglobal_defs {router_id NODE_SLAVE #名称唯一vrrp_skip_check_adv_addr # 默认是不跳过检查。检查收到的VRRP通告中的所有地址可能会比较耗时,设置此命令的意思是,如果通告与接收的上一个通告来自相同的master路由器,则不执行检查(跳过检查)。vrrp_strict # 严格遵守VRRP协议#vrrp_garp_interval 0 #在一个接口发送的两个免费ARP之间的延迟。可以精确到毫秒级。默认是0.#vrrp_gna_interval 0 #在一个网卡上每组na消息之间的延迟时间,默认为0script_user rootenable_script_securitymax_auto_priority 1
}vrrp_instance VI_1 {state BACKUP # 设置初始状态均备interface enp6s0f1 # 设置绑定虚拟IP的网卡virtual_router_id 51 # 集群的virtual_router_id值,主备一致priority 100 # 路由权重advert_int 1 #检查间隔,默认1秒notify_master "/etc/keepalived/keepalived_notify.sh master"notify_backup "/etc/keepalived/keepalived_notify.sh backup"notify_fault "/etc/keepalived/keepalived_notify.sh fault"authentication {auth_type PASS #认证方式auth_pass 11111111 #认证密码(密码只识别前8位)}virtual_ipaddress {内网虚拟ip/24 # 内网虚拟ip公网虚拟ip/24 # 公网虚拟ip}
}
- 分别在主备节点启动keepalived
systemctl start keepalived
# 查看启动状态
/etc/init.d/keepalived status
- 设置keepalived开机启动
systemctl enable keepalived.service
- 在主节点通过ip addr命令验证,查看虚拟IP192.168.1.200在主节点
[root@localhost ~]# ip addr | grep 192.168.1.200inet 192.168.1.200/24 scope global secondary enp6s0f1
- 在备节点通过ip addr命令验证,查看虚拟IP192.168.1.200不在备节点
[root@localhost ~]# ip addr | grep 192.168.1.200
[root@localhost ~]#
通过以上验证,说明Keepalived虚拟IP配置成功,如果主备同时存在虚拟IP,那么说明没有配置成功,请检查防火墙firewall是否配置正确。同时,为了验证虚拟IP是否会自动漂移,可以使用systemctl stop keepalived 停止主节点的Keepalived,此时虚拟IP漂移到备节点。
3. HAProxy安装配置
HAProxy也有两种安装方式,yum和源码包。同样,因为yum源的原因,yum方式安装的不是最新稳定版本,所以我们这里选择采用编译源码包的方式安装。
a. HAProxy软件安装步骤
- HAProxy编译安装需要用到Lua,所以首先安装Lua。记住Lua的src路径/opt/software/lua-5.4.6/src,后续HAProxy编译需要用到。
cd /opt/software/
curl -R -O http://www.lua.org/ftp/lua-5.4.6.tar.gz
tar zxf lua-5.4.6.tar.gz
cd lua-5.4.6
make all test
- 安装HAProxy编译时必须的其他软件,因为gcc和openssl-devel在前面安装过,所以,这里我们只需要安装pcre-devel和systemd-devel。
yum install -y pcre-devel systemd-devel
- 下载并编译HAProxy
cd /opt/software/
curl -R -O https://www.haproxy.org/download/2.8/src/haproxy-2.8.2.tar.gz
tar zxf haproxy-2.8.2.tar.gz
cd haproxy-2.8.2make ARCH=x86_64 TARGET=linux-glibc USE_OPENSSL=1 USE_ZLIB=1 USE_PCRE=1 USE_SYSTEMD=1 USE_LUA=1 LUA_INC=/opt/software/lua-5.4.6/src/ LUA_LIB=/opt/software/lua-5.4.6/src/make install PREFIX=/usr/local/haproxyln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/
- 安装成功后,查看HAProxy版本
[root@localhost haproxy-2.8.2]# haproxy -v
HAProxy version 2.8.2-61a0f57 2023/08/09 - https://haproxy.org/
Status: long-term supported branch - will stop receiving fixes around Q2 2028.
Known bugs: http://www.haproxy.org/bugs/bugs-2.8.2.html
Running on: Linux 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64
- 新建HAProxy服务文件haproxy.service,让其可以使用systemd系统和服务管理器管理。
mkdir /var/run/haproxy
vi /usr/lib/systemd/system/haproxy.service
[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target[Service]
ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID[Install]
WantedBy=multi-user.target
b. HAProxy软件配置
- 创建HAProxy配置文件
mkdir /etc/haproxyvi /etc/haproxy/haproxy.cfg
- haproxy.cfg配置文件内容,nginx配置请查看前面章节,有详细介绍如何安装配置
globallog 127.0.0.1 local6 info #info日志,有用的信息log 127.0.0.1 local5 notice #notice日志,普通但重要的事件pidfile /var/run/haproxy/haproxy.pid #pid文件maxconn 20000 #最大连接数user haproxy #用户 或者 uidgroup haproxy #组 或者 giddaemon #后台运行nbproc 12 #工作进程数量
defaults #默认参数mode http #模式 http or tcplog globalretries 3 #重试次数option redispatch #服务不可用后,重定向到其他健康服务器option dontlognull #不记录健康检查的日志信息maxconn 20000 #最大连接数timeout client 60s # 客户端超时时间timeout server 60s # 服务端超时时间timeout connect 1s # haproxy与服务端超时时间
listen admin_stats # frontend and backend 监控bind *:8118stats uri /haproxy?stats #查看服务器状态路径 stats auth admin:123456 #用户认证,密码一定要改复杂,可以设置多个stats hide-version #隐藏统计页面上的HAproxy版本信息 stats refresh 5s # 统计刷新频率
frontend web #listen 接收客户不同请求,并根据acl策略做不同的请求转发至backend处理mode httpbind *:80 #端口bind *:443 ssl crt /etc/ssl/certs/***.gitegg.com.pem #端口option httplog #http格式日志option forwardfor # 转发客户端真实地址option httpclose #请求完即关闭default_backend nginx_servers #默认服务器组acl nginx_acl hdr_dom(host) -i **n.gitegg.com #定义ACL,根据域名判断redirect scheme https code 301 if !{ ssl_fc } nginx_acl #nginx_acl http强制跳转ssluse_backend nginx_servers if nginx_acl #调用ACL
backend nginx_servers #backend 定义Nginx服务器集群balance roundrobin #基于权重的负载均衡的方式option httpchk GET /test.html #心跳检测server nginx1 192.168.1.210:8000 maxconn 10000 cookie server1 weight 1 check inter 1s rise 2 fall 2server nginx2 192.168.1.195:8000 maxconn 10000 cookie server2 weight 1 check inter 1s rise 2 fall 2
backend nginx_servers_ssl #backend 定义Nginx服务器集群 SSLbalance roundrobin #基于权重的负载均衡的方式option httpchk GET /test.html #心跳检测server nginx1s 192.168.1.210:4443 ssl verify none check check-ssl maxconn 10000 cookie server1 weight 1 check inter 1s rise 2 fall 2server nginx2s 192.168.1.195:4443 ssl verify none check check-ssl maxconn 10000 cookie server2 weight 1 check inter 1s rise 2 fall 2
- 配置HAProxy日志,HAProxy的日志记录始终依赖于syslog服务器,因为它不执行任何文件系统访问。使用它的标准方式是通过UDP发送日志到日志服务器,通常将其配置为127.0.0.1。HAProxy日志的八个级别:
emerg alert crit err warning notice info debug。
vi /etc/rsyslog.conf
- 在文件中找到一下位置放开注释
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
- 在#### RULES ####下面新增
local6.info /usr/local/haproxy/logs/info.log
local5.notice /usr/local/haproxy/logs/notice.log
- 选一个磁盘空间大的目录保存日志,重启rsyslog
mkdir /usr/local/haproxy/logs
chmod 777 /usr/local/haproxy/logs
systemctl restart rsyslog
c. 启动并验证HAProxy
- 启动haproxy
systemctl start haproxy
#查看启动状态,如果Active: active (running),表示启动成功
systemctl status haproxy.service
- 设置haproxy开机启动
systemctl enable haproxy.service
三、配置Keepalived实现HAproxy高可用
Keepalived默认监测自身状态是否正常,如果不正常则切换主备,虚拟IP漂移到服务状态正常的服务器上。我们需要保持HAproxy高可用,也就是主HAproxy服务挂掉后,Keepalived也需要切换主备,将虚拟IP切换到HAproxy服务状态正常的服务器上。Keepalived通过调用自定义健康检查脚本实现以上功能。
a、自定义HAproxy健康检查脚本
- 创建脚本存放目录
mkdir /etc/keepalived/scripts
- 新建haproxy_check.sh文件
vi /etc/keepalived/scripts/haproxy_check.sh
- haproxy_check.sh内容如下:
#!/bin/bash
HA=`ps -C haproxy --no-header | wc -l`
if [ $HA -eq 0 ];thensystemctl start haproxysleep 3if [ `ps -C haproxy --no-header | wc -l` -eq 0 ];thensystemctl stop keepalivedexit 1fi
fi
exit 0
- 赋予haproxy_check.sh执行权限
chmod +x /etc/keepalived/scripts/haproxy_check.sh
b、修改Keepalived配置文件,加入HAProxy监测脚本
- vrrp_strict # 严格遵守VRRP协议,如果防火墙开启,此模式下,如果keepalived切换VIP会无法访问,可以注释掉试一下。
! Configuration File for keepalivedglobal_defs {router_id NODE_MASTER #名称唯一vrrp_skip_check_adv_addr # 默认是不跳过检查。检查收到的VRRP通告中的所有地址可能会比较耗时,设置此命令的意思是,如果通告与接收的上一个通告来自相同的master路由器,则不执行检查(跳过检查)。#vrrp_strict # 严格遵守VRRP协议#vrrp_garp_interval 0 #在一个接口发送的两个免费ARP之间的延迟。可以精确到毫秒级。默认是0.#vrrp_gna_interval 0 #在一个网卡上每组na消息之间的延迟时间,默认为0script_user rootenable_script_securitymax_auto_priority 1
}# 添加HAProxy监测脚本
vrrp_script check_haproxy {script "/etc/keepalived/haproxy_check.sh"interval 2 #检查间隔2sweight 2 #权重fall 1 # 2次失败代表服务不可用rise 1 # 1次正确代表服务可用
}vrrp_instance VI_1 {state MASTER # 设置初始状态均主interface enp6s0f1 enp6s0f0 # 设置绑定虚拟IP的网卡virtual_router_id 51 # 集群的virtual_router_id值,主备一致priority 100 # 路由权重advert_int 1 #检查间隔,默认1秒notify_master "/etc/keepalived/keepalived_notify.sh master"notify_backup "/etc/keepalived/keepalived_notify.sh backup"notify_fault "/etc/keepalived/keepalived_notify.sh fault"authentication {auth_type PASS #认证方式auth_pass 11111111 #认证密码(密码只识别前8位)}virtual_ipaddress {内网虚拟ip dev enp6s0f1 # 内网虚拟ip公网虚拟ip dev enp6s0f0 # 公网虚拟ip}track_script { check_haproxy}
}
- 重启keepalived服务
systemctl restart keepalived
通过以上配置之后,可以使用命令停止HAProxy,查看HAProxy服务是否能够重启,根据我们的监测脚本,即使手动停止,HAProxy仍然能够启动,Keepalived并不会发生状态转移。可以修改HAProxy的配置文件使服务无法启动,然后测试Keepalived状态转移情况。
四、HAProxy使用配置总结
- 关于SSL证书是放在Nginx处理还是HAProxy处理,网上有相关压测结果,HAProxy的性能不如Nginx,所以我们使用SSL-Pass-Through透传的方式,将SSL证书放在Nginx处理。
- 可以测试HAProxy使用SSL证书访问Java后台服务。
- HAProxy使用的pem文件,是pem和key的合并文件,即把key的内容复制到pem中。
cd /etc/ssl/certs
cat ***.gitegg.com.pem ***.gitegg.com.key | tee ***.gitegg.com.pem
- 如果开启了防火墙,需要使用防火墙开放端口命令,开发对应的端口。
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=8118/tcp --permanent
firewall-cmd --zone=public --add-port=8000/tcp --permanent
firewall-cmd --reload
# 查看当前系统打开的所有端口
firewall-cmd --zone=public --list-ports
- 通过http://ip:port/haproxy?stats访问,查看HAProxy统计状态。
相关文章:
【微服务部署】八、HAProxy+Keepalived高可用负载均衡集群配置
HAProxy是一种免费、快速、可靠的反向代理,为基于TCP和HTTP的应用程序提供高可用性、负载平衡和代理,它非常适合应用在高并发大流量的网站上。这些年来,HAProxy已成为事实上的标准开源负载均衡,目前HAProxy已与大多数主流Linux发行…...

机器学习(21)---召回率(recall)、精度(precision)和准确率(accuracy)
文章目录 1. 分布不平衡的数据集2. TP、TN 、FP 、FN3. 混淆矩阵4. 各自的计算公式5. 例题应用 1. 分布不平衡的数据集 1. 精度(precision)和召回率(recall)是衡量机器学习模型性能的重要指标,特别是数据集分布不平衡的…...
EsayExcel让不同标题有不同的颜色
今天我在github社区的时候遇见了这个issues,我有看了下百度发现很多人需要这个问题的解决方案,接下来我就写一份这个问题的解决方案。 您的需求: 您好我了解到您的需求,您的需求是为每一个标题设置不同的颜色。 我的解决方案…...

Ant Design of React 创建项目及运行环境
Ant Design of React 学习笔记(1) 创建项目及运行环境 本文使用 create-react-app 创建一个 TypeScript 项目,并引入 antd。 1.命令行cd到对应的目录,这里是npm下回车运行,其他如pnpm yarn参考官网 npx create-reac…...

NoSQL之Redis 主从复制配置详解及哨兵模式
目录 1 Redis 主从复制 1.1 主从复制的作用 1.2 主从复制流程 2 搭建Redis 主从复制 2.1 安装 Redis 2.2 修改 Redis 配置文件(Master节点操作) 2.3 修改 Redis 配置文件(Slave节点操作) 2.4 验证主从效果 3 Redis 哨兵模…...

界面组件DevExpress WinForms v23.2新功能预览 - 增强MVVM相关功能
本文主要描述了DevExpress WinForms即将在几个月之后发布的v23.2中包含的新功能,持续关注我们获取更多最新资讯哦~ DevExpress WinForms有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。同时能完美构建流畅、美观且易于使用的应用…...

vue3前端开发-开发环境安装篇
文章目录 1.安装nvm2.设置安装源为淘宝镜像3.通过nvm安装nodejs4. 安装pnpm4.1 安装pnpm4.2 配置 5.创建vite-vue项目6. vue3demo目录结构7. 扩展插件安装8. 用户代码片段8.1 设置8.2 快速生成代码 1.安装nvm 如果本地已经安装了nodejs,请先卸载。 nvm主要的作用就是…...

MVCC和BufferPool缓存机制
文章目录 1. MVCC多版本并发控制机制2. BufferPool缓存机制 1. MVCC多版本并发控制机制 Mysql可以在可重复读隔离级别下可以保证事务较高的隔离性,这个隔离性是由MVCC机制来保证的,对一行数据的读和写两个操作默认是不会通过加锁互斥来保证隔离性&#…...

论文阅读笔记(Clover: 计算与存储被动分离的分布式键值存储系统)
关于Disaggregating Persistent Memory and Controlling Them Remotely: An Exploration of Passive Disaggregated Key-Value Stores这篇论文的笔记 原文链接 提出背景 传统的分布式存储系统中,每个节点都会包含计算和存储两个部分,一个节点既可以访…...

大模型推理框架概述
从 ChatGPT 面世以来,引领了大模型时代的变革,除了大模型遍地开花以外,承载大模型进行推理的框架也是层出不穷,大有百家争鸣的态势。本文主要针对业界知名度较高的一些大模型推理框架进行相应的概述。 简介 vLLM是一个开源的大模…...

抖音商品详情数据接口,抖音商品详情API接口
抖音商品详情API接口获取数据,接口对接可获取到商品标题,商品价格,商品优惠价,优惠券信息,店铺昵称,sku信息,sku主图,视频链接,详情主图,库存,数量…...

睿趣科技:抖音开网店怎么开通
在当前的数字时代,电子商务已经成为一种主流的商业模式。抖音作为中国最大的短视频平台,也提供了这种能力,让商家能够在平台上开设自己的网店。那么,如何在抖音上开通网店呢?下面是详细的步骤: 注册抖音账号 首先&…...

体育场馆能源消耗监测管理平台,为场馆提供能源服务
随着能源问题的不断重视,体育场馆能源问题也被人们广泛的关注。为了让体育场馆的能源高效利用,体育场馆能源消耗监测管理平台应用而生。 该平台通过采集、监测场内数据,并对数据进行实时分析与反馈,从而帮助管理者了解到场内能源…...

前端本地存储方案-localForage-vue3中使用
前言 前端有多种本地存储方案可供选择,常见的有: Cookie:小型的文本文件,存储少量数据Web Storage :包括:localStorage和sessionStorage,存储数据有上限(5M)左右Indexe…...
vivo年度新“机皇”X100系列要来了!
据供应链消息,vivo X90系列为满足旺盛的市场需求,曾经两次加单生产。 X90系列发布至今已超过11个月,竟然还保持着如此火爆大卖的状态,,令行业关注。而X系列即将发布的下一代产品X100系列,则让中高端消费者们更加期待。…...

滴滴发布十一大数据:延边出行需求上涨280% 西部省份成旅游热点
今年十一假期适逢中秋佳节,在亲友团聚和长假出游的多重期盼下,超级黄金周展现强劲内需,带动多样化的消费趋势,出行热情也随之高涨。滴滴出行数据显示,打车需求相比去年同期上涨80%,高峰时段每分钟呼叫突破1…...

Allegro如何查看器件的管脚号?
Allegro在默认情况下,器件是不显示管脚号的。 Allegro默认情况下,器件不显示管脚编号。 在PCB布局时,有时候我们需要看器件的管脚号,然后才能方便布局。那如何查看器件的管脚号呢? 这里介绍两种查看器件的管脚编号的方法。 方法一: (1)选择菜单Display→Color/Visi…...

苹果电脑用什么清理软件比较好?
很多人都会有这样的误解:mac系统不用清理。实际上mac只是将系统垃圾隐藏了,并且需要通过特定的方式打开。但其实在我们日常工作不用这么麻烦,我们只需用苹果电脑专业的清理软件就好了。今天小编就给大家分享一下mac用什么清理软件好 一、mac用…...

被装超市管理系统-智被装DW-S305系统组成项目背景
项目背景 被装管理是JD后勤管理的一个重要组成部分,现在的被装管理的手工方式已不能适应被装管理现代化的需求,存在诸多问题,还需要依托大量的人力物力,对于一些品规较多、出入库频率较高的仓库,这样的管理方式显得捉…...

使用“Apple 诊断”测试你的 Mac(查看电池是否到达更换标准)
使用“Apple 诊断”测试你的 Mac “Apple 诊断”(以前称为“Apple Hardware Test”)可以检查你的 Mac 是不是存在硬件问题。 如果你认为你的 Mac 可能存在硬件问题,可以使用“Apple 诊断”来帮助确定可能存在故障的硬件组件。“Apple 诊断”…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...