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

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

lb02配置

!Configuration File for keepalivedglobal_defs {router_id lb02
}vrrp_instance vip_3 {state BACKUPinterface eth33virtual_router_id 51priority 50advert_int 1authentication {auth_type PASSauth_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. 现象:主备都有vip2. 原因:
-  备认为主挂了,接管资源生成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.3inet 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 ];thensystemctl 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 keepalivedglobal_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 MASTERinterface eth0virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_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.3inet 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.3inet 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 keepalivedglobal_defs {router_id lb01
}vrrp_instance vip_3 {state BACKUPnoreemptinterface eth0virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.0.0.3 dev eth0 label eth0:0}
}
[root@lb01 ~]#vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {router_id lb01
}vrrp_instance vip_3 {state BACKUPnoreemptinterface eth0virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.0.0.3 dev eth0 label eth0:0}
}
[root@lb01 ~]#两个进行重启
systemctl restart keepalived.service
#检查ip
ip a |grep 0.3inet 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 keyssl_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 keyssl_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.confupstream 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 keyssl_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 keysssl_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 keysssl_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.comexpire_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.comexpire_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.mzph.cn/web/49566.shtml

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

相关文章

项目实战1(30小时精通C++和外挂实战)

项目实战1(30小时精通C和外挂实战) 01-MFC1-图标02-MFC2-按钮、调试、打开网页05-MFC5-checkbox及按钮绑定对象06--文件格式、OD序列号08-暴力破解09-CE10-秒杀僵尸 01-MFC1-图标 这个外挂只针对植物大战僵尸游戏 开发这个外挂,首先要将界面…

GUL图形化界面操作(下部)

目录 ​编辑 前言 Swing 窗口 注意点 新增的组件 进度条组件 开关按钮 多面板和分割面板 多面板 分割面板 ​编辑 选项窗口 对话框带三个选项是,否,取消。 对话框提示输入文本: 前言 修炼中,该篇文章为俺很久前的学习笔记 Swi…

2024钉钉杯A题思路详解

文章目录 一、问题一1.1 问题1.2 模型1.3 目标1.4 思路1.4.1 样本探究1.4.2 数据集特性探究:1.4.3 数据预处理1.4.4 数据趋势可视化1.4.5 ARIMA和LSTM两种预测模型1.4.6 参数调整 二、问题二2.1 问题2.2 模型2.3 目标2.4 思路2.4.1 样本探究2.4.2 数据集特性探究2.4…

Radon(拉当) 变换:超详细讲解(附MATLAB,Python 代码)

Radon 变换 Radon 变换是数学上用于函数或图像的一种积分变换,广泛应用于图像处理领域,尤其是在计算机断层成像 (CT) 中。本文档将详细介绍 Radon 变换的数学含义及其在图像处理中的应用。 数学定义 Radon 变换的数学定义是将二维函数 f ( x , y ) f…

SRTOD

文章目录 AbstractMethodoverviewinnovationsolve Experiment link Abstract 本文主要探讨了在目标检测领域中,如何解决微小物体检测的问题。传统的通用检测器在处理微小物体时性能下降严重,主要是因为难以提取有效的特征。为了解决这个问题&#xff0c…

STL-string(使用和部分模拟实现)

1.string basic_string<char> 是 C 标准库中定义的一个模板类型,用于表示一个字符串。这个模板类接收一个字符类型作为模板参数。typedef basic_string<char> string&#xff1a;string类是basic_string类模板的实例化&#xff0c;它使用 char作为其字符类型。 2.…

狗都能看懂的Actor-Critic强化学习算法讲解

Review Policy Gradient 上面的公式是Policy Gradient的更新函数&#xff0c;这个式子是指在 s t s_t st​时刻采取了 a t a_t at​&#xff0c;计算出对应发生的概率 p θ p_\theta pθ​&#xff0c;然后计算在采取了这个 a t a_t at​之后&#xff0c;所得到的reward有多大。…

优化算法|自适应大邻域搜索算法及MATLAB代码实现

回来填坑了&#xff0c;本篇推文将详细讲解ALNS算法求解VRP问题及MATLAB代码实现。 算法介绍 节约算法构造初始解 function routessaving_init(DistMatrix, Demand, Cap) C_EPS1e-1;Nsize(DistMatrix,1); routescell(numel(2:N),1); for i1:numel(routes) % 每个节点单独一条…

【Django】前端技术HTML常用标签(开发环境vscode)

文章目录 安装两个常用插件HTML常用标签定义文档类型DOCTYPE网页的结构html/head//title/body/div标题h1/h2/h3/h4/h5分割线hr段落 p列表ul/li&#xff0c;ol/li超链接a文本span图片img按钮button表格table&#xff08;table、tr、th、td&#xff09;表单form 安装两个常用插件…

目标检测 YOLOv5-7.0 详细调试自制数据集实战

目标检测 YOLOv5-7.0 详细调试&自制数据集实战 一、项目介绍及环境配置&#xff08;一&#xff09;项目解读&#xff08;二&#xff09;版本选择&#xff08;三&#xff09;环境配置 二、如何利用YOLOv5进行预测&#xff08;detect.py&#xff09;&#xff08;一&#xff0…

Windows 实用小工具:窗口钉子/文件管理 2024/7/27

一: wintop 窗口置顶工具 二:WinDirStat 这是一个免费的、开源的磁盘使用分析工具&#xff0c;适用于Windows系统。它会扫描你的硬盘&#xff0c;列出所有文件和文件夹的大小&#xff0c;并以图形化的方式展示&#xff0c;便于理解。 可以用来检测硬盘文件夹占用从而,酌情处…

JAVA.抽象、接口、内部类

1.抽象 共性&#xff0c;父类定义抽象方法&#xff0c;子类必须重写&#xff0c;或者子类也是抽象类 示例代码 animal package animalabstract;//定义抽象类animal public abstract class animal {String name;int age;//定义抽象方法eat&#xff0c;子类必须重写public abs…

Java给定一些元素随机从中选择一个

文章目录 代码实现java.util.Random类实现随机取数(推荐)java.util.Collections实现(推荐)Java 8 Stream流实现(不推荐) 完整代码参考&#xff08;含测试数据&#xff09; 在Java中&#xff0c;要从给定的数据集合中随机选择一个元素&#xff0c;我们很容易想到可以使用 java.…

【Linux】进程IO|系统调用|open|write|文件描述符fd|封装|理解一切皆文件

目录 ​编辑 前言 系统调用 open 参数flags 参数mode write 追加方式 read close 文件描述符 打开多个文件并观察其文件描述符 C语言文件操作 理解一切皆文件 理解open操作 前言 各类语言的文件操作其实是对系统调用的封装 我们经常说&#xff0c;创建一个文件&a…

力扣第三十七题——解数独

内容介绍 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参考示例图&#xff09; 数独…

CVE-2024-39700 (CVSS 9.9):JupyterLab 模板中存在严重漏洞

在广泛使用的 JupyterLab 扩展模板中发现了一个严重漏洞&#xff0c;编号为CVE-2024-39700 。此漏洞可能使攻击者能够在受影响的系统上远程执行代码&#xff0c;从而可能导致大范围入侵和数据泄露。 该漏洞源于在扩展创建过程中选择“测试”选项时自动生成“update-integratio…

VIM基础配置

1. CTAGS配置 下载 上传虚拟机&#xff0c;解压&#xff0c;进入目录 tar -xzvf ctags-5.8.tar.gz cd ctags-5.8/编译 ./configure sudo make sudo make install查看是否安装成功 ctags --version打印如下 2. 使用Vundle 下载 git clone https://github.com/VundleVim/Vund…

Linux并发程序设计(3):守护进程

目录 前言 一、介绍 1.1 概念 1.2 特点 1.3 举例 二、系统编程 2.1 setsid函数 2.2 getpid函数 2.3 getsid函数 2.4 getpgid函数 2.5 chdir函数 三、代码例程 3.1 使子进程在后台运行 3.2 使子进程脱离原终端 3.3 更换目录&#xff0c;并设定权限&#xff08;非…

基于STM32通过云平台实现智慧大棚【手机远程查看温湿度】【报警】

文章目录 一、成果演示二、所用到的模块三、实现的功能四、接线说明五、WIFI模块配置步骤5.1云平台介绍5.2云平台使用5.3使用USB转TTL测试联通云平台 六、STM32代码编写七、手机上查看数据6.1下载软件&#xff08;仅限安卓手机&#xff09;6.2操作 一、成果演示 STM32通过物联网…