七层负载均衡HAproxy生产环境LVS+Keepalived+HAproxy(三)

2023-05-16

LB-Haproxy/Nginx

💯 解析:七层负载均衡器,为与七层模型上的应用层,通过URL地址(应用层)进行负载均衡。

优点:详细地址,数据精准定位

缺点:地址长、范围广

一、HAproxy

在这里插入图片描述

原理解析

别名:七层负载均衡、应用程序负载、URL负载、动静分离技术 用80端口
简介: 免费、快速可靠、高性能的负载均衡软件
亲缘性:

  • 后方有三台Web服务器,用户进行数据请求,当用户访问Web1时(一些特定的敏感话题会进行认证)
  • 当我们的用户再次访问时,请求分发到我们的Web2上,又要进行认证。
  • 所有我们通过用户访问得特性让用户访问到固定的服务器(IP port seesion cookie…),解决了身份再次验证导致的用户体验感。

seesion(会话窗口 服务器): 用户进行身份认证,保存信息 ==> 用户访问淘宝,加购物车,第一次要进行身份认证,后面无需认证
cookie(缓存 浏览器): 保存用户身份认证信息,通常由浏览器存储,windows端

TCP连接(秒表)

  • User <==> Web

    • 当User向Web请求数据时,会有一个计时器,当在一定的时间没响应,直接返还给用户,数据未找到。

    • 当三次握手完成之后,向Web请求数据,服务器没反应,开启秒表,将数据进行重传递

  • User <=> HA <=> Web

    • 多了中间人(HAproxy)作为代理,用户访问HA,HA在分发给Web,HA的两边都是互相无感知的

    • 会出现问题,当User在请求数据后直接关机,请求到达HA,HA不将数据发送给Web,
      如果Web服务出现问题,HA将User的请求分发给其他的Web(这时,秒表计时器有很大的体现)。

1、环境准备

1、HAproxy:192.168.178.60
2、Web1:192.168.178.7
3、Web2:192.168.178.16

# systemctl --now disable firewalld
# sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
# setenforce 0

2、Web

1、安装httpd:
# yum -y install httpd
2、Web1 添加内容:
# echo "Web1" > /var/www/html/index.html
3、Web2 添加内容
# echo "Web2" > /var/www/html/index.html

3、HAproxy

3.1、安装软件

# yum -y install epel-release haproxy

3.2、编写配置文件

# cd /etc/haproxy/
# cp -r haproxy.cfg haproxy.cfg.bak
# vim haproxy.cfg
global				#全局配置
   log 127.0.0.1 local3 info	#日志配置
   maxconn 4096					#最大连接数
   uid   99						#用户
   gid   99						#用户组
   daemon						#进程守护
   nbproc   1					#HAproxy的进程数,该值与服务器的CPU核心数一致,比如2颗8核心的,这是设置值为16
   pidfile  /run/haproxy.pid	#进程ID存储位置
#----------------------------------------------------------------
defaults			#系统默认配置
   log   global		#日志使用上方的全局配置
   mode  http		#模式为7层LB
   maxconn  2048	#最大连接数
   retries  3		#健康检测,3次连接失败认为服务器不可用
   option   redispatch		# 服务器不可用,重定向到其他服务器,进行服务器之间的故障转移
   timeout connect 50000	# HAproxy 将 用户请求 转至 后端的超时时长
   timeout client 50000		# HAproxy作为客户端,与后端空闲的交互超时时长
   timeout server 50000		# HAproxy作为服务端,与用户之间空闲交互的超时时长

   option   abortonclose	# 当服务端负载较高时,自动结束当前队列比较久的链接
   stats uri /admin?stats	# 监控页面的URL IP:/admin?stats
   stats auth Private land	# 登入监控页面提示的内容
   stats auth admin:admin	# 登入页面使用的 用户与密码  用户:密码
   stats hide-version		# 隐藏监控页面的 HAproxy版本号,
#----------------------------------------------------------------
frontend httpd-in			# 前端配置,面向与用户			
      bind 0.0.0.0:80		# HAproxy 的监听端口,用户通过 IP+端口访问
      mode  http			# 模式为 七层的 http请求
      log   global			# 使用上方的全局Log
      option   httplog		# 日志格式变得更丰富,获取更详细的信息
      option   httpclose	# 每次请求后,关闭 http 通道

   acl html url_reg -i \.html$		# (html自定义名,方便下方的调用) 如果用户访问以 .html 结尾的页面
   use_backend html-server if html	# 如果命中上方的 html 定义的策略,分发到 html-server 后端
   default_backend html-server		# 默认用户请求的 后端
#-----------------------------------------------------------------
backend html-server					# 定义 后端的服务器
      mode http						# 模式为 七层 http请求
      balance roundrobin			# 负载算法 为 轮询
      option httpchk GET /index.html			# 允许 HAproxy 进行 HTTP-GET Web服务的 /index.html,进行健康检查
      cookie SERVERID insert indirect nocache	# 增加亲缘性,Web服务返回给用户带有Cookie的数据,用户可以访问到相同的服务器
      server Web1 192.168.178.7:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
      server Web2 192.168.178.16:80 weight 1 cookie 4 check inter 2000 rise 1 fall 3
  #  server1 服务器ID 真实Web-IP端口 权重 cookie值 进行检测 检测5次,其中连续有2次成功,代表该Web服务器健康,反之Web服务器故障

3.3、启动HAproxy

1、启动服务:
# systemctl start haproxy
2、查看是否有报错信息:
# vim /var/log/messages
3、查看服务启动成功:
# ss -anpt | grep 80

3.4、进行测试

# curl 192.168.178.60
web2
# curl 192.168.178.60
web1

3.5、登入 Web 监控页面

在这里插入图片描述在这里插入图片描述

二、实战一 动静分离技术+Keepalived

在这里插入图片描述

动静分离技术
简介:

  • 用户请求数据时,访问的是图片,到达后方的图片服务器
  • 访问的是视频,到达后方的视频服务器
  • 访问的文本服务器,到达文字服务器

1、环境准备

1、HAproxy1-keepalived1:192.168.178.60
2、HAproxy2-keepalived2:192.168.178.61
3、keepalived-VIP:192.168.178.200
2、Web1-html静:192.168.178.7
3、Web2-php动:192.168.178.16

# systemctl --now disable firewalld
# sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
# setenforce 0

2、Web

2.1、Web1-html静

# yum -y install httpd
# echo 'Web1-html' > /var/www/html/index.html
# systemctl --now enable httpd
# curl  localhost
Web1-html

2.2、Web2-php动

a、安装软件
# yum -y install epel-release && yum -y install php php-fpm nginx
b、配置nginx 连接PHP
# vim /etc/nginx/nginx.conf
#在Server 中进行添加
server {
.........
location / {
                html    index.php index.html index.htm;
        }
         location ~ \.php$ {       #连接PHP服务器
            root /usr/share/nginx/html;   #php存放文件的目录
            fastcgi_pass 127.0.0.1:9000;   #PHP服务器的地址:端口 !!!!!!
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
       }
.........
	}

因为Nginx 与 PHP 部署在一台机器上,不许要修改PHP 配置,直接启动
c、 启动服务
1、重启nginx 与 启动 php-fpm:
# systemctl restart nginx
# systemctl start php-fpm

2、查看服务是否启动成功:
# ss -anpt | egrep '(80|9000)'
d、编写index.php,访问
# echo '<?php phpinfo() ?>' > /usr/share/nginx/html/index.php

在这里插入图片描述


2、HAproxy

两台主机同时进行

2.1、安装软件

# yum -y install epel-release && yum -y install haproxy keepalived

2.2、编写haproxy配置

# cd /etc/haproxy/
# cp -r haproxy.cfg haproxy.cfg.bak
# vim haproxy.cfg
global
   log 127.0.0.1 local3 info
   maxconn 4096
   uid   99
   gid   99
   daemon
   nbproc   1
   pidfile  /run/haproxy.pid
#--------------------------------------

defaults
   log   global
   mode  http
   maxconn  2048
   retries  3
   option   redispatch
   timeout connect 50000
   timeout client 50000
   timeout server 50000

   option   abortonclose
   stats uri /admin?stats
   stats auth Private land
   stats auth admin:admin
   stats hide-version
#--------------------------------------

frontend httpd-in
      bind 0.0.0.0:80			# 监听端口
      mode  http
      log   global
      option   httplog
      option   httpclose

   acl php url_reg -i \.php$		#匹配 .php 结尾
   acl html url_reg -i \.html$		#匹配 .html 结尾

   use_backend php-server if php	#上方匹配成功后对应的后端
   use_backend html-server if html

   default_backend php-server
#--------------------------------------

backend php-server			#匹配 .php 对应的后端服务器,可以有多个,自定义
      mode http
      balance roundrobin
      option httpchk GET /index.php
      cookie SERVERID insert indirect nocache
      server Php1 192.168.178.16:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5

backend html-server			#匹配 .html 对应的后端服务器
      mode http
      balance roundrobin
      option httpchk GET /index.html
      cookie SERVERID insert indirect nocache
      server Web1 192.168.178.7:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5

2.3、启动服务

1、启动服务:
# systemctl start haproxy
2、查看日志:
# vim /var/log/messages 
3、查看服务启动:
# ss -anpt | grep 80

2.4、测试效果

1、访问 HAproxy1:
# curl 192.168.178.60/index.html
Web1-html

2、访问 HAproxy2:
# curl 192.168.178.61/index.html
Web1-html

在这里插入图片描述
在这里插入图片描述

3、Keepalived

3.1、Keepalived1

a、修改配置
# cd /etc/keepalived/
# cp -r keepalived.conf keepalived.conf.bak
# vim keepalived.conf
! Configuration File for keepalived
global_defs {                          #全局配置
 router_id HA1                        #设备在组中的标识,设置不一样即可
 }

vrrp_script chk_haproxy {                #健康检查
 script "/etc/keepalived/ck_HA.sh"     #检查脚本
 interval 6                            #检查频率.秒(每隔6秒去执行脚本)
 weight -5                             #priority减5
 fall 3                                #失败三次(尝试三次,每隔两秒去执行脚本,如果脚本失败,就记下来,等检查三次后,将优先级减5)
 }

vrrp_instance VI_1 {               #VI_1(组号)。实例名两台路由器相同。
    state MASTER                        #主或者从状态
    interface ens33                     #监控网卡(心跳网卡)
    mcast_src_ip 192.168.178.60         #心跳源IP
    virtual_router_id 55                #虚拟路由编号(组编号),主备要一致。
    priority 100                        #优先级 (主要应用与1主多从)
    advert_int 1                        #心跳间隔S (对方主机运行状态的监控)/可以为毫秒级监控

    authentication {                    #秘钥认证(1-8位)
        auth_type PASS                  #密码认证类型
        auth_pass 123456                #密码
    }

    virtual_ipaddress {                 #VIP
    192.168.178.200/24
        }

  track_script {                       #引用脚本,监控脚本
       chk_haproxy
    }

}
b、编写监控脚本

🔺解析:因为是与HAproxy部署在同一台机器上,所以对HAproxy的高可用进行监控,HAproxy会对后方的Web服务进行监控。

# vim ck_hA.sh
#!/bin/bash
         #检查HAproxy进程是否存在
       counter=$(ps -C haproxy --no-heading|wc -l)
       if [ "${counter}" = "0" ]; then
             systemctl restart haproxy
             sleep 5                  #尝试启动一次HAproxy,停止5秒后再次检测
          counter=$(ps -C haproxy --no-heading|wc -l)
          if [ "${counter}" = "0" ]; then
                  systemctl stop keepalived    #如果启动没成功,就杀掉keepalive触发主备切换
          fi
       fi
       
# chmod +x ck_HA.sh
c、拷贝文件至 Keepalived2
# scp -r keepalived.conf 192.168.178.61:/etc/keepalived/
# scp -r ck_HA.sh 192.168.178.61:/etc/keepalived/

3.2、Keepalived2

1、修改配置:
# vim keepalived.conf
#找到进行修改
router_id  hA2
state  BACKUP
mcast_src_ip  192.168.178.61
priority  99

2、启动 keepalived:
#systemctl start keepalived

3.3、所有Keepalived启动

# systemctl --now enable  keepalived
# ip a

3.4、访问测试

# curl 192.168.178.200/index.html
Web1-html

在这里插入图片描述

3.5、故障模拟

解析:将HAproxy1的配置文件移除,致使HAproxy起不来,实现VIP的转移

1、移动 HAproxy1 的配置文件:
# mv  /etc/haproxy/haproxy.cfg  /opt/
# systemctl stop haproxy

2、查看 HAproxy2 上的IP,IP进行转移:
# ip a

3、再次访问服务,访问成功:
# curl 192.168.178.200/index.html
Web1-html
# curl -I 192.168.178.200/index.php
HTTP/1.1 200 OK
Server: nginx/1.20.1
Date: Sat, 20 Nov 2021 04:49:01 GMT
Content-Type: text/html
Connection: close
X-Powered-By: PHP/5.4.16
Set-Cookie: SERVERID=3; path=/		# cookie ID
Cache-control: private

三、实战二 生产环境

在这里插入图片描述

解析:这也是企业中常用的一种架构,在生产环境中,haproxy与LVS等负载均衡设备往往不是单种存在的,主要是每一个设备都有自身的优点与缺点。把四层与七层组合起来使用,进行互补,既有四层的吞吐量,又有七层的精准定位与动静分离等,这是再好不过了。

1、环境准备

LVS-VIP:192.168.178.100
LVS1-keepalived:192.168.178.60
LVS2-keepalived:192.168.178.61

HAproxy1:192.168.178.62
HAproxy2:192.168.178.63

Web1:192.168.178.7
Web2:192.168.178.16

1、关闭防火墙:
# systemctl --now disable firewalld
# sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
# setenforce 0

2、修改主机名:
# hostnamectl set-hostname lvs1/lvs2/ha1/ha2/web1/web2

3、时间同步:
# yum -y install ntpdate
# ntpdate ntp1.aliyun.com

4、计划任务,时间同步
# systemctl --now enable crond
# crontab -e
*/5 * * * *  /usr/sbin/ntpdate  ntp1.aliyun.com

2、Web 配置

2.1、Web1-html静

# yum -y install httpd
# echo 'Web1-html' > /var/www/html/index.html
# systemctl --now enable httpd
# curl  localhost
Web1-html

2.2、Web2-php动

a、安装软件
# yum -y install epel-release && yum -y install php php-fpm nginx
b、配置nginx 连接PHP
# vim /etc/nginx/nginx.conf
#在Server 中进行添加
server {
.........
location / {
                html    index.php index.html index.htm;
        }
         location ~ \.php$ {       #连接PHP服务器
            root /usr/share/nginx/html;   #php存放文件的目录
            fastcgi_pass 127.0.0.1:9000;   #PHP服务器的地址:端口 !!!!!!
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
       }
.........
	}

因为Nginx 与 PHP 部署在一台机器上,不许要修改PHP 配置,直接启动
c、 启动服务
1、重启nginx 与 启动 php-fpm:
# systemctl restart nginx
# systemctl start php-fpm

2、查看服务是否启动成功:
# ss -anpt | egrep '(80|9000)'
d、编写index.php,访问
# echo '<?php phpinfo() ?>' > /usr/share/nginx/html/index.php

在这里插入图片描述

3、HAproxy 配置

两台主机同时进行

3.1、安装软件

# yum -y install epel-release && yum -y install haproxy keepalived

3.2、编写haproxy配置

# cd /etc/haproxy/
# cp -r haproxy.cfg haproxy.cfg.bak
# vim haproxy.cfg
global
   log 127.0.0.1 local3 info
   maxconn 4096
   uid   99
   gid   99
   daemon
   nbproc   1
   pidfile  /run/haproxy.pid
#--------------------------------------

defaults
   log   global
   mode  http
   maxconn  2048
   retries  3
   option   redispatch
   timeout connect 50000
   timeout client 50000
   timeout server 50000

   option   abortonclose
   stats uri /admin?stats
   stats auth Private land
   stats auth admin:admin
   stats hide-version
#--------------------------------------

frontend httpd-in
      bind 0.0.0.0:80			# 监听端口
      mode  http
      log   global
      option   httplog
      option   httpclose

   acl php url_reg -i \.php$		#匹配 .php 结尾
   acl html url_reg -i \.html$		#匹配 .html 结尾

   use_backend php-server if php	#上方匹配成功后对应的后端
   use_backend html-server if html

   default_backend php-server
#--------------------------------------

backend php-server			#匹配 .php 对应的后端服务器,可以有多个,自定义
      mode http
      balance roundrobin
      option httpchk GET /index.php
      cookie SERVERID insert indirect nocache
      server Php1 192.168.178.16:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5

backend html-server			#匹配 .html 对应的后端服务器
      mode http
      balance roundrobin
      option httpchk GET /index.html
      cookie SERVERID insert indirect nocache
      server Web1 192.168.178.7:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5

3.3、启动服务

1、启动服务:
# systemctl --now enable haproxy
2、查看日志:
# vim /var/log/messages 
3、查看服务启动:
# ss -anpt | grep 80

3.4、测试效果

1、访问 HAproxy1:
# curl 192.168.178.62/index.html
Web1-html

2、访问 HAproxy2:
# curl 192.168.178.63/index.html
Web1-html

在这里插入图片描述在这里插入图片描述

4、LVS 配置

4.1、安装软件

LVS1:
# yum -y install ipvsadm keepalived
LVS2:
# yum -y install keepalived

4.2、LVS1配置

a、修改配置文件
# cd /etc/keepalived/
# cp -r keepalived.conf keepalived.conf.bak
# vim keepalived.conf
! Configuration File for keepalived
global_defs {
        router_id LVS1    #名称,自定义
        }

vrrp_instance VI_1 {                            
        state MASTER                            #另外一台机器是BACKUP
        interface ens33                         #心跳网卡
        virtual_router_id 51                    #虚拟路由编号,主备要一致
        priority 150                            #优先级
        advert_int 1                            #检查间隔,单位秒
        authentication {
                auth_type PASS
                auth_pass 1111
                }
        virtual_ipaddress {
                192.168.178.100/24 dev ens33    #VIP和工作接口
                }
        }

virtual_server 192.168.178.100 80 {              #LVS 配置,VIP
        delay_loop 3                            #服务论询的时间间隔,#每隔3秒检查一次real_server状态
        lb_algo rr                              #LVS 调度算法
        lb_kind DR                              #LVS 集群模式
        protocol TCP
        real_server 192.168.178.62 80 {          #HAproxy1服务器
                weight 1
                TCP_CHECK {
                        connect_timeout 3       #健康检查方式,连接超时时间 (每隔三秒去连接Web,如果超时,就认为Web服务down机)
                        }
                }
        real_server 192.168.178.63 80 {       	#HAproxy2服务器
                weight 1
                TCP_CHECK {
                        connect_timeout 3
                        }
                }
}
b、启动服务,重启
# scp -r keepalived.conf 192.168.178.61:/etc/keepalived/
# systemctl --now enable keepalived
# reboot

4.3、LVS2配置

a、修改配置
# vim /etc/keepalived/keepalived.conf
#找到进行修改
router_id  LVS2
state  BACKUP
priority  145
b、自启动服务与重启
# systemctl --now enable keepalived
# reboot

5、再次配置HAproxy lo:0虚拟接口

两台机器同时操作

5.1、配置虚拟IP -> lo:0

# cd /etc/sysconfig/network-scripts/
# cp -r ifcfg-lo ifcfg-lo:0
# vim ifcfg-lo:0
DEVICE=lo:0			#接口名
IPADDR=192.168.178.100		#LVS的虚拟IP
NETMASK=255.255.255.255		#地址唯一性
ONBOOT=yes		#自启
#其他的注释

5.2、配置路由

# vim /etc/rc.local
#添加
# 开机生效   确保如果请求的目标IP是$VIP,那么让出去的数据包的源地址也显示为$VIP
/sbin/route add -host 192.168.178.100 dev lo:0

5.3、配置ARP

1、忽略arp请求,可以回复
# vim /etc/sysctl.conf  
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

5.4、重启生效

# reboot

6、故障测试

6.1、访问服务

# curl 192.168.178.100/index.html
Web1-html
# curl -I 192.168.178.100/index.php
HTTP/1.1 200 OK
Server: nginx/1.20.1
Date: Sat, 20 Nov 2021 11:00:33 GMT
Content-Type: text/html
Connection: close
X-Powered-By: PHP/5.4.16
Set-Cookie: SERVERID=3; path=/
Cache-control: private

6.2、停止LVS1的keepalived,再次访问服务

# systemctl stop keepalived
# curl 192.168.178.100/index.html
Web1-html
# curl -I 192.168.178.100/index.php
HTTP/1.1 200 OK
Server: nginx/1.20.1
Date: Sat, 20 Nov 2021 11:02:57 GMT
Content-Type: text/html
Connection: close
X-Powered-By: PHP/5.4.16
Set-Cookie: SERVERID=3; path=/
Cache-control: private

6.3、停止 HAproxy1服务,再次访问服务

# systemctl stop haproxy
# curl 192.168.178.100/index.html
Web1-html
# curl -I 192.168.178.100/index.php
HTTP/1.1 200 OK
Server: nginx/1.20.1
Date: Sat, 20 Nov 2021 11:04:46 GMT
Content-Type: text/html
Connection: close
X-Powered-By: PHP/5.4.16
Set-Cookie: SERVERID=3; path=/
Cache-control: private
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

七层负载均衡HAproxy生产环境LVS+Keepalived+HAproxy(三) 的相关文章

  • Jmeter性能测试(7)--定时器

    jmeter xff08 七 xff09 定时器 jmeter提供了很多元件 xff0c 帮助我们更好的完成各种场景的性能测试 xff0c 其中 xff0c 定时器 xff08 timer xff09 是很重要的一个元件 xff0c 最新的
  • oninput完美限制输入正整数

    oninput完美限制输入非0正整数 注意vue中需要 64 input进行绑定 方法一 64 input 61 34 if this value length 61 61 1 this value 61 this value replac
  • 行内存放数据属性data-id

    data 61 39 data 39 为行内存放数据的属性 xff0c 可通过事件源中的currentTarget dataset获取data 存放的值 另外css可通过 data 放置的标签名 data 61 39 data 39 设置
  • js常用封装方法

    span class token comment 生成随机数 64 length 指定长度 return 随机数 span span class token keyword export span function span class t
  • 计数器组件

    涉及事件 64 longpress 长按时触发 xff0c 64 touchend 手指从屏幕上离开时触发 1 计数器为文本标签的子组件 lt template gt lt view class 61 34 counter box 34 g
  • rich-text 富文本

    rich text 富文本 普通的text文件不能显示格式 xff0c 富文本格式rtf文件可以显示出很多格式信息 xff0c 比如可以在一个文本包含不同颜色 不同字号的文本 官方 lt rich text nodes 61 34 cont
  • uni-app实现全局组件注册

    uni app 全局注册组件三种方式 1 传统vue组件需要创建 引用 组成三个步骤 2 在page json中对应page设置 34 globalStyle 34 34 autoscan 34 true 和pages同级 3 HBuild
  • Vue--混入(Mixin)

    Vue 混入 Mixin 当不同组件有相同功能时 xff0c 不必重复定义属性和方法 xff0c 可使用vue中的混入 Mixin 来分发 Vue 组件中的可复用功能 一个 mixin 对象可以包含任意组件选项 xff0c 即data me
  • uni-app--tabs切换swiper

    父组件 span class token operator lt span template span class token operator gt span span class token operator lt span view
  • 关于移动端 html5诸多事件

    1 点击事件 64 click与 64 tap的区别 xff1a 64 click 在web手机端上点击 xff0c 有300ms延迟再被触发 64 tap具有事件穿透特点 而 64 click没有 事件冒泡 xff1a 当父元素有点击事件
  • vuex状态管理

    vue 1 下载vuex依赖 2 创建store目录store js xff0c 然后在js中引入 span class token keyword import span span class token module Vue span
  • Jmeter性能测试(8)--断言

    jmeter xff08 8 xff09 断言 jmeter中有个元件叫做断言 xff08 Assertion xff09 xff0c 它的作用和loadrunner中的检查点类似 xff1b 用于检查测试中得到的响应数据等是否符合预期 x
  • Class类

    class类的基本写法 es6引入了class类的概念 xff0c 可通过class关键字来定义类每个类都会有一个构造函数 xff0c 即constructor 方法 xff0c 用于创建和初始化class对象要注意 xff0c 如果一个类
  • install与directive

    install Vue option Vue js提供install方法 xff0c 可用于开发新插件以及全局注册组件等 span class token keyword export span span class token keywo
  • STC15W4K56S4学习笔记——LCD12864滚动显示

    STC15W4K56S4学习笔记 LCD12864滚动显示 最近在准备学校的单片机校赛 xff0c 重新回顾了一遍51单片机 xff0c 上手了STC15W4K56S4试验箱 xff0c 写一些笔记来记录一下 xff0c 水平有限 xff0
  • STM32用XCOM调试助手打印不出数据

    STM32用XCOM调试助手打印不出数据 被困扰了一段时间的串口终于解决了 xff0c 用STM332F103ZET6写串口 xff0c 但是不懂为什么打开串口调试助手就是打印不出数据 首先检查了代码有没有错 xff0c 因为是按照网上的代
  • OpenCV-python学习笔记(十二)——图像轮廓

    十二 图像轮廓 图像轮廓是指将边缘连接起来形成的一个整体 xff0c 用于后续的计算 因为边缘检测得到的边缘是不连续的 查找图像内的轮廓信息 xff1a cv2 findContours 绘制轮廓 xff1a cv2 drawContour
  • k210——maix bit串口通信

    k210 串口通信 k210 一共有3个 uart xff0c 每个 uart 可以进行自由的引脚映射 一 API函数介绍 1 1 register pin function force 61 True K210 可以通过映射来改变引脚功能
  • k210——Maixhub 云端模型训练

    k210 Maixhub 云端模型训练 一 前言 k210的模型训练可以在Maixhub 上进行 xff0c 只需要准备好需要训练的数据集 xff0c 不需要搭建训练环境和代码 xff0c 上传训练数据即可快速训练出模型 Maixhub 有
  • 自动控制原理MATLAB常用函数总结

    自动控制原理MATLAB常用函数总结 一 控制系统的数学模型 1 传递函数数学模型 G xff08 s xff09 61

随机推荐

  • MCS-51汇编软件实验

    MCS 51汇编软件实验 实验一 内存块移动 将指定源地址和长度的存储块移到指定目标地址为起始地址的单元中去 移动3000H起始的256个字节到4000H起始的256个字节 代码示例 xff1a ORG 0000H MOV DPTR 300
  • Jmeter性能测试(9)--逻辑控制器

    jmeter中逻辑控制器 xff08 Logic Controllers xff09 的作用域只对其子节点的sampler有效 xff0c 作用是控制采样器的执行顺序 jmeter提供了17种逻辑控制器 xff0c 它们各个功能都不尽相同
  • MapReduce的工作流程:map和reduce分别做了哪些工作,以及shuffle机制实现了什么

    一 map和reduce分别做了哪些工作 Map 待处理数据分片放入缓冲区 xff0c 分区 排序 合并 归并 xff0c 写入本地磁盘 将处理杂乱无章的数据 xff0c 找出规律 xff0c 归纳处理 1 读取hdfs上的文件 xff0c
  • Prometheus监控部署

    文章目录 一 通用监控系统基础知识以及Prometheus的概述1 监控系统的发展史 xff1a 2 什么是Prometheus 二 工作原理及适用性1 prometheus获取数据的方式 三 xff0c 实验环境1 关闭防火墙和核心防护P
  • Docker之 神操作!居然能修改已运行的 Docker 容器端口映射

    文章目录 一 容器未启动 xff1f 二 容器已启动 xff1f 2 1 但是想修改或者添加端口时 xff0c 先停止掉正在运行的容器 2 2 查看容器完整的 96 hash of the container 96 数值 xff1a 2 3
  • python版MapReduce基础实战

    第一关 xff1a 成绩统计 任务描述 本关任务 xff1a 使用Map Reduce计算班级中年龄最大的学生 相关知识 为了完成本关任务 xff0c 你需要掌握 xff1a 1 什么是MapReduce xff0c 2 如何使用MapRe
  • 视觉SLAM十四讲笔记六(第七讲)

    1 引言 前几节介绍了运动方程和观测方程的具体形式 xff0c 并讲解了以非线性优化为 主的求解方法 本讲 xff0c 我们将介绍什么是特征点 xff0c 如何提取和匹配特征点 xff0c 以及如何根据配对的特征点估计相机运动 2 特征点法
  • [C++教程①]--了解c语言以及第一行代码

    hellohello xff0c 我是离 今天开始 xff0c 我会对小白朋友讲解c 43 43 C 43 43 是什么 C 43 43 是C语言的继承 xff0c 它既可以进行C语言的过程化程序设计 xff0c 又可以进行以抽象数据类型为
  • 虚拟机可以ping通IP,但是ping通不了域名

    今天用VMware安装了一个centos7系统 xff0c 正常安装上去 xff0c 编辑了ifcfg ens33网卡信息 在物理机上ping虚拟机地址和百度的域名 xff0c 测试可以ping通 又去虚拟机上ping一下百度域名www b
  • 笔记(STM32篇)day12——USART串口介绍、串口初始化结构体

    目录 一 USART介绍 1 USART简介 2 USART功能框图 二 串口初始化结构体 参考 一 USART介绍 1 USART简介 通用同步异步收发器 Universal Synchronous Asynchronous Receiv
  • 京东Java后台开发岗社招面试经验分享,4面的面经!

    前言 正好最近我一朋友面试京东回来 xff0c 和我聊了他的面试经过 xff0c 最后经过四面成功斩获offer xff01 下面我把他所得经验毫无保留的分享给大家 xff01 希望对正准备面试小伙伴们能有所帮助 xff01 xff01 x
  • 关于系统架构

    系统架构 1 系统架构包括什么形式2 C S架构2 1 C S架构的软件或者系统2 2 C S架构的特点2 3 C S架构的优缺点 3 B S架构3 1 优缺点3 2 B S结构的系统的通信原理关于域名 4 WEB服务器软件4 1 WEB服
  • Jmeter性能测试(10)--参数化

    参数化是自动化测试脚本的一种常用技巧 简单来说 xff0c 参数化的一般用法就是将脚本中的某些输入使用参数来代替 xff0c 在脚本运行时指定参数的取值范围和规则 xff1b 这样 xff0c 脚本在运行时就可以根据需要选取不同的参数值作为
  • AT指令1

    我之前认为手机号码与SIM卡是一一对应的 xff0c 后来想想不对 xff0c 因为有换卡不换号的情况啊 xff0c 所以SIM卡应该只是一个电话号码的储存介质 xff0c 而与SIM卡一一对应的是另一个编码 IMSI xff08 国际移动
  • Keil5 的常见错误

    1 C Source led c 22 warning 69 D integer conversion resulted in truncation 这个是由于实际值的范围超过了定义值的范围 2 C Source main c 15 err
  • c语言实现FTP

    这个实现了客户端和服务端文件的相互传输 xff08 只在本机上运行过 xff09 xff0c 如果是要两台计算机相互传数据要改ip 给大家看一下实现过程 xff08 exe文件要先开服务端的 xff09 输入1 直接将快捷方式拖拽上去就有绝
  • 2021 => 手把手搭建dhcp服务(详细)

    架构解析 dhcp服务器配置 配置实验环境 关闭VMware的dhcp服务 给虚拟机添加网卡为VMnet1 安装与配置dhcp服务 给新添的网络配置IP 配置dhcp服务 在真实的主机系统上查看dhcp配置 为真实主机系统分配固定的IP 修
  • 2021 => 手把手教你NFS部署(实用)

    NFS服务 原理 xff1a 供文件共享服务 为Web Server 配置集群中的后端存储 支持多节点同时挂载以及并发送与写入 架构解析 这是一张大型网站高并发架构图 xff0c 我们只需注意图中圈红的地方 建立NFS文件系统本质就是用来进
  • 2021最新阿里云部署k8s集群(篇1 购买服务器)

    实验kubernetes版本 xff1a v1 22 1 x1f947 阿里云地址 阿里云开发者社区 阿里云官网开发者社区 云计算社区 注意 xff1a 做此实验先准备100RM xff0c 本实验为抢占实例 CentOs版本 xff1a
  • 七层负载均衡HAproxy生产环境LVS+Keepalived+HAproxy(三)

    LB Haproxy Nginx x1f4af 解析 xff1a 七层负载均衡器 xff0c 为与七层模型上的应用层 xff0c 通过URL地址 xff08 应用层 xff09 进行负载均衡 优点 xff1a 详细地址 xff0c 数据精准