lvs集群、NAT模式和DR模式、keepalive

news2024/12/23 17:42:08

目录

lvs集群概念

集群的类型:三种类型

系统可靠性指标

lvs集群中的术语

lvs的工作方式

NAT模式

lvs的工具

算法

实验

数据流向

步骤

一 、调度器配置(test1 192.168.233.10)

二、RS配置(nginx1和nginx2)

三、地址转换(test1 192.168.233.10)

实验结果

DR模式

概念

数据流向图

问题:

1.vip地址冲突

2.返回报文时,vip地址还在,怎么样能让客户端来接收到响应

DR模式的实现

步骤

一 、调度器配置(test1 192.168.233.10)

二、RS配置(nginx1和nginx2)[两遍都要修改]

实验结果

总结

总结实验

lvs实现四层转发+nginx实现7层转发(动态),访问lvs的vip地址可以实现动静分离

数据流向图

实验步骤

实验结果

lvs的三种工作模式

高可用的HA架构

概念

keepalive实验

实验步骤

​编辑

实验结果​编辑


lvs集群概念

全称是linux virtual server,是在Linux的内核层面实现负载均衡的软件。

主要作用:将多个后端服务器组成一个高可用高性能的服务器集群,通过负载均衡的算法将客户端的请求分发到后端的服务器上,来实现高可用和负载均衡。

阿里的SLB   server loab balance  是用lvs+keepalive实现的。

集群和分布式

系统的拓展方式:

垂直扩展:向上扩展,增强性能更强的计算机。瓶颈:计算机本身设备的限制;硬件本身的性能瓶颈

水平扩展:向外拓展,增加设备。并行的运行多个服务,依靠网络解决内部通信的问题,cluster集群

集群:为了解决某个特定的问题将多台计算机组合起来形成的单个系统

集群的类型:三种类型

LB:load balance 负载均衡集群,多个主机组成,每个主机只承担一部分的访问请求

HA:high availiablity 高可用,在设计系统时,采取一定的措施,确保系统当中某一组件或者部分出现故障,整个系统依然能够正常的运行。为了维护系统的可用性,可靠性,容错性

HPC:high-performance computing 高性能集群,对响应时间,处理能力要求更高

系统可靠性指标

MYBF:Mean Time Between Failure 平均无故障时间

MTTR:Mean Time Resotration repair 平均故障恢复时间

A=MTBF/(MTBF+MTTR)

A指标要在0-1之间,A指标就是系统可用性的度量。0表示系统越不可用,1表示系统越可用

A指标要无限接近于1  (98%-99%合格;90%-95%不合格)

都是以小时为单位(1年365天8760小时)

停机时间和计划内时间不算在内

计划外时间,即故障时间,从故障发生到故障解决的总时间,计划外时间是我们必须关注的一个指标

lvs适用场景:

小集群不需要使用lvs,用nginx,大集群使用lvs

lvs集群中的术语

VS:vittual server  lvs服务的逻辑名称,也就是我们外部访问lvs集群时使用的ip地址和端口

DS:director server   lvs集群中的主服务器,也就是调度器(即nginx的代理服务器),是集群的核心,调度器就是用来接受客户端的请求转发到后端的服务器

RS:real server  lvs集群中的真是服务器,后端服务器,用来接受DS转发来的请求并且响应结果

CIP:client ip   客户端的地址,也就是发起请求的客户端地址

VIP:virtual ip   lvs集群使用的ip地址,对外提供集群访问的虚拟ip地址

DIP:director ip  调度器在集群当中的地址,用于和RS进行通信

RIP:real ip   后端服务器在集群当中的ip地址

lvs的工作方式

NAT模式:模式由调度器响应给客户端 (地址转换)

DR模式(直接路由模式):真实服务器直接响应给客户端

TUN模式:隧道模式

常用的模式:NAT模式和DR模式

NAT模式

在NAT模式下,lvs会将来自客户端的请求报文中的目标ip地址和端口,修改为lvs内部的ip地址和端口,然后把请求转发到后端服务器。

响应结果返回客户端的过程中,响应报文经过lvs的处理,把目标ip和端口修改成客户端的ip地址和端口。

原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。
然后负载均衡器就把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP)。
真实服务器响应完请求后,查看默认路由,把响应后的数据包发送给负载均衡器,负载均衡器在接收到响应包后,
把包的源地址改成虚拟地址(VIP)然后发送回给客户端。

优点:集群中的服务器可以使用任何支持TCP/IP的操作系统,只要负载均衡器有一个合法的IP地址。

缺点:扩展性有限,当服务器节点增长过多时,由于所有的请求和应答都需要经过负载均衡器,
因此负载均衡器将成为整个系统的瓶颈。

特点是地址转换

地址转换:内网——外网  转换的是源ip地址   SNAT

                  外网——内网   转换的是目的ip地址  DNAT

lvs的工具

ipvsadm工具,用来配置和管理lvs集群的工具

-A  添加虚拟服务器 vip

-D 删除虚拟服务器地址

-s 指定负载均衡的调度算法

-a  添加真是服务器

-d  删除真实服务器

-t   指定vip的地址和端口

-r  指定rip的地址和端口

-m  使用NAT模式

-g 使用DR模式

-i  使用隧道模式

-w 设置权重

-p 60   连接保持60s   设置连接保持时间

-l  列表查看

-n 数字化展示

算法

轮询  rr

加权轮询  wrr

最小连接  lc

加权最小连接 wlc

实验

数据流向

nginx 1 RS1 192.168.233.20

nginx2 RS2  192.168.233.30

test1 调度器  ens33 192.168.233.10  ens36 12.0.0.1

test2 客户端  12.0.0.10

步骤
一 、调度器配置(test1 192.168.233.10)

yum -y install ipvsadm* -y

配置ens33

systemctl restart network

配置ens36 

cd /etc/sysconfig/network-scripts/

cp ifcfg-ens33 ifcfg-ens36

vim ifcfg-ens36

systemctl restart network

二、RS配置(nginx1和nginx2)

配置nginx1 192.168.233.20 修改网关

systemctl restart network

配置nginx2 192.168.233.30 修改网关

systemctl restart network

vim /usr/local/nginx/html/index.html

修改访问页面的内容

查看访问是否连接

三、地址转换(test1 192.168.233.10)

iptables -t nat -vnL 查看nat表是否有策略

1.

iptables -t nat -A POSTROUTING -s 192.168.233.0/24 -o ens36 -j SNAT --to 12.0.0.1 

从192.168.233.0/24出的设备地址转换成12.0.0.1

2.

ipvsadm -C 清空原有的策略

ipvsadm -A -t 12.0.0.1:80 -s rr  指定好vip的地址和端口

先添加vip,虚拟服务器的ip和端口,然后再添加真实服务器

3.

ipvsadm -a -t 12.0.0.1:80 -r 192.168.233.20:80 -m

-a 添加真实服务器

-t 指定vip地址

-r 指定真实服务器的地址和端口

-m 指定模式为nat模式

ipvsadm -ln 查看

4.

ipvsadm-save 保存

ipvsadm -D -t  192.168.233.10:80  删除策略

ipvsadm -d -r 192.168.233.20: -t 12.0.0.1:80  删除节点服务器

5.开启路由转发功能

vim /etc/sysctl.conf

net.ipv4.ip_forward=1

四、客户端(test2  12.0.0.10 )

修改test2的ip地址和网关

实验结果

加权轮询

DR模式

概念

它是直接路由模式

NAT模式:调度器在整个lvs集群当中是最重要的,在nat模式下,既负责接收请求,同时根据负载均衡的算法转发流量,响应发送给客户端

DR模式:调度器依然负责接收请求,同时也根据负载均衡算法转发流量到RS,响应直接由RS响应给客户端

直接路由  Direct Routing :是一种二层转发模式,二层转发的是数据帧,根据源mac地址和目的mac地址进行转发,不会修改数据包源ip和目的ip。根据数据包mac地址进行转发。

DR模式下,lvs也是维护一个虚拟的ip地址,所有的请求都是发送到这个vip,既然走二层转发,当客户端的请求到达调度器之后,根据负载均衡的算法选择一个RS,修改vip服务器的目的mac变成RS的mac地址,RS处理完请求之后,根据报文当中客户端的源mac地址直接把响应发送到客户端即可,不需要走调度器了。

原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。
然后负载均衡器就把客户端发送的请求数据包的目标MAC地址改成后端真实服务器的MAC地址(R-MAC)。
真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均衡器。

优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。
所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量。

缺点:需要负载均衡器与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。

数据流向图

问题:
1.vip地址冲突

原因:调度器配置了vip,RS也配置了vip地址。vip地址冲突,因为调度器和RS都在同一个网段,会造成ARP通信紊乱。因为是整个局域网广播,所有的设备都收到了。

怎么把lo这个回环的响应把它屏蔽掉,只有本机的物理ip地址响应。

解决方法:修改内核参数:arp_ignore=1

系统的物理ip地址才会响应ARP请求,lo回环接口不会响应ARP请求

2.返回报文时,vip地址还在,怎么样能让客户端来接收到响应

解决方法:arp_announce=2

系统不使用ip数据包的源地址来响应ARP请求,直接发送物理接口的ip地址

DR模式的实现

nginx1 RS(真实ip) 192.168.233.20

nginx2 RS  192.168.233.30

vip 192.168.233.100

调度器 192.168.233.10

客户端  192.168.233.40

步骤
一 、调度器配置(test1 192.168.233.10)

yum -y install ipvsadm* -y

添加虚拟网卡ens33:0

修改调度器的响应参数

vim /etc/sysctl.conf

net.ipv4.ip_forward=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.ens33.send_redirects=0
 

sysctl -p

添加策略

cd /opt

ipvsadm -A -t 192.168.233.100:80 -s rr

ipvsadm -a -t 192.168.233.100:80 -r 192.168.233.20:80 -g

ipvsadm -a -t 192.168.233.100:80 -r 192.168.233.30:80 -g

ipvsadm-save >/etc/sysconfig/ipvsadm

systemctl restart ipvsadm

ipvsadm -ln

二、RS配置(nginx1和nginx2)[两遍都要修改]

修改静态页面的展示内容

vim /usr/local/nginx/html/index.html

systemctl restart nginx

添加回环地址

cd /etc/sysconfig/network-scripts/

cp ifcfg-lo ifcfg-lo:0

vim ifcfg-lo:0

添加lo:0接口做为vip

route add -host 192.168.233.100 dev lo:0

设置ip地址为192.168.233.100的地址添加到回环接口,做为lvs的vip,通过路由的模式转发到RS,能让vip识别到真实的服务器

修改RS真实服务器的内核响应

vim /etc/sysctl.conf

net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2

实验结果

修改vip轮询的算法

修改策略轮询当中的权重

总结

lvs和nginx做负载均衡的区别

lvs是四层转发,走的是内核态  ip+端口  只能做四层代理

nginx  四层代理 ,也可以七层代理

总结实验

lvs(DR模式)+nginx+tomcat

lvs实现四层转发+nginx实现7层转发(动态),访问lvs的vip地址可以实现动静分离

数据流向图

实验步骤

在上面DR模式的实验基础上实现动静分离

一、tomcat部分

1.分别在tomcat1和tomcat2做动态页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("动态页面 1,http://www.test1.com");%>
</body>
</html>

2.分别在tomcat1和tomcat2添加站点

cd conf

vim server.xml

先删除原有的站点

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
    <Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true" />

查看端口是否启动

访问192.168.233.40:8080/index.jsp

二、nginx部分

配置nginx2和nginx3

cd /usr/local/nginx/conf/

cp nginx.conf nginx.conf.bak.2024.07.08

vim nginx.conf

upstream tomcat {
    server 192.168.233.40:8080 weight=1;
    server 192.168.233.50:8080 weight=1;
}

location ~ .*\.jsp$ {
            proxy_pass http://tomcat;
            proxy_set_header HOST $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

然后systemctl restart nginx

配置nginx1代理

做四层代理

cd /usr/local/nginx/conf

vim nginx.conf

然后systemctl restart nginx

实验结果

访问192.168.100:81 静态页面

访问192.168.233.100:82/index.jsp  动态页面

lvs的三种工作模式

                           NAT                                  DR                                                      TUN

优点              地址转换,配置简单           性能最好                                              WAN,可以实现                                                                                                                           较远距离的数据包转发

缺点              性能瓶颈                            不支持跨网段                                   专用的通道,需要开                                                                                                                            通VPN(花钱)

RS的要求        无限制                     必须要禁止非物理接口的ARP响应           要支持隧道模式

RS的数量         10-20台                               100台                                                   100台

面试题:

1.简述lvs的三种模式和区别

上面的表

2.keepalive的脑裂怎么解决

高可用的HA架构

Keepalive概念

它是lvs集群当中的高可用架构,只是针对调度器的高可用

基于vrp来实现调度器的主和备之间的切换

主调度器和备调度(多台)

在主调度器正常工作的时候,备完全处于冗余状态(待命),不参与集群的运转。只有当主调度器出现故障时,备才会承担主调度器的工作。如果主调度器恢复功能之后,主继续做为集群的入口,备继续处于冗余状态,不绝对取决于优先级。

keepalive基于vrp协议来实现lvs高可用(主备切换)

1.组播地址

224.0.0.18根据组播地址来进行通信,主和备之间发送报文。确定对方是否存活

2.根据优先级的大小来确定主和备的位置

3.故障切换,主挂了,备来继续工作。主恢复了,备继续待命

4.主和备之间的切换是vip地址的切换

keepalive是专门为了lvs而出现的,但不是lvs专用的,keepalive也可以使用nginx,haproxy

core模块:keepalive的核心模块,负责主进程的启动、维护以及全局配置文件的加载

vrrp模块:实现vrrp协议的模块,也就是主功能模块

check模块:负责健康检查,也可以检查后台真实服务器的情况

配置注意点:

1.配优先级

2.配置vip和真实服务器

3.主备的id要一致

4.主备的id要区分

keepalive实验

test1 192.168.233.10 主

test2 192.168.233.50 备

vip 192.168.233.100

nginx1 192.168.233.20

nginx2 192.168.233.30

客户端  192.168.233.40

实验步骤

1.主和备都要同样操作    

yum -y install ipvsadm keepalived

vim /etc/sysctl.conf

net.ipv4.ip_forward=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.ens33.send_redirects=0

sysctl -p

ipvsadm -C

ipvsadm -A -t 192.168.233.100:80 -s rr

ipvsadm -a -t 192.168.233.100:80 -r 192.168.233.20:80 -g

ipvsadm -a -t 192.168.233.100:80 -r 192.168.233.30:80 -g

ipvsadm-save >/etc/sysconfig/ipvsadm

systemctl restart ipvsadm

ipvsadm -ln

 cd /etc/keepalive 

vim keepalived.conf

实验结果

ip addr 

keepalive+nginx实现高(主备切换)

数据流线图

实验步骤

1.vim check_nginx.sh

写一个check_nginx.sh的脚本

#!/bin/bash
/usr/bin/curl -I http://localhost &> /dev/null
if [ $? -ne 0 ]
then
systemctl stop keepalived
fi

2.  chmod 777 check_nginx.sh

     cd /etc/keepalived/

    vim keepalived.conf

script "/opt/check.nginx.sh"

调用脚本内容,检测nginx的状态

interval 5

检测的间隔时间是5s

删除这个后面的所有内容并添加监控配置

systemctl restart nginx

systemctl restart keepalived

3.把主的配置复制到备进行修改

scp root@192.168.233.20:/etc/keepalived/keepalived.conf /etc/keepalived/

cd /etc/keepalived/

vim keepalived.conf

实验结果

如果主nginx停止 keepalive也自动停止  备启用

面试题:脑裂是什么?怎么解决脑裂

HA高可用架构中的一个特殊现象,只要使用vip地址代理的冗余模式的高可用, 都有可能出现脑裂的问题。现象:主和备同时都有vip地址。

主和备无法确定各自的身份,同时出现了vip地址,就是两边都起来了,但是两边都无法使用。

原因:1.keepalive的配置文件问题

           2.心跳线(网线)问题

           3.网卡(硬件问题)、ip地址配置冲突

           4.防火墙的策略和iptables的策略,屏蔽了组播地址的广播,屏蔽了vrrp协议的报文

           5.两台服务器的时间不同步也可能导致

           6.其他的服务配置对心跳线的检测造成了干扰

解决方法

1.检查keepalive.conf里面的配置是否对

2.查看网线是否坏了

3.ifconfig检查ip地址是否冲突

4.查看电脑硬件是否有问题

5.iptables -vnL查看策略看看是否冲突

6.systemctl status firewalld 查看防火墙的状态是否关闭

7.查看两台服务器的时间是否同步

8.以上都没有问题再检查其他服务配置

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

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

相关文章

Android:如何绘制View

点击查看Android 如何绘制视图官网 一、简介 Android 框架会在 Activity 获得焦点时请求 Activity 绘制其布局。Android 框架会处理绘制流程&#xff0c;但该 Activity 必须提供其布局层次结构的根节点。 Android 框架会绘制布局的根节点&#xff0c;并测量和绘制布局树。它会…

【每日一练】python类和对象现实举例详细讲解

""" 本节课程目的&#xff1a; 1.掌握类描述现实世界实物思想 2.掌握类和对象的关系 3.理解什么事面向对象 """ #比如设计一个闹钟&#xff0c;在这里就新建一个类 class Clock:idNone #闹钟的序列号&#xff0c;也就是类的属性priceNone #闹…

Redis学习笔记(个人向)

Redis学习笔记(个人向) 1. 概述 是一个高性能的 key-value 数据库&#xff1b;其具有以下三个特点&#xff1a; Redis支持数据的持久化&#xff0c;可以将内存中的数据保存在磁盘中&#xff0c;重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据&…

Nginx+Keepalive调度的高可用

nginxkeepalive: 调度器的高可用 vip地址主备之间的切换&#xff0c;主在工作时&#xff0c;p地址只在主上&#xff0c;主停止工作&#xff0c;p飘移到备服务器。 在主备的优先级不变的情况下&#xff0c;主恢复工作&#xff0c;vp会飘回到主服务器。 1、配优先级 2、配置…

EventBus学习

视频&#xff1a;05_尚硅谷_EventBus_粘性事件案例_哔哩哔哩_bilibili 1.整体框架 2.demo下载地址&#xff1a;https://github.com/greenrobot/EventBus 3.实现非粘性时间流程&#xff1a; 3.1导入架包eventbus-3.0.0.jar和eventbus-3.0.0-sources.jar 3.2在接受数据页面注…

k8s(五)---名称空间

五、名称空间 名称空间是k8s划分不同工作空间的逻辑单位,是k8s资源逻辑隔离的机&#xff0c;。可以给不同的租户&#xff0c;不同的环境、不同的项目创建对应的命名空间。 1、查看名称空间 kubectl get ns kubectl get namespaces 此处展示了四个命名空间 2、管理名称空间 1…

更新商品前端接口编写

文章目录 新增页面书写写表单价格符号的显示然后状态的书写后端枚举书写时间书写使用组件 新增页面书写 书写直接复制页面 写表单的绑定信息 然后绑定表单 表单绑定还有表单数据的绑定 标签中ref的作用就是将 该组件注册到vue对象的ref属性中 那么在vue运行的时候,会加载所…

IOC、DI<4> Unity、AOP、MVCAOP、UnityAOP 区别

IOC&#xff08;&#xff09;&#xff1a;控制反转&#xff0c;把程序上层对下层的依赖&#xff0c;转移到第三方的容器来装配 是程序设计的目标&#xff0c;实现方式包含了依赖注入和依赖查找&#xff08;.net里面只有依赖注入&#xff09; DI&#xff1a;依赖注入&#xff0c…

【网络文明】关注网络安全

在这个数字化时代&#xff0c;互联网已成为我们生活中不可或缺的一部分&#xff0c;它极大地便利了我们的学习、工作、娱乐乃至日常生活。然而&#xff0c;随着网络空间的日益扩大&#xff0c;网络安全问题也日益凸显&#xff0c;成为了一个不可忽视的全球性挑战。认识到网络安…

Gitee简易使用流程(后期优化)

目录 1.修改用户名 2.文件管理 新建文件/文件夹流程如下&#xff1a; 上传文件流程如下&#xff1a; 以主页界面为起点 1.修改用户名 点解右上角的头像--> 点击“账号设置” 点击左边栏里的“个人资料“ 直接修改用户名即可 2.文件管理 选择一个有修改权限仓库&#…

【轻松拿捏】Java-final关键字(面试)

目录 1. 定义和基本用法 回答要点&#xff1a; 示例回答&#xff1a; 2. final 变量 回答要点&#xff1a; 示例回答&#xff1a; 3. final 方法 回答要点&#xff1a; 示例回答&#xff1a; 4. final 类 回答要点&#xff1a; 示例回答&#xff1a; 5. final 关键…

yolov8预测

yoloV8 官方地址 预测 -Ultralytics YOLO 文档 1.图片预测 from ultralytics import YOLO #### 图片预测1 ### https://www.youtube.com/watch?vneBZ6huolkg ### https://github.com/ultralytics/ultralytics ### https://github.com/abdullahtarek/football_analysis…

Linux C语言基础 day10

目录 学习目标&#xff1a; 学习内容&#xff1a; 1.指针指向数组 1.1 指针与数组的关系 1.2 指针与一维数组关系实现 1.2.1 指针与一维数组的关系 1.2.2 指针指向一维整型数组作为函数参数传递 课外作业&#xff1a; 学习目标&#xff1a; 一周掌握 C基础知识 学习内…

专业条码二维码扫描设备和手机二维码扫描软件的区别?

条码二维码技术已广泛应用于我们的日常生活中&#xff0c;从超市结账到公交出行&#xff0c;再到各类活动的入场验证&#xff0c;条码二维码的便捷性不言而喻&#xff0c;而在条码二维码的扫描识别读取过程中&#xff0c;专业扫描读取设备和手机二维码扫描软件成为了两大主要工…

uniapp使用多列布局显示图片,一行两列

完整代码&#xff1a; <script setup>const src "https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/shuijiao.jpg" </script><template><view class"content"><view class"img-list"><image :src"src…

日志自动分析-操作系统-GscanLogonTracerf8x

&#x1f3bc;个人主页&#xff1a;金灰 &#x1f60e;作者简介:一名简单的大一学生;易编橙终身成长社群的嘉宾.✨ 专注网络空间安全服务,期待与您的交流分享~ 感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持&#xff01;❤️ &#x1f34a;易编橙终身成长社群&#…

TCP连接的三次握手和断开的四次挥手

TCP连接的建立过程通过三次握手完成&#xff0c;‌而连接的关闭过程则通过四次挥手完成。‌ 三次握手&#xff1a;‌这是TCP连接建立的过程&#xff0c;‌主要目的是确保双方都准备好进行数据传输。‌具体步骤如下&#xff1a;‌ 客户端向服务器发送一个SYN报文&#xff0c;‌请…

Canvas:实现在线动态时钟效果

想象一下&#xff0c;用几行代码就能创造出如此逼真的图像和动画&#xff0c;仿佛将艺术与科技完美融合&#xff0c;前端开发的Canvas技术正是这个数字化时代中最具魔力的一环&#xff0c;它不仅仅是网页的一部分&#xff0c;更是一个无限创意的画布&#xff0c;一个让你的想象…

利用宝塔安装一套linux开发环境

更新yum&#xff0c;并且更换阿里镜像源 删除yum文件 cd /etc/yum.repos.d/ 进入yum核心目录 ls sun.repo rm -rf * 删除之前配置的本地源 ls 配置阿里镜像源 wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo 配置扩展包 wge…

【JavaScript 算法】深度优先搜索:探索所有可能的路径

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、算法原理二、算法实现三、应用场景四、优化与扩展五、总结 深度优先搜索&#xff08;Depth-First Search, DFS&#xff09;是一种用于遍历或搜索图或树数据结构的算法。该算法尽可能深入图的分支&#xff0c;探索所有可…