Haproxy负载均衡群集
- HAproxy搭建Web群集
- 一、Web集群调度器
- 1、常见的Web集群调度器
- 2、常用集群调度器的优缺点(LVS ,Nginx,Haproxy)
- 2.1 Nginx
- 2.2 LVS
- 2.3 Haproxy
- 3、LVS、Nginx、HAproxy的区别
- 二、Haproxy
- 1、简介
- 2、Haproxy应用分析
- 3、HAProxy的主要特性
- 4、Haproxy调度算法(负载均衡策略)
- 5、Haproxy 的会话保持
- 6、支持的节点健康检查方式
- 7、支持的代理类型
- 三、HAproxy 服务器部署
- Haproxy实现负载均衡、动静分离
- 1、编译安装Haproxy
- 2、修改Haproxy配置文件,配置前后端,分别处理动态资源和静态资源
- 3、添加haproxy 系统服务
- 4、部署Tomcat并配置动态页面
- 5、部署节点服务器并配置静态页面
- 6、测试动态和静态页面
- 使用 Keepalived 实现 HAProxy 高可用
- 7、安装keepalived并编写配置文件
- 8、效果测试
- 1)动静分离+负载均衡测试
- 2)高可用测试
- 四、日志定义优化
- 1、修改haproxy.cfg文件
- 2、rsyslog配置
- 3、访问测试
HAproxy搭建Web群集
一、Web集群调度器
1、常见的Web集群调度器
-
目前常见的Web集群调度器分为软件和硬件
-
软件通常使用开源的LVS、Haproxy、Nginx
LVS 性能最好,但是搭建相对复杂;Nginx的upstream模块支持群集功能,但是对群集节点健康检查功能不强,高并发性能没有 Haproxy好。
-
硬件一般使用比较多的是F5、Array,也有很多人使用国内的一些产品,如梭子鱼、绿盟等
2、常用集群调度器的优缺点(LVS ,Nginx,Haproxy)
2.1 Nginx
优点
1)工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构。Nginx正则规则比HAProxy更为强大和灵活;
2)Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,LVS对网络稳定性依赖比较大,稳定要求相对更高;
3)Nginx安装和配置、测试比较简单、方便,有清晰的日志用于排查和管理,LVS的配置、测试就要花比较长的时间了;
4)可以承担高负载压力且稳定,一般能支撑几万次的并发量,负载度比LVS相对小些;
5)Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等;
6)Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器;
7)Nginx作为Web正向加速缓存越来越成熟了,速度比传统的Squid服务器更快,很多场景下都将其作反
向代理加速器;
8)Nginx作为静态网页和图片服务器,这方面的性能非常优秀,同时第三方模块也很多。
缺点
1)Nginx仅能支持http、https和Email协议,这样就在适用范围上面小些;
2)对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测;
3)不支持Session的直接保持,需要通过ip_hash和cookie的引导来解决。
2.2 LVS
优点
1)抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生。因此负载均衡软件里的性能最强的,对内存和cpu资源消耗比较低;
2)LVS工作稳定,因为其本身抗负载能力很强,自身有完整的双机热备方案;
3)无流量,LVS只分发请求,而流量并不从它本身出去,这点保证了均衡器IO的性能不会收到大流量的影响;
4)应用范围较广,因为LVS工作在4层,所以它几乎可对所有应用做负载均衡,包括http、数据库等。
缺点
1)软件本身不支持正则表达式处理,不能做动静分离。相对来说,Nginx/HAProxy+Keepalived则具有明显的优势;
2)如果是网站应用比较庞大的话,LVS/DR+Keepalived实施起来就比较复杂了。相对来说,Nginx/HAProxy+Keepalived就简单多了。
2.3 Haproxy
优点
1)Haproxy也是支持虚拟主机的;
2)Haproxy支持8种负载均衡策略;
3)Haproxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导,同时支持通过获取指定的url来检测后端服务器的状态;
4)Haproxy跟LVS类似,本身就只是一款负载均衡软件,单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的;
5)Haproxy支持TCP协议的负载均衡转发。
3、LVS、Nginx、HAproxy的区别
1)LVS基于Linux操作系统内核实现软负载均衡,而HAProxy和Nginx是基于第三方应用实现的软负载均衡;
2)LVS是可实现4层的IP负载均衡技术,无法实现基于目录、URL的转发。而HAProxy和Nginx都可以实现4层和7层技术,HAProxy可提供TCP和HTTP应用的负载均衡综合解决方案;
3)LVS因为工作在ISO模型的第四层,其状态监测功能单一,而HAProxy在状态监测方面功能更丰富、强大,可支持端口、URL、脚本等多种状态检测方式;
4)HAProxy功能强大,单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。但整体性能低于4层模式的LVS负载均衡;
5)Nginx主要用于Web服务器或缓存服务器。Nginx的upstream模块虽然也支持群集功能,但是性能没有LVS和Haproxy好,对群集节点健康检查功能不强,只支持通过端口来检测,不支持通过URL来检测。
二、Haproxy
1、简介
HAProxy是可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,是免费、快速并且可靠的一种解决方案。
HAProxy非常适用于并发大(并发达1w以上)web站点,这些站点通常又需要会话保持或七层处理。HAProxy的运行模式使得它可以很简单安全的整合至当前的架构中,同时可以保护web服务器不被暴露到网络上。
2、Haproxy应用分析
(1)LVS在企业应用中抗负载能力很强,但存在不足
- LVS不支持正则处理,不能实现动静分离
- 对于大型网站,LVS的实施配置复杂,维护成本相对较高
(2)Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理的 软件
- 适用于负载大的Web站点
- 运行在硬件上可支持数以万计的并发连接的连接请求
3、HAProxy的主要特性
●可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美;
●最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s;
●支持多达8种负载均衡算法
●支持Session会话保持,Cookie的引导;
●支持通过获取指定的url来检测后端服务器的状态;
●支持虚机主机功能,从而实现web负载均衡更加灵活;
●支持连接拒绝、全透明代理等独特的功能;
●拥有强大的ACL支持,用于访问控制;
●支持TCP和HTTP协议的负载均衡转发;
●支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源浪费,让多个请求在一个tcp连接中完成
4、Haproxy调度算法(负载均衡策略)
Haproxy常用的调度算法 | 调度依据 |
---|---|
roundrobin | 轮询,表示简单的轮询 |
static-rr | 加权轮询,表示根据权重轮询 |
leastconn | 最小连接,表示最少连接者先处理 |
source | 源地址哈希,表示根据请求源ip |
uri | URI哈希,表示根据请求的URI,做cdn需使用 |
url_param | URL参数哈希,表示根据请求的URL参数’balance url_param’ requires an URL parameter name |
hdr(name) | 请求头哈希 |
rdp-cookie(name) | cookie的key哈希,表示根据cookie(name)来锁定并哈希每一次TCP请求 |
5、Haproxy 的会话保持
1)源地址hash
2)设置cookie
3)会话粘性表stick-table
6、支持的节点健康检查方式
LVS可以配合keepalived实现支持对TCP端口和URL路径方式的健康检查
Nginx默认情况下只支持被动健康检查,主动健康检查模块需要依赖第三方模块
Haproxy支持TCP端口、URL路径、脚本等方式的健康检查
7、支持的代理类型
LVS基于Linux系统内核实现的软负载均衡,只支持4层代理的IP转发,不支持正则匹配
Haproxy和Nginx基于应用程序实现的软负载均衡,都能支持4层和7层代理转发,支持正则匹配
三、HAproxy 服务器部署
Haproxy实现负载均衡、动静分离
HAproxy 7-1(192.168.210.101)
Web1 7-2(192.168.210.102)
Web2 7-4(192.168.210.104)
Tomcat1 7-5(192.168.210.105)
Tomcat2 7-6(192.168.210.106)
1、编译安装Haproxy
7-1
systemctl stop firewalld
setenforce 0
#关闭防火墙
cd /opt
yum install -y pcre-devel zlip-devel openssl-devel systemd-devel
#安装依赖包
tar zxvf haproxy-2.8.3.tar.gz
#解压
cd haproxy-2.8.3/
#切换到haproxy-2.8.3目录
make TARGET=linux31 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
#编译useradd -M -s /sbin/nologin haproxy
#新建管理用户mkdir -p /usr/local/haproxy/conf
#创建conf目录
cd /usr/local/haproxy/conf
#在conf目录下配置haproxy.cfg文件
2、修改Haproxy配置文件,配置前后端,分别处理动态资源和静态资源
释义版
vim haproxy.cfg
global #全局配置,主要用于定义全局参数,属于进程级的配置,通常和操作系统配置有关#将info(及以上)的日志发送到rsyslog的local0接口,将warning(及以上)的日志发送到rsyslog的local1接口log 127.0.0.1 local0 infolog 127.0.0.1 local1 warning maxconn 30000 #最大连接数,HAProxy 要求系统的 ulimit -n 参数大于 maxconn*2+18#chroot /var/lib/haproxy #修改haproxy工作目录至指定目录,一般需将此行注释掉pidfile /var/run/haproxy.pid #指定保存HAProxy进程号的文件user haproxy #以指定的用户名身份运行haproxy进程group haproxy #以指定的组名运行haproxy,以免因权限问题带来风险daemon #让haproxy以守护进程的方式工作于后台#nbproc 1 #指定启动的haproxy进程个数,只能用于守护进程模式的haproxy,默认只启动一个进程。haproxy是单进程、事件驱动模型的软件,单进程下工作效率已经非常好,不建议开启多进程spread-checks 2 #在haproxy后端有着众多服务器的场景中,在精确的时间间隔后统一对众服务器进行健康状况检查可能会带来意外问题;此选项用于将其检查的时间间隔长度上增加或减小一定的随机时长;默认为0,官方建议设置为2到5之间。defaults #配置默认参数,这些参数可以被用到listen,frontend,backend组件 log global #所有前端都默认使用global中的日志配置mode http #模式为http(7层代理http,4层代理tcp)option http-keep-alive #使用keepAlive连接,后端为静态建议使用http-keep-alive,后端为动态应用程序建议使用http-server-closeoption forwardfor #记录客户端IP在X-Forwarded-For头域中,haproxy将在发往后端的请求中加上"X-Forwarded-For"首部字段option httplog #开启httplog,在日志中记录http请求、session信息等。http模式时开启httplog,tcp模式时开启tcplogoption dontlognull #不在日志中记录空连接option redispatch #当某后端down掉使得haproxy无法转发携带cookie的请求到该后端时,将其转发到别的后端上option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接maxconn 20000 #最大连接数,“defaults”中的值不能超过“global”段中的定义retries 3 #定义连接后端服务器的失败重连次数,连接失败次数超过此值后会将对应后端服务器标记为不可用#contimeout 5000 #设置连接超时时间,默认单位是毫秒#clitimeout 50000 #设置客户端超时时间,默认单位是毫秒#srvtimeout 50000 #设置服务器超时时间,默认单位是毫秒timeout http-request 2s #默认http请求超时时间,此为等待客户端发送完整请求的最大时长,用于避免类DoS攻击。haproxy总是要求一次请求或响应全部发送完成后才会处理、转发timeout queue 3s #默认客户端请求在队列中的最大时长timeout connect 1s #默认haproxy和服务端建立连接的最大时长,新版本中替代contimeout,该参数向后兼容timeout client 10s #默认和客户端保持空闲连接的超时时长,在高并发下可稍微短一点,可设置为10秒以尽快释放连接,新版本中替代clitimeouttimeout server 2s #默认和服务端保持空闲连接的超时时长,局域网内建立连接很快,所以尽量设置短一些,特别是高并发时,新版本中替代srvtimeouttimeout http-keep-alive 10s #默认和客户端保持长连接的最大时长。优先级高于timeout http-request 也高于timeout clienttimeout check 2s #和后端服务器成功建立连接后到最终完成检查的最大时长(不包括建立连接的时间,只是读取到检查结果的时长)frontend http-in #定义前端域bind *:80 #设置监听地址和端口,指定为*或0.0.0.0时,将监听当前系统的所有IPv4地址maxconn 18000 #定义此端口上的maxconnacl url_static1 path_beg -i /static /images #定义ACL,当uri以定义的路径开头时,ACL[url_static1]为trueacl url_static2 path_end -i .jpg .jpeg .gif .png .html .htm .txt #定义ACL,当uri以定义的路径结尾时,ACL[url_static2]为trueuse_backend ms1 if url_static1 #当[url_static1]为true时,定向到后端域ms1中use_backend ms2 if url_static2 #当[url_static2]为true时,定向到后端域ms2中default_backend dynamic_group #其他情况时,定向到后端域dynamic_group中backend ms1 #定义后端域ms1balance roundrobin #使用轮询算法option httpchk GET /test.html #表示基于http协议来做健康状况检查,只有返回状态码为2xx或3xx的才认为是健康的,其余所有状态码都认为不健康。不设置该选项时,默认采用tcp做健康检查,只要能建立tcp就表示健康。server ms1.inst1 192.168.80.100:80 maxconn 5000 check inter 2000 rise 2 fall 3server ms1.inst2 192.168.80.100:81 maxconn 5000 check #同上,inter 2000 rise 2 fall 3是默认值,可以省略backend ms2 #定义后端域ms2balance roundrobinoption httpchk GET /test.htmlserver ms2.inst1 192.168.80.101:80 maxconn 5000 checkserver ms2.inst2 192.168.80.101:81 maxconn 5000 checkbackend dynamic_group #定义后端域dynamic_groupbalance roundrobinoption http-server-closecookie HA_STICKY_dy insert indirect nocache server appsrv1 192.168.80.100:8080 cookie appsrv1 maxconn 5000 checkserver appsrv2 192.168.80.101:8080 cookie appsrv2 maxconn 5000 checklisten stats #定义监控页面bind *:1080 #绑定端口1080stats enable #启用统计报告监控stats refresh 30s #每30秒更新监控数据stats uri /stats #访问监控页面的uristats realm HAProxy\ Stats #监控页面的认证提示stats auth admin:admin #监控页面的用户名和密码
无释义版
#配置文件
vim haproxy.cfgglobal log 127.0.0.1 local0 infolog 127.0.0.1 local1 warning maxconn 30000pidfile /var/run/haproxy.piduser haproxygroup haproxydaemonspread-checks 2defaults log globalmode http #七层代理option http-keep-aliveoption forwardforoption httplogoption dontlognulloption redispatchoption abortonclosemaxconn 20000retries 3timeout http-request 2stimeout queue 3stimeout connect 1stimeout client 10stimeout server 2stimeout http-keep-alive 10stimeout check 2s#前端配置,根据用户的访问请求,跳转到对应的后端?
frontend http-in #监听地址 bind *:80acl dynamic path_end -i .jspuse_backend tomcat_server if dynamic#都没匹配到,跳转到默认default_backend nginx_serversbackend tomcat_serverbalance roundrobinoption http-server-closecookie HA_STICKY_dy insert indirect nocacheserver tomcat1 192.168.210.105:8080 cookie tomcat1 inter 2000 rise 2 fall 3server tomcat2 192.168.210.106:8080 cookie tomcat2 checkbackend nginx_serversbalance roundrobin#节点服务器根目录下要有此文件option httpchk GET /test.html server nginx1 192.168.210.102:80 check inter 2000 rise 2 fall 3server nginx2 192.168.210.104:80 check inter 2000 rise 2 fall 3listen statsbind *:1080stats enablestats refresh 30sstats uri /statsstats realm HAProxy\ Statsstats auth admin:admin
3、添加haproxy 系统服务
vim /etc/init.d/haproxy
#!/bin/bash
#chkconfig: 2345 90 30
#description: Haproxy Service Control ScriptPROGDIR=/usr/local/haproxy
PROGNAME=haproxy
DAEMON=$PROGDIR/sbin/$PROGNAME
CONFIG=$PROGDIR/conf/$PROGNAME.cfg
PIDFILE=/var/run/$PROGNAME.pid
DESC="HAProxy daemon"
SCRIPTNAME=/etc/init.d/$PROGNAME# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0start()
{echo -e "Starting $DESC: $PROGNAME\n"$DAEMON -f $CONFIGecho "......"
}stop()
{echo -e "Stopping $DESC: $PROGNAME\n"haproxy_pid="$(cat $PIDFILE)"kill $haproxy_pidecho "......"
}restart()
{echo -e "Restarting $DESC: $PROGNAME\n"$DAEMON -f $CONFIG -p $PIDFILE -sf $(cat $PIDFILE)echo "......"
}case "$1" in
start)start;;stop)stop;;restart)restart;;*)echo "Usage: $SCRIPTNAME {start|stop|restart}"exit 1;;
esacexit 0cd /etc/init.d/
chmod +x haproxy
chkconfig --add /etc/init.d/haproxy
#加入系统服务管理ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/haproxy
service haproxy start 或 /etc/init.d/haproxy start
#启动#补充知识
chkconfig --list haproxy
chkconfig --level 35 haproxy on
#设置35级别
4、部署Tomcat并配置动态页面
7-5 (tomcat1)
cd /opt
tar xf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("动态页面 1,古娜拉黑暗之神,呜呼拉呼,黑魔变身");%>
</body>
</html>
/usr/local/tomcat/bin/startup.sh
#启动
7-6 (tomcat2)
mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>
</head>
<body>
<% out.println("动态页面2,巴啦啦能量,呼尼拉,魔仙变身");%>
</body>
</html>
/usr/local/tomcat/bin/startup.sh
#启动
测试动态页面
192.168.210.105:8080/test/index.jsp
192.168.210.106:8080/test/index.jsp
5、部署节点服务器并配置静态页面
7-2,7-4
cd /etc/yum.repos.d/
mkdir bak
mv *.repo bak
vim nginx.repo[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=trueyum install nginx -y
#yum安装nginx
7-2
cd /usr/share/nginx/html
vim test.html
this is test1 web page!7-4
cd /usr/share/nginx/html
vim test.html
this is test2 web page!sysetmctl start nginx
#启动服务
测试效果
192.168.210.102/test.html
192.168.210.104/test.html
6、测试动态和静态页面
192.168.210.101/test.html
#访问静态页面
20230921_151201
curl 192.168.210.101/test/index.jsp
#访问动态页面,多次访问
#实现负载均衡和动静分离
使用 Keepalived 实现 HAProxy 高可用
在Haproxy搭建web群集的基础上加一台Haproxy服务器
HAproxy-Master 7-1(192.168.210.101)
HAproxy-BACKUP 7-3(192.168.210.103)
7、安装keepalived并编写配置文件
#7-1和7-3都要安装keepalived
yum install keepalived -y
7-3要编译安装haproxy,可参考7-1安装的步骤,这里不再演示
7-1,7-3
vim /etc/keepalived/check_haproxy.sh
#!/bin/bash
#使用killall -0检查haproxy实例是否存在,性能高于ps命令
if ! killall -0 haproxy; thensystemctl stop keepalived
fichmod +x /etc/keepalived/check_haproxy.sh
主服务器
7-1
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {router_id LVS_HA1 #虚拟路由名称
}#HAProxy健康检查配置
vrrp_script chk_haproxy {script "/etc/keepalived/check_haproxy.sh" #指定健康检查脚本interval 2 #脚本运行周期weight 2 #每次检查的加权权重值
}#虚拟路由配置
vrrp_instance VI_1 {state MASTER #本机实例状态,MASTER/BACKUP,备机配置文件中设置BACKUPinterface ens33 #本机网卡名称,使用ifconfig命令查看virtual_router_id 51 #虚拟路由编号,主备机保持一致priority 100 #本机初始权重,备机设置小于主机的值advert_int 1 #争抢虚地址的周期,秒virtual_ipaddress {192.168.210.200 #虚地址IP,主备机保持一致}track_script {chk_haproxy #对应的健康检查配置}
}systemctl start keepalivedip addr
备服务器
7-3
vim /etc/keepalived/keepalived.conf#只需要修改下面三项router_id LVS_HA2 #虚拟路由名称state BACKUP #本机实例状态,MASTER/BACKUP,备机配置文件中设置BACKUPpriority 90 #本机初始权重,备机设置小于主机的值
8、效果测试
1)动静分离+负载均衡测试
访问静态资源
192.168.210.200/test.html
#VIP地址访问
20230921_163418
访问动态资源
curl 192.168.210.200/test/index.jsp
#多次访问
2)高可用测试
#停掉当前MASTER主机的HAProxy实例,进行故障切换测试
service haproxy stop
#观察keepalived的状态
systemctl status keepalived
再次访问静态资源和动态资源,观察功能实现情况
20230921_163418
四、日志定义优化
1、修改haproxy.cfg文件
修改haproxy.cfg,将info及以上级别的日志发送到rsyslog的local0接口,将warning及以上级别的日志发送到rsyslog的local1接口
vim /usr/local/haproxy/haproxy.cfg
global......log 127.0.0.1 local0 infolog 127.0.0.1 local1 warning......defaults......log global......
#注:信息级日志会打印HAProxy 的每一条请求处理,会占用大量的磁盘空间,在生产环境中,将日志级别调整为notice
2、rsyslog配置
#为 rsyslog 添加 haproxy 日志的配置
mkdir /var/log/haproxyvim /etc/rsyslog.d/haproxy.conf
$ModLoad imudp
$UDPServerRun 514
$FileCreateMode 0644 #日志文件的权限
$FileOwner haproxy #日志文件的owner
local0.* /var/log/haproxy/haproxy.log #local0接口对应的日志输出文件
local1.* /var/log/haproxy/haproxy_warn.log #local1接口对应的日志输出文件
#修改 rsyslog 的启动参数
vim /etc/sysconfig/rsyslog
......
SYSLOGD_OPTIONS="-c 2 -r -m 0"
#重启 rsyslog 和 HAProxy
systemctl restart rsyslog
service haproxy restart
3、访问测试
客户端浏览器访问http://192.168.210.101
tail -f /var/log/haproxy/haproxy-info.log
相关文章:
Haproxy负载均衡群集
HAproxy搭建Web群集一、Web集群调度器1、常见的Web集群调度器2、常用集群调度器的优缺点(LVS ,Nginx,Haproxy)2.1 Nginx2.2 LVS2.3 Haproxy 3、LVS、Nginx、HAproxy的区别 二、Haproxy1、简介2、Haproxy应用分析3、HAProxy的主要特性4、Haproxy调度算法(…...
什么是面包屑导航?
面包屑导航(Breadcrumb Navigation)这个概念来自童话故事“汉赛尔和格莱特”,当汉赛尔和格莱特穿过森林时,不小心迷路了,但是他们发现沿途走过的地方都撒下了面包屑,让这些面包屑来帮助他们找到回家的路。 在网站应用中࿰…...
VS2019创建GIt仓库时剔除文件或目录
假设本地有解决方案“SomeSolution” 1、首先”团队资源管理器“-“创建Git存储库”,选择“仅限本地”、“创建” VS会在解决方案目录下自动生成.gitattributes、.gitignore 2、编辑gitignore,直接拖到VS里或者用记事本打开。添加要剔除的文件或文件夹…...
计算机等级考试—信息安全三级真题六
目录 一、单选题 二、填空题 三、综合题 一、单选题...
vue循环滚动字幕
在Vue.js中创建一个循环滚动字幕的效果通常需要使用一些CSS和JavaScript来实现。以下是一个简单的示例,展示如何使用Vue.js创建一个循环滚动字幕的效果: 首先,在HTML中创建一个Vue实例,并添加一个包含滚动字幕的容器元素ÿ…...
扩展pytest接口自动化框架-MS数据解析功能
【软件测试行业现状】2023年了你还敢学软件测试?未来已寄..测试人该何去何从?【自动化测试、测试开发、性能测试】 开篇 MeterSphere的数据源通过html页面上传后,需要将请求方式进行拆分。 get接口的参数,常以params的方式进行传…...
docker容器安装MongoDB数据库
一:MongoDB数据库 1.1 简介 MongoDB是一个开源、高性能、无模式的文档型数据库,当初的设计就是用于简化开发和方便扩展,是NoSQL数据库产品中的一种。是最 像关系型数据库(MySQL)的非关系型数据库。 它支持的数据结构…...
Python机器学习实战-特征重要性分析方法(3):迭代删除法:Leave-one-out(附源码和实现效果)
实现功能 迭代地每次删除一个特征并评估准确性 实现代码 from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score impo…...
Go的error接口
从本书的开始,我们就已经创建和使用过神秘的预定义error类型,而且没有解释它究竟是什么。实际上它就是interface类型,这个类型有一个返回错误信息的单一方法: type error interface { Error() string } 创建一个error最简单的方…...
RabbitMQ 集群 - 普通集群、镜像集群、仲裁队列
目录 一、RabbitMQ 集群 1.1、前言 1.2、普通集群 1.3、镜像集群 1.4、仲裁队列 一、RabbitMQ 集群 1.1、前言 前面我们已经解决了消息可靠性问题,以及延迟消息问题 和 消息堆积问题. 这最后一章,我们就来解决以下 mq 的可用性 和 并发能力. 1.2、…...
高项新版教程(第四版)解读+学习指导
第四版主要内容 技术部分 信息化教程、软件工程、网络技术是原来的,学习原来的录播。 新基建、工业互联网、车联网、农业现代化、数字化转型、元宇宙等是新增,以直播讲。 管理部分 变化不是太大 。 整合管理、人力变为资源管理、风险管理新增内容。 …...
【Debian】Debian10.0.0安装选项问答
debian的LXQT是什么? LXQT是一套轻量级的桌面环境,主要基于Qt框架开发。 LXQT在debian中的具体特点包括: - 使用Openbox作为窗口管理器,提供平铺式窗口布局。 - 文件管理器为PCManFM-Qt。 - 设置中心集成 debconf 配置界面。 - 支持GTK和Qt应用程序。 - 资源消耗较低…...
【基于React-Native做位置信息获取,并展示出来】
基于React-Native做位置信息获取 在这个里面最重要的是两个部分,一个是位置定位的权限获取,一个是实时位置的监听,在安卓项目中,在 android/app/src/main/AndroidManifest.xml该文件下,在< manifest > 标签内写…...
ansible安装、点对点Ad-Hoc、模块、剧本Playbook
DevOps: 官网:https://docs.ansible.com 自动化运维工具对比 C/S 架构:客户端/服务端 Puppet:基于 Ruby 开发,采用 C/S 架构,扩展性强,基于 SSL,远程命令执行相对较弱 SaltStack:基于 Python 开发,采用 C/S 架构,YAML使得配置脚本更简单.需要配置客户端及服务器…...
Ceph入门到精通-ceph pool 删除导致 misplaced 的原因
misplaced 的原因 Ceph中的misplaced对象是指将对象(或对象的副本)存储在错误的位置上,这可能会导致性能下降或数据不一致的问题。在删除Ceph池时,可能会导致misplaced的原因有以下几个: 删除过程中的操作失误&#x…...
计算机组成原理课程设计
操作控制和顺序控制 操作控制就是由各种微命令来构成的顺序控制就是由P测试和后续微地址构成的 这就构成了整个微指令的三个部分 访存指令就是实现对主存中的数据进行访问或存储 一、 操作控制字段是由各种微命令来构成的,这些微命令怎么来设计? 一个萝卜…...
《从菜鸟到大师之路 MySQL 篇》
《从菜鸟到大师之路 MySQL 篇》 数据库是什么 数据库管理系统,简称为DBMS(Database Management System),是用来存储数据的管理系统。 DBMS 的重要性 无法多人共享数据 无法提供操作大量数据所需的格式 实现读取自动化需要编程…...
使用qt完善对话框功能
1、 完善登录框 点击登录按钮后,判断账号(admin)和密码(123456)是否一致,如果匹配失败,则弹出错误对话框,文本内容“账号密码不匹配,是否重新登录”,给定两…...
Day 03 python学习笔记
位运算 基于二进制的运算(计算机的底层基于位运算) 计算机最小单位:bit (比特/位/二进制) 1byte(字节) 8bit ( 0000 0000) &:与 (全真为真,一假则…...
优化类问题概述
数学建模系列文章: 以下是个人在准备数模国赛时候的一些模型算法和代码整理,有空会不断更新内容: 评价模型(一)层次分析法(AHP),熵权法,TOPSIS分析 及其对应 PYTHON 实现代码和例题…...
第一个 Go 程序“hello,world“ 与 main 函数
第一个 Go 程序"hello,world" 与 main 函数 文章目录 第一个 Go 程序"hello,world" 与 main 函数一.创建“hello,world”示例程序二. “hello,world” 程序结构拆解三、main 函数四、Go 语言中程序是怎么编译…...
MySQL缓冲池Buffer Pool
前言 在应用系统中,为加速数据访问,会把高频的数据放在「缓存」(Redis、MongoDB)里,减轻数据库的压力。在操作系统中,为了减少磁盘IO,同时为了快速响应,引入了「缓冲池」(buffer pool)机制。 MySQL…...
springboot实现发送邮箱验证码
准备工作 在邮箱官网开放SMTP授权,获取相应密钥,才可以进行发送邮件 这里以网易163邮箱为例,登录邮箱后,依次点击“设置-POP3/SMTP/IMAP” ,然后开启SMTP服务。这时候会提示一个授权码,例如:H…...
ESP8266使用记录(三)
通过udp把mpu6050数据发送到PC端 /********************************************************************** 项目名称/Project : 零基础入门学用物联网 程序名称/Program name : ESP8266WiFiUdp_12 团队/Team : 太极创客团队 / Taichi-Maker (w…...
基于微信小程序的在线视频课程学习平台设计与实现(源码+lw+部署文档+讲解等)
文章目录 前言用户微信端的主要功能有:管理员的主要功能有:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉…...
CloudCompare 二次开发(15)——点云添加高斯噪声
目录 一、概述二、代码集成三、结果展示一、概述 不依赖任何第三方点云相关库,使用CloudCompare编程实现点云添加高斯噪声。添加高斯噪声的算法原理见:PCL 点云添加高斯噪声并保存。 二、代码集成 1、mainwindow.h文件public中添加: void doActionAddGassNoise(); //…...
一波免费、好用的API接口分享
全国快递物流地图轨迹查询:【H5物流轨迹、单号识别】通过物流单号和收寄件地址,自动评估物流时效,并在地图中展示包裹运输轨迹。包括顺丰、圆通、申通等主流快递公司。自动识别快递公司及单号,实时查询,稳定高效&#…...
Android App ~ LiveData
LiveData 两种更新数据方式 setValue(T value)postValue(T value) setValue()只能在主线程中调用,postValue()可以在任何线程中调用。 MutableLiveData 1.首先LiveData其实与数据实体类(POJO类)是一样的东西,它负责暂存数据. 2.其次LiveData其实也是一个观察者…...
全球第4大操作系统(鸿蒙)的软件后缀.hap
system exe 2022-12-01 04:38:38 首页 > 操作系统 145|0条评论 鸿蒙OS兼容已有安卓程序:这事不稀奇。 其实一个系统兼容另外系统的可执行程序并非新鲜事,比如linux下的wine和crossover可以兼容许多win系统的.exe程序。 作为回应,Wind…...
算法练习第六十四天
LCR 184. 设计自助结算系统 - 力扣(LeetCode) 总结:利用一个双端维护队列一个往后递减的队列,对头是最大值,每次进入一个新值时就一直和队尾元素比较将比新的值小的数排出,这样能保证留在队列中的数都是会…...
汽车网站建设页面/梅州seo
在交换机中使用一个函数就可以了:将调用该函数,并返回一个值 – 这是一个将用于案例的值.它和写作完全一样:$my_var function_foo($bar,$bar2);switch ($my_var) {// ...}即使我更喜欢使用变量,所以代码更容易阅读.在案例中使用变量是您经常看不到的;但…...
wap浏览器免费下载/百度seo关键词排名 s
标题中的substring方法指的是字符串的substring(int beginIndex, int endIndex)方法,这个方法在jdk6,7是有差异的。 substring有什么用? substring返回的是字符串索引位置beginIndex开始,endIndex-1结束的字符串。 来看这个例子࿱…...
政务网站建设经验做法/百度网盘在线观看资源
大意: 给定k个字符串, 长度均为n, 求是否存在一个串S, 使得k个字符串都可以由S恰好交换两个字符得到. 暴力枚举交换的两个字符的位置, 计算出交换后与其他串不同字符的个数, 若为1或>2显然不成立, 若为0必须要求存在两个相同的字符. #include <iostream> #include <…...
wordpress哪个主题适合做网址导航/惠州抖音seo
引言 上一小节中,我们介绍了过拟合的概念,在机器学习中最大的危险就是过拟合,为了解决过拟合问题,通常有两种办法,第一是减少样本的特征(即维度),第二就是我们这里要说的“正则化”&…...
网站怎么添加二级域名/东莞seo推广机构帖子
此篇博客内容均根据Unity官方文档内容翻译并总结而来。官方文档的目录为: UnityManual ---->Bset Practice Guide ----> Understanding Optimization in Unity ----> General Optimization 和 Special Optimization 用户可以自行对文档中的这部分内容进…...
武汉网站建设/如何在百度上发布自己的文章
功能描述: 系统UI,给人感觉非常好,体积小巧,速度快 该源码是适用用于应用系统后台模块的管理(可扩展至支持集中化的权限管理平台), 0.支持N级菜单导航,菜单显示方式支持目前支持2种模…...