当前位置: 首页 > news >正文

Keepalived热备、Keepalived+LVS、HAProxy监控及后端服务器健康检查、负载均衡调度器对比

day02

day02KeepAlived高可用集群配置高可用的web集群监控本机80端口,实现主备切换实现原理实施配置高可用、负载均衡的web集群配置高可用、负载均衡HAProxy配置haproxy负载均衡调度器比较LVS(Linux Virtual Server)NginxHAProxy

KeepAlived高可用集群

  • keepalived用于实现高可用集群
  • 它的工作原理就是VRRP(虚拟冗余路由协议)

配置高可用的web集群

image-20220611102817790

  • 环境说明:

    • web1:eth0->192.168.88.100/24
    • web2:eth0->192.168.88.200/24
  • 配置keepalived 

# 在两台web服务器上安装keepalived
[root@pubserver cluster]# vim 07-install-keepalived.yml
---
- name: install keepalived
  hosts: webservers
  tasks:
    - name: install keepalived   # 安装keepalived
      yum:
        name: keepalived
        state: present
[root@pubserver cluster]# ansible-playbook 07-install-keepalived.yml
 
# 修改配置文件
[root@web1 ~]# vim /etc/keepalived/keepalived.conf 
 12    router_id web1    # 设置本机在集群中的唯一识别符
 13    vrrp_iptables     # 自动配置iptables放行规则
 ... ...
 20 vrrp_instance VI_1 {
 21     state MASTER           # 状态,主为MASTER,备为BACKUP
 22     interface eth0         # 网卡
 23     virtual_router_id 51   # 虚拟路由器地址
 24     priority 100           # 优先级
 25     advert_int 1           # 发送心跳消息的间隔
 26     authentication {
 27         auth_type PASS     # 认证类型为共享密码
 28         auth_pass 1111     # 集群中的机器密码相同,才能成为集群
 29     }   
 30     virtual_ipaddress {
 31         192.168.88.80/24    # VIP地址
 32     }   
 33 }
# 删除下面所有行
 
[root@web1 ~]# systemctl start keepalived
# 等几秒服务完全启动后,可以查看到vip
[root@web1 ~]# ip a s eth0 | grep '88'
    inet 192.168.88.100/24 brd 192.168.88.255 scope global noprefixroute eth0
    inet 192.168.88.80/24 scope global secondary eth0
 
 
# 配置web2
[root@web1 ~]# scp /etc/keepalived/keepalived.conf 192.168.88.200:/etc/keepalived/
[root@web2 ~]# vim /etc/keepalived/keepalived.conf 
 12    router_id web2          # 改id
 13    vrrp_iptables
 ... ... 
 20 vrrp_instance VI_1 {
 21     state BACKUP           # 改状态
 22     interface eth0
 23     virtual_router_id 51
 24     priority 80            # 改优先级
 25     advert_int 1
 26     authentication {
 27         auth_type PASS
 28         auth_pass 1111
 29     }
 30     virtual_ipaddress {
 31         192.168.88.80/24
 32     }
 33 }
 
# 启动服务
[root@web2 ~]# systemctl start keepalived
# 查看地址,eth0不会出现vip
[root@web2 ~]# ip a s | grep '88'
    inet 192.168.88.200/24 brd 192.168.88.255 scope global noprefixroute eth0
 
 
# 测试,现在访问88.80,看到是web1上的内容
[root@client1 ~]# curl http://192.168.88.80
Welcome from web1
 
# 模拟web1出现故障
[root@web1 ~]# systemctl stop keepalived.service 
 
# 测试,现在访问88.80,看到是web2上的内容
[root@client1 ~]# curl http://192.168.88.80
Welcome from web2
 
# 在web2上查看vip,可以查看到vip 192.168.88.80
[root@web2 ~]# ip a s | grep '88'
    inet 192.168.88.200/24 brd 192.168.88.255 scope global noprefixroute eth0
    inet 192.168.88.80/24 scope global secondary eth0

监控本机80端口,实现主备切换

实现原理

  • 配置高可用的web集群时,Keepalived只为服务器提供了VIP
  • Keepalived不知道服务器上运行了哪些服务
  • MASTER服务器可以通过跟踪脚本监视本机的80端口,一旦本机80端口失效,则将VIP切换至BACKUP服务器
  • Keepalived对脚本的要求是,退出码为0表示访问成功;退出码为1表示失败。

实施 

# 1. 在MASTER上创建监视脚本
[root@web1 ~]# vim /etc/keepalived/check_http.sh
#!/bin/bash
 
ss -tlnp | grep :80 &> /dev/null && exit 0 || exit 1
 
[root@web1 ~]# chmod +x /etc/keepalived/check_http.sh
 
# 2. 修改MASTER配置文件,使用脚本
[root@web1 ~]# vim /etc/keepalived/keepalived.conf 
  1 ! Configuration File for keepalived
  2 
  3 global_defs {
...略...
 18 }
 19 
 20 vrrp_script chk_http_port {  # 定义监视脚本
 21     script "/etc/keepalived/check_http.sh"
 22     interval 2   # 脚本每隔2秒运行一次
 23 }
 24
 25 vrrp_instance VI_1 {
 26     state MASTER
 27     interface eth0
 28     virtual_router_id 51
 29     priority 100
 30     advert_int 1
 31     authentication {
 32         auth_type PASS
 33         auth_pass 1111
 34     }
 35     virtual_ipaddress {
 36         192.168.88.80/24
 37     }
 38     track_script {    # 引用脚本
 39         chk_http_port
 40     }
 41 }
 
# 3. 重起服务
[root@web1 ~]# systemctl restart keepalived.service 
 
# 4. 测试,关闭web1的nginx后,VIP将会切换至web2
[root@web1 ~]# systemctl stop nginx.service 
[root@web1 ~]# ip a s | grep 88
    inet 192.168.88.100/24 brd 192.168.88.255 scope global noprefixroute eth0
[root@web2 ~]# ip a s | grep 88
    inet 192.168.88.200/24 brd 192.168.88.255 scope global noprefixroute eth0
    inet 192.168.88.80/24 scope global secondary eth0
# 5. 当MASTER的nginx修复后,VIP将会切换回至web1
[root@web1 ~]# systemctl start nginx.service 
[root@web1 ~]# ip a s | grep 88
    inet 192.168.88.100/24 brd 192.168.88.255 scope global noprefixroute eth0
    inet 192.168.88.80/24 scope global secondary eth0
[root@web2 ~]# ip a s | grep 88
    inet 192.168.88.200/24 brd 192.168.88.255 scope global noprefixroute eth0

配置高可用、负载均衡的web集群

image-20211103113155142

  • 环境说明:LVS-DR模式

    • client1:eth0->192.168.88.10
    • lvs1:eth0->192.168.88.5
    • lvs2:eth0->192.168.88.6
    • web1:eth0->192.168.88.100
    • web2:eth0->192.168.88.200
  • 环境准备

# 关闭2台web服务器上的keepalived,并卸载
[root@pubserver cluster]# vim 08-rm-keepalived.yml
---
- name: remove keepalived
  hosts: webservers
  tasks:
    - name: stop keepalived       # 停服务
      service:
        name: keepalived
        state: stopped
        
    - name: uninstall keepalived   # 卸载
      yum:
        name: keepalived
        state: absent
[root@pubserver cluster]# ansible-playbook 08-rm-keepalived.yml
 
# 创建新虚拟机lvs2
[root@myhost ~]# vm clone lvs2
 
# 为lvs2设置ip地址
[root@myhost ~]# vm setip lvs2 192.168.88.6
 
# 连接
[root@myhost ~]# ssh 192.168.88.6

配置高可用、负载均衡

  1. 在2台web服务器的lo上配置vip
  2. 在2台web服务器上配置内核参数
  3. 删除lvs1上的eth0上的VIP地址。因为vip将由keepalived接管
[root@pubserver cluster]# vim 09-del-lvs1-vip.yml
---
- name: del lvs1 vip
  hosts: lvs1
  tasks:
    - name: rm vip
      lineinfile:            # 在指定文件中删除行
        path: /etc/sysconfig/network-scripts/ifcfg-eth0
        regexp: 'IPADDR2='   # 正则匹配
        state: absent
      notify: restart system
 
  handlers:
    - name: restart system
      shell: reboot
[root@pubserver cluster]# ansible-playbook 09-del-lvs1-vip.yml
 
# 查看结果
[root@lvs1 ~]# ip a s eth0 | grep 88
    inet 192.168.88.5/24 brd 192.168.88.255 scope global noprefixroute eth0
  1. 删除lvs1上的lvs规则。因为lvs规则将由keepalived创建
[root@lvs1 ~]# ipvsadm -Ln   # 查看规则
[root@lvs1 ~]# ipvsadm -D -t 192.168.88.15:80
  1. 在lvs上配置keepalived
# 在主机清单文件中加入lvs2的说明
[root@pubserver cluster]# vim inventory
...略...
[lb]
lvs1 ansible_host=192.168.88.5
lvs2 ansible_host=192.168.88.6
...略...
 
# 安装软件包
[root@pubserver cluster]# cp 01-upload-repo.yml 10-upload-repo.yml
---
- name: config repos.d
  hosts: lb
  tasks:
    - name: delete repos.d
      file:
        path: /etc/yum.repos.d
        state: absent
 
    - name: create repos.d
      file:
        path: /etc/yum.repos.d
        state: directory
        mode: '0755'
 
    - name: upload local88
      copy:
        src: files/local88.repo
        dest: /etc/yum.repos.d/
[root@pubserver cluster]# ansible-playbook 10-upload-repo.yml 
 
[root@pubserver cluster]# vim 11-install-lvs2.yml
---
- name: install lvs keepalived
  hosts: lb
  tasks:
    - name: install pkgs    # 安装软件包
      yum:
        name: ipvsadm,keepalived
        state: present
[root@pubserver cluster]# ansible-playbook 11-install-lvs2.yml
 
[root@lvs1 ~]# vim /etc/keepalived/keepalived.conf 
 12    router_id lvs1       # 为本机取一个唯一的id
 13    vrrp_iptables        # 自动开启iptables放行规则
... ...
 20 vrrp_instance VI_1 {
 21     state MASTER
 22     interface eth0
 23     virtual_router_id 51
 24     priority 100
 25     advert_int 1
 26     authentication {
 27         auth_type PASS
 28         auth_pass 1111
 29     }   
 30     virtual_ipaddress {
 31         192.168.88.15       # vip地址,与web服务器的vip一致
 32     }   
 33 }
 # 以下为keepalived配置lvs的规则
 35 virtual_server 192.168.88.15 80 {   # 声明虚拟服务器地址
 36     delay_loop 6     # 健康检查延迟6秒开始
 37     lb_algo wrr      # 调度算法为wrr
 38     lb_kind DR       # 工作模式为DR
 39     persistence_timeout 50  # 50秒内相同客户端调度到相同服务器
 40     protocol TCP     # 协议是TCP
 41 
 42     real_server 192.168.88.100 80 {   # 声明真实服务器
 43         weight 1          # 权重
 44         TCP_CHECK {       # 通过TCP协议对真实服务器做健康检查
 45             connect_timeout 3 # 连接超时时间为3秒
 46             nb_get_retry 3    # 3次访问失败则认为真实服务器故障
 47             delay_before_retry 3  # 两次检查时间的间隔3秒
 48         }
 49     }
 50     real_server 192.168.88.200 80 {
 51         weight 2
 52         TCP_CHECK {
 53             connect_timeout 3
 54             nb_get_retry 3
 55             delay_before_retry 3
 56         }
 57     }
 58 }
# 以下部分删除
 
# 启动keepalived服务
[root@lvs1 ~]# systemctl start keepalived
 
# 验证
[root@lvs1 ~]# ip a s eth0 | grep 88
    inet 192.168.88.5/24 brd 192.168.88.255 scope global noprefixroute eth0
    inet 192.168.88.15/32 scope global eth0
[root@lvs1 ~]# 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.88.15:80 wrr persistent 50
  -> 192.168.88.100:80            Route   1      0          0         
  -> 192.168.88.200:80            Route   2      0          0    
 
# 客户端连接测试
[root@client1 ~]# for i in {1..6}; do curl http://192.168.88.15/; done
Welcome from web2
Welcome from web2
Welcome from web2
Welcome from web2
Welcome from web2
Welcome from web2
# 为了效率相同的客户端在50秒内分发给同一台服务器。为了使用同一个客户端可以看到轮询效果,可以注释配置文件中相应的行后,重启keepavlied。
[root@lvs1 ~]# vim +39 /etc/keepalived/keepalived.conf
...略...
    # persistence_timeout 50
...略...
[root@lvs1 ~]# systemctl restart keepalived.service 
# 在客户端验证
[root@client1 ~]# for i in {1..6}; do curl http://192.168.88.15/; done
Welcome from web2
Welcome from web1
Welcome from web2
Welcome from web2
Welcome from web1
Welcome from web2
 
# 配置LVS2
[root@lvs1 ~]# scp /etc/keepalived/keepalived.conf 192.168.88.6:/etc/keepalived/
[root@lvs2 ~]# vim /etc/keepalived/keepalived.conf 
 12    router_id lvs2
 21     state BACKUP
 24     priority 80
[root@lvs2 ~]# systemctl start keepalived
[root@lvs2 ~]# 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.88.15:80 wrr
  -> 192.168.88.100:80            Route   1      0          0         
  -> 192.168.88.200:80            Route   2      0          0         
  1. 验证
# 1. 验证真实服务器健康检查
[root@web1 ~]# systemctl stop nginx
[root@lvs1 ~]# ipvsadm -Ln   # web1在规则中消失
[root@lvs2 ~]# ipvsadm -Ln
 
[root@web1 ~]# systemctl start nginx
[root@lvs1 ~]# ipvsadm -Ln   # web1重新出现在规则中
[root@lvs2 ~]# ipvsadm -Ln
 
# 2. 验证lvs的高可用性
[root@lvs1 ~]# shutdown -h now    # 关机
[root@lvs2 ~]# ip a s | grep 88     # 可以查看到vip
    inet 192.168.88.6/24 brd 192.168.88.255 scope global noprefixroute eth0
    inet 192.168.88.15/32 scope global eth0
# 客户端访问vip依然可用
[root@client1 ~]# for i in {1..6}; do curl http://192.168.88.15/; done
Welcome from web1
Welcome from web2
Welcome from web2
Welcome from web1
Welcome from web2
Welcome from web2

HAProxy

  • 也是一款实现负载均衡的调度器

  • 适用于负载特别大的web站点

  • HAProxy的工作模式:

    • mode http:只适用于web服务
    • mode tcp:适用于各种服务
    • mode health:仅做健康检查,很少使用

配置haproxy

image-20220611102902015

  • 环境准备:

    • client1:eth0 -> 192.168.88.10
    • HAProxy:eth0 -> 192.168.88.5
    • web1:eth0 -> 192.168.88.100
    • web2:eth0 -> 192.168.88.200
  • 初始化配置

     

# 关闭192.168.88.6
[root@lvs2 ~]# shutdown -h now
 
# 配置192.168.88.5为haproxy服务器
[root@pubserver cluster]# vim 12-config-haproxy.yml
---
- name: config haproxy
  hosts: lvs1
  tasks:
    - name: rm lvs keepalived     # 删除软件包
      yum:
        name: ipvsadm,keepalived
        state: absent
        
    - name: rename hostname       # 修改主机名
      shell: hostnamectl set-hostname haproxy1
      
    - name: install haproxy       # 安装软件包
      yum:
        name: haproxy
        state: present
[root@pubserver cluster]# ansible-playbook 12-config-haproxy.yml
 
# web服务器,不需要配置vip,不需要改内核参数。但是存在对haproxy也没有影响。
  • 配置haproxy
# 修改配置文件
[root@haproxy1 ~]# vim /etc/haproxy/haproxy.cfg 
# 配置文件中,global是全局配置;default是缺省配置,如果后续有和default相同的配置,default配置将会被覆盖。
# 配置文件中,frontend描述haproxy怎么和用户交互;backend描述haproxy怎么和后台应用服务器交互。这两个选项,一般不单独使用,而是合并到一起,名为listen。
# 将64行之后全部删除,写入以下内容
 64 #---------------------------------------------------------------------
 65 listen myweb  # 定义虚拟服务器
 66         bind 0.0.0.0:80     # 监听在所有可用地址的80端口
 67         balance roundrobin  # 定义轮询调度算法
 # 对web服务器做健康检查,2秒检查一次,如果连续2次检查成功,认为服务器是健康的,如果连续5次检查失败,认为服务器坏了
 68         server web1 192.168.88.100:80 check inter 2000 rise 2 fall 5
 69         server web2 192.168.88.200:80 check inter 2000 rise 2 fall 5
 70 
 71 listen stats  # 定义虚拟服务器
 72         bind 0.0.0.0:1080       # 监听在所有可用地址的1080端口
 73         stats refresh 30s       # 设置监控页面自动刷新时间为30秒
 74         stats uri /stats        # 定义监控地址是/stats
 75         stats auth admin:admin  # 监控页面的用户名和密码都是admin
 
# 启服务
[root@haproxy1 ~]# systemctl start haproxy.service 
# 使用firefox访问监控地址 http://192.168.88.5:1080/stats
 
# 客户端访问测试
[root@client1 ~]# for i in {1..6}; do curl http://192.168.88.5/; done
Welcome from web2
Welcome from web1
Welcome from web2
Welcome from web1
Welcome from web2
Welcome from web1
 
# client1上使用ab访问
[root@client1 ~]# yum install -y httpd-tools
[root@client1 ~]# ab -n1000 -c200 http://192.168.88.5/

监控地址 http://192.168.88.5:1080/stats如下:

 

image-20221209160830604

  • Queue:队列长度。Cur当前队列长度,Max最大队列长度,Limit限制长度
  • Session rate:会话率,每秒钟的会话数
  • Sessions:会话数
  • Bytes:字节数。In收到的字节数,Out发出的字节数
  • Denied:拒绝。Req请求,Resp响应
  • Errors:错误
  • Warning:警告
  • Status:状态
  • LastChk:上一次检查。L4OK,第四层tcp检查通过
  • Wght:权重

负载均衡调度器比较

LVS适用于需要高并发性和稳定性的场景,Nginx适用于静态文件服务和反向代理等应用层负载均衡场景,HAProxy则具备较为丰富的功能和灵活性,适用于多种负载均衡场景。

LVS(Linux Virtual Server)

优点:

  • 高性能:LVS使用Linux内核中的IP负载均衡技术,能够实现非常高的并发处理能力。
  • 稳定性:LVS经过长时间的实践应用,成熟稳定,被广泛使用。
  • 可用性:支持高可用性的配置,可以实现故障自动切换,提供无中断的服务。
  • 灵活性:可根据需要采用多种负载均衡算法,如轮询、加权轮询、哈希等。

缺点:

  • 配置复杂:相对于其他两个技术,LVS的配置相对较为复杂,需要更深入的了解和配置。
  • 功能相对局限:LVS主要是一种传输层负载均衡技术,无法像Nginx和HAProxy那样对应用层协议进行处理。

Nginx

优点:

  • 高性能:Nginx采用了基于事件驱动的异步非阻塞架构,能够处理大量并发连接。
  • 负载均衡:Nginx具备内置的负载均衡功能,可以根据配置进行请求的转发。
  • 丰富的功能:Nginx支持反向代理、静态文件服务、缓存、SSL等,在Web服务器领域有很广泛的应用。

缺点:

  • 功能相对较少:相对于LVS和HAProxy,Nginx在负载均衡算法和健康检查等方面的功能相对较少。
  • 限制于应用层协议:Nginx只能对HTTP和HTTPS等应用层协议进行处理,无法处理其他协议。

HAProxy

优点:

  • 灵活性:HAProxy支持丰富的负载均衡算法和会话保持方式,可以根据需求进行灵活配置。
  • 完整的功能:HAProxy支持高可用性配置、健康检查、故障恢复、SSL等功能,在负载均衡领域应用广泛。
  • 高性能:HAProxy性能优良,能够处理大量并发连接,并且支持异步IO模型。

缺点:

  • 内存占用:相对于Nginx和LVS,HAProxy在处理大量连接时消耗的内存稍高一些。
  • 高可用性:HAProxy需要借助额外的工具来实现高可用性,例如Keepalived。

知识点思维导图:https://flowus.cn/share/7875c0e1-ebbd-4dad-aa7e-f40e6ed6c6d3

相关文章:

Keepalived热备、Keepalived+LVS、HAProxy监控及后端服务器健康检查、负载均衡调度器对比

day02 day02KeepAlived高可用集群配置高可用的web集群监控本机80端口,实现主备切换实现原理实施配置高可用、负载均衡的web集群配置高可用、负载均衡HAProxy配置haproxy负载均衡调度器比较LVS(Linux Virtual Server)NginxHAProxy KeepAlive…...

用Vue开发仿旅游站webapp项目总结 (上)

写着写着发现会写不少内容... 全部写在一篇文章里感觉太多了不方便看,所以分为上下篇吧... 下篇写完啦,感兴趣的朋友可以继续关注~ > 用Vue开发仿旅游站webapp项目总结 (下) 温馨提示 此文章,仅是做完项目后的个人…...

【Koa】[NoSQL] Koa中相关介绍和使用Redis MongoDB增删改查

目录 NoSQL非关系型数据库关系型数据库(RMDB)介绍非关系型数据库(NoSQL)介绍Redis & MongoDB 在 Koa 中使用 Redis (了解)Redis 的安装和使用在 Koa 中连接 和 调用 Redis 在 Koa 中使用 MongoDBMongoDB 的安装MongoShell 操作…...

【JS 阻止滑动穿透】

在实现阻止滑动穿透时,可以使用以下方法之一: 使用 CSS 属性 overflow: hidden 来禁止页面滚动。 body {overflow: hidden; }使用 JavaScript 监听滚动事件并阻止默认行为。 document.addEventListener(touchmove, function(e) {e.preventDefault(); …...

编译原理

目录 一,基本概念 二,词法分析 三,自上而下推导 一,基本概念 二,词法分析 三,自上而下推导...

项目播报 | 新基德携手璞华易研PLM,打造企业新一代研发管理平台

近日,“新基德PLM(Product Lifecycle Management,产品生命周期管理)项目”在新基德(深圳)电子有限公司(以下简称:新基德)正式启动。新基德是一家集手机研发、生产、销售、…...

elementui el-table 封装表格

ps: 1.3版本 案例&#xff1a; 完整代码&#xff1a; 可直接复制粘贴&#xff0c;但一定要全看完&#xff01; v-slot"scopeRows" 是vue3的写法&#xff1b; vue2是 slot-scope"scope" <template><!-- 简单表格、多层表头、页码、没有合并列行…...

集合--collections

一、collections概述 Collections和Arrays、Objects-一样&#xff0c;都是一种针对性的工具类, Arrays是针对数组&#xff0c;Objects是针对Object, 而Colections则是针对集合的一种工具类&#xff0c;里面提供了大量的方便我们操作集合的方法: //往集合中添加一些元素。 p…...

go使用gin结合jwt做登录功能

1、安装gin go get -u github.com/gin-gonic/gin 2、安装session go get github.com/gin-contrib/sessions 3、安装JWT鉴权 go get "github.com/golang-jwt/jwt/v4" 4、创建一个jwt的工具文件 package utilsimport ("errors""github.com/golan…...

【C++】开源:Boost网络库Asio配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍Asio网络库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次…...

图像滤波器

图像噪声 • 图像噪声是图像在获取或是传输过程中受到随机信号干扰&#xff0c;妨碍人们对图像理解及分析处理 的信号。 • 图像噪声的产生来自图像获取中的环境条件和传感元器件自身的质量&#xff0c;图像在传输过程中产 生图像噪声的主要因素是所用的传输信道受到了噪声…...

【每日一题】2569. 更新数组后处理求和查询

【每日一题】2569. 更新数组后处理求和查询 2569. 更新数组后处理求和查询题目描述解题思路 2569. 更新数组后处理求和查询 题目描述 给你两个下标从 0 开始的数组 nums1 和 nums2 &#xff0c;和一个二维数组 queries 表示一些操作。总共有 3 种类型的操作&#xff1a; 操作…...

PLC的高端版本通常具有以下特点:

高速处理能力&#xff1a;高端PLC通常具有更快的处理速度和更高的运行频率&#xff0c;可以处理更复杂的控制逻辑和更多的输入/输出信号。 大容量存储&#xff1a;高端PLC通常具有更大的存储容量&#xff0c;可以保存更多的程序和数据&#xff0c;以满足更复杂的应用需求。 多种…...

Scrum敏捷开发项目管理和产品研发管理培训- Leangoo领歌

Scrum是目前运用最为广泛的敏捷开发方法&#xff0c;是一个轻量级的项目管理和产品研发管理框架。 这是一个两天的实训课程&#xff0c;面向研发管理者、项目经理、产品经理、研发团队等&#xff0c;旨在帮助学员全面系统地学习Scrum和敏捷开发, 帮助企业快速启动敏捷实施。 …...

爬虫小白-如何辨别是否有cookie反爬案例

目录 一、Cookie介绍二、cookie生成来源区分查找三、如何判断是否有cookie反爬四、来自服务器生成的cookie反爬解决方法五、来自js生成的cookie反爬解决方法一、Cookie介绍 先推荐该篇文章简单了解Cookie、Session、Token、JWT1、cookie的类型:会话cookie和持久cookie;其唯一…...

机器人状态估计:robot_localization 功能包简介与安装

机器人状态估计&#xff1a;robot_localization 功能包简介与参数配置 前言功能包简介安装使用ubuntu软件源安装使用源码安装 前言 移动机器人的状态估计需要用到很多传感器&#xff0c;因为对单一的传感器来讲&#xff0c;都存在各自的优缺点&#xff0c;所以需要一种多传感器…...

RNN架构解析——GRU模型

目录 GRU模型实现优点和缺点 GRU模型 实现 优点和缺点...

【LeetCode】141.环形链表

题目 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&#…...

nodejs+vue+elementui汽车销售网站

前端技术&#xff1a;nodejsvueelementui,视图层其实质就是vue页面&#xff0c;通过编写vue页面从而展示在浏览器中&#xff0c;编写完成的vue页面要能够和控制器类进行交互&#xff0c;从而使得用户在点击网页进行操作时能够正常。 可以设置中间件来响应 HTTP 请求。 Express …...

spring boot整合kaptcha验证码

引入依赖 <dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId><version>2.3.2</version> </dependency>创建验证码生成配置类 KaptchaConfig.java Configuration public class KaptchaConf…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

恶补电源:1.电桥

一、元器件的选择 搜索并选择电桥&#xff0c;再multisim中选择FWB&#xff0c;就有各种型号的电桥: 电桥是用来干嘛的呢&#xff1f; 它是一个由四个二极管搭成的“桥梁”形状的电路&#xff0c;用来把交流电&#xff08;AC&#xff09;变成直流电&#xff08;DC&#xff09;。…...

【Linux】Linux安装并配置RabbitMQ

目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的&#xff0c;需要先安…...

加密通信 + 行为分析:运营商行业安全防御体系重构

在数字经济蓬勃发展的时代&#xff0c;运营商作为信息通信网络的核心枢纽&#xff0c;承载着海量用户数据与关键业务传输&#xff0c;其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级&#xff0c;传统安全防护体系逐渐暴露出局限性&a…...