HDM管理口

HDM管理口通常是一个特定的物理接口,用于连接HDM设备与管理控制台或网络管理系统。通过管理口,管理员可以进行设备的配置、监控和故障排除等管理操作。

通过HDM管理口,管理员可以通过管理工具或命令行界面(CLI)等方式对HDM设备进行配置、监控和故障排除。这样可以更方便地管理大规模网络环境中的设备,并及时响应和解决问题,提高网络的可靠性和可管理性。

光模块

光模块(Optical Module)是一种用于光纤通信的设备,它将电信号转换为光信号,实现光纤之间的数据传输

光模块通常由光发射器(光源)和光接收器(光探测器)组成,它们可以分别将电信号转换为光信号和将光信号转换为电信号。光模块还包括一些其他组件,如光耦合器、驱动电路、接收电路、温度控制器等,以确保光信号的稳定传输和接收。

光模块具有以下特点:

  1. 标准化接口:光模块通常采用标准化的接口,如SFP(Small Form-factor Pluggable)、SFP+、QSFP(Quad Small Form-factor Pluggable)等。这些接口可以与光纤设备(如交换机、路由器)相连接,实现光纤之间的数据传输。

  2. 传输距离和速率:光模块可以支持不同的传输距离和速率。传输距离可以从几十米到几十公里不等,速率可以从几百Mbps到几百Gbps不等。根据不同的需求,可以选择适合的光模块进行数据传输。

  3. 光纤类型:光模块可以适配不同类型的光纤,如单模光纤(Single-mode Fiber)和多模光纤(Multi-mode Fiber)。不同类型的光纤具有不同的传输特性和传输距离,光模块需要与之匹配。

  4. 热插拔性:光模块通常支持热插拔,即可以在运行状态下插入或拔出。这样可以方便地更换或升级光模块,而无需停止整个系统的运行。

光模块在光纤通信中扮演着重要的角色,它们被广泛应用于数据中心、电信运营商、企业网络等领域。通过使用光模块,可以实现高速、稳定和远距离的数据传输,满足不同应用场景的需求。

UPS

UPS(Uninterruptible Power Supply)是一种用于提供电力备份和保护的设备。它可以在电源中断或电压异常时,提供持续的电力供应,以保证连接到其上的设备正常运行

UPS通常由以下几个部分组成:

  1. 蓄电池:UPS内部配备了一组蓄电池,用于存储电能。当电网供电正常时,蓄电池会通过充电器进行充电,以备用电源。

  2. 逆变器:UPS内部还有一个逆变器,它将蓄电池中的直流电能转换为交流电能,以供连接到UPS上的设备使用。

  3. 稳压器:UPS还配备了稳压器,用于调整电压的稳定性。当电网供电电压不稳定时,稳压器可以提供稳定的输出电压,以保护设备免受电压波动的影响。

UPS的工作原理如下:

  1. 正常供电:当电网供电正常时,UPS将电能传递给连接到其上的设备,同时通过充电器将电能存储到蓄电池中。

  2. 电网中断:当电网供电中断时,UPS会立即切换到蓄电池供电模式,通过逆变器将蓄电池中的直流电能转换为交流电能,以供设备使用。这样可以避免设备因为电源中断而停止工作。

  3. 电压异常:当电网供电电压异常(如过高或过低)时,UPS的稳压器会调整输出电压,以保持稳定的电压供应。这样可以防止设备受到电压波动的损害。

UPS广泛应用于各种场景,特别是对于对电力供应要求高的设备和系统,如计算机数据中心、网络设备、医疗设备、通信设备等。通过使用UPS,可以提供可靠的电力备份和保护,保证设备的正常运行,并防止因为电源问题而导致的数据丢失或设备损坏。

cp

在Linux中,cp命令用于复制文件或目录。它的基本语法如下:

1
cp [选项] 源文件 目标文件

常见的选项包括:

  • -r-R:递归复制,用于复制目录及其下所有文件和子目录。
  • -i:交互式复制,如果目标文件已存在,则提示是否覆盖。

以下是一些示例:

  1. 复制一个文件到指定目录:

    1
    cp file.txt /path/to/directory/
  2. 复制多个文件到指定目录:

    1
    cp file1.txt file2.txt /path/to/directory/
  3. 复制目录及其下所有文件和子目录到指定目录:

    1
    cp -r directory /path/to/directory/
  4. 复制文件并重命名:

    1
    cp file.txt newfile.txt
  5. 交互式复制,如果目标文件已存在,则提示是否覆盖:

    1
    cp -i file.txt /path/to/directory/

需要注意的是,如果目标文件已经存在,使用cp命令会覆盖目标文件。如果要保留原始文件,可以使用cp命令前先备份文件。

rm

在Linux中,可以使用rm命令来删除文件。rm命令用于删除指定的文件或目录。

删除文件的基本语法如下:

1
rm [选项] 文件名

常见的选项包括:

  • -f:强制删除,不提示确认。
  • -i:交互式删除,删除前提示确认。
  • -r-R:递归删除,用于删除目录及其下所有文件和子目录。

以下是一些示例:

  1. 删除一个文件:

    1
    rm file.txt
  2. 删除多个文件:

    1
    rm file1.txt file2.txt file3.txt
  3. 删除目录及其下所有文件和子目录:

    1
    rm -r directory
  4. 强制删除文件,不提示确认:

    1
    rm -f file.txt

需要注意的是,删除文件后是无法恢复的,请谨慎使用rm命令。如果要删除的文件是重要文件或者不确定是否需要删除,建议在执行删除操作之前先备份文件。

vi

Vi 是一种在 Linux 系统中常用的文本编辑器。它是一个命令行界面的编辑器,可以用于编辑各种类型的文件。

要使用 Vi 编辑器,可以在终端中输入以下命令:

1
vi 文件名

这将打开一个新的 Vi 编辑器窗口,并加载指定的文件。如果文件不存在,Vi 将创建一个新文件。

在 Vi 编辑器中,有三种主要的模式:命令模式、插入模式和底行模式。

  • 命令模式:当您打开 Vi 编辑器时,默认处于命令模式。在此模式下,您可以执行各种编辑操作,例如移动光标、删除文本、复制粘贴等。要进入命令模式,请按下 Esc 键。

  • 插入模式:在命令模式下,按下 i 键可以进入插入模式。在插入模式下,您可以直接输入文本,并进行编辑。要退出插入模式并返回到命令模式,请按下 Esc 键。

  • 底行模式:在命令模式下,按下冒号 : 键可以进入底行模式。在底行模式下,您可以执行一些底行命令,例如保存文件、退出编辑器等。在底行模式下,您可以输入命令,然后按下 Enter 键执行该命令。执行完命令后,会返回到命令模式。

以下是一些常用的 Vi 编辑器命令:

  • 移动光标:h(左)、j(下)、k(上)、l(右)
  • 删除文本:x(删除一个字符)、dd(删除整行)
  • 复制粘贴:yy(复制整行)、p(粘贴)
  • 保存文件:在底行模式下,输入 :w 并按下 Enter 键
  • 退出编辑器:在底行模式下,输入 :q 并按下 Enter 键

这只是 Vi 编辑器的一些基本操作,Vi 还有更多高级的功能和命令。如果您想深入了解 Vi 编辑器,请查阅相关的文档或教程。

守护进程

守护进程(daemon)是在计算机操作系统中以后台形式运行的一种特殊进程。守护进程通常在系统启动时启动,并在系统运行期间持续运行,不依赖于任何用户终端的存在。

守护进程的主要特点包括:

  1. 后台运行:守护进程在后台运行,不与用户终端进行交互。它通常不会向终端输出信息,也不会接收来自终端的输入。

  2. 无用户终端依赖:守护进程不依赖于任何用户终端的存在。即使用户退出登录或关闭终端,守护进程仍然可以继续运行。

  3. 服务提供:守护进程通常用于提供某种服务,如网络服务、打印服务、日志服务等。它们监听特定的端口或文件,并根据请求提供相应的功能。

  4. 生命周期管理:守护进程的生命周期由操作系统管理。它们可以在系统启动时自动启动,并在系统关闭时自动停止。

在 Linux 系统中,守护进程的名称通常以字母 “d” 结尾,如 sshdhttpdcrond 等。守护进程的具体实现和管理方式可能因操作系统而异,但通常可以通过服务管理工具(如 systemdinit.d)来管理和控制守护进程的启动、停止和重启。

守护进程在系统中发挥着重要的作用,它们提供了很多核心服务,使得系统能够在后台运行并提供各种功能。

service

service 命令是一个旧的系统服务管理工具,用于启动、停止和查看服务的状态。它通常在较旧的 Linux 发行版中使用。

以下是一些常用的 service 命令用法示例:

  • 启动服务:service <服务名称> start
    例如,启动 apache2 服务:

    1
    service apache2 start
  • 停止服务:service <服务名称> stop
    例如,停止 nginx 服务:

    1
    service nginx stop
  • 重启服务:service <服务名称> restart
    例如,重启 mysql 服务:

    1
    service mysql restart
  • 查看服务状态:service <服务名称> status
    例如,查看 ssh 服务的状态:

    1
    service ssh status
  • 列出所有服务状态:service --status-all
    这会列出所有系统上的服务,并显示它们的状态。

请注意,service 命令需要使用 sudo 或具有管理员权限的账户才能执行。在较新的 Linux 发行版中,推荐使用更现代的 systemctl 命令来管理服务。

使用 service 命令查看所有服务的状态可以执行以下命令:

1
service --status-all

这会列出系统上所有的服务,并显示它们的状态。服务名称前带有 [ + ] 表示服务正在运行,[ - ] 表示服务已停止。在输出中,你还可以看到一些带有问号标记的服务,表示它们的状态无法确定。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
root@kylin-vmwarevirtualplatform:/home# service --status-all
[ - ] acpid
[ - ] alsa-utils
[ - ] anacron
[ - ] apparmor
[ + ] atd
[ - ] auditd
[ + ] avahi-daemon
[ + ] biometric-authentication
[ - ] bluetooth
[ - ] console-setup.sh
[ + ] cpufrequtils
[ + ] cron
[ - ] cryptdisks
[ - ] cryptdisks-early
[ + ] cups
[ - ] cups-browsed
[ + ] dbus
[ + ] dnsmasq
[ + ] grub-common
[ - ] hwclock.sh
[ + ] ipsec
[ - ] keyboard-setup.sh
[ + ] kmod
[ + ] lightdm
[ + ] lm-sensors
[ + ] loadcpufreq
[ - ] lvm2
[ - ] lvm2-lvmpolld
[ + ] mysql
[ + ] network-manager
[ + ] networking
[ + ] nmbd
[ + ] open-vm-tools
[ - ] plymouth
[ - ] plymouth-log
[ - ] pppd-dns
[ + ] procps
[ - ] pulseaudio-enable-autospawn
[ - ] rsync
[ + ] rsyslog
[ - ] samba-ad-dc
[ - ] saned
[ + ] smartmontools
[ + ] smbd
[ + ] ssh
[ + ] udev
[ + ] ufw
[ - ] uuidd
[ - ] x11-common
[ + ] xl2tpd
[ + ] xrdp
[ + ] yhkydefenderservice
root@kylin-vmwarevirtualplatform:/home# service --status-all | grep mysql
[ + ] mysql

请注意,service 命令在较新的系统上可能已被 systemctl 取代,因此推荐使用 systemctl 命令进行服务管理,尤其是在较新的 Linux 发行版中。

chmod

chmod 是一个用于修改文件或目录权限的命令。它可以更改文件或目录的读、写和执行权限,以及文件或目录的所有者和所属组。

chmod 命令的基本语法如下:

1
chmod [选项] 模式 文件/目录

其中,选项可以是以下之一:

  • -c:显示每个修改过的文件的操作信息。
  • -f:不显示错误信息。
  • -v:显示每个修改过的文件的操作信息。
  • -R:递归地修改目录及其子目录中的文件权限。

模式可以是以下之一:

  • 数字形式的权限:例如 755644

    4读r、2写w、1执行x

  • 符号形式的权限:例如 u+rwxg+rwo-x

文件/目录是要修改权限的文件或目录的路径。

以下是一些常用的示例:

  1. 将文件 file.txt 的所有者设置为可读、可写和可执行,所属组和其他用户只有读的权限:

    1
    chmod 744 file.txt
  2. 将目录 dir 及其子目录中的所有文件设置为可读、可写和可执行:

    1
    chmod -R 755 dir
  3. 将文件 file.txt 的所有者和所属组的执行权限移除:

    1
    chmod ug-x file.txt

请注意,chmod 命令需要使用 sudo 或管理员权限来执行对系统文件的修改。

chown

chown 命令用于更改文件或目录的所有者和所属组。它可以将文件或目录的所有者和所属组修改为其他用户或组。

chown 命令的基本语法如下:

1
chown [选项] 用户[:组] 文件/目录

其中,选项可以是以下之一:

  • -c:显示每个修改过的文件的操作信息。
  • -f:不显示错误信息。
  • -v:显示每个修改过的文件的操作信息。
  • -R:递归地修改目录及其子目录中的文件所有者和所属组。

用户可以是用户名或用户 ID,组可以是组名或组 ID。如果不指定组,则默认为用户的主组。文件/目录是要修改所有者和所属组的文件或目录的路径。

以下是一些常用的示例:

  1. 将文件 file.txt 的所有者和所属组修改为用户 user 和组 group

    1
    chown user:group file.txt
  2. 将目录 dir 及其子目录中的所有文件的所有者和所属组修改为用户 user

    1
    chown -R user dir
  3. 将文件 file.txt 的所有者修改为用户 user

    1
    chown user file.txt

请注意,chown 命令需要使用 sudo 或管理员权限来执行对系统文件的修改。

su sudo

su (substitute user) ——切换用户身份(常用于切换到 root)。会打开一个新的 Shell 会话,权限持续有效,直到退出这个 shell。

常用用法:

1
2
3
4
su              # 切换到 root(需要 root 密码)
su - # 切换到 root,并加载 root 的环境变量
su 用户名 # 切换到指定用户
su - 用户名 # 切换到指定用户,并加载其环境变量

👉 举例:

1
2
3
4
5
su -
# 输入 root 密码
# 现在就是 root 环境了
退出 root:
exit

du

du(Disk Usage)是 Linux 中用于分析目录或文件的磁盘空间占用情况的命令。

📂 常用参数说明:

参数 含义
-h 以人类可读方式显示大小(KB/MB/GB)
-s 仅显示总计,不列出子目录
-a 显示所有文件和目录的使用情况
-c 显示总计
-d N 显示 N 层目录深度的大小(常用于查看第一层子目录的用量)
--max-depth=N 同上(GNU 风格)
--exclude=PATTERN 排除符合模式的文件

💡 示例:

  1. 查看当前目录下每个子目录的磁盘使用情况:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [root@4f897946c0ec usr]# du -h --max-depth=1
    45M ./bin
    59M ./share
    64K ./include
    36M ./lib
    4.0M ./libexec
    12K ./src
    116M ./lib64
    4.0K ./games
    136K ./local
    13M ./sbin
    271M .
    [root@4f897946c0ec usr]#
  2. 查看整个 /var 目录占用了多少空间:

    1
    2
    3
    [root@4f897946c0ec usr]# du -sh /var
    11M /var
    [root@4f897946c0ec usr]#
  3. 显示 /home 目录下所有文件和目录的详细使用情况(包括文件):

    1
    2
    3
    [root@4f897946c0ec usr]# du -ah /home
    4.0K /home
    [root@4f897946c0ec usr]#

find

find 是 Linux 下功能最强、最灵活的文件搜索工具。支持按文件名、时间、大小、类型、权限、用户等多种维度查找,且可配合执行操作(如删除、移动等)。

PS:find 默认会在当前目录及其所有子目录中递归查找

🔍 常用选项说明:

参数 含义
-name "*.txt" 匹配指定名称或模式的文件(可使用通配符)
-type f/d/l 匹配文件/目录/符号链接
-size +100M 查找大于100MB的文件
-mtime -n/+n 查找n天内/前修改的文件
-atime -n/+n 访问时间
-ctime -n/+n inode 变更时间
-user username 匹配属于某用户的文件
-perm 644 匹配权限为 644 的文件
-exec CMD {} \; 对找到的文件执行命令

💡 实战示例:

  1. 查找当前目录下所有 .log 文件:

    1
    2
    3
    4
    5
    6
    7
    [root@4f897946c0ec /]# find . -type f -name "*.log"
    ./usr/lib/rpm/rpm.log
    ./var/log/hawkey.log
    ./var/log/dnf.rpm.log
    ./var/log/dnf.librepo.log
    ./var/log/dnf.log
    [root@4f897946c0ec /]#
  2. 查找过去 3 天内被修改的文件:

    1
    2
    3
    [root@4381056ca461 ~]# find /var/log -type f -mtime -3
    /var/log/lastlog
    [root@4381056ca461 ~]#
  3. 查找并删除所有 .bak 文件:

    1
    find /home -name "*.bak" -exec rm -f {} \;
  4. 查找权限为 777 的文件(可能存在安全隐患):

    1
    find / -type f -perm 0777

虚拟机集群

虚拟机集群 是一种虚拟化技术,将多台物理服务器组合在一起,通过虚拟化平台(如 VMware、Hyper-V、KVM、OpenStack 等)统一管理和调度计算、存储和网络资源,从而实现高可用性、负载均衡和弹性扩展。虚拟机集群的核心思想是将虚拟机分布在多个物理主机(服务器)上,并在集群层面进行资源池化、动态调度和管理。

特点

- 资源池化:将多个物理主机的资源整合为一个虚拟资源池,提供统一的资源调度。

假设一个企业有 10 台物理服务器,它们分别运行着不同的虚拟机。如果这些物理服务器未组成集群,管理员需要单独配置每台服务器的资源(如 CPU、内存、存储等)。而当这些物理服务器组成一个虚拟机集群后,虚拟化平台(如 VMware vSphere、Hyper-V 等)将这些资源整合成一个大的资源池,虚拟机能够跨不同的物理主机调度和使用这些资源。比如,一台物理服务器的 CPU 利用率高时,集群内的虚拟机可以迁移到另一台空闲的物理服务器上运行,实现资源的共享和优化。

- 高可用性:故障发生时,虚拟机能自动迁移到其他主机上。

- 负载均衡:根据实时资源需求动态调度虚拟机。
- 存储共享:集群中的主机可以共享存储资源,保证虚拟机的访问不中断。

假设虚拟机 VM1 和 VM2 分别运行在集群内的两台物理主机上,且这些虚拟机使用了共享存储设备,如 SAN(存储区域网络)NFS 存储。这意味着,虚拟机的磁盘文件(如 VMDK 或 VHD)并不会绑定到某一台物理主机上,而是存储在共享存储上。即使虚拟机在主机之间迁移,存储数据也会随之访问,虚拟机可以跨主机访问自己的磁盘,保证了虚拟机的可迁移性和高效存储利用。

- 容灾恢复:当主机出现故障时,虚拟机可以无缝恢复,确保业务连续性。

虚拟机迁移

同集群迁移

同集群迁移是指虚拟机在同一个集群内的不同物理主机之间迁移。此时,迁移的虚拟机所在的物理主机属于同一个虚拟化集群,并且这些主机之间通常共享存储和网络资源。

迁移特征

  • 资源共享:虚拟机迁移的源和目标主机共享存储和网络资源。存储通常使用共享存储解决方案,如 NFSiSCSISAN,这样虚拟机的磁盘数据可以在不同主机之间直接访问。
  • 简单性:因为存储是共享的,虚拟机的磁盘文件通常不会随迁移过程一起转移,减少了迁移的复杂度。
  • 低延迟:由于迁移的主机在同一网络或同一个数据中心内,网络延迟较低,虚拟机的迁移速度相对较快。
  • 无停机迁移:在许多虚拟化平台中,同集群迁移通常是 热迁移(Live Migration),虚拟机迁移过程对用户几乎是透明的,应用程序不会受到影响。

迁移步骤

  1. 准备工作:确认源主机和目标主机属于同一个集群,且网络和存储资源是共享的。
  2. 虚拟机的状态冻结:在源主机上冻结虚拟机的状态,保存当前内存内容。
  3. 虚拟机的内存同步:通过网络将虚拟机的内存页复制到目标主机。
  4. 磁盘同步:如果存储是共享的,虚拟机的磁盘文件无需迁移。如果存储不是共享的,可能需要迁移虚拟机的磁盘文件。
  5. 切换:完成内存同步和磁盘同步后,虚拟机在目标主机上恢复运行,源主机上停止。

适用场景

  • 当物理主机发生故障时,需要将虚拟机迁移到其他正常的主机上。
  • 需要对物理主机进行维护或升级时,可以迁移虚拟机到同一集群中的其他主机上,以减少停机时间。
  • 负载均衡,当集群中某些主机的资源过载时,可以将虚拟机迁移到其他主机以分担负载。

跨集群迁移

跨集群迁移是指虚拟机从一个虚拟化集群迁移到另一个集群,这些集群可能位于不同的数据中心,具有不同的存储、网络配置,迁移过程相对复杂。

迁移特征

  • 跨数据中心:虚拟机迁移可能涉及跨多个数据中心或不同地理位置的物理主机,这意味着迁移过程中涉及的数据流量需要跨越广域网(WAN)。
  • 存储差异:源集群和目标集群之间的存储类型和配置可能不同,如源集群使用的是 NFS 存储,而目标集群使用的是 iSCSI 存储。迁移过程中,可能需要将虚拟机的磁盘从一种存储类型迁移到另一种。
  • 网络差异:源集群和目标集群的网络配置、IP 地址等可能存在差异,迁移时需要保证目标集群的网络环境与源集群兼容,虚拟机的网络连接必须保持正常。
  • 迁移复杂性:跨集群迁移需要更多的资源协调,可能需要将存储数据、虚拟机的配置文件等一起迁移,同时要解决跨集群的存储和网络连接问题。对于跨数据中心的迁移,带宽和延迟也可能成为瓶颈。

迁移步骤

  1. 确认兼容性:确保源集群和目标集群的虚拟化平台兼容,存储和网络设置是可互操作的。
  2. 虚拟机快照/备份:为了确保数据安全,通常会在源集群中对虚拟机做快照或备份,防止迁移过程中发生数据丢失。
  3. 磁盘迁移:如果源集群和目标集群的存储不同,可能需要将虚拟机的磁盘从源存储系统迁移到目标存储系统。可以通过网络传输(例如通过 iSCSINFS)或者物理设备来完成。
  4. 虚拟机配置迁移:虚拟机的配置文件、网络设置等需要被迁移到目标集群,并在目标集群中重新配置。
  5. 网络适配:确保目标集群中的网络设置(如 IP 地址、VLAN 等)与源集群兼容,必要时调整虚拟机的网络设置。
  6. 数据同步和最终切换:在迁移过程中,虚拟机的数据需要同步。同步完成后,虚拟机将从源集群迁移到目标集群,并恢复运行。

适用场景

  • 跨数据中心的迁移:当需要将虚拟机从一个数据中心迁移到另一个数据中心时,尤其是为了灾难恢复、负载分担或者拓展容量时。
  • 资源优化:有时,迁移虚拟机到性能更强或者资源更多的集群中,能够实现更好的资源利用。
  • 存储升级:如果源集群的存储系统需要进行升级或更换,可能需要迁移虚拟机到目标集群中,迁移过程会涉及不同存储的适配和数据迁移。

区别

特性 同集群迁移 跨集群迁移
物理主机 同一集群中的物理主机 跨不同集群、不同数据中心的物理主机
存储类型 共享存储 可能需要迁移不同存储类型
网络配置 网络配置一致,通常较简单 网络配置不同,可能需要额外调整
迁移难度 较为简单,通常是热迁移 较为复杂,涉及多个资源的协调
迁移时间 快速,延迟较低 迁移时间较长,可能受到带宽和延迟的影响
适用场景 负载均衡、主机维护、故障转移 数据中心迁移、灾难恢复、跨数据中心扩展

负载均衡

负载均衡(Load Balancing)是指通过将流量、请求、或任务分配到多个计算资源(如服务器、虚拟机或网络设备)上,从而实现系统资源的高效利用、提高系统的可用性和可靠性,避免单一节点过载,确保应用程序的稳定性和响应速度。

负载均衡的核心目标是把传入的流量或任务合理地分配到多台服务器或其他计算资源上。通过这种分配,确保每台资源的负载不超过其处理能力,从而达到:

  • 高可用性:即使某个节点失败,其他节点可以继续提供服务,系统整体不会崩溃。
  • 高性能:避免某一台服务器过载,提高响应速度和处理能力。
  • 可扩展性:可以通过增加或减少服务器来扩展或缩减系统能力,支持系统根据流量变化动态调整。

工作原理

负载均衡通常使用 负载均衡器(Load Balancer) 来充当中介角色,负责将传入的流量(请求、任务等)根据预定的算法分发到后端的多个服务器(也叫做节点)。负载均衡器可以是硬件设备,也可以是软件解决方案,常见的负载均衡器包括 NginxHAProxyF5AWS Elastic Load Balancing 等。

负载均衡的过程一般如下:

  1. 客户端请求:用户发起的请求通过 DNS 或其他方式定位到负载均衡器。
  2. 请求分配:负载均衡器根据所选算法将请求转发到某一台服务器或节点。
  3. 服务器响应:该服务器处理请求并将响应返回给客户端。如果负载均衡器采用了“会话保持”策略,可能会将后续请求继续路由到同一台服务器。

调度算法

常见调度算法

算法 原理 优点 缺点 适用场景
轮询(Round Robin) 请求按顺序分配给每台服务器。 简单,适用于服务器性能相同的场景。 不考虑负载差异,可能不均衡。 服务器性能相同时。
加权轮询(Weighted RR) 按权重分配请求,权重大者接收更多请求。 考虑性能差异,负载分配合理。 权重配置不当可能导致过载。 服务器性能不同的场景。
最少连接(Least Connections) 请求分配给当前连接数最少的服务器。 平衡负载,适用于处理时间差异大的场景。 可能受短时波动影响。 请求处理时间差异较大时。
加权最少连接(Weighted LC) 按权重和连接数分配请求,权重大者接收更多请求。 同时考虑负载和性能。 配置权重复杂。 负载和性能差异较大时。
IP哈希(IP Hash) 根据IP地址将请求分配给特定服务器。 确保同一IP的请求始终分配给同一服务器。 IP分布不均时,负载可能不均。 需要会话保持时。
随机(Random) 随机选择一台服务器处理请求。 实现简单,适合负载均衡需求较低的场景。 不考虑负载,可能导致不均衡。 负载均衡要求不高时

分类

软件负载均衡(常见软件如 Nginx、HAProxy)、硬件负载均衡(专用硬件设备如 F5)

双主现象

高可用系统(HA)中,如果两台负载均衡器之间的心跳线断了,而且二者的虚拟IP(VIP)相同

如果两台负载均衡之间的 心跳链路断开,但它们的网络接口仍正常(即彼此可以对外通信),两台服务器可能会都认为对方宕机了,于是原本是 主节点 的那台继续持有 VIP;原本是 备节点 的那台认为主节点宕机,也抢占了 VIP

这就造成了两个节点都绑定了同一个 VIP 地址,对外“服务”,就造成了双主(split-brain)

⚠️ 双主现象的风险

  1. ARP冲突/广播风暴
  • 同一 IP 在局域网中出现两个 MAC 地址,会触发频繁的 ARP 报文更新(MAC 地址冲突),导致网络不稳定或瘫痪。
  • 一些交换机会来回刷新 ARP 表,部分客户端请求可能被送往错误的节点,产生丢包或访问失败。
  1. 请求错乱/连接异常
  • 客户端请求可能“随机”被发送到两个不同的负载均衡器;
  • 如果这两个负载均衡器状态不同(例如路由表、后端池、健康检查结果不同),请求结果可能不一致;
  • 会话状态(如登录状态、Cookie处理、Session等)可能无法保持,尤其在无共享会话机制时(如未配置 sticky-session)。
  1. 业务混乱/服务不一致
  • 如果负载均衡还承担任务调度、限流、SSL卸载等功能,两个主节点分别处理,可能导致:
    • 重复调度任务;
    • 不均衡负载;
    • 安全策略失效。

理论上,短期内请求“看起来”可能还能被处理;但实际上风险极高,系统不再可控,最终很可能造成数据错乱、服务异常或安全隐患