zabbix监控keepalived主备状态以及脑裂

news2024/11/30 0:52:50

zabbix监控keepalived主备状态以及脑裂

文章目录

  • zabbix监控keepalived主备状态以及脑裂
    • 环境说明:
      • 1.配置keepalived监控主备状态的脚本
        • 在master主机上编写脚本
        • 在slave主机上编写脚本
      • 2.配置keepalived加入监控脚本的配置
        • 2.1.配置主keepalived配置文件
        • 2.2.配置备keepalived
        • 第一轮测试(测试keepalived是否监控haproxy负载均衡机)
      • 3.对keepalived进行监控
        • 3.1.在要slave主机(haproxy2)上安装agent
        • 3.2.编辑一个脚本文件,用于获取服务的进程(脚本默认放在同一个地方,此处我们创建一个专门用于放置脚本文件的目录,放置到/scripts,不要放在用户家目录下面,防止后续出现权限受限的问题)
        • 3.3.添加主机
        • 3.4.创建监控项
        • 3.5.创建触发器
        • 4.6.第二轮测试
        • 4.7.邮箱通知
        • 4.7.邮箱通知

环境说明:

服务器名称IP地址所需服务\架构系统版本
zabbix192.168.195.130lamp架构,zabbix_servercentos 8
haproxy1192.168.195.133keepalived,haproxycentos 8
haproxy2192.168.195.134keepalived,haproxycentos 8
web1192.168.195.135httpcentos 8
web2192.168.195.136httpcentos 8

注:下列步骤中,有关与zabbix监控服务、自定义监控以及haproxy配置负载均衡的详细内容,可以通过访问下列官网查看

监控服务zabbix部署-CSDN博客

zabbix服务自定义监控_碳烤小肥杨…的博客-CSDN博客

haproxy负载均衡-CSDN博客

1.配置keepalived监控主备状态的脚本

keepalived通过脚本监控负载均衡机的状态

在master主机上编写脚本
//该脚本是为了得知master主机上是否存在haproxy服务进程,如果没有则说明服务出现了问题,无法正常提供服务,所以我们写入判断,当haproxy进程小于1时则关闭keepalived服务,自动释放内存

[root@haproxy1 ~]# mkdir /scripts && cd /scripts
[root@haproxy1 scripts]# vim check_haproxy.sh
[root@haproxy1 scripts]# cat check_haproxy.sh
#!/bin/bash

haproxy_status=$(ps -ef|grep -Ev "grep|$0"|grep '\bhaproxy\b'|wc -l)
if [ $haproxy_status -lt 1 ];then
    systemctl stop keepalived
fi

[root@haproxy1 scripts]# chmod +x check_haproxy.sh
[root@haproxy1 scripts]# ll
total 4
-rwxr-xr-x 1 root root 148 Oct 13 21:21 check_haproxy.sh
在slave主机上编写脚本
//该脚本是为了得知本主机是处于哪种状态(mastert|slave),当本主机变成master主机后,则进行第一个判断,当haproxy服务进程数小于1时,开启haproxy服务,继续进行负载均衡;而当本主机变回slave主机后,则进行第二个判断,当haproxy服务进程大于0时,关闭haproxy服务,避免与master主机上的haproxy服务产生冲突,从而导致流量无法正确转移到后端的web页面主机

[root@haproxy2 ~]# mkdir /scripts && cd /scripts
[root@haproxy2 scripts]# vim notify.sh
[root@haproxy2 scripts]# cat notify.sh 
#!/bin/bash

case "$1" in
  master)
        haproxy_status=$(ps -ef|grep -Ev "grep|$0"|grep '\bhaproxy\b'|wc -l)
        if [ $haproxy_status -lt 1 ];then
            systemctl start haproxy
        fi
  ;;
  backup)
        haproxy_status=$(ps -ef|grep -Ev "grep|$0"|grep '\bhaproxy\b'|wc -l)
        if [ $haproxy_status -gt 0 ];then
            systemctl stop haproxy
        fi
  ;;
  *)
        echo "Usage:$0 master|backup VIP"
  ;;
esac
[root@haproxy2 scripts]# chmod +x notify.sh
[root@haproxy2 scripts]# ls
notify.sh
[root@haproxy2 scripts]# ll
total 4
-rwxr-xr-x 1 root root 461 Oct 13 21:25 notify.sh

2.配置keepalived加入监控脚本的配置

2.1.配置主keepalived配置文件
[root@haproxy1 ~]# vim /etc/keepalived/keepalived.conf  
[root@haproxy1 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id haproxy1
}

vrrp_script haproxy_check {
    script "/scripts/check_haproxy.sh"
    interval 1
    fall 3
    weight -40
}

vrrp_instance VI_1 {
    state MASTER
    interface ens160
    virtual_router_id 80
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 12345678
    }
    virtual_ipaddress {
        192.168.195.100
    }
    track_script {
        haproxy_check
    }
}

virtual_server 192.168.195.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.195.133 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
          }
        }
    real_server 192.168.195.134 80 {
        weight 1
        TCP_CHECK {
            connect_port 80 
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
          }
        }
}

[root@haproxy1 ~]# systemctl restart keepalived.service
2.2.配置备keepalived
[root@haproxy2 ~]# vim /etc/keepalived/keepalived.conf 
[root@haproxy2 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id haproxy2
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens160
    virtual_router_id 80
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 12345678
    }
    virtual_ipaddress {
        192.168.195.100
    }
    notify_master "/scripts/notify.sh master"
    notify_backup "/scripts/notify.sh backup"
}

virtual_server 192.168.195.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.195.133 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
          }
        }
    real_server 192.168.195.134 80 {
        weight 1
        TCP_CHECK {
            connect_port 80 
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
          }
        }
}

[root@haproxy2 ~]# systemctl restart keepalived.service
第一轮测试(测试keepalived是否监控haproxy负载均衡机)

测试前查看服务状态

master主机
//keepalived服务和haproxy服务正常运行,查看vip
[root@haproxy1 ~]# systemctl is-active haproxy.service 
active
[root@haproxy1 ~]# systemctl is-active keepalived.service 
active
[root@haproxy1 ~]# ip a show ens160 | grep 192.168.195.100
    inet 192.168.195.100/32 scope global ens160
[root@haproxy1 ~]# ip a show ens160 | grep 192.168.195.100 | wc -l
1
[root@haproxy1 ~]# ss -antl
State         Recv-Q        Send-Q                 Local Address:Port                 Peer Address:Port        
LISTEN        0             128                          0.0.0.0:80                        0.0.0.0:*           
LISTEN        0             128                          0.0.0.0:22                        0.0.0.0:*           
LISTEN        0             128                          0.0.0.0:8189                      0.0.0.0:*           
LISTEN        0             128                             [::]:22                           [::]:*

slave主机
//haproxy服务关闭,keepalved服务保持开启
[root@haproxy2 ~]# systemctl is-active haproxy.service 
inactive
[root@haproxy2 ~]# systemctl is-active keepalived.service 
active
[root@haproxy2 ~]# ip a show ens160 | grep 192.168.195.100
[root@haproxy2 ~]# ip a show ens160 | grep 192.168.195.100 | wc -l
0
[root@haproxy2 ~]# ss -antl
State         Recv-Q        Send-Q                 Local Address:Port                 Peer Address:Port        
LISTEN        0             128                          0.0.0.0:22                        0.0.0.0:*           
LISTEN        0             128                             [::]:22                           [::]:*

测试中

模拟master主机(haproxy1)的haproxy服务超负载导致服务关闭

//关闭haproxy服务后,keepalived配置文件中追踪的脚本检测到haproxy服务进程消失,则执行关闭keepalived服务的命令,自动释放内存,同时vip也会跳转到slave主机(haproxy2)主机上,从而成为新的master
[root@haproxy1 ~]# systemctl stop haproxy.service 
[root@haproxy1 ~]# systemctl is-active haproxy.service 
inactive
[root@haproxy1 ~]# systemctl is-active keepalived.service 
inactive
[root@haproxy1 ~]# ip a show ens160 | grep 192.168.195.100
[root@haproxy1 ~]# ip a show ens160 | grep 192.168.195.100 | wc -l
0
[root@haproxy1 ~]# ss -antl
State         Recv-Q        Send-Q                 Local Address:Port                 Peer Address:Port        
LISTEN        0             128                          0.0.0.0:22                        0.0.0.0:*           
LISTEN        0             128                             [::]:22                           [::]:*

//此时我们再去查看slave主机(haproxy2)上的haproxy服务和vip,通过keepalived配置文件中的脚本检测,vip跳转到本机,本机成为新的master主机之后,执行master主机的任务,从而开启haproxy服务,继续进行负载均衡的任务
[root@haproxy2 ~]# systemctl is-active haproxy.service 
active
[root@haproxy2 ~]# ss -antl
State         Recv-Q        Send-Q                 Local Address:Port                 Peer Address:Port        
LISTEN        0             128                          0.0.0.0:8189                      0.0.0.0:*           
LISTEN        0             128                          0.0.0.0:80                        0.0.0.0:*           
LISTEN        0             128                          0.0.0.0:22                        0.0.0.0:*           
LISTEN        0             128                             [::]:22                           [::]:*           
[root@haproxy2 ~]# ip a show ens160 | grep 192.168.195.100
    inet 192.168.195.100/32 scope global ens160
[root@haproxy2 ~]# ip a show ens160 | grep 192.168.195.100 | wc -l
1

//当我们的运维人员检修之后,使得源master主机(haproxy1)上的haproxy服务重启运行之后,我们再次开启keepalived服务,我们的vip将会被抢回来,从而重新成为master,而salve主机上的则会失去master的权利

master主机(haproxy1)
[root@haproxy1 ~]# systemctl start haproxy.service keepalived.service 
[root@haproxy1 ~]# systemctl is-active haproxy.service 
active
[root@haproxy1 ~]# systemctl is-active keepalived.service 
active
[root@haproxy1 ~]# ss -antl
State         Recv-Q        Send-Q                 Local Address:Port                 Peer Address:Port        
LISTEN        0             128                          0.0.0.0:80                        0.0.0.0:*           
LISTEN        0             128                          0.0.0.0:22                        0.0.0.0:*           
LISTEN        0             128                          0.0.0.0:8189                      0.0.0.0:*           
LISTEN        0             128                             [::]:22                           [::]:*           
[root@haproxy1 ~]# ip a show ens160 | grep 192.168.195.100
    inet 192.168.195.100/32 scope global ens160
[root@haproxy1 ~]# ip a show ens160 | grep 192.168.195.100 | wc -l
1

slave主机(haproxy2)
[root@haproxy2 ~]# systemctl is-active haproxy.service 
inactive
[root@haproxy2 ~]# systemctl is-active keepalived.service 
active
[root@haproxy2 ~]# ip a show ens160 | grep 192.168.195.100
[root@haproxy2 ~]# ip a show ens160 | grep 192.168.195.100 | wc -l
0
[root@haproxy2 ~]# ss -antl
State         Recv-Q        Send-Q                 Local Address:Port                 Peer Address:Port        
LISTEN        0             128                          0.0.0.0:22                        0.0.0.0:*           
LISTEN        0             128                             [::]:22                           [::]:*

3.对keepalived进行监控

对keepalived服务的监控应在备用服务器上进行,通过添加zabbix自定义监控进行。
监控的信息是备上面有无VIP地址(192.168.195.100)

备机上出现VIP有两种情况:

  • 发生了脑裂
  • 正常的主备切换

监控只是监控发生脑裂的可能性,不能保证一定是发生了脑裂,因为正常的主备切换VIP也是会到备上的。

监控脚本如下:

[root@haproxy2 ~]# cd /scripts/
[root@haproxy2 scripts]# vim check_keepalived.sh
[root@haproxy2 scripts]# chmod +x check_keepalived.sh
[root@haproxy2 scripts]# cat check_keepalived.sh
#!/bin/bash

if [ `ip a show ens160 | grep 192.168.195.100 | wc -l` -ne 0 ]
then
    echo "1"
else
    echo "0"
fi
[root@haproxy2 scripts]# ll
total 8
-rwxr-xr-x 1 root root 115 Oct 14 00:06 check_keepalived.sh
-rwxr-xr-x 1 root root 444 Oct 13 22:01 notify.sh	
3.1.在要slave主机(haproxy2)上安装agent
//下载zabbix
[root@haproxy2 ~]# wget https://cdn.zabbix.com/zabbix/sources/stable/6.4/zabbix-6.4.6.tar.gz
--2023-10-14 00:47:19--  https://cdn.zabbix.com/zabbix/sources/stable/6.4/zabbix-6.4.6.tar.gz
Resolving cdn.zabbix.com (cdn.zabbix.com)... 172.67.69.4, 104.26.6.148, 104.26.7.148, ...
Connecting to cdn.zabbix.com (cdn.zabbix.com)|172.67.69.4|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 43744978 (42M) [application/octet-stream]
Saving to: ‘zabbix-6.4.6.tar.gz.1’

zabbix-6.4.6.tar.gz.1       100%[==========================================>]  41.72M   600KB/s    in 2m 0s   

2023-10-14 00:49:20 (356 KB/s) - ‘zabbix-6.4.6.tar.gz.1’ saved [43744978/43744978]

[root@haproxy2 ~]# ls
anaconda-ks.cfg  haproxy-2.7.10  haproxy-2.7.10.tar.gz  zabbix-6.4.6.tar.gz

//创建用户并解压zabbix压缩包
[root@haproxy2 ~]# tar xf zabbix-6.4.6.tar.gz -C /usr/local/
[root@haproxy2 ~]# cd /usr/local/ && ls
bin  etc  games  haproxy  include  lib  lib64  libexec  sbin  share  src  zabbix-6.4.6
[root@haproxy2 local]# cd zabbix-6.4.6/
[root@haproxy2 zabbix-6.4.6]# useradd -r -M -s /sbin/nologin zabbix

//安装编译安装所需要的软件包
[root@haproxy2 zabbix-6.4.6]# yum -y install gcc gcc-c++ make

//进入zabbix-6.4.6的目录进行编译
[root@haproxy2 zabbix-6.4.6]# ./configure --enable-agent
省略. . .
***********************************************************
*            Now run 'make install'                       *
*                                                         *
*            Thank you for using Zabbix!                  *
*              <http://www.zabbix.com>                    *
***********************************************************
最后报这个则表示编译成功,可直接使用make install安装

[root@haproxy2 zabbix-6.4.6]# make install

//修改zabbix客户端的配置文件
[root@haproxy2 zabbix-6.4.6]# vim /usr/local/etc/zabbix_agentd.conf
[root@haproxy2 zabbix-6.4.6]# grep -A2 '# ServerActive=' /usr/local/etc/zabbix_agentd.conf
# ServerActive=

ServerActive=192.168.195.130   //改为server端的ip
[root@haproxy2 zabbix-6.4.6]# grep -A2 '# Server=' /usr/local/etc/zabbix_agentd.conf
# Server=

Server=192.168.195.130        //改为server端的ip
[root@haproxy2 zabbix-6.4.6]# grep -A2 '# Hostname=' /usr/local/etc/zabbix_agentd.conf
# Hostname=

Hostname=note2          //修改主机名,必须全局唯一

//设置zabbix_agentd开机自启,将zabbix_server端配置好了的service文件传到slave(haproxy2)这台主机
[root@zabbix ~]# scp /usr/lib/systemd/system/zabbix_agentd.service root@192.168.195.134:/usr/lib/systemd/system/
root@192.168.195.134's password: 
zabbix_agentd.service                                                               100%  227   211.4KB/s   00:00

[root@haproxy2 ~]# systemctl daemon-reload 
[root@haproxy2 ~]# systemctl enable --now zabbix_agentd.service 
Created symlink /etc/systemd/system/multi-user.target.wants/zabbix_agentd.service → /usr/lib/systemd/system/zabbix_agentd.service.
[root@haproxy2 ~]# ss -antl
State         Recv-Q        Send-Q                Local Address:Port                  Peer Address:Port        
LISTEN        0             128                         0.0.0.0:10050                      0.0.0.0:*           
LISTEN        0             128                         0.0.0.0:22                         0.0.0.0:*           
LISTEN        0             128                            [::]:22                            [::]:*
服务启动成功
3.2.编辑一个脚本文件,用于获取服务的进程(脚本默认放在同一个地方,此处我们创建一个专门用于放置脚本文件的目录,放置到/scripts,不要放在用户家目录下面,防止后续出现权限受限的问题)
//该脚本得到的是主机上是否存在vip,如果slave主机(haproxy2)上存在vip,则说明master主机(haproxy1)上的haproxy服务出现问题,返回值报1,说明服务出现问题

[root@haproxy2 ~]# cd /scripts/
[root@haproxy2 scripts]# vim check_keepalived.sh 
[root@haproxy2 scripts]# cat check_keepalived.sh
#!/bin/bash

if [ `ip a show ens160 | grep 192.168.195.100 | wc -l` -ne 0 ]
then
    echo "1"
else
    echo "0"
fi
[root@haproxy2 scripts]# chmod +x check_keepalived.sh
[root@haproxy2 scripts]# ./check_keepalived.sh   //显示0说明该主机上没有vip
0

//进入配置文件,创建自定义监控任务
[root@haproxy2 scripts]# vim /usr/local/etc/zabbix_agentd.conf
[root@haproxy2 scripts]# tail -1 /usr/local/etc/zabbix_agentd.conf
UserParameter=check_keepalived,/bin/bash /scripts/check_keepalived.sh

//因为我们修改了配置文件,所以需要重启服务,重新读取配置文件内容
[root@haproxy2 scripts]# systemctl restart zabbix_agentd.service

//创建自定义监控任务后,我们需要在server端去测试一下是否能接受到被监控端的值
[root@client ~]# zabbix_get -s 192.168.195.134 -k check_keepalived
0      //成功接收到值

主机上的配置完成

3.3.添加主机

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

3.4.创建监控项

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

3.5.创建触发器

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

4.6.第二轮测试

模拟master主机(haproxy1)的haproxy服务超负载导致服务关闭
在这里插入图片描述

master主机(haproxy1)
[root@haproxy1 ~]# systemctl stop haproxy.service
[root@haproxy1 ~]# systemctl is-active haproxy.service 
inactive
[root@haproxy1 ~]# systemctl is-active keepalived.service 
inactive
[root@haproxy1 ~]# ss -antl
State         Recv-Q        Send-Q                 Local Address:Port                 Peer Address:Port        
LISTEN        0             128                          0.0.0.0:22                        0.0.0.0:*           
LISTEN        0             128                             [::]:22                           [::]:*           
[root@haproxy1 ~]# ip a show ens160 | grep 192.168.195.100
[root@haproxy1 ~]# ip a show ens160 | grep 192.168.195.100 | wc -l
0

slave主机(haproxy2)
[root@haproxy2 ~]# systemctl is-active haproxy.service 
active
[root@haproxy2 ~]# systemctl is-active keepalived.service 
active
[root@haproxy2 ~]# ip a show ens160 | grep 192.168.195.100
    inet 192.168.195.100/32 scope global ens160
[root@haproxy2 ~]# ip a show ens160 | grep 192.168.195.100 | wc -l
1
[root@haproxy2 ~]# ss -antl
State         Recv-Q        Send-Q                Local Address:Port                  Peer Address:Port        
LISTEN        0             128                         0.0.0.0:8189                       0.0.0.0:*           
LISTEN        0             128                         0.0.0.0:10050                      0.0.0.0:*           
LISTEN        0             128                         0.0.0.0:80                         0.0.0.0:*           
LISTEN        0             128                         0.0.0.0:22                         0.0.0.0:*           
LISTEN        0             128                            [::]:22                            [::]:*

在这里插入图片描述

4.7.邮箱通知

若想要实现发送邮箱的效果,详细步骤在下列网站中查看

[zabbix服务配置邮箱告警(定义媒介、配置动作)_碳烤小肥杨…的博客-CSDN博客]

4.7.邮箱通知

若想要实现发送邮箱的效果,详细步骤在下列网站中查看

zabbix服务配置邮箱告警(定义媒介、配置动作)_碳烤小肥杨…的博客-CSDN博客
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1095929.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Godot C#连接信号不能像GDScirpt一样自动添加代码

前言 我网上找了好久&#xff0c;发现Godot 对于C# 的支持还有待增强 使用c#脚本有办法像gds那样连接节点自带信号时自动生成信号吗&#xff1f; 百度贴吧 Godot C# How To, Episode 9. Signals With Parameters | Godot Mono 解决方案 把信号拉长&#xff0c;看他的属性 修…

Python与JAVA有何区别?

多年来&#xff0c;程序员一直在寻找一种编程语言&#xff0c;使用这种编程语言&#xff0c;你只需编写一次应用程序&#xff0c;即可让它运行在多种平台之下。Java就是一种跨平台的编程语言&#xff0c;为此Java需要使用一些技巧&#xff0c;相关内容你会在本书后面了解到。而…

【Java 进阶篇】JavaScript DOM 编程:理解文档对象模型

在 web 开发中&#xff0c;DOM&#xff08;文档对象模型&#xff09;是一个重要的概念。DOM 是一种将网页文档表示为树状结构的方式&#xff0c;允许开发者使用 JavaScript 来访问和操作网页的内容。本篇博客将详细介绍 DOM&#xff0c;包括什么是 DOM、如何访问 DOM 元素、如何…

华为云云耀云服务器L实例评测|企业项目最佳实践之压测 (十一)

十二、云服务器压测&#xff1a; 服务器压测可以选择工具sysbench&#xff0c;它可以模拟几千个线程并发的访问实例。作为一款广泛使用的开源模块化的、跨平台、多线程基准测试工具&#xff0c;sysbench主要用于评估服务器系统在不同负载条件下的性能表现。 sysbench具有简单易…

PYTHON进阶-面向对象编程

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

基于Java的家电销售网站管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域…

C++位图和布隆过滤器

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容介绍C中的位图和布隆过滤器模拟实现和简单的应用 文章目录 …

求直角三角形第三点的坐标

文章目录 求直角三角形第三点的坐标1. 原理2. 数学公式3. 推导过程 求直角三角形第三点的坐标 1. 原理 已知内容有&#xff1a; P1、P2 两点的坐标&#xff1b; dis1 为 P1与P2两点之间的距离&#xff1b; dis2 为 P2与P3两点之间的距离&#xff1b; 求解&#xff1a; …

10、网络防火墙的设置

1、查看防火墙是否开启 systemctl status firewalld 此图表示防火墙已开启&#xff0c;如果未开启可使用systemctl start firewalld开启 2、查看已开启的端口 firewall-cmd --list-ports 默认无打开的端口 3、打开80端口 firewall-cmd --zonepublic --add-port80/tcp --p…

stm32备份

存储器的分类&#xff1a; 存储器首先根据断电后存储的数据是否会丢失&#xff0c;可以分为易失存储器和非易失存储器&#xff0c;易失存储器主要应用于内存&#xff0c;非易失存储器主要用于外存。 易失存储器以RAM随机存储器为代表&#xff0c;随机的含义是存储器中的数据读取…

EfficientDet: Scalable and Efficient Object Detection

CVPR2020 V7 Mon, 27 Jul 2020 引用量&#xff1a;243 机构&#xff1a;Google 贡献&#xff1a;1>提出了多尺度融合网络BiFPN 2>对backbone、feature network、box/class prediction network and resolution进行复合放缩&#xff0c;有着不同的…

Linux第4章-目录结构

引子 在Linux中&#xff0c;一切皆文件&#xff01;&#xff01;&#xff01; 在Linux中&#xff0c;一切皆文件&#xff01;&#xff01;&#xff01; 在Linux中&#xff0c;一切皆文件&#xff01;&#xff01;&#xff01; 基本介绍 1.Linux的文件系统&#xff0c;是采用…

LoRA 是如何工作的?

概述 纯笔记 LoRA的原理 LoRA其实是对稳定扩散模型最关键的部分进行了微小的改变。 这个关键的部分叫&#xff1a;cross-attention layers – 交叉注意力层。 研究人员发现&#xff0c;对这关键部分进行微调就足以实现良好的训练。 上面黄色部分&#xff0c;QKV 部分就是&a…

Python进阶之迭代器

文章目录 前言一、迭代器介绍及作用1.可迭代对象2. 迭代器 二、常用函数和迭代器1.常用函数2.迭代器 三、总结结束语 &#x1f482; 个人主页:风间琉璃&#x1f91f; 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主&#x1f4ac; 如果文章对你有帮助、欢迎关注…

ELK 日志分析系统介绍与部署

目录 一、ELK 简介: 1.开源工具介绍&#xff1a; 2.其它组件&#xff1a; 2.1 Filebeat&#xff1a; 2.2 Fluentd&#xff1a; 2.3 缓存/消息队列&#xff08;redis、kafka、RabbitMQ等&#xff09;&#xff1a; 3. filebeat 结合 logstash 带来好处&#xff1a; 二、为什么要…

zookeeper源码学习笔记(一)

一、缘起 1、CP还是AP 作为一个在大数据行业工作了7&#xff5e;8年的老兵&#xff0c;在被问到zookeeper和CAP时&#xff0c;竟然有些恍惚&#xff0c;AP还是CP&#xff1f; 看了一些博文&#xff0c;答案几乎都是CP&#xff1f; zookeeper的实现中&#xff0c;P是一定的&…

【C语言】.c源文件从编译到链接生成可执行程序的过程

本篇文章目录 1. 过程概览2. 编译与链接2.1 预编译/预处理2.2 编译2.3 汇编2.4 链接 3. 执行/运行环境 1. 过程概览 编译到链接是c语言的翻译环境&#xff0c;c语言还有执行环境。 组成一个程序的每个源文件通过编译过程分别转换成目标代码&#xff08;object code&#xff09;…

推荐《一拳超人》

《一拳超人》是ONE原作&#xff0c;村田雄介作画&#xff0c;连载于网络漫画杂志《邻座的Young jump》上的漫画。 [1] 原为ONE在个人网站上连载的练笔之作&#xff0c; [2] 后被喜爱该作的另一漫画家村田雄介在征得ONE同意后重新绘制而成。 简体中文电子版由哔哩哔哩漫画发布…

JavaSE学习值之--认识异常

&#x1f495;"有效知识的前提是承认知识边界&#xff0c;承认我们对边界那边的一切无可奉告。"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;JavaSE学习值之--认识异常 一.什么是异常&#xff1f; 异常就是程序在运行的时候产生的不正常的行为 …

java_Stream API

文章目录 一、Stream API vs 集合二、Stream 使用的执行流程2.1、创建Stream2.1、中间操作2.1.1. filter2.1.2. limit2.1.3. skip2.1.4. distinct2.1.5. map2.1.6. sorted 一、Stream API vs 集合 Stream API 关注的是多个数据的计算&#xff08;排序、查找、过滤、映射、遍历…