linux集群架构--高可用--keepalived(13985字详解)

news2024/11/28 9:30:35

linux架构高可用

a.概述

  • 高可用:HA HighAvailablity —>Keepalived
  • 生成VIP,DNS解析到这个IP地址即可

在这里插入图片描述

b.原理

  • keepalived 是基于VRRP协议实现高可用
  • VRRP虚拟路由器冗余协议,最开始是给网络设备实现高可用,目前keepalive实现vrrp协议,通过vrrp实现高可用
  • 分为主,备一般是2个节点,主备之间是通过vrrp协议发送数据包沟通
  • 主给备定期发送数据包,备份收到数据包表示主还活着,备无法收到数据包,表示主挂了,备胎转正了,接管用户请求流量
  • vrrp协议使用组播的ip 224.224.xx.xx

c.部署环境

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

部署服务

[root ~]#yum install -y keepalived 
[root ~]#yum install -y keepalived 
  • 安装成功界面:
    在这里插入图片描述

keepalived配置文件分类(分为3部分)

在这里插入图片描述

[root ~]#cp /etc/keepalived/keepaliv  #备份

#配置文件36行到结尾为lvs相关配置,可以删掉
#删的时候注意花括号:问题
#技巧:把光标放在花括号上面,按% :光标会在同一对引号中进行来回切换,如果没有切换说明花括号没有成对!!!
[root]# cat /etc /keepalived/keepalived.conf
! Configuration File for keepalived

#全局定义部分
global_defs {
     router_id lb01  #每一个keepalived的名字,当前网络中唯一
}

#vrrp实例配置部分 用于配置VIP virtual_ipaddress

vrrp_instance vip_3 {   #vrrp实例名字
                        #设备1对主备之间使用的名字       注意在同一对主备之间这个名字需要一致
   state MASTER         #主/备     MASTER主    BACKUP备   SLAVE----(大写)
   interface  eth0      #指定网卡
   virtual_router_id 51 #在一对主备之间设置的1个 id号   1对主备之间id同一号即可
   priority 100         #优先级  数字越大优先级越高,设置建议:主》备 100 50 相差50
   advert_int 1         #心跳间隔,多久发送一次vrrp数据包
   authentication   {   #授权与认证,保持默认即可,对数据包加密
        auth_type PASS
        auth_pass 1111
                    
   }
   virtual_ipaddress {  #设置vip*****
         10.0.0.3 dev eth0 label eth0:0    #label 设置了别名
   }
}

lb01配置

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

global_defs {
       router_id lb01
}

vrrp_instance vip_3 {
      state MASTER
      interface eth0
      virtual_router_id 51
      priority 100
      advert_int 1
      authentication {
	         auth_type PASS
	         auth_pass 1111
      }
      virtual_ipaddress {
          10.0.0.3 dev eth0 label eth0:0
      }
}

lb02配置

!Configuration File for keepalived

global_defs {
       router_id lb02
}

vrrp_instance vip_3 {
      state BACKUP
      interface eth33
      virtual_router_id 51
      priority 50
      advert_int 1
      authentication {
                 auth_type PASS
                 auth_pass 1111
      }
      virtual_ipaddress {
          10.0.0.3 dev eth0 label eth0:0
      }
}

1. lb01与lb02对比

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

2.关闭lb01的keepalived,现象:

在这里插入图片描述

3.启动lb01的keepalive的,现象:

在这里插入图片描述

上述两个现象概括为:IP漂移

抓包查看

在这里插入图片描述

4. 脑裂故障

脑裂、裂脑:

           1. 现象:主备都有vip
           2. 原因:
-  备认为主挂了,接管资源生成VIP,实际上主并没有挂,仍有VIP
- 有很多原因可以导致脑裂,开启防火墙,selinux。配置,物理线路

3. 解决
   - 监控(备节点监控),只要备节点有VIP就告警了
   - 更狠一点监控备节点只要有VIP,远程控制主节点,只要备节点认为主挂了,那么他就真挂了

脑裂模拟:
在这里插入图片描述

以后可以在备节点写一个脚本,判断备节点是否有VIP,如果有发送告诫短信,告诫邮件等等

案例:keepalived基于主机高可用软件

  • keepalived只会在主机挂了,网络断开后,才会进行主备切换.
  • 默认情况下keepalived不会监控某个服务.
  • 项目目标:某个服务关闭了,keepalived就进行主备切换.
  • 项目步骤:
  1. 书写脚本,过滤服务进程数,端口数量,检查是否运行.
  2. 然后进行判断如果服务没有运行,则关闭keepalived.
  3. 修改keepalived配置文件,通过keepalived调用这个脚本.
  • 书写脚本:(小脚本)
[root@lb01 ~]#vim /server/scripts/check_ngx.sh
[root@lb01 ~]#sh /server/scripts/check_ngx.sh
调试:ngx 端口数量1
[root@lb01 ~]# ip a |grep 0.3
     inet 10.0.0.3/32 scope global eth0:0
[root@lb01 ~]#pkill nginx
[root@lb01 ~]#sh /server/scripts/check_ngx.sh
调试:ngx 端口数量 0
[root@lb01 ~]#ip a |grep 0.3
[root@lb01 ~]#sh -x  这里没有进行显示进程号

[root@lb01 ~]#sh -x /server/scripts/check_ngx.sh
++ grep nginx
++ wc  -l
++ ss -lntup
+ count=0
+ echo '调试:ngx 端口数量 0'
调试: ngx 端口数量 0
+ '[' 0 - eq 0 ']'
+ systemctl stop keepalived
#!/bin/bash
#author:wulin
#version: v1.0
#desc : keepalived  检查nginx 端口数量,检查是否运行

#1.取出ngx端口数量
Port_cnt=`ss -lntup |grep nginx |wc -l`
ech0 "调试:ngx 端口数量 ${count}"

#2.进行判断,数量等于0
if [ $count -eq 0 ];then
    systemctl stop keepalived
fi
  1. 注意给脚本加执行权限
  2. 脚本名字中不要包含服务名字

书写keepalived配置文件

[root@lb01 ~]#chmod + x /server/scripts/check_ngx,sh
[root@lb01 ~]# ll /server/scripts/check_ngx.sh
-rwxr-xr-x 1 root root 360 jun  /ser/scripts/check_ngx.sh

配置文件编写
[root@lb01 ~]# vim /etc/keepalived/keepalived.conf
!Configuration File for keepalived

global_defs {
       router_id lb01
}

#变量 check_ngx
vrrp_script check_ngx {
      script /server/scripts/check_ngx.sh  #调用这个文件脚本
      interval 2           #调用时间
      weight 1             #权重(未来要监控多个服务,脚本涉及到权重)
      user root            #脚本root运行
}

vrrp_instance vip_3 {
      state MASTER
      interface eth0
      virtual_router_id 51
      priority 100
      advert_int 1
      authentication {
	         auth_type PASS
	         auth_pass 1111
      }
      virtual_ipaddress {
          10.0.0.3 dev eth0 label eth0:0
      }
      
      #接收上面的变量
      #这里设置前一定/server/scripts/check_ngx.sh脚本有执行权限
      track_script {
           check_ngx
      }
}


[root@lb01 ~]#systemctl restart nginx
[root@lb01 ~]#systemctl restart keepalived.service
[root@lb01 ~]#systemctl status keepalived.service
[root@lb01 ~]#ip a |grep 0.3
     inet 10.0.0.3/32 scope global eth0:0
[root@lb01 ~]#pkill nginx
[root@lb01 ~]#ip a |grep 0.3
[root@lb01 ~]#这里没了,没了的原因是背后进行调用脚本了

#可以查看日志记录,keepalived自己没有自己的日志名
[root@lb01 ~]#tail -f /var/log/messages
如下图所示:有个lb01 keepalived[2556]:stopping

如果把nginx关掉,还是关闭状态吗?keepalived日志记录会显示stopping(一开就关)

在这里插入图片描述

#会发现ip漂移到lb02上

[root@lb02]# ip a|grep 0.3
    inet 10.0.0.3/32 scope global eth0:0
#未来要避免一个情况:脚本配置lb01,lb02都有,两台nginx不能都挂了;否则keepalived就挂了,VIP也就没有了;

keepalived进阶用法

非抢占模式

  • keepalived主配默认是抢占模式,主挂了,备解管,主恢复,不希望主重新抢回资源

  • 配置非抢占模式即可

  • 使用流程:

  1. 2个节点状态是备
  2. 配置nopreempt选项

在这里插入图片描述

[root@lb01 ~]#vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
    router_id lb01
}

vrrp_instance vip_3 {
    state BACKUP
    noreempt
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
           auth_type PASS
           auth_pass 1111
    }
    virtual_ipaddress {
          10.0.0.3 dev eth0 label eth0:0
    }
}
[root@lb01 ~]#vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
    router_id lb01
}

vrrp_instance vip_3 {
    state BACKUP
    noreempt
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
           auth_type PASS
           auth_pass 1111
    }
    virtual_ipaddress {
          10.0.0.3 dev eth0 label eth0:0
    }
}
[root@lb01 ~]#两个进行重启
systemctl restart keepalived.service
#检查ip
ip a |grep 0.3
    inet 10.0.0.3/32 scope global eth0:0

在这里插入图片描述

keepalived-多实例与双主模式(逻辑图)

在这里插入图片描述
lb01 与 lb02编辑文件配置:
在这里插入图片描述
但是这样配置会出现问题:.3与.4都在主与前面案例配置没有区别,所以不使用这一种方法

  • 多实例配置方法:
    在这里插入图片描述
systemctl restart keepalived.service
  • 发现keepalived服务起不来,查看日志:故障是id 51,多实例一致冲突;修改即可
    在这里插入图片描述
    在这里插入图片描述
keepalived总结
  • 高可用HA:常用软件
  • keepalived原理
  • 脑裂故障
  • keepalived监控服务
  • 进阶用法

Https证书

https概述

  • 基于http协议,传输的时候进行加密.

  • 如果不使用https,数据传输都是明文的.

  • 应用场景:

    目前大部分的业务都是使用https加密.

    企业想使用http 3.0基于https.

部署https加密的流程(单台)

  1. 域名*.jd.comwww.jd.com
  2. 根据域名申请https证书(私钥与公钥(ca证书)),自己创建.
  3. 进行配置web/lb.

网站不安全图片:
在这里插入图片描述

https加密流程(单台)

  • 部署

申请的https证书的域名与网站域名一致,才能正常使用.

否则用户访问会有警告与提示

  • 配置思路
  1. 全部进行加密 用户-(锁)–> lb–> (锁)web
  2. 部分加密 用户-(锁)–> lb --> web
[root@web01 ~]#mkdir -p /etc/nginx/ssl_keys/
[root@web01 ~]# unzip 6958320_ssl.wulinlinux.cn_nginx.zip -d/etc/nginx/ssl_keys
[root@web01 ~]#unzip 6958320_ssl.wulinlinux.cn_nginx.zip -d /etc/nginx/ssl_keys/
[root@web01 ~]#cd /etc/nginx/ssl_keys/
[root@web01 /etc/nginx/ssl_keys]#ll
total 8
-rw-r--r-- 1 root root 1679 jun 22 15:01 8548094_ssl.wulinlinux.cn.key
-rw-r--r-- 1 root root 1679 jun 22 15:01 8548094_ssl.wulinlinux.cn.pem
#8548094证书过期续上数字会变
#批量重命名
[root@web01 /etc/nginx/ssl_keys]#rename 6958320_   ''  *
[root@web01 /etc/nginx/ssl_keys]#vim /etc/nginx/conf.d/ssl.wulinlinux.cn.conf
server {
     listen 443 ssl;
     server_name ssl.wulinlinux.cn;
     
     #ssl key
     ssl_certificate /etc/nginx/ssl_keys/ssl.wulinlinux.cn.pem;
     ssl_certificate_key /etc/nginx/ssl_keys/ssl.wulinlinux.cn.key;
     
     root /app/code/ssl;
     location / {
          index index.html;
     }
}
[root@web01 /etc/nginx/ssl_keys]# systemctl reload nginx


[root@web01 /etc/nginx/ssl_keys]# cat
/etc/nginx/conf.d/ssl.oldboylinux.cn.conf
server {
         listen 443 ssl;
         #ssl on ; 1.15.0以后被废弃了.
         server_name ssl.wulinlinux.cn;
         root /app/code/ssl;
         error_log /var/log/nginx/ssl-error.log notice;
         access_log /var/log/nginx/ssl-access.log main;
         
         #ssl key
         ssl_certificate /etc/nginx/ssl_keys/ssl.oldboylinux.cn.pem;
         ssl_certificate_key
/etc/nginx/ssl_keys/ssl.oldboylinux.cn.key;

location / {
       index index.html;
      }
}
[root@web01 /etc/nginx/ssl_keys]# mkdir -p /app/code/ssl
[root@web01 /etc/nginx/ssl_keys]# echo
ssl.wulinlinux.cn web01 >/app/code/ssl/index.html
  • 配置DNS解析
    在这里插入图片描述
    访问浏览器:https://ssl.wulinlinux.cn(访问成功)

最新架构–集群与https逻辑图

在这里插入图片描述

[root@web01 /etc/nginx/conf.d]# cd /etc/nginx
[root@web01 /etc/nginx]# scp -r ssl_keys/  lb01:`pwd`
root@lb01's password:
ssl.wulinlinux.cn.key              100% 1679  1.7MB/S    00:00
ssl.wulinlinux.cn.pem              100% 3809  413.4KB/s  00:00
[root@web01 /etc/nginx]#

[root@lb01 ~]# cd /etc/nginx/ssl_keys/
[root@lb01 /etc/nginx/ssl_keys]#ll
total 8
-rw-r--r-- 1 root root 1679 jun 20 18:05 ssl.wulinlinux.cn.key
-rw-r--r-- 1 root root 3809 feb 20 18:05 ssl.wulinlinux.cn.pem
[root@lb01 /etc/nginx/ssl_keys]#cd ..
[root@lb01 /etc/nginx]# ll
这里信息就省略不写了

[root@lb01 /etc/nginx]# vim conf.d/ssl.wulinlinux.cn.conf

upstream ssl_pools {
    server 10.0.0.7:443;
    server_name ssl.wulinlinux.cn;
    return 302  https://wulinlinux.cn$request_uri;
}

server {
    listen 80;
    server_name ssl.wulinlinux.cn;
    
    #ssl key
    ssl_certificate  /etc/nginx/ssl_keys/ssl.wulinlinux.cn.pem;
    ssl_certificate_key  /etc/nginx/ssl_keys/ssl.wulinlinux.cn.key;
    
    location / {
        proxy_pass   https://ssl_pools;
        proxy_set_header  Host $http_host;
        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for
;
     }
}

server {
     listen 443 ssl;
}
[root@lb01 /etc/nginx] # nginx -t
[root@lb01 /etc/nginx] #systemctl reload nginx
job for nginx.service invalid.
[root@lb01 /etc/nginx] #systemctl reload restart
[root@lb01 /etc/nginx] #ss -lntup |grep nginx
  • 配置负载lb的dns解析(未来也可以解析到VIP上)
    在这里插入图片描述

  • 浏览器访问:ssl.wulinlinx.cn或者https://ssl.wulinlinux.cn

  • 抓包工具查看上面负载过程:
    在这里插入图片描述

  • 配置http2.0

upstream ssl_pools {
     server  10.0.0.7:443 ;
}
server {
  listen 80;
  server_name ssl.wulinlinux.cn;
  return 301
https://ssl.wulinlinux.cn$request_uri;
}
server {
  listen 443 ssl http2; #此处加上标记即可.
  server_name ssl.wulinlinux.cn;
  
  ssl keys
  ssl_certificate    /etc/nginx/ssl_keys/ssl.wulinlinux.cn.pem;
  ssl_certificate_key /etc/nginx/ssl_keys/ssl.wulinlinux.cn.key;
  location / {
    proxy_pass https://ssl_pools;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
    oxy_set_header X-Real-Ip $remote_addr;
  }
}
  • 网站集群部分进行https
#web配置
server {
     listen 80;    
     server_name ssl.wulinlinux.cn;
     root /app/code/ssl;
    
     location/{
     index index.html;
   }
}
#lb配置
upstream ssl_pools {
     server  10.0.0.7:80 ;
}

server {
     listen 80;
     server_name ssl.wulinlinux.cn;
     return 301
https://ssl.wulinlinux.cn$request_uri;
}

server {
     listen 443 ssl http2;
     server_name ssl.wulinlinux.cn;
 
     #ssl keys
     ssl_certificate    /etc/nginx/ssl_keys/ssl.wulinlinux.cn.pem;
     ssl_certificate_key /etc/nginx/ssl_keys/ssl.wulinlinux.cn.key;
  location / {
    proxy_pass http://ssl_pools;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-Ip $remote_addr;
  }
}

温馨提示:用户–》负载加密(https)负载到web未加密(http)配置php网站的时候有问题
对php动态部分进行配置
fastcgi_param HTTPS on; #前面 部分的请求是https

server {
    listen 80;
    server_name blog.wulinlinux.cn;
    root /app/code/blog;
    error_log  /var/log/nginx/blog-error.log notice;
    access_log /var/log/nginx/blog-access.log main;
location / {
    index index.php;
    }
}

location ~* \.(html|js|css|jpg|png|jpeg)$ {
      expires max;
      }

location ~ \.php$ {
      fastcgi_pass  127.0.0.1:9000;
      fastcgi_index index.php;
      fastcgi_param HTTPS on;
      fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      include   fastcgi_params;
      }
}

keepalived总结

  1. 脑裂:是什么意思?原因?检查?
  2. 通过keepalived监控某一个服务(服务挂了,keepalived也挂了,VIP漂移,主备切换)
  • https
    拿到https证书后配置web服务器和负载均衡服务器

命令行创建https证书

#创建私钥
openssl genrsa -idea -out server.key 2048
#根据私钥创建 证书
openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048  -keyout  server.key  -out server.crt

监控

优化

  • https == http over tls
server {
         listen              443 ssl;
         keepalive_timeout   70;
         ssl_protocols       TLSv1 TLSv1.1 TLSv1.2; #指定ssl加密协议的版本

         ssl_ciphers         AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-
MD5:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!
MD5; #加密算法.需要排除算法
       #排除null空算法,md5算法
        ssl_certificate    /usr/local/nginx/conf/cert.pem;
        ssl_certificate_key /usr/local/nginx/conf/cert.key;
       
       #设置https会话缓存
        ssl_session_cache   shared:SSL:10m;
       
       #超时时间10分钟
       ssl_session_timeout 10m;
     
       ......
}

监控

  • 过期时间.
  • 流程:
    1. 通过命令获取证书的过期日期
    2. 与当前日期对比(30天之前)
    3. 获得剩余的时间
curl -vL   https://www.baidu.com | grep 'expire date'
#有一些命令的输出,并非标准输出,而是作为标准错误输出.
curl -vL   https:��www.baidu.com |& grep 'expire date'

|&表示把管道前面标准输出(正确)和标准错误输出都传递给后面的命令.
如果不加,默认传递标准输出(正确)

[root@web01 /etc/nginx]# cat /server/scripts/check_ssl.sh
#! /bin/bash
url=https://www.baidu.com

expire_date_ori=`curl -vL   $url |& grep 'expire
date' |awk -F 'date:|GMT'  '{print $2}'`
expire_date_opt=`date -d "$expire_date_ori" +%F`

echo 原始格式的过期时间 $expire_date_ori
echo 处理后的过期时间   $expire_date_opt
[root@web01 /etc/nginx]# sh /server/scripts/check_ssl.sh
原始格式的过期时间 JUN 06 05:16:01 2024
处理后的过期时间 2024-07-23


[root@web01 /etc/nginx]# cat /server/scripts/check_ssl.sh
#!/bin/bash
#author: wulin
#version: v1.0 beta
#desc:检查指定 url 地址https证书过期时间
url=https://www.jd.com

expire_date_ori=`curl -vL   $url |& grep 'expire date' |awk -F 'date:| GMT'   '{print $2}'`

expire_date_opt=`date -d "$expire_date_ori" +%s`
#当前的日期与过期时间进行相减  秒数
date_now_second=`date +%s`
expire_days=`echo "($expire_date_opt -$date_now_second)/(60*60*24)"|bc `

echo "网站$url证书过期倒计时:还有$expire_days天"
echo "网站过期日期是:`date -d "$expire_date_ori" +%F`"

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

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

相关文章

企业公户验证API如何使用JAVA、Python、PHP语言进行应用

在纷繁复杂的金融与商业领域,确保每笔交易的安全与合规是至关重要的。而企业公户验证API,正是这样一位默默守护的数字卫士,它通过智能化的手段,简化了企业对公账户验证流程,让繁琐的审核变得快捷且可靠。 什么是企业公…

NLP-使用Word2vec实现文本分类

Word2Vec模型通过学习大量文本数据,将每个单词表示为一个连续的向量,这些向量可以捕捉单词之间的语义和句法关系。本文做文本分类是结合Word2Vec文本内容text,预测其文本标签label。以下使用mock商品数据的代码实现过程过下: 1、…

关闭Xshell后,任务将结束-tmux

Xshell标签中的会话结束后,会话中运行的进程也将被结束。 关闭标签 解释: xshell在断开连接后会中止所有正在运行的进程和任务,因为xshell客户端是通过ssh协议连接到远程服务器的,一旦连接断开,所有与该会话相关的进程…

数据结构 - 红黑树

文章目录 前言一、红黑树介绍1、红黑树的概念2、红黑树的性质 二、实现红黑树1、基本框架2、插入3、删除4、查找5、测试红黑树6、红黑树代码 三、红黑树性能四、AVL树和红黑树的差别 前言 红黑树是一种二叉搜索树,所以学习前需要学会基本的二叉搜索树,并…

超越源自内省:《自卑与超越》

作者主页: 🔗进朱者赤的博客 精选专栏:🔗经典算法 作者简介:阿里非典型程序员一枚 ,记录在大厂的打怪升级之路。 一起学习Java、大数据、数据结构算法(公众号同名) ❤️觉得文章还…

JS 改造数组对象,将其不确定的key作为value,并合并相同key的value值

const data [{"苹果": 3839,"小米": 1423,"华为": 4965,"oppo": 3334,"vivo": 2820,"一加": 4751},{"苹果": 3560,"小米": 2099,"华为": 3192,"oppo": 4210,"vivo…

anaconda 安装

环境 win 11 安装 下载安装包 https://www.anaconda.com/download 2.打开安装包,这里基本上就是下一步下一步 3.配置环境变量 对应自己安装的目录文件夹 D:\anaconda3 D:\anaconda3\Scripts D:\anaconda3\Library\bin4.打开命令行测试 常用命令 初始化 co…

python毕业设计选题求职招聘系统-可视化大屏

✌网站介绍:✌10年项目辅导经验、专注于计算机技术领域学生项目实战辅导。 ✌服务范围:Java(SpringBoo/SSM)、Python、PHP、Nodejs、爬虫、数据可视化、小程序、安卓app、大数据等设计与开发。 ✌服务内容:免费功能设计、免费提供开题答辩P…

【限免】16PAM、16PSK、16QAM、16CQAM星座图及误码率【附MATLAB代码】

​微信公众号:智能电磁频谱算法 QQ交流群:949444104 主要内容 MATLAB代码 % Parameters M 16; N 4; % Number of circles for CQAM SNR_dB 0:2:25; % Extended SNR range to reach higher values num_symbols 1e5; % Total number of symbols for s…

静态路由学习笔记

1. 静态路由应用场景 (1)静态路由由网络管理员手动配置,配置方便,对系统要求低,适用于拓扑结构简单并且稳定的小型网络。 (2)缺点是不能自动适应网络拓扑的变化,需要人工干预过多。…

保险丝(常见元器件及电路基础知识)

分类:简单分为熔断式和非熔断式 电压:保险丝的额定电压是指它的公称额定电压, 通常就是保险丝断开后能够承受的最大电压值保险丝通电时两端所承受的电压大大小于其额定电压,因此额定电压基本上无关紧要。 电流: PFC为功率因数矫…

Java之开发 系统设计 分布式 高性能 高可用

1、restful api 基于rest构建的api 规范: post delete put get 增删改查路径 接口命名 过滤信息状态码 2、软件开发流程 3、命名规范 类名:大驼峰方法名:小驼峰成员变量、局部变量:小驼峰测试方法名:蛇形命名 下划…

语言模型及数据集

一、定义 1、语言模型的目标是估计序列的联合概率,一个理想的语言模型就能够基于模型本身生成自然文本。 2、对一个文档(词元)序列进行建模, 假设在单词级别对文本数据进行词元化。 3、计数建模 (1)其中…

AI绘画;喂饭进阶!教你如何用Stable Diffusion生成高清建筑手工模型图,一篇文章搞懂什么是Lora模型和CKPT主模型!

前言 刚接触Stable Diffusion不久的你,是否有这样的疑问: Q1: Stable Diffusion中的主模型CKPT是什么? Q2: Stable Diffusion中的Lora模型又是什么? Q3: 在哪儿可以下载好用的AI绘图模型? Q4: Stable Diffusion 如…

【SpringBoot】2 项目搭建

创建项目 1)确实本地 jdk 版本 打开命令行窗口:快捷键 Windows R,输入 CMD,敲回车 执行命令:java -version 2)在项目 clone 的位置创建 Spring Boot 项目,使用 Maven 进行依赖管理&#xff…

最新爆火的开源AI项目 | LivePortrait 本地安装教程

LivePortrait 本地部署教程,强大且开源的可控人像AI视频生成 1,准备工作,本地下载代码并准备环境,运行命令前需安装git 以下操作不要安装在C盘和容量较小的硬盘,可以找个大点的硬盘装哟 2,需要安装FFmp…

大疆创新2025校招内推

大疆2025校招-内推 一、我们是谁? 大疆研发软件团队,致力于把大疆的硬件设备和大疆用户紧密连接在一起,我们的使命是“让机器有温度,让数据会说话”。 在消费和手持团队,我们的温度来自于激发用户灵感并助力用户创作…

聊聊基于Alink库的主成分分析(PCA)

概述 主成分分析(Principal Component Analysis,PCA)是一种常用的数据降维和特征提取技术,用于将高维数据转换为低维的特征空间。其目标是通过线性变换将原始特征转化为一组新的互相无关的变量,这些新变量称为主成分&…

react中useMemo钩子函数的使用

1.使用useMemo前展示 import { useState,useMemo } from "react"function kanno(num){console.log(999,num);return num }function UseMemo(){const [count1,setCount1] useState(0)const [count2,setCount2] useState(0)const result kanno(count1)console.log(…

ELK安装(Elasticsearch+Logstash+Kibana+Filebeat)

一、简介 1.1、软件简介 ELK其实是Elasticsearch,Logstash 和 Kibana三个产品的首字母缩写,这三款都是开源产品。 1.1.1、Elasticsearch简介 Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析…