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

Lvs+KeepAlived高可用高性能负载均衡

目录

1.环境介绍

2.配置keepalived

 3.测试

1.测试负载均衡

2.测试RS高可用

3.测试LVS高可用

3.1测试lvs主服务宕机

3.2.测试lvs主服务器恢复

4.我在实验中遇到的错误


1.环境介绍

环境:centos7

RS1---RIP1:192.168.163.145

           VIP 192.168.163.200

RS2---RIP2:192.168.163.146

           VIP 192.168.163.200

LVS_MASTER : DIP 192.168.163.144

                           VIP:192.168.163.200

LVS_BACKUP: DIP 192.168.163.150

                             VIP:192.168.163.200

CLIENT :192.168.163.151

我使用的是LVS-DR模式来负载均衡,详情请见http://t.csdn.cn/iiU4s

 ipvsadm 已经在这篇文章搭建好

2.配置keepalived

现在我们需要在两台LVS服务器都下载keepalivd

yum install keepalived -y

下载号后,我们会在/etc/keepalived的目录下找一个配置文件文件

[root@lvs-backup ~]# cd /etc/keepalived/
[root@lvs-backup keepalived]# ll
total 4
-rw-r--r--. 1 root root 1376 Aug 31 12:12 keepalived.conf

里面内容如下

! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}
#上面的配置无需关注,重点关注和修改下面的配置
vrrp_instance VI_1 {state MASTER#标识当前lvs是主,根据实际lvs服务器规划确定,可选值MASTER和BACKUPinterface eth0#lvs服务器提供服务器的网卡,根据实际服务器网卡进行修改virtual_router_id 51#lvs提供的服务所属ID,目前无需修改priority 100#lvs服务器的优先级,主服务器最高,备份服务器要低于主服务器advert_int 1authentication {auth_type PASSauth_pass 1111}#virtual_ipaddress用于配置VIP和LVS服务器的网卡绑定关系,一般需要修改#示例: 192.168.116.134/24 dev ens33 label ens33:9virtual_ipaddress {192.168.200.16192.168.200.17192.168.200.18}
}
#配置lvs服务策略,相当于ipvsadm -A -t 192.168.116.134:80 -s rr,一般需要修改
virtual_server 192.168.200.100 443 {delay_loop 6lb_algo rr#配置lvs调度算法,默认轮询lb_kind NAT#配置lvs工作模式,可以改为DRpersistence_timeout 50#用于指定同一个client在多久内,只去请求第一次提供服务的RS,为查看轮询效                        果,这里需要改为0protocol TCP#TCP协议#配置RS信息,相当于ipvsadm -a -t 192.168.116.134:80 -r 192.168.116.131 -greal_server 192.168.201.100 443 {weight 1#当前RS的权重SSL_GET {#SSL_GET健康检查,一般改为HTTP_GET#两个url可以删除一个,url内的内容改为path /和status_code 200,digest删除url {path /digest ff20ad2481f97b1754ef3e12ecd3a9cc}url {path /mrtg/digest 9b3a0c85a887a256d6939da88aabd8cd}connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}
#下面的配置实际是两组lvs服务的配置,含义和上面的lvs服务配置一致。如果用不到,下面的配置可以全部删除
virtual_server 10.10.10.2 1358 {delay_loop 6lb_algo rrlb_kind NATpersistence_timeout 50protocol TCPsorry_server 192.168.200.200 1358real_server 192.168.200.2 1358 {weight 1HTTP_GET {url {path /testurl/test.jspdigest 640205b7b0fc66c1ea91c463fac6334d}url {path /testurl2/test.jspdigest 640205b7b0fc66c1ea91c463fac6334d}url {path /testurl3/test.jspdigest 640205b7b0fc66c1ea91c463fac6334d}connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 192.168.200.3 1358 {weight 1HTTP_GET {url {path /testurl/test.jspdigest 640205b7b0fc66c1ea91c463fac6334c}url {path /testurl2/test.jspdigest 640205b7b0fc66c1ea91c463fac6334c}connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}virtual_server 10.10.10.3 1358 {delay_loop 3lb_algo rrlb_kind NATpersistence_timeout 50protocol TCPreal_server 192.168.200.4 1358 {weight 1HTTP_GET {url {path /testurl/test.jspdigest 640205b7b0fc66c1ea91c463fac6334d}url {path /testurl2/test.jspdigest 640205b7b0fc66c1ea91c463fac6334d}url {path /testurl3/test.jspdigest 640205b7b0fc66c1ea91c463fac6334d}connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 192.168.200.5 1358 {weight 1HTTP_GET {url {path /testurl/test.jspdigest 640205b7b0fc66c1ea91c463fac6334d}url {path /testurl2/test.jspdigest 640205b7b0fc66c1ea91c463fac6334d}url {path /testurl3/test.jspdigest 640205b7b0fc66c1ea91c463fac6334d}connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}

在两台机器上修改我们需要修改的配置

LVS_MASTER

[root@lvs ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addr#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 200advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.163.200/24 brd 192.168.163.255  dev ens33 label ens33:200}
}virtual_server 192.168.163.200 80 {delay_loop 6lb_algo rrlb_kind DRnat_mask 255.255.255.0persistence_timeout 0protocol TCPreal_server 192.168.163.145 80 {weight 1HTTP_GET {url {path /index.htmlstatus_code 200}connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 192.168.163.146 80 {weight 1HTTP_GET {url {path /index.htmlstatus_code 200}connect_timeout 3nb_get_retry 3delay_before_retry 3}}}

LVS_BACKUP

[root@lvs-backup keepalived]# cat keepalived.conf 
! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addr#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 180advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.163.200/24 brd 192.168.163.255  dev ens33 label ens33:200}
}virtual_server 192.168.163.200 80 {delay_loop 6lb_algo rrlb_kind DRnat_mask 255.255.255.0persistence_timeout 0protocol TCPreal_server 192.168.163.145 80 {weight 1HTTP_GET {url {path /index.htmlstatus_code 200}connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 192.168.163.146 80 {weight 1HTTP_GET {url {path /index.htmlstatus_code 200}connect_timeout 3nb_get_retry 3delay_before_retry 3}}}

注意:主服务的优先级要高于备份服务器

在两台服务器上开启keepalived服务

[root@lvs ~]# systemctl restart keepalived

上述步骤执行完毕后,可以在lvs主服务器和备份服务器分别执行ifconfig命令,可以查看到VIP被绑定到了主服务器,如下:

[root@lvs ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.163.144  netmask 255.255.255.0  broadcast 192.168.163.255inet6 fe80::491f:4a6e:f34:a1b9  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:a3:4f:a2  txqueuelen 1000  (Ethernet)RX packets 156094  bytes 70487425 (67.2 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 195001  bytes 16040484 (15.2 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0ens33:200: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.163.200  netmask 255.255.255.0  broadcast 192.168.163.255ether 00:0c:29:a3:4f:a2  txqueuelen 1000  (Ethernet)lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0inet6 ::1  prefixlen 128  scopeid 0x10<host>loop  txqueuelen 1000  (Local Loopback)RX packets 331  bytes 28808 (28.1 KiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 331  bytes 28808 (28.1 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0[root@lvs ~]# 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.163.200:80 rr-> 192.168.163.145:80           Route   1      0          0         -> 192.168.163.146:80           Route   1      0          0         

 3.测试

1.测试负载均衡

[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.145  .
[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.146  .
[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.145  .
[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.146  .

2.测试RS高可用


关闭一台RS后(这里可以使用ifconfig 网卡名 down命令暂时关闭网卡),客户端继续发起请求,查看是否可以正常访问,如下:

[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.146  .
[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.146  .
[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.146  .
[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.146  .

会发现,此时客户端可以正常访问,但只有RS2在提供服务。这说明,keepAlived检测到了RS1服务器异常,将其剔除了。

此时再启动RS1服务器,客户端继续访问,会发现响应结果如下,keepAlived检测到RS1服务器恢复正常,又将其加入服务列表了。

[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.145  .
[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.146  .
[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.145  .
[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.146  .

3.测试LVS高可用


这里主要进行两个测试

3.1测试lvs主服务宕机

使用ifconfig 网卡名 down命令,关闭主服务器网卡,此时主服务器不能提供服务。观察备份服务器是否将VIP绑定到自己,以及客户端是否可以继续正常访问。如下:

关闭主服务器网卡

[root@lvs ~]# ifconfig ens33 down

观察备份服务器,会发现VIP已经绑定过来了。这里实际是keepAlived检测到了主服务器的异常,而做出的故障转移和自动切换。

[root@lvs-backup keepalived]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.163.150  netmask 255.255.255.0  broadcast 192.168.163.255inet6 fe80::94e3:7456:5dc9:ce5d  prefixlen 64  scopeid 0x20<link>inet6 fe80::9aec:8c8f:ee55:a8eb  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:c0:57:db  txqueuelen 1000  (Ethernet)RX packets 43484  bytes 5026535 (4.7 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 12787  bytes 1188939 (1.1 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0ens33:200: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.163.200  netmask 255.255.255.0  broadcast 192.168.163.255ether 00:0c:29:c0:57:db  txqueuelen 1000  (Ethernet)lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0inet6 ::1  prefixlen 128  scopeid 0x10<host>loop  txqueuelen 1000  (Local Loopback)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

用客户进行测试

[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.146  .
[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.145  .
[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.146  .
[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.145  .
[root@client ~]# curl 192.168.163.200
web1 test, ip is 192.168.163.146  .

3.2.测试lvs主服务器恢复

上述测试通过后,可以开启主服务器网卡,让其能够提供服务,然后观察VIP是否会回到主服务器。

开启主服务器网卡

[root@lvs ~]# ifconfig ens33 up

我们会发现,在主服务器开启端口后,VIP又换绑到主服务器上了

[root@lvs ~]# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.163.144  netmask 255.255.255.0  broadcast 192.168.163.255inet6 fe80::491f:4a6e:f34:a1b9  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:a3:4f:a2  txqueuelen 1000  (Ethernet)RX packets 157697  bytes 70649781 (67.3 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 200310  bytes 16401598 (15.6 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0ens33:200: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.163.200  netmask 255.255.255.0  broadcast 192.168.163.255ether 00:0c:29:a3:4f:a2  txqueuelen 1000  (Ethernet)lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0inet6 ::1  prefixlen 128  scopeid 0x10<host>loop  txqueuelen 1000  (Local Loopback)RX packets 331  bytes 28808 (28.1 KiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 331  bytes 28808 (28.1 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@lvs-backup keepalived]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.163.150  netmask 255.255.255.0  broadcast 192.168.163.255inet6 fe80::94e3:7456:5dc9:ce5d  prefixlen 64  scopeid 0x20<link>inet6 fe80::9aec:8c8f:ee55:a8eb  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:c0:57:db  txqueuelen 1000  (Ethernet)RX packets 43995  bytes 5081851 (4.8 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 13240  bytes 1226592 (1.1 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0inet6 ::1  prefixlen 128  scopeid 0x10<host>loop  txqueuelen 1000  (Local Loopback)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

4.我在实验中遇到的错误

在测试阶段,我发现即使我的VIP已经成功和服务器绑定,也有当前ipvs模块中记录的链接,但就是无法通过VIP连接,这是因为在keepalived配置文件中,关于vrrp协议的vrrp_strict是默认打开的我们需要把他注释掉,这样就能顺利连接了

相关文章:

Lvs+KeepAlived高可用高性能负载均衡

目录 1.环境介绍 2.配置keepalived 3.测试 1.测试负载均衡 2.测试RS高可用 3.测试LVS高可用 3.1测试lvs主服务宕机 3.2.测试lvs主服务器恢复 4.我在实验中遇到的错误 1.环境介绍 环境&#xff1a;centos7 RS1---RIP1:192.168.163.145 VIP 192.168.163.200 RS2---RIP2…...

无涯教程-Android Online Test函数

Android在线测试模拟了真正的在线认证考试。您将看到基于 Android概念的多项选择题(MCQ),将为您提供四个options。您将为该问题选择最合适的答案,然后继续进行下一个问题,而不会浪费时间。完成完整的考试后,您将获得在线考试分数。 总问题数-20 最长时间-20分钟 Start Test …...

蓝桥杯打卡Day1

文章目录 全排列八皇后 一、全排列IO链接 本题思路:本题是一道经典的全排列问题&#xff0c;深度优先搜索即可解决。 #include <bits/stdc.h>constexpr int N10;std::string s; std::string ans; int n; bool st[N];void dfs(int u) {if(un){std::cout<<ans<…...

zipkin2.24.2源码install遇见的问题

1、idea导入项目后将Setting中的关于Maven和Java Compile相关的配置改为jdk11,同时Project Structure改为jdk11 2、将pom配置中的fork标签注释 标题未修改以上配置产生的问题 Compilation failure javac: Ч ı : --release : javac <options> <source files&g…...

yapi密码是如何生成的

yapi密码是如何生成的 关闭yapi注册功能后&#xff0c;想要通过手动插入用户数据到db中&#xff0c;那么密码是如何生成的呢&#xff1f; exports.generatePassword (password, passsalt) > { return sha1(password sha1(passsalt)); }; 所以如果想要创建一个用户&#x…...

2023-09-02 LeetCode每日一题(最多可以摧毁的敌人城堡数目)

2023-09-02每日一题 一、题目编号 2511. 最多可以摧毁的敌人城堡数目二、题目链接 点击跳转到题目位置 三、题目描述 给你一个长度为 n &#xff0c;下标从 0 开始的整数数组 forts &#xff0c;表示一些城堡。forts[i] 可以是 -1 &#xff0c;0 或者 1 &#xff0c;其中&…...

k8s环境部署配置

目录 一.虚拟机准备 二.基础环境配置&#xff08;各个节点都做&#xff09; 1.IP和hosts解析 2.防火墙和selinux 3.安装基本软件 4.配置时间同步 5.禁用swap分区 6.修改内核参数并重载 7.配置ipvs 三.docker环境&#xff08;各个节点都做&#xff09; 1.配置软件源并…...

Java之文件操作与IO

目录 一.认识文件 1.1文件是什么&#xff1f; 1.2文件的组织 1.3文件路径 1.4文件的分类 二.文件操作 2.1File概述 三.文件内容操作--IO 3.1JavaIO的认识 3.2Reader和Writer ⭐Reader类 ⭐Writer类 3.2FileInputStream和FileOutputStream ⭐FileInputStream类 …...

指令系统(408)

一、拓展操作码指令格式 【2017 统考】某计算机按字节编址&#xff0c;指令字长固定且只有两种指令格式&#xff0c;其中三地址指令29条、二地址指令107条&#xff0c;每个地址字段6位&#xff0c;则指令字长至少应该是&#xff08; A&#xff09; A、24位 B、26位 …...

Pygame中Trivia游戏解析6-3

3.3 Trivia类的show_question()函数 Trivia类的show_question()函数的作用是显示题目。主要包括显示题目框架、显示题目内容和显示题目选项等三部分。 3.3.1 显示题目的框架 在show_question()函数中&#xff0c;通过以下代码显示题目的框架。 print_text(font1, 210, 5, &q…...

热释电矢量传感器设计

1 概述 使用4个热释电传感器组成一个2X2的矩阵。通过曲线的相位差、 峰峰值等特征量来计算相关信息。本文使用STM32单片机设计、制作了热释电传感器矩阵&#xff1b;使用C#.NET设计了上位机软件。为以上研究做了试验平台。 2 硬件电路设计 2.1 热释电传感器介绍 热释电红外…...

MySql学习笔记10——视图介绍

视图 概述 view view可以看作是一张“虚拟表”&#xff0c;&#xff08;但是他也是会作为文件存在的&#xff09; 当我们通过复杂的查询语句获取一张表的时候&#xff0c;可以将这张表作为一个视图&#xff0c;和创建一个新表不同&#xff0c;在视图上进行的DML操作会对数据…...

【探索Linux】—— 强大的命令行工具 P.7(进程 · 进程的概念)

阅读导航 前言一、冯诺依曼体系结构二、操作系统&#xff08;OS&#xff09;1. 概念 三、进程1. 进程的概念2. PCB&#xff08;Process Control Block&#xff09;3. 查看进程 四、fork函数1. 函数简介2. 调用方式3. 返回值4. 使用示例 五、进程的几种状态1. 状态简介2. 进程状…...

JAVA宝典----容器(理解记忆)

目录 一、Java Collections框架是什么&#xff1f; 二、什么是迭代器&#xff1f; 三、Iterator与ListIterator有什么区别&#xff1f; 四、ArrayList、Vector和LinkedList有什么区别&#xff1f; 五、HashMap、Hashtable、TreeMap和WeakHashMap有哪些区别&#xff1f; 六…...

JS中的扩展操作符...(点点点)

标题 前言概述拓展操作符&#xff08;Spread Operator&#xff09;赋值与扩展操作符的区别 剩余操作符&#xff08;Rest Operator&#xff09; 前言 大家应该都在代码中用过或者看到…方法&#xff0c;我每次用到这个方法的时候都会想到第一次见到这个方法一头雾水的样子&#…...

找redis大key工具rdb_bigkeys

github官网 https://github.com/weiyanwei412/rdb_bigkeys 在centos下安装go [roothadoop102 rdb_bigkeys-master]# wget https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz [roothadoop102 rdb_bigkeys-master]# tar -zxf go1.13.5.linux-amd64.tar.gz -C /usr/local将g…...

ElasticSearch进阶

一、 search检索文档 ES支持两种基本方式检索&#xff1b; 通过REST request uri 发送搜索参数 &#xff08;uri 检索参数&#xff09;&#xff1b;通过REST request body 来发送它们&#xff08;uri请求体&#xff09;&#xff1b; 1、信息检索 API&#xff1a; https://w…...

Nor flash 页写地址与数据大小的限制

厂商提供的flash手册如下 如果页写指令的地址不是256的整数倍&#xff0c;并且写入的数据量超过了当前地址所在页的边界&#xff0c;则超过的那些数据会重新写入当前页的首地址&#xff08;即256的整数倍地址&#xff09;&#xff0c;所以&#xff0c;在进行页写的时候&#x…...

python 深度学习 解决遇到的报错问题4

目录 一、DLL load failed while importing _imaging: 找不到指定的模块 二、Cartopy安装失败 三、simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 四、raise IndexError("single positional indexer is out-of-bounds") 五、T…...

C到C++的升级

C和C的关系 C继承了所有C语言的特性&#xff1b;C在C的基础上提供了更多的语法和特性&#xff0c;C语言去除了一些C语言的不好的特性。C的设计目标是运行效率与开发效率的统一。 变化一&#xff1a;所有变量都可以在使用时定义 C中更强调语言的实用性&#xff0c;所有的变量…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...