【MHA】MySQL高可用MHA介绍1-功能,架构,优势,案例

目录

一 MHA 介绍

1 MHA功能

自动化主服务器监控和故障转移

交互式(手动启动的)主故障转移

非交互式主故障转移

在线切换主机

2 主服务器故障转移的难点

二 MHA架构

1 MHA组件

2 自定义扩展(脚本)

三 MHA优势

1 MHA可以非常快速地进行主故障转移和从服务器晋升。

2 主服务器崩溃不会导致数据不一致。

3 无需修改当前的MySQL设置

4 无需增加大量服务器

5 无性能损耗

6 适用于任何存储引擎

四 MHA典型的使用情况

1 MHA Manager的部署位置

2 复制拓扑结构

一主多从

一主多从(其中有个从库Sr在远程的数据中心)

一主多从(其中有个从库S0设置为候选主)

多主多从

三层级联复制

三层级联复制,多主配置

3 管理主机IP地址

4 与半同步复制一起使用


一 MHA 介绍

MHA(Master High Availability)执行自动化的主服务器故障转移和从服务器提升,最小化停机时间,通常在10-30秒内完成。MHA可以防止复制一致性问题,并节省了获取额外服务器的费用。所有这些操作都不会造成性能下降,没有复杂性(易于安装),也不需要对现有部署进行任何更改。

MHA还提供了定期在线主服务器切换功能,安全地将当前运行的主服务器切换到新主服务器,仅需几秒钟的停机时间(仅阻止写入)。

1 MHA功能

MHA提供了以下功能,并且在许多需要高可用性、数据完整性和近乎不间断的主服务器维护的部署中非常有用。

自动化主服务器监控和故障转移

MHA可以监控现有复制环境中的MySQL主服务器,在检测到主服务器故障时执行自动化主服务器故障转移。MHA通过识别来自最新从服务器的差异中继日志事件,并将其应用于所有其他从服务器,包括那些仍未接收到最新中继日志事件的从服务器,从而保证所有从服务器的一致性。MHA通常可以在几秒内执行故障转移:9-12秒用于检测主服务器故障,可选择性地7-10秒用于关闭主服务器以避免分裂脑,然后再花几秒钟将差异中继日志应用于新主服务器。总停机时间通常为10-30秒。可以在配置文件中指定特定的从服务器作为候选主服务器(设置优先级)。由于MHA在从服务器之间保持一致性,因此任何从服务器都可以晋升为新主服务器。通常会导致突然复制失败的一致性问题不会发生。

交互式(手动启动的)主故障转移

MHA可以配置为手动启动的交互式故障转移,而无需监控主服务器。

非交互式主故障转移

还支持无需监控主服务器的非交互式自动主故障转移。当已经使用MySQL主软件监视时,此功能特别有用。例如,您可以使用Pacemaker(心跳)来检测主服务器故障和虚拟IP地址接管,同时使用MHA进行主服务器故障转移和从服务器提升。

在线切换主机

经常需要将现有主机迁移到不同的机器,例如当前主机存在硬件RAID控制器或RAM问题,或者想要用更快的机器替换它时。这不是主服务器崩溃,而是需要计划的主服务器维护。应尽快执行计划的主服务器维护,因为它涉及部分停机(主写入被禁用)。另一方面,您应该非常小心地阻止/终止当前运行的会话,因为不同主服务器之间可能会发生一致性问题(例如,“更新主1,更新主2,提交主1,在提交主2时出现错误”将导致数据不一致)。需要快速的主切换和优雅的阻塞写入。

MHA在0.5-2秒的写入阻塞时间内提供优雅的主切换。通常可以接受0.5-2秒的写入停机时间,因此即使没有分配计划的维护窗口,也可以切换主服务器。诸如升级到更高版本、更快的机器等操作变得更加容易。

2 主服务器故障转移的难点

主服务器故障转移并不像看起来那么简单。以最典型的MySQL部署案例为例,一个主服务器对应多个从服务器。如果主服务器崩溃,您需要选择其中一个最新的从服务器,将其晋升为新主服务器,并让其他从服务器从新主服务器开始复制。这实际上并不简单。即使最新的从服务器可以被识别出来,其他从服务器很可能尚未接收到所有的二进制日志事件。如果这些从服务器在开始复制时连接到新主服务器,它们将丢失事务。这将导致一致性问题。为了避免这些一致性问题,需要先识别并逐个应用尚未到达所有从服务器的丢失的二进制日志事件,然后才能在新(晋升的)主服务器上启动复制。这个操作可能非常复杂且难以手动执行。我在2011年的MySQL会议和博览会上的演示幻灯片中有详细说明(特别是在第10页)。

目前,大多数MySQL复制用户在主服务器崩溃时别无选择,只能手动执行故障转移。完成故障转移通常需要一小时或更长时间的停机时间并不罕见。很可能并非所有从服务器都接收到相同的中继日志事件,导致稍后可能需要纠正的一致性问题。即使主服务器崩溃的情况很少见,但一旦发生,可能会非常痛苦。

MHA旨在尽快完全自动化主服务器故障转移和恢复程序,而无需任何被动(备用)机器。恢复过程包括确定新主服务器,识别从服务器之间的差异中继日志事件,将必要的事件应用于新主服务器,同步其他从服务器,并让它们从新主服务器开始复制。通常情况下,MHA可以在10-30秒的停机时间内执行故障转移(10秒用于检测主服务器故障,可选择性地7-10秒用于关闭主服务器以避免分裂脑,几秒钟或更长时间用于恢复),具体取决于复制延迟。

MHA提供了自动和手动故障转移命令。自动故障转移命令“masterha_manager(MHA Manager)”包括主服务器监控和主服务器故障转移。masterha_manager会持续监控主服务器的可用性。如果MHA Manager无法连接到主服务器,它将自动启动非交互式故障转移过程。

手动故障转移命令“masterha_master_switch”最初会检查主服务器是否真的死机。如果主服务器确实死机,masterha_master_switch将从从服务器中选择一个作为新主服务器(您可以选择首选主服务器),并启动恢复和故障转移。内部执行的操作更多,但您只需执行一个命令,而不必自己执行复杂的主服务器恢复和故障转移操作。

二 MHA架构

当主数据库发生崩溃时,MHA会按照以下步骤恢复其余的从数据库。

基本算法在2011年MySQL会议与博览会上的幻灯片中有所描述,特别是从第13页到第34页。

在从数据库的中继日志文件中,主数据库的二进制日志位置被写入“end_log_pos”部分(示例)。通过比较从数据库之间的最新end_log_pos,我们可以确定哪些中继日志事件没有发送到每个从数据库。MHA通过使用这种机制在内部恢复从数据库(修复一致性问题)。除了MySQL Conf 2011幻灯片中涵盖的基本算法外,MHA还进行了一些优化和增强,例如快速生成差异中继日志(与中继日志文件大小无关),使恢复与基于行的格式配合使用等等。

1 MHA组件

MHA由MHA Manager和MHA Node组成,如下所示。

MHA Manager有管理程序,例如监控MySQL主数据库,控制主故障转移等。

MHA Node具有故障转移辅助脚本,例如解析MySQL二进制/中继日志,识别应将中继日志应用于其他从数据库的中继日志位置,将事件应用于目标从数据库等。MHA Node在每个MySQL服务器上运行。

当MHA Manager执行故障转移时,MHA Manager通过SSH连接到MHA Node,并在需要时执行MHA Node命令。

2 自定义扩展(脚本)

MHA Manager有管理程序,例如监控MySQL主数据库,控制主故障转移等。

MHA Node具有故障转移辅助脚本,例如解析MySQL二进制/中继日志,识别应将中继日志应用于其他从数据库的中继日志位置,将事件应用于目标从数据库等。MHA Node在每个MySQL服务器上运行。

当MHA Manager执行故障转移时,MHA Manager通过SSH连接到MHA Node,并在需要时执行MHA Node命令。

自定义扩展 MHA具有几个扩展点。例如,MHA可以调用任何自定义脚本来更新主数据库的IP地址(更新管理主机IP地址的全局目录数据库,更新虚拟IP等)。这是因为如何管理IP地址取决于用户的环境,而MHA不想强制使用一种方法。

当前的扩展点如下。MHA Manager包括示例脚本。

  • secondary_check_script:用于从多个网络路由检查主数据库的可用性
  • master_ip_failover_script:用于更新应用程序使用的主数据库IP地址
  • shutdown_script:用于强制关闭主数据库
  • report_script:用于发送报告
  • init_conf_load_script:用于加载初始配置参数
  • master_ip_online_change_script:用于更新主数据库IP地址。这不是用于主故障转移,而是用于在线主切换。

三 MHA优势

1 MHA可以非常快速地进行主故障转移和从服务器晋升。

通常情况下,MHA可以在几秒钟内完成故障转移(9-12秒用于检测主服务器故障,可选择关闭主服务器以避免脑裂需要7-10秒,几秒钟用于将差异中继日志应用于新主服务器,因此总的停机时间通常为10-30秒),只要从服务器没有严重延迟复制。在恢复新的主服务器后,MHA会并行恢复其余的从服务器。即使您有成百上千个从服务器,也不会影响主服务器的恢复时间,您可以非常快速地恢复从服务器。

DeNA在150多个{主服务器,从服务器}环境中使用了MHA。当其中一个主服务器崩溃时,MHA在4秒内完成了故障转移。使用传统的主备集群解决方案从未能在4秒内完成故障转移。

2 主服务器崩溃不会导致数据不一致。

当当前主服务器崩溃时,MHA会自动识别从服务器之间的差异中继日志事件,并将其应用于每个从服务器。因此,只要所有从服务器都处于活动状态,最终所有从服务器都可以同步。通过与半同步复制一起使用,(几乎)可以保证几乎没有数据丢失。

3 无需修改当前的MySQL设置

(MHA与常规的MySQL(5.0或更高版本)配合使用)

MHA的设计原则之一是尽可能使MHA易于使用。只要可能,MHA就可以与现有的传统MySQL 5.0+主从复制环境配合使用。尽管许多其他高可用性解决方案需要更改MySQL部署设置,但MHA不会强制DBA执行此类任务。MHA适用于最常见的两层单主服务器和多个从服务器环境。MHA适用于异步和半同步MySQL复制。启动/停止/升级/降级/安装/卸载MHA可以在不更改(包括启动/停止)MySQL复制的情况下完成。当您需要将MHA升级到较新版本时,无需停止MySQL。只需替换为较新的MHA版本并重新启动MHA Manager即可。

MHA可以与正常的MySQL版本一起使用,从MySQL 5.0开始。一些HA解决方案需要特殊的MySQL版本(例如MySQL Cluster,带有全局事务ID的MySQL等),但您可能不想为了主服务器高可用性而迁移应用程序。在许多情况下,人们已经部署了许多传统的MySQL应用程序,并且他们不希望花费太多时间迁移到不同的存储引擎或更新的最新版本分发版本。MHA与包括5.0/5.1/5.5在内的正常MySQL版本一起使用,因此您不需要迁移。

4 无需增加大量服务器

MHA由MHA Manager和MHA Node组成。当发生故障转移/恢复时,MHA Node在MySQL服务器上运行,因此不需要额外的服务器。MHA Manager通常在专用服务器上运行,因此您需要添加一个(或两个用于高可用性)服务器,但MHA Manager可以从单个服务器监控大量(甚至100多个)主服务器,因此服务器总数不会增加太多。请注意,甚至可以在其中一个从服务器上运行MHA Manager。在这种情况下,总服务器数根本不会增加。

5 无性能损耗

MHA与正常的异步或半同步MySQL复制配合使用。当监控主服务器时,MHA只是每N秒(默认为3秒)向主服务器发送ping数据包,而不发送大量查询。您可以期望与正常的MySQL复制一样快的性能。

6 适用于任何存储引擎

只要MySQL复制工作,MHA即可与任何存储引擎配合使用,不限于InnoDB(崩溃安全的,事务性存储引擎)。即使您使用的是难以迁移的传统MyISAM环境,您也可以使用MHA。

四 MHA典型的使用情况

1 MHA Manager的部署位置

  1. 专用的Manager服务器和多个MySQL(主服务器,从服务器)服务器

由于MHA Manager使用的CPU/内存资源非常少,您可以从单个MHA Manager管理大量的(主服务器,从服务器)对。甚至可以从单个管理服务器管理100多对(主服务器,从服务器)。

  1. 在MySQL从服务器上运行MHA Manager

如果您只有一个(主服务器,从服务器)对,您可能不希望为MHA Manager分配专用的硬件,因为这会增加相对较高的成本。在这种情况下,在一个从服务器上运行MHA Manager是有意义的。请注意,当前版本的MHA Manager即使MySQL服务器位于与MHA Manager相同的主机上,也是通过SSH连接到MySQL从服务器的,因此您需要启用相同主机上的SSH公钥身份验证。

2 复制拓扑结构

一主多从

        M(RW)                                       M(RW), promoted from S1
         |                                           |
  +------+------+        --(master crash)-->   +-----+------+
S1(R)  S2(R)  S3(R)                          S2(R)        S3(R)

这是最常见的复制设置。MHA在这里运行得非常好。

一主多从(其中有个从库Sr在远程的数据中心)

        M(RW)                                        M(RW), promoted from S1
         |                                            |
  +------+------+        --(master crash)-->   +------+------+
S1(R)  S2(R)  Sr(R,no_master=1)              S2(R)         Sr(R,no_master=1)

在许多情况下,您希望至少在远程数据中心部署一个从服务器。当主服务器崩溃时,您可能不希望将远程从服务器提升为新的主服务器,而是让本地数据中心中的其他从服务器之一成为新的主服务器。MHA支持这样的需求。在配置文件中设置no_master=1可以确保从服务器永远不会成为新的主服务器。

一主多从(其中有个从库S0设置为候选主)

        M(RW)-----S0(R,candidate_master=1)           M(RW), promoted from S0
         |                                            |
  +------+------+        --(master crash)-->   +------+------+
S1(R)         S2(R)                          S1(R)         S2(R)

在某些情况下,如果当前的主服务器崩溃,您可能希望将特定的服务器提升为新的主服务器。在这种情况下,在配置文件中设置candidate_master=1将会有所帮助。

多主多从

       M(RW)<--->M2(R,candidate_master=1)           M(RW), promoted from M2
        |                                            |
 +------+------+        --(master crash)-->   +------+------+
S(R)         S2(R)                          S1(R)      S2(R)

在某些情况下,您可能希望使用多主配置,并且如果当前主服务器崩溃,您可能希望将只读主服务器变为新的主服务器。只要所有非主要主服务器(在此图中为M2)都是只读的,MHA Manager就支持多主配置。

三层级联复制

        M(RW)                                        M(RW), promoted from S1
         |                                            |
  +------+------+        --(master crash)-->   +------+------+
S1(R)  S2(R)  Sr(R)                          S2(R)         Sr(R)
                |                                            |
                +                                            +
               Sr2                                          Sr2

在某些情况下,您可能希望使用三层复制,就像这样。即使如此,MHA仍然可以用于主服务器故障转移。在配置文件中,管理主服务器和所有第二层从服务器(在此图中,将M、S1、S2和Sr添加到MHA配置文件中,但不添加Sr2)。如果当前主服务器(M)失败,MHA会自动将第二层从服务器(S1、S2、Sr中的一个,您也可以设置优先级)提升为新的主服务器,并恢复其余的第二层从服务器。第三层从服务器(Sr2)不受MHA管理,但只要Sr(Sr2的主服务器)处于活动状态,Sr2就可以继续复制而无需更改任何内容。

如果Sr崩溃,Sr2无法继续复制,因为Sr2的主服务器是Sr。MHA无法用于恢复Sr2。这就是全局事务ID支持的地方。希望这比主服务器崩溃不太严重。

三层级联复制,多主配置

       M1(host1,RW) <-----------------> M2(host2,read-only)
         |                                |
  +------+------+                         +
S1(host3,R)   S2(host4,R)               S3(host5,R)

=> After failover

                 M2(host2,RW)
                   |
    +--------------+--------------+
  S1(host3,R)    S2(host4,R)    S3(host5,R)

这种结构也受支持。在这种情况下,主机5是一个第三层从服务器,因此MHA不管理主机5(当主服务器主机1失败时,MHA不会在主机5上执行CHANGE MASTER)。当当前主服务器主机1宕机时,主机2将成为新的主服务器,因此主机5可以继续从主机2进行复制而无需做任何操作。以下是配置文件示例

[server default]
multi_tier_slave=1

[server1]
hostname=host1
candidate_master=1

[server2]
hostname=host2
candidate_master=1

[server3]
hostname=host3

[server4]
hostname=host4

[server5]
hostname=host5

3 管理主机IP地址

在常见的高可用环境中,许多情况下人们会在主服务器上分配一个虚拟IP地址。如果主服务器崩溃,诸如Pacemaker之类的HA软件会接管虚拟IP地址到备用服务器。

另一种常见的方法是创建一个全局目录数据库,其中包含所有应用程序名称和写入者/读取者IP地址之间的映射(例如{app1_writer,192.168.0.1},{app2_writer,192.168.0.2},…),而不是使用虚拟IP地址。在这种情况下,当当前主服务器失效时,您需要更新目录数据库。

这两种方法都有优点和缺点。MHA不强制使用一种方法,而是让用户可以使用任何IP地址故障转移解决方案。MHA有一个选项,可以通过在管理器的配置文件中设置master_ip_failover_script参数来调用外部脚本来停用/激活写入IP地址。您可以在脚本中更新目录数据库,接管虚拟IP地址,或执行任何您想要的操作。您还可以使用现有的HA软件(如Pacemaker)来执行IP故障转移。在这种情况下,MHA本身不执行IP故障转移。

4 与半同步复制一起使用

尽管MHA尝试从崩溃的主服务器保存二进制日志,但这并不总是可能的。例如,如果崩溃的主服务器由于硬件故障而死亡或无法通过SSH到达,则MHA无法保存二进制日志,并且必须在不应用仅存在于崩溃主服务器上的二进制日志事件的情况下执行故障转移。这将导致丢失最新数据。

使用半同步复制大大降低了这种数据丢失的风险。MHA与半同步复制一起工作,因为它基于MySQL复制机制。值得注意的是,如果只有一个从服务器接收到最新的二进制日志事件,MHA可以将事件应用于所有其他从服务器,以便它们彼此保持一致。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

锂电池SOH预测 | 基于BP神经网络的锂电池SOH预测(附matlab完整源码)

锂电池SOH预测 锂电池SOH预测完整代码锂电池SOH预测 锂电池的SOH(状态健康度)预测是一项重要的任务,它可以帮助确定电池的健康状况和剩余寿命,从而优化电池的使用和维护策略。 SOH预测可以通过多种方法实现,其中一些常用的方法包括: 容量衰减法:通过监测电池的容量衰减…

jupyter notebook设置代码自动补全

jupyter notebook设置代码自动补全 Anaconda Prompt窗口执行 pip install jupyter_contrib_nbextensionsjupyter contrib nbextensions install --userpip install jupyter_nbextensions_configuratorjupyter nbextensions_configurator enable --user按如下图片设置 卸载jed…

HarmonyOS Next从入门到精通实战精品课

第一阶段&#xff1a;HarmonyOS Next星河版从入门到精通该阶段由HarmonyOS Next星河版本出发&#xff0c;介绍HarmonyOS Next版本应用开发基础概念&#xff0c;辅助学员快速上手新版本开发范式&#xff0c;共计42课时 第一天鸿蒙NEXT Mac版、Windows版【编辑器】和【模拟器】&a…

长度最小的子数组 ---- 滑动窗口

题目链接 题目: 分析: 解法一:暴力解法, 找到所有连续子数组, 保留满足条件的解法二: 利用滑动窗口 找子数组 因为数组中都是正整数, 通过进窗口的操作, 我们找到一组, 如示例一中的2,3,1,2, 判断满足和>7, 那么根据单调性, 我们就不再需要判断加上后面两个数的两个子数组…

记录浏览器打开网站拦截提示不安全解决方法

浏览器可能会因为多种原因显示“不安全”的警告,这通常是由于安全设置不当或配置错误造成的。以下是一些常见的原因和解决方法: 1. HTTPS未启用 原因:如果网站使用HTTP而不是HTTPS,浏览器可能会显示不安全的警告。 解决方法:配置SSL/TLS证书并使用HTTPS来加密数据传输…

鹏哥C语言复习——字符函数与字符串函数

目录 一.字符函数 1.字符分类函数 2.字符转换函数 二.基础字符串函数 1.strlen函数 2.strcpy函数 3.strcat函数 4.strcmp函数 三.基础字符串函数优化 1.strncpy函数 2.strncat函数 3.strncmp函数 四.进阶字符串函数 1.strstr函数 2.strtok函数 3.strerror函数 一…

做大模型产品,如何设计prompt?

做GenAI产品&#xff0c;除了要设计好的AI任务流程&#xff0c;合理的拆分业务以外&#xff0c;最重要的就是写好prompt&#xff0c;管理好prompt&#xff0c;持续迭代prompt。 prompt一般有两种形式&#xff1a;结构化prompt和对话式prompt。 结构化prompt的优点是通过规范的…

vim的IDE进阶之路

一 ctags 1 安装 安装ctags比较简单&#xff0c;我用的是vim-plug&#xff0c;网络上随便一搜应该就有很多教程&#xff0c;而且没有什么坑 2 使用 vim之函数跳转功能_nvim函数跳转-CSDN博客https://blog.csdn.net/ballack_linux/article/details/71036072不过针对cuda程序…

【Android】 四大组件详解之广播接收器、内容提供器

目录 前言广播机制简介系统广播动态注册实现监听网络变化静态注册实现开机自启动 自定义广播发送标准广播发送有序广播 本地广播 内容提供器简介运行时权限访问其他程序中的数据ContentResolver的基本用法读取系统联系人 创建自己的内容提供器创建内容提供器的步骤 跨程序数据共…

数据仓库是什么

写在前面 刚接触大数据的新手小白可能会对数据仓库这个词比较陌生&#xff0c;本文将介绍数据仓库的主要特征及OLTP&OLAP的区别&#xff0c;帮助读者更好理解数据仓库。 一、什么是数据仓库 数据仓库&#xff0c;简称数仓&#xff0c;是一个对数据进行加工&#xff0c;集…

【go零基础】go-zero从零基础学习到实战教程 - 0环境配置

是个前端&#xff0c;最近开始学习go&#xff0c;后端除node外基本0基础&#xff0c;所以学习曲线有点绕&#xff0c;目标是个基础的服务端demo&#xff0c;搞个api服务后台&#xff0c;包含基础的用户登录、文章发布和写文章、权限控制&#xff0c;差不多就是个完整博客系统。…

CentOS 9 (stream) 安装 nginx

1.我们直接使用安装命令 dnf install nginx 2.安装完成后启动nginx服务 # 启动 systemctl start nginx # 设置开机自启动 systemctl enable nginx# 重启 systemctl restart nginx# 查看状态 systemctl status nginx# 停止服务 systemctl stop nginx 3.查看版本确认安装成功…

Apollo 7周年大会自动驾驶生态利剑出鞘

前言 4月22日&#xff0c;百度Apollo在北京车展前夕举办了以“破晓•拥抱智变时刻”为主题的智能汽车产品发布会&#xff0c;围绕汽车智能化&#xff0c;发布了智驾、智舱、智图等全新升级的“驾舱图”系列产品。 1、7周年大会 自2013年百度开始布局自动驾驶&#xff0c;201…

【leetcode】数组和相关题目总结

1. 两数之和 直接利用hashmap存储值和对于索引&#xff0c;利用target-nums[i]去哈希表里找对应数值。返回下标。 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int, int> mp;vector<int> res;fo…

【Leetcode每日一题】 分治 - 面试题 17.14. 最小K个数(难度⭐⭐)(66)

1. 题目解析 题目链接&#xff1a;面试题 17.14. 最小K个数 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 在快速排序算法中&#xff0c;我们通常会通过选择一个基准元素&#xff0c;然后将数组划分为三个部分&…

基于Spring Boot的火车订票管理系统设计与实现

基于Spring Boot的火车订票管理系统设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 前台首页功能界面图&#xff0c;在系统首页可以查看…

数据结构——插入排序

基本思想&#xff1a; 直接插入排序是一种简单的插入排序法&#xff0c;其基本思想是&#xff1a;把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为止&#xff0c;得到一个新的有序序列 。 实际中我们玩扑克牌时&…

排序算法(1)

一、基础概念 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排序&#xff0c;这些记录的相对次序保持 不变&#xff0c;即在原序列中&#xff0c;r[i]r[j]&#xff0c;且r[i]在r[j]之前&#xff0c;而在排序后的序…

TCP/IP协议族中的TCP(一):解析其关键特性与机制

⭐小白苦学IT的博客主页⭐ ⭐初学者必看&#xff1a;Linux操作系统入门⭐ ⭐代码仓库&#xff1a;Linux代码仓库⭐ ❤关注我一起讨论和学习Linux系统 前言 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字…

Java基础_集合类_List

List Collection、List接口1、继承结构2、方法 Collection实现类1、继承结构2、相关类&#xff08;1&#xff09;AbstractCollection&#xff08;2&#xff09;AbstractListAbstractSequentialList&#xff08;子类&#xff09; 其它接口RandomAccess【java.util】Cloneable【j…
最新文章