LVS/NAT双主 + keepalived负载均衡实现

2023-11-15

一、keepalived简介

keepalived是分布式部署解决系统高可用的软件,结合lvs(LinuxVirtual Server)使用,解决单机宕机的问题。
keepalived是一个基于VRRP协议来实现IPVS的高可用的解决方案。对于LVS负载均衡来说,如果前端的调度器direct发生故障,则后端的realserver是无法接受请求并响应的。因此,保证前端direct的高可用性是非常关键的,否则后端的服务器是无法进行服务的。而我们的keepalived就可以用来解决单点故障(如LVS的前端direct故障)问题。keepalived的主要工作原理是:运行keepalived的两台服务器,其中一台为MASTER,另一台为BACKUP,正常情况下,所有的数据转换功能和ARP请求响应都是由MASTER完成的,一旦MASTER发生故障,则BACKUP会马上接管MASTER的工作,这种切换时非常迅速的。

 

二、测试环境

下面拿4台虚拟机进行环境测试,实验环境为centos6.6 x86_64,lvs NAT模式环境下只有前端两台keepalived调度机有公网ip,后端真实机只有内网ip,具体用途和ip如下

服务器类型

公网ip

内网ip

LVS VIP1

192.168.214.70

192.168.211.254

LVS VIP2

192.168.214.71

192.168.211.253

Keepalived host1

192.168.214.76

192.168.211.76

Keepalived host2

192.168.214.77

192.168.211.77

Realserver A


192.168.211.79

       Realserver B


192.168.211.83

拓扑图如下

0.jpg

三、软件安装

1、安装lvs所需包ipvsadm

yum install -y ipvsadm

ln -s /usr/src/kernels/`uname -r`  /usr/src/linux

lsmod |grep ip_vs

 

#注意Centos 6.X安装lvs,使用1.26版本。并且需要先安装yuminstall libnl* popt* -y

 

执行ipvsadm(modprobe ip_vs)ip_vs模块加载到内核

[root@test85 ~]# ipvsadm -L -n

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

 -> RemoteAddress:Port          Forward Weight ActiveConn InActConn

 

#IP Virtual Server version 1.2.1 ---- ip_vs内核模块版本

 

 

2、安装keepalived

yum install -y keepalived

chkconfig keepalived on

注:在centos7系列系统中开机自动启动使用systemctl enable keepalived

 

四、开启路由转发 

lvs/NAT模式下前端两台调度机192.168.211.76192.168.211.77上需要开启路由转发功能

vi /etc/sysctl.conf

修改net.ipv4.ip_forward = 0net.ipv4.ip_forward= 1

保存退出后,使用systcl –p命令让其生效

 

五、keepalived配置

先看下211.76 keepalived配置文件

根据拓扑图得知211.76对应的是vip1 192.168.214.70的主,vip2192.168.214.71的备。

具体详细的参数说明见上篇LVS/DR + keepalived负载均衡实现


[root@localhost ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
   notification_email {
     charles@test.com
   }
   notification_email_from reportlog@test.com
   smtp_server mail.test.com
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_sync_group VG1 {        #lvs vip1组
   group {
      VI_1
      VI_GATEWAY1
   }
} 
vrrp_sync_group VG2 {   #lvs vip2组
   group {
      VI_2
      VI_GATEWAY2
   }
} 

vrrp_instance VI_GATEWAY1 {      #lvs vip1的配置
    state MASTER
    interface eth1
    lvs_sync_daemon_inteface eth1
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.211.254
    }
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    lvs_sync_daemon_inteface eth0
    virtual_router_id 52
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    192.168.214.70  
    }
}
vrrp_instance VI_GATEWAY2 {  #lvs vip2的配置
    state BACKUP
    interface eth1
    lvs_sync_daemon_inteface eth1
    virtual_router_id 53
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.211.253
    }
}
vrrp_instance VI_2 {
    state BACKUP
    interface eth0
    lvs_sync_daemon_inteface eth0
    virtual_router_id 54
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    192.168.214.71
    }
}

virtual_server 192.168.214.70 80 {     #vip1 
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    #nat_mask 255.255.255.0
    persistence_timeout 10
    protocol TCP

    real_server 192.168.211.79 80 {       #vip1对应的后端真实机
        weight 100
        TCP_CHECK {
            connect_timeout 3
            connect_port 80
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
virtual_server 192.168.214.71 8080 {     #vip2
    delay_loop 6
    lb_algo rr
    lb_kind NAT
   #nat_mask 255.255.255.0
    persistence_timeout 10
    protocol TCP

   real_server 192.168.211.83 8080 {   #vip2对应的后端真实机
        weight 100
        TCP_CHECK {
            connect_timeout 3
            connect_port 8080
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}


再看下211.77 keepalived配置文件

根据拓扑图得知211.77对应的是vip1 192.168.214.70的备,vip2192.168.214.71的主。


[root@localhost ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
  notification_email {
    charles@test.com
   }
  notification_email_from reportlog@test.com
  #smtp_server 192.168.200.1
  smtp_connect_timeout 30
  router_id LVS_DEVEL
}
vrrp_sync_group VG1 {
  group {
     VI_1
     VI_GATEWAY1
   }
} 
vrrp_sync_group VG2 {
  group {
     VI_2
     VI_GATEWAY2
   }
} 

vrrp_instance VI_GATEWAY1 {
   state BACKUP
   interface eth1
   lvs_sync_daemon_inteface eth1
    virtual_router_id51
   priority 100
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass 1111
    }
   virtual_ipaddress {
       192.168.211.254
    }
}
vrrp_instance VI_1 {
   state BACKUP
   interface eth0
   lvs_sync_daemon_inteface eth0
   virtual_router_id 52
   priority 100
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass 1111
    }
   virtual_ipaddress {
   192.168.214.70     
    }
}
vrrp_instance VI_GATEWAY2 {
   state MASTER
    interfaceeth1
   lvs_sync_daemon_inteface eth1
   virtual_router_id 53
   priority 150
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass 1111
    }
   virtual_ipaddress {
       192.168.211.253
    }
}
vrrp_instance VI_2 {
   state MASTER
   interface eth0
   lvs_sync_daemon_inteface eth0
   virtual_router_id 54
   priority 150
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass 1111
    }
   virtual_ipaddress {
   192.168.214.71
    }
}

virtual_server 192.168.214.70 80 {
   delay_loop 6
   lb_algo rr
   lb_kind NAT
   #nat_mask 255.255.255.0
   persistence_timeout 10
   protocol TCP

   real_server 192.168.211.79 80 {
       weight 100
       TCP_CHECK {
           connect_timeout 3
           connect_port 80
           nb_get_retry 3
           delay_before_retry 3
       }
    }
}
virtual_server 192.168.214.71 8080 {
   delay_loop 6
   lb_algo rr
   lb_kind NAT
  #nat_mask 255.255.255.0
   persistence_timeout 10
   protocol TCP

  real_server 192.168.211.83 8080 {
       weight 100
       TCP_CHECK {
           connect_timeout 3
           connect_port 8080
           nb_get_retry 3
           delay_before_retry 3
       }
    }
}


六、后端真实机配置

后端web应用机器192.168.211.79需要配置默认网关为vip1内网ip地址192.168.211.254web应用机器192.168.211.83需要配置默认网关为vip2内网ip地址192.168.211.253

注意,线上环境如果更改默认网关为vip内网地址后,可能会造成连接不上服务器,需要提前添加相关静态路由。


七、启动keepalived服务及查看相关信息

211.76211.77上分别启动keepalived服务

211.76主机上查看信息

通过ip addr可以看到vip1 地址已经绑定在eth0eth1网口上

[root@localhost ~]# ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu65536 qdisc noqueue state UNKNOWN

   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

   inet 127.0.0.1/8 scope host lo

   inet6 ::1/128 scope host

      valid_lft forever preferred_lft forever

2: eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000

   link/ether 52:54:00:55:b2:d4 brd ff:ff:ff:ff:ff:ff

   inet 192.168.214.76/24 brd 192.168.214.255 scope global eth0

    inet 192.168.214.70/32 scope global eth0

   inet6 fe80::5054:ff:fe55:b2d4/64 scope link

      valid_lft forever preferred_lft forever

3: eth1:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000

   link/ether 52:54:00:85:11:95 brd ff:ff:ff:ff:ff:ff

   inet 192.168.211.76/24 brd 192.168.211.255 scope global eth1

    inet192.168.211.254/32 scope global eth1

   inet6 fe80::5054:ff:fe85:1195/64 scope link

      valid_lft forever preferred_lft forever


211.76上查看日志信息,看到已成功进入keepalived vip1组的主机模式,vip2组的备机模式。

1.jpg

211.77主机上查看信息

通过ip addr可以看到vip2 地址已经绑定在eth0eth1网口上

[root@localhost ~]# ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu65536 qdisc noqueue state UNKNOWN

   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

   inet 127.0.0.1/8 scope host lo

   inet6 ::1/128 scope host

      valid_lft forever preferred_lft forever

2: eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000

   link/ether 52:54:00:1b:a2:11 brd ff:ff:ff:ff:ff:ff

   inet 192.168.214.77/24 brd 192.168.214.255 scope global eth0

    inet 192.168.214.71/32 scope global eth0

   inet6 fe80::5054:ff:fe1b:a211/64 scope link

      valid_lft forever preferred_lft forever

3: eth1:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000

   link/ether 52:54:00:64:47:7d brd ff:ff:ff:ff:ff:ff

   inet 192.168.211.77/24 brd 192.168.211.255 scope global eth1

    inet192.168.211.253/32 scope global eth1

   inet6 fe80::5054:ff:fe64:477d/64 scope link

      valid_lft forever preferred_lft forever

 

211.77上查看日志信息,看到已成功进入keepalived vip1组的备机模式,vip2组的主机模式。

1.jpg

通过ipvsadm -L –n 查看相应lvs连接信息

211.76上查看

[root@localhost ~]# ipvsadm -L -n

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

 -> RemoteAddress:Port          Forward Weight ActiveConn InActConn

TCP 192.168.214.70:80 rr persistent 10

 -> 192.168.211.79:80           Masq    100    3         5        

TCP 192.168.214.71:8080 rr persistent 10

 -> 192.168.211.83:8080         Masq    100    0         0

 

211.77上查看

[root@localhost ~]# ipvsadm -L -n

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

 -> RemoteAddress:Port          Forward Weight ActiveConn InActConn

TCP 192.168.214.70:80 rr persistent 10

 -> 192.168.211.79:80           Masq    100    0         0        

TCP 192.168.214.71:8080 rr persistent 10

 -> 192.168.211.83:8080         Masq    100    3         4 


八、keepalived测试

使用vip1地址192.168.214.70访问后端web192.168.211.79的页面

2.jpg

使用vip2地址192.168.214.71访问后端web192.168.211.83的页面

3.jpg

正常访问没问题后,我们来模拟lvs集群故障,把前端lvs调度机主机211.76宕机,看211.77能否把vip1的地址漂移过来

通过ip addr命令查看发现vip1的地址都已经漂移过来了

[root@localhost ~]# ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu65536 qdisc noqueue state UNKNOWN

   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

   inet 127.0.0.1/8 scope host lo

   inet6 ::1/128 scope host

      valid_lft forever preferred_lft forever

2: eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000

   link/ether 52:54:00:1b:a2:11 brd ff:ff:ff:ff:ff:ff

    inet 192.168.214.77/24 brd 192.168.214.255scope global eth0

   inet 192.168.214.71/32 scope global eth0

    inet 192.168.214.70/32scope global eth0

   inet6 fe80::5054:ff:fe1b:a211/64 scope link

      valid_lft forever preferred_lft forever

3: eth1:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000

   link/ether 52:54:00:64:47:7d brd ff:ff:ff:ff:ff:ff

   inet 192.168.211.77/24 brd 192.168.211.255 scope global eth1

   inet 192.168.211.253/32 scope global eth1

    inet192.168.211.254/32 scope global eth1

   inet6 fe80::5054:ff:fe64:477d/64 scope link

      valid_lft forever preferred_lft forever

 

211.77上通过日志查看,看到vip1的地址已漂移了过来,变成了主机状态

May 15 14:38:26 localhostKeepalived_vrrp[11898]: VRRP_Instance(VI_1) Transitionto MASTER STATE

May 15 14:38:26 localhostKeepalived_vrrp[11898]: VRRP_Group(VG1) Syncing instances to MASTER state

May 15 14:38:26 localhostKeepalived_vrrp[11898]: VRRP_Instance(VI_GATEWAY1) Transitionto MASTER STATE

May 15 14:38:27 localhostKeepalived_vrrp[11898]: VRRP_Instance(VI_GATEWAY1)Entering MASTER STATE

May 15 14:38:27 localhostKeepalived_vrrp[11898]: VRRP_Instance(VI_GATEWAY1) setting protocol VIPs.

May 15 14:38:27 localhostKeepalived_vrrp[11898]: VRRP_Instance(VI_GATEWAY1) Sending gratuitous ARPs oneth1 for 192.168.211.254

May 15 14:38:27 localhostKeepalived_healthcheckers[11897]: Netlink reflector reports IP 192.168.211.254added

May 15 14:38:27 localhostKeepalived_vrrp[11898]: VRRP_Instance(VI_1) EnteringMASTER STATE

May 15 14:38:27 localhostKeepalived_vrrp[11898]: VRRP_Instance(VI_1) setting protocol VIPs.

May 15 14:38:27 localhostKeepalived_vrrp[11898]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for192.168.214.70

May 15 14:38:27 localhostKeepalived_healthcheckers[11897]: Netlink reflector reports IP 192.168.214.70added

May 15 14:38:32 localhostKeepalived_vrrp[11898]: VRRP_Instance(VI_GATEWAY1) Sending gratuitous ARPs oneth1 for 192.168.211.254

May 15 14:38:32 localhostKeepalived_vrrp[11898]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for192.168.214.70


如果想了解更多,请关注我们的公众号
公众号ID:opdevos
扫码关注

gongzhouhao.jpg

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LVS/NAT双主 + keepalived负载均衡实现 的相关文章

  • 【信道估计】【MIMO】【FBMC】未来移动通信的滤波器组多载波调制方案(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文章
  • 前端必备的 web 安全知识手记

    前言 安全这种东西就是不发生则已 一发生则惊人 作为前端 平时对这方面的知识没啥研究 最近了解了下 特此沉淀 文章内容包括以下几个典型的 web 安全知识点 XSS CSRF 点击劫持 SQL 注入和上传问题等 下文以小王代指攻击者 话不多
  • WEB前端常见受攻击方式及解决办法总结

    一个网址建立后 如果不注意安全问题 就很容易被人攻击 下面讨论一下集中漏洞情况和放置攻击的方法 一 SQL注入 所谓的SQL注入 就是通过把SQL命令插入到web表单提交或输入域名或页面请求的查询字符串 最终达到欺骗服务器执行恶意的SQL命
  • 每天10个前端小知识 <Day 8>

    1 Javascript中如何实现函数缓存 函数缓存有哪些应用场景 函数缓存 就是将函数运算过的结果进行缓存 本质上就是用空间 缓存存储 换时间 计算过程 常用于缓存数据计算结果和缓存对象 缓存只是一个临时的数据存储 它保存数据 以便将来对
  • 2024年金三银四网络安全考试试题

    2023年金三银四网络安全考试试题 1 关于数据使用说法错误的是 A 在知识分享 案例中如涉及客户网络数据 应取敏感化 不得直接使用 B 在公开场合 公共媒体等谈论 传播或发布客户网络中的数据 需获得客户书面授权或取敏感化 公开渠道获得的除
  • 通俗易懂,十分钟读懂DES,详解DES加密算法原理,DES攻击手段以及3DES原理

    文章目录 1 什么是DES 2 DES的基本概念 3 DES的加密流程 4 DES算法步骤详解 4 1 初始置换 Initial Permutation IP置换 4 2 加密轮次 4 3 F轮函数 4 3 1 拓展R到48位 4 3 2
  • 如何使用Imagewheel搭建一个简单的的私人图床无公网ip也能访问

    文章目录 1 前言 2 Imagewheel网站搭建 2 1 Imagewheel下载和安装 2 2 Imagewheel网页测试 2 3 cpolar的安装和注册 3 本地网页发布 3 1 Cpolar临时数据隧道
  • 基于java的web仓库管理系统设计与实现

    基于java的web仓库管理系统设计与实现 I 引言 A 研究背景和动机 基于Java的Web仓库管理系统是近年来快速发展的领域之一 它提供了丰富的功能 如数据存储 数据检索 数据分析和数据可视化等 本文将重点介绍基于Java的Web仓库管
  • Vue3 和Vue2的区别,以及钩子函数的使用

    Vue js 3 和 Vue js 2 是两个主要版本的流行前端框架 它们之间有很多区别 包括性能优化 新特性和改进的API等 以下是一些Vue 3与Vue 2之间的主要区别 以及一些示例代码来说明这些差异 1 性能优化 响应式系统 Vue
  • 【ES6】解构语句中的冒号(:)

    在解构赋值语法中 冒号 的作用是为提取的字段指定一个新的变量名 让我们以示例 const billCode code version route query 来说明 billCode code version 表示从 route query
  • 低代码配置-属性配置面板设计

    模块设计 tab项切换 组件基础属性 组件数据属性 组件事件属性 表单属性 模块输出函数设计 tab切换函数 列表表单属性 数据来源 调用接口时一次赋予 无需使用selectItem 如需使用 归入基础属性 列表标题 是否展示筛选区域
  • 新手也能看懂的【前端自动化测试入门】!

    前言 最近在网上搜索前端自动化测试相关的文档 但是发现网上的文章都是偏使用 没有把一些基础概念说清楚 导致后续一口气遇到一些 karma Jasmine jest Mocha Chai BDD 等词汇的时候很容易一头雾水 这次一方面整理一下
  • vue实现 marquee(走马灯)

    样式 代码 div class marquee prompt div class list prompt span class prompt item span div div data return listPrompt xxx xxxx
  • 短信系统搭建主要因素|网页短信平台开发源码

    短信系统搭建主要因素 网页短信平台开发源码 随着移动互联网的快速发展 短信系统已成为企业和个人进行信息传递的重要工具 建立一个高效可靠的短信系统对于企业来说非常重要 下面我们将介绍一些影响短信系统搭建的主要因素 1 平台选择 在搭建短信系统
  • MongoDB - 整合 SpringBoot 操作全流程

    目录 一 MongoDB 整合 SpringBoot 1 1 引入依赖 1 2 配置文件 1 3 集合操作 1 4 相关注解 1 5 文档操作 1 5 1 查询 1 5 2 更新 1 5 3 删除 一 MongoDB 整合 SpringBo
  • 【无标题】

    大家都知道该赛项的规程和样题向来都是模棱两可 从来不说具体的内容 导致选手在备赛时没有头绪 不知道该怎么训练 到了赛时发现题目和备赛的时候完全不一样 那么本文将以往年信息安全管理与评估赛项经验来解读今年2023年国赛的规程 帮助选手们指明方
  • ESP10B 锁定连接器

    ESP10B 锁定连接器 ESP10B 电机新增内容包括双极型号标准 NEMA 尺寸 17 23 和 34 的步进电机现在包括输出扭矩范围从 61 盎司英寸到 1291 盎司英寸的双极型号 该电机配有带锁定连接器的尾缆 可轻松连接 每转可步
  • 获取年与年之间的所有年份

    function getYearsBetween startYear endYear var years 存放结果的数组 for var year startYear year lt endYear year years push year
  • 如何在 Python 脚本中使用 Google OAuth2

    在使用 Python 脚本将视频上传到 YouTube 频道时 若希望将视频上传到第二个频道 需要解决 OAuth2 授权的问题 解决方案 创建新的 Google Cloud 项目 from google oauth2 import ser
  • 【安全】网络安全态势感知

    文章目录 一 态势感知简介 1 概念 2 形象举例 3 应具备的能力 二 为什么要态势感知 为什么网络安全态势感知很重要 三 态势感知系统的功能 四 如何评估态势感知的建设结果 五 什么是态势感知的三个层级 四 业界的态势感知产品 1 安全

随机推荐

  • drop table if exists 多张表_mysql实验--DROP 大表时的注意事项

    概述 我们很多时候都会去drop一些大表 特别是生产环境做操作时 这里主要提一些注意事项 仅供参考 01 相关语法 1 删表 DROP TABLE SyntaxDROP TEMPORARY TABLE IF EXISTS tbl name
  • Prometheus + Grafana 监控Docker

    Prometheus Grafana 监控Docker cAdvisor Container Advisor 用于收集正在运行的容器资源使用和性能信息 k8s中kubelet自带cadvisor监控所有节点 参考 https github
  • SQL注入(一)—— sql手动注入实操

    SQL SQL注入 sql 注入的核心 SQL 手注的一般流程 判断注入点 第一步 判断字段数 第二步 判断回显点 第三步 查询相关内容 第四步 判断库名 判断表名 判断列名 查询具体信息 总结 SQL注入 SQL注入攻击是目前web应用网
  • 【语义】如何使用PointNet训练点云数据和点云分割(初探)

    大家好 今天给大家介绍下cvpr2017 一篇文章Pointnet 语义分割 该网络基于tensorflow 写的 非常轻巧方便 但是文章和代码有一定出入 在训练过程中出现过拟合现象 大概训练了10个小时多 1 需要准备的东东 1 Ubun
  • 基于STM32F103RB的模拟液位检测告警系统(已实现)

    这次先看一下老朋友STM32 有关Zigbee的内容 Z stack协议栈和基于Zigbee的环境温湿度 烟雾传感器的环境监测系统 等有时间再更 基于STM32的模拟液位检测告警系统 记得好像是某一届蓝桥杯省赛题 基于STM32告警系统介绍
  • GTSAM曲线拟合与自定义因子

    GTSAM曲线拟合与自定义因子 在 视觉SLAM十四讲 中 第六章讲了最小二乘与曲线拟合 采用了三种方法 手动推导高斯牛顿方法 即自己构造正规方程 J T J x
  • 65nm芯片流片费用_研制自主可控芯片,他们凭实力在国赛中斩金!

    我们终于成功了 近日 在上海举办的 华为杯 第三届中国研究生创 芯 大赛上 来自国防科大电子科学学院的研究生张宇飞 黄力行 张诗清三人小组凭借作品 基于忆阻器的低功耗神经形态视觉处理器 获得全国一等奖 该作品是本次大赛唯一的 忆阻器 类脑芯
  • 电容和频率的关系_交流纯电容电路中电容的容抗、容量和频率以及电压与电流的关系...

    纯电容电路中各量之间的关系 电容容抗 如果不考虑电容器本身存在的泄露电阻影响 可以认为电容器是一个纯电容负载 当电容器两端接在交流电压上 在电压由零增至最大时 对电容器充电 有一充电电流 在电压由最大值降低至零时 电容器放电 有一放电电流
  • 京东商品评论分析

    文章目录 京东商品评论取 一 研究背景 二 爬取数据 2 1 完整代码 2 2 使用说明 三 词云分析 四 情感分析 转自艾派森博客 基于Python爬虫 词云图 情感分析对某东上完美日记的用户评论分析 该项目来源于 腾讯云 Cloud S
  • uses sdk:minSdkVersion 16 cannot be smaller than version 17 declared in library [:flutter_inappwebvi

    0 简述 1 报错信息 2 问题原因 3 解决方案 简述 今天用到flutter的一个第三方webview框架 但是无法正常编译 编译了两次都失败了 报错信息 uses sdk minSdkVersion 16 cannot be smal
  • Java面试题第八天

    一 Java面试题第八天 1 如何实现对象克隆 浅克隆 浅克隆就是我们可以通过实现Cloneable接口 重写clone 这种方式就叫浅克隆 浅克隆 引用类型的属性 是指向同一个内存地址 但是如果引用类型的属性也进行浅克隆就是深克隆 深克隆
  • 空调工作原理

    1 变频空调 工作原理 变频 采用了比较先进的技术 启动时电压较小 可在低电压和低温度条件下启动 这对于某些地区由于电压不稳定或冬天室内温度较低而空调难以启动的情况 有一定的改善作用 由于实现了压缩机的无级变速 它也可以适应更大面积的制冷制
  • 8、es---深入聚合数据分析

    一 bucket与metric 1 bucket相当于mysql的group by 2 metric 对一个数据分组执行的统计 比如说求平均值 求最大值 求最小值 二 实战 1 例1 查询参数及结果说明 GET tvs sales sear
  • 欧拉降幂(广义欧拉降幂)

    第一个要求a和p互质 第二个和第三个是广义欧拉降幂 不要求a和p互质 但要求b和的大小关系 A K A K m m mod m K gt m 1 证明如下 1 若 A m 1 根据欧拉定理 A m 1 mod m 即可轻易得证 2 若 A
  • Java基础之比较器

    文章目录 一 背景 二 Comparable 自然排序 三 Comparator 定制排序 一 背景 Java中的对象 正常情况下 只能进行比较 或 不能使用 gt 或 lt 的 但是在开发场景中 我们需要对多个对象进行排序 言外之意 就需
  • 斗地主练习(按照斗地主的规则,完成洗牌发牌的动作。)

    按照斗地主的规则 完成洗牌发牌的动作 具体规则 使用54张牌 打乱顺序 三个玩家参与游戏 三人交替摸牌 每人17张牌 最后三张留作底牌 手中的牌按从小到大的顺序排列 import java util ArrayList import jav
  • 记下对方的证据,抹掉自己的证据

    记下对方的证据 抹掉自己的证据 http blog vsharing com itdays A908824 html 原创 记下对方的证据 抹掉自己的证据 公司另一个部门让我告诉他们 我们的国外那家技术服务商的服务怎么样 正好被那家公司给折
  • 【有奖下载】IMG DXT GPU 让光线追踪触手可及

    继 IMG CXT GPU 之后 2023 年 1 月 Imagination 正式推出 IMG DXT GPU 这款开创性的光追 GPU 将为所有移动设备用户带来最先进的图形技术 从高端设备到主流设备 D 系列的首款产品 IMG DXT
  • this is biaoti

    富文本咯咯咯咯咯咯 早上好吃了吗
  • LVS/NAT双主 + keepalived负载均衡实现

    一 keepalived简介 keepalived是分布式部署解决系统高可用的软件 结合lvs LinuxVirtual Server 使用 解决单机宕机的问题 keepalived是一个基于VRRP协议来实现IPVS的高可用的解决方案 对