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

Redis - 7 ( 11000 字 Redis 入门级教程 )

一:主从复制

在分布式系统中,为了解决单点故障问题,通常会将数据复制为多个副本,部署到不同的服务器上,以满足故障恢复和负载均衡的需求。Redis 也提供了数据复制功能,实现了多个 Redis 副本的数据同步。复制功能是实现高可用 Redis 的基础,哨兵模式和集群模式都是在复制功能的基础上构建的。

1.1 配置

在 Redis 的复制架构中,实例分为主节点(master)和从节点(slave)。每个从节点只能关联一个主节点,而一个主节点可以同时管理多个从节点。数据复制是单向的,仅从主节点流向从节点。配置复制的方式主要有以下三种:

以下是优化后的表述,并以符合要求的 MD 表格呈现:

配置方式说明
配置文件中添加方式在配置文件中加入 slaveof {masterHost} {masterPort},随启动生效。
启动命令中添加方式在 redis-server 启动命令中添加 --slaveof {masterHost} {masterPort},立即生效。
使用命令行执行方式在 Redis 命令行运行 slaveof {masterHost} {masterPort},即时生效。
  1. 接下来,我们将复制 redis.conf 配置文件并重命名为 redis-slave.conf,然后将其中的 daemonize 参数修改为 yes。
# By default Redis does not run as a daemon. Use 'yes' if you need it.
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
daemonize yes
  1. 接下来,默认启动的 Redis 实例将作为主节点,我们将通过命令行重新启动一个 Redis 实例,作为从节点。
# ubuntu
redis-server /etc/redis/redis-slave.conf --port 6380 --slaveof 127.0.0.1 6379
  1. 通过 netstat -nlpt 确保两个 Redis 均已正确启动。
[root@host ~]# netstat -nlpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      49264/redis-server
tcp        0      0 127.0.0.1:6380          0.0.0.0:*               LISTEN      272418/redis-server
  1. 通过 redis-cli 可以连接主 Redis 实例,通过 redis-cli -p 6380 连接从 Redis。并且观察复制关系。
# 在 Redis 服务器 6379 上设置键值对
127.0.0.1:6379> set hello world
OK

# 获取键为 "hello" 的值
127.0.0.1:6379> get hello
"world"

# 在 Redis 服务器 6380 上获取键 "hello" 的值
127.0.0.1:6380> get hello
"world"

在这里插入图片描述

可以通过 info replication 命令查看复制相关的状态信息,我们先查看主节点 6379 的复制状态信息:

# 在 Redis 主节点 6379 上执行 info replication 命令,查看复制状态信息
127.0.0.1:6379> info replication

# Replication 相关信息
role:master                       # 当前节点角色为主节点
connected_slaves:1                # 已连接的从节点数量为 1

# 从节点信息 (slave0 为从节点的标识)
slave0:ip=127.0.0.1,port=6380,    # 从节点的 IP 地址和端口号
state=online,                     # 从节点当前状态为在线
offset=100,                       # 主从复制的偏移量
lag=0                             # 主从复制的延迟时间

# 主节点的复制 ID 和偏移量信息
master_replid:2fbd35a8b8401b22eb92ff49ad5e42250b3e7a06   # 当前主节点的复制 ID
master_replid2:0000000000000000000000000000000000000000  # 备用复制 ID,通常未使用
master_repl_offset:100                                  # 主节点当前的复制偏移量
second_repl_offset:-1                                   # 备用复制偏移量,通常为 -1

# 复制积压缓冲区信息
repl_backlog_active:1                                   # 积压缓冲区是否激活(1 为激活)
repl_backlog_size:1048576                               # 积压缓冲区大小(字节)
repl_backlog_first_byte_offset:1                        # 积压缓冲区的第一个字节偏移量
repl_backlog_histlen:100                                # 积压缓冲区的历史长度

从节点 6380 复制状态信息:

# 在 Redis 从节点 6380 上执行 info replication 命令,查看复制状态信息
127.0.0.1:6380> info replication

# Replication 相关信息
role:slave                        # 当前节点角色为从节点
master_host:127.0.0.1             # 主节点的 IP 地址
master_port:6379                  # 主节点的端口号
master_link_status:up             # 与主节点的连接状态(up 表示正常)
master_last_io_seconds_ago:1      # 最近一次与主节点交互的时间(单位:秒)
master_sync_in_progress:0         # 主从同步是否正在进行(0 表示未进行)

# 从节点的复制状态
slave_repl_offset:170             # 从节点的复制偏移量
slave_priority:100                # 从节点的优先级(用于故障转移)
slave_read_only:1                 # 从节点是否为只读(1 表示只读)

# 从节点未连接其他从节点
connected_slaves:0                # 当前从节点未连接其他从节点

# 主节点的复制 ID 和偏移量信息
master_replid:2fbd35a8b8401b22eb92ff49ad5e42250b3e7a06   # 主节点的复制 ID
master_replid2:0000000000000000000000000000000000000000  # 备用复制 ID,通常未使用
master_repl_offset:170                                  # 主节点当前的复制偏移量
second_repl_offset:-1                                   # 备用复制偏移量,通常为 -1

# 复制积压缓冲区信息
repl_backlog_active:1                                   # 积压缓冲区是否激活(1 为激活)
repl_backlog_size:1048576                               # 积压缓冲区大小(字节)
repl_backlog_first_byte_offset:1                        # 积压缓冲区的第一个字节偏移量
repl_backlog_histlen:170                                # 积压缓冲区的历史长度

1.2 断开复制

slaveof 命令不仅可以建立主从复制关系,还可以通过在从节点执行 slaveof no one 来断开与主节点的复制关系,例如在 6380 节点执行该命令后,从节点会断开与主节点的复制关系并自动晋升为主节点,同时保留原有数据,但无法再获取主节点的数据变化。此外,slaveof 命令还可用于切换数据源,通过执行 slaveof {newMasterIp} {newMasterPort},可以将当前从节点切换到另一个主节点,完成切主操作。

步骤操作描述
1断开与旧主节点的复制关系。
2与新主节点建立复制关系。
3删除从节点当前所有数据。
4从新主节点开始进行复制操作。
功能描述
全性对于重要数据的主节点,可通过设置 requirepass 参数进行密码验证,所有客户端访问必须使用 auth 命令验证。
从节点与主节点的复制通过一个特殊客户端完成,因此需配置从节点的 masterauth 参数与主节点密码一致,以正确建立复制关系。
只读默认情况下,从节点使用 slave-read-only=yes 配置为只读模式。由于复制流程仅支持从主节点到从节点,任何对从节点的修改主节点都无法感知,可能导致主从数据不一致。因此建议线上环境保持从节点只读模式。
传输延迟主从节点通常部署在不同机器,复制过程中需考虑网络延迟,可通过 repl-disable-tcp-nodelay 参数控制是否关闭 TCP_NODELAY(默认值:no,开启 tcp-nodelay)。
关闭 TCP_NODELAY:主节点会即时发送所有命令数据(无论大小),降低主从延迟,但增加网络带宽消耗,适用于网络环境良好的场景(如同机房部署)。
开启 TCP_NODELAY:主节点合并较小的 TCP 数据包以节省带宽,发送间隔取决于 Linux 内核(通常为 40 毫秒),适用于网络环境复杂的场景(如跨机房部署)。

1.3 拓补

Redis 的复制拓扑结构可以是单层或多层,根据复杂程度可分为以下三种类型:一主一从、一主多从以及树状主从结构。

1.3.1 ⼀主⼀从结构

一主一从结构是最简单的复制拓扑结构,主要用于在主节点宕机时由从节点提供故障转移支持。当应用写命令的并发量较高且需要数据持久化时,可仅在从节点开启 AOF,这既能保证数据安全性,又能避免持久化对主节点性能的影响。但需要注意的是,如果主节点关闭了持久化功能,为防止主节点宕机后数据丢失,应避免设置自动重启操作。

在这里插入图片描述

1.3.2 ⼀主多从结构

一主多从结构(星形结构)支持应用端利用多个从节点实现读写分离,适用于读占比较大的场景。通过将读命令负载均衡到不同的从节点,可以有效分担压力,同时可指定某个从节点处理耗时的读命令,以避免影响整体稳定性。然而,在写并发量较高的场景中,多个从节点会导致主节点需要多次发送写命令,从而增加主节点的负载。

在这里插入图片描述

1.3.3 树形主从结构

树形主从结构(分层结构)允许从节点不仅复制主节点数据,还能作为下层从节点的主节点进行进一步复制。通过引入复制中间层,可以有效降低主节点的负载和传输给从节点的数据量。例如,数据写入节点 A 后会同步到节点 B 和 C,节点 B 再将数据同步给节点 D 和 E。当主节点需要挂载多个从节点时,为避免对主节点性能的过多影响,可以采用这种分层的拓扑结构。

在这里插入图片描述

1.4 原理

1.4.1 复制过程

步骤描述
1保存主节点信息:开始配置主从同步关系后,从节点会保存主节点的地址信息(如 IP 和端口)。此时复制流程尚未开始,主节点的连接状态(master_link_status)为 “down”。
2维护复制逻辑:从节点通过每秒运行的定时任务检测主节点。如果发现新的主节点,会尝试建立基于 TCP 的网络连接;如果连接失败,定时任务会不断重试直到连接成功或主从复制被停止。
3发送 ping 命令:连接建立成功后,从节点通过 ping 命令检测主节点是否正常工作。如果 pong 回复超时,从节点会断开连接,等待定时任务重新尝试连接。
4权限验证:如果主节点设置了密码(requirepass 参数),从节点需通过 masterauth 参数配置密码进行验证。验证失败会导致复制流程停止。
5同步数据集:首次建立复制时,主节点会将所有数据发送给从节点。这是最耗时的步骤,分为全量同步和部分同步两种情况(将在后续介绍)。
6命令持续复制:当从节点完成初次数据同步后,主节点会将后续的修改命令持续发送给从节点,从节点执行这些命令以保持数据一致性。

在这里插入图片描述

1.4.2 数据同步 psync

Redis 使用 psync 命令完成主从数据同步,分为全量复制和部分复制两种模式。命令格式为 PSYNC replicationid offset ,如果 replicationid 为 “?” 且 offset 为 -1,则表示尝试进行全量复制;如果 replicationid 和 offset 为具体数值,则表示尝试进行部分复制,replid 和 offset 共同标识一个数据集。如果两个节点的 replid 和 offset 都相同,则可以确定这两个节点上的数据完全一致。

类型描述
全量复制通常用于初次复制场景。全量复制会将主节点的所有数据一次性发送到从节点,当数据量较大时,会对主从节点和网络带来较大的性能开销。这是 Redis 早期唯一支持的复制模式。
部分复制用于在主从复制中因网络闪断等原因导致数据丢失的场景。当从节点重新连接到主节点后,如果条件允许,主节点只需补发丢失的数据给从节点。由于补发的数据量较小,部分复制有效避免了全量复制带来的高开销。
参数描述
replicationid/replid (复制id)主节点的复制 id,每次主节点重启或从节点晋级为主节点时都会生成新的 replicationid。从节点在与主节点建立连接后会获取主节点的 replicationid。通过 info replication 可查看 master_replid 和 master_replid2。
每个节点需要记录两组 master_replid,解决以下场景:
1. 如果网络抖动导致从节点(如节点 B)误认为主节点(如节点 A)宕机,B 会晋级为主节点并生成新的 master_replid,同时将原主节点 A 的 master_replid 记录到 master_replid2。
2. 若网络恢复,B 可以通过 master_replid2 找回原主节点 A。
3. 如果网络未恢复,B 会基于新的 master_replid 独立处理后续数据。
offset (偏移量)主从节点会维护自身的复制偏移量,用于统计命令的字节长度。
• 主节点:在处理完写入命令后会累加偏移量,统计信息可通过 info replication 中的 master_repl_offset 查看。
• 从节点:每秒上报自身的偏移量给主节点,并接收主节点发送的命令后累加偏移量,统计信息可通过 info replication 中的 slave_repl_offset 查看。
通过比较主从节点的复制偏移量,可以判断主从节点的数据是否一致。

在这里插入图片描述

1.4.3 psync 运行流程

从节点会发送 psync 命令给主节点,默认情况下 replid 和 offset 的值分别为 “?” 和 -1。主节点根据 psync 的参数和自身数据状态决定响应结果:如果回复 “+FULLRESYNC replid offset”,从节点需进行全量复制;如果回复 “+CONTINUE”,从节点可进行部分复制;如果回复 “-ERR”,说明主节点 Redis 版本过低,不支持 psync 命令,此时从节点需改用 sync 命令进行全量复制。需要注意的是,psync 命令无需手动执行,Redis 会在主从复制模式下自动调用,而 sync 命令会阻塞 Redis 服务器处理其他请求,但 psync 命令不会。

在这里插入图片描述

1.4.4 全量复制

全量复制是 Redis 最早支持的复制方式,也是主从节点首次建立复制关系时必经的阶段,但其代价较高,包括主节点执行 bgsave 的时间、RDB 文件在网络上传输的时间、从节点清空旧数据的时间以及加载 RDB 的时间。因此,对于已经拥有大量数据集的 Redis,应该尽量避免触发全量复制操作。

步骤描述
1从节点发送 psync 命令给主节点进行数据同步,由于这是首次复制,从节点没有主节点的运行 ID 和复制偏移量,因此发送 psync ? -1。
2主节点解析命令后确认需要进行全量复制,并回复 +FULLRESYNC 响应。
3从节点接收并保存主节点的运行信息。
4主节点执行 bgsave,生成 RDB 文件并完成持久化。
5主节点将 RDB 文件发送给从节点,从节点接收并将 RDB 数据保存到本地硬盘。
6主节点在生成 RDB 文件到从节点接收完成期间,将执行的写命令保存到缓冲区中。待从节点保存 RDB 文件完成后,主节点将缓冲区内的数据补发给从节点,保持主从数据一致性。
7从节点清空自身原有的旧数据。
8从节点加载 RDB 文件,获得与主节点一致的数据。
9如果从节点在加载 RDB 文件后开启了 AOF 持久化功能,它会执行 bgrewrite 操作,生成最新的 AOF 文件。

在这里插入图片描述

1.4.5 部分复制

部分复制是 Redis 为降低全量复制高开销而设计的一种优化措施,通过 psync replicationId offset 命令实现。当从节点在复制主节点时遇到网络闪断或命令丢失等异常情况时,从节点会请求主节点补发丢失的命令数据。如果主节点的复制积压缓冲区中存在这些数据,就会直接发送给从节点,从而保持主从复制的一致性。由于补发的数据通常远小于全量数据,开销也相对较小。

步骤描述
1当主从节点之间出现网络中断且超过 repl-timeout 时间时,主节点会认为从节点故障并终止复制连接。
2主从连接中断期间,主节点依然处理命令,但因网络中断无法将这些命令及时发送给从节点,因此暂时将命令保存在复制积压缓冲区中。
3当主从节点网络恢复后,从节点重新连接到主节点。
4从节点将之前保存的 replicationId 和复制偏移量作为 psync 命令的参数发送给主节点,请求进行部分复制。
5主节点接收到 psync 请求后,进行必要的验证,并根据 offset 在复制积压缓冲区中查找合适的数据,随后回复 +CONTINUE 给从节点。
6主节点将从积压缓冲区中找到的需要同步的数据发送给从节点,从而完成主从数据的一致性。

在这里插入图片描述

1.4.6 复制积压缓冲区

复制积压缓冲区是主节点上一个固定长度的队列,默认大小为 1MB。当主节点有连接的从节点时,缓冲区会被创建。主节点在响应写命令时,除了将命令发送给从节点,还会将命令写入复制积压缓冲区。由于缓冲区是一个先进先出的定长队列,它能够保存最近已复制的数据,用于支持部分复制以及补救因复制命令丢失导致的数据不一致问题。相关的缓冲区统计信息可以通过主节点的 info replication 查看。复制积压缓冲区本质上是一个基于数组实现的环形队列,缓冲区中的值相当于数组的下标。如果从节点所需的数据已经超出了主节点积压缓冲区的范围,则无法进行部分复制,只能退回到全量复制。

127.0.0.1:6379> info replication
# Replication
role:master
...
...
...
repl_backlog_active:1                // 开启复制缓冲区
repl_backlog_size:1048576            // 缓冲区最⼤⻓度
repl_backlog_first_byte_offset:7479  // 起始偏移量,计算当前缓冲区可⽤范围
repl_backlog_histlen:1048576         // 已保存数据的有效⻓度

在这里插入图片描述

1.4.7 实时复制

从节点在建立复制连接后,主节点会通过 TCP 长连接将接收到的修改操作持续传输给从节点,从节点根据这些操作同步修改自身数据,从而保持与主节点的数据一致性。这种长连接通过应用层实现的心跳包机制来维护连接状态。如果主节点发现从节点的通信延迟超过 repl-timeout(默认 60 秒),则会判定从节点下线并断开复制客户端连接。当从节点恢复连接后,心跳机制将继续正常运行。

步骤描述
1主从节点之间都有心跳检测机制,双方各自模拟为对方的客户端进行通信。
2主节点默认每隔 10 秒向从节点发送 ping 命令,用于检测从节点的存活性和连接状态。
3从节点默认每隔 1 秒向主节点发送 replconf ack {offset} 命令,用于向主节点上报自身当前的复制偏移量。

二: 哨兵 Sentinel

在 Redis 的主从复制模式下,如果主节点因故障无法提供服务,需要人工进行主从切换,并通知大量客户端切换到新的主节点。这种方案对于规模较大的应用来说难以接受。为了解决这一问题,Redis 从 2.8 版本开始引入了 Redis Sentinel(哨兵)机制,用于自动化处理主从切换和故障恢复。

2.1 基本概念

名词逻辑结构物理结构
主节点Redis 主服务一个独立的 redis-server 进程
从节点Redis 从服务一个独立的 redis-server 进程
Redis 数据节点主节点和从节点的进程主节点和从节点的进程
哨兵节点监控 Redis 数据节点的节点一个独立的 redis-sentinel 进程
哨兵节点集合若干哨兵节点的抽象组合若干 redis-sentinel 进程
Redis 哨兵(Sentinel)Redis 提供的高可用方案哨兵节点集合和 Redis 主从节点
应用方泛指一个或多个客户端一个或多个连接 Redis 的进程

2.2 主从复制的问题

Redis 的主从复制模式可以将主节点的数据变化同步到从节点,这使从节点具备两种功能。第一,从节点作为主节点的备份,当主节点因故障不可用时,从节点可以作为后备节点接替主节点,并尽量保证数据不丢失(主从复制表现为最终一致性)。第二,从节点可以分担主节点的读压力,使主节点专注于处理写请求,而将所有的读请求通过负载均衡分配到各个从节点。其中,高可用性问题(第一点)是 Redis 哨兵解决的核心问题,而存储分布式问题(第二点)则由 Redis 集群解决。

在 Redis 主从复制模式下,当主节点发生故障时,手动处理主从切换的过程较为繁琐。为了解决这一问题,Redis 提供了 Sentinel 哨兵机制,我们通过图示展示了主从复制和故障切换的整体流程。

步骤描述
1运维人员通过监控系统发现 Redis 主节点故障宕机。
2运维人员从所有节点中选择一个节点(例如 slave 1),执行 slaveof no one,将其提升为新的主节点。
3运维人员让剩余的从节点(例如 slave 2)执行 slaveof {newMasterIp} {newMasterPort},从新的主节点开始数据同步。
4更新应用端的主节点连接信息为 {newMasterIp} {newMasterPort}。
5如果原主节点恢复,执行 slaveof {newMasterIp} {newMasterPort},将其配置为新的从节点。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.3 哨兵自动恢复主节点故障

当主节点发生故障时,Redis Sentinel 能自动完成故障发现和故障转移,并通知应用方,从而实现真正的高可用性。Redis Sentinel 采用分布式架构,由若干个 Sentinel 节点和 Redis 数据节点组成。每个 Sentinel 节点会监控数据节点和其他 Sentinel 节点的状态,当检测到某个节点不可达时,将标记为下线。如果下线的是主节点,Sentinel 节点会相互“协商”,在多数 Sentinel 节点对主节点不可达达成共识后,内部选举出一个领导节点,负责执行自动故障转移,同时将变化实时通知应用方。整个过程完全自动化,无需人工干预,Redis Sentinel 具有以下几个功能:

功能描述
监控Sentinel 节点定期检测 Redis 数据节点和其他哨兵节点的可达性。
故障转移将从节点晋升为主节点,并维护新的主从关系以确保系统的正确运行。
通知将故障转移的结果实时通知应用方,便于应用快速适配新主节点。

在这里插入图片描述

与主从复制模式相比,Redis Sentinel 增加了若干(建议为奇数个)Sentinel 节点,用于监控数据节点和其他 Sentinel 节点的状态。哨兵节点会定期检查所有节点的运行情况(包括数据节点和其他哨兵节点)。当主节点发生故障时,Redis Sentinel 会自动触发故障转移,其具体流程如下:

步骤描述
1主节点发生故障,从节点的同步连接中断,主从复制停止。
2哨兵节点通过定期监控发现主节点故障,并与其他哨兵节点协商,达成多数共识,确认主节点确实故障。这一步主要是为了避免误判,例如故障的可能是哨兵节点自身,而不是主节点(常见于哨兵节点网络孤立的情况)。
3哨兵节点使用 Raft 算法选举出一个领导节点,由该节点负责执行后续的故障转移工作。
4哨兵领导者开始执行故障转移:从从节点中选出一个作为新主节点;让其他从节点与新主节点同步;通知应用层切换到新主节点。

在这里插入图片描述

2.4 选举原理

假设当前环境包含三个哨兵节点(sentinel1、sentinel2、sentinel3)、一个主节点(redis-master)以及两个从节点(redis-slave1 和 redis-slave2)。当主节点(redis-master)发生故障时,Redis Sentinel 会自动触发一系列故障转移过程,以恢复系统的正常运行。

在这里插入图片描述

2.4.1 主观下线

当 redis-master 宕机时,redis-master 与三个哨兵之间的心跳包通信中断。从三个哨兵的角度来看,此时 redis-master 被认为出现了严重故障,因此三个哨兵都会将 redis-master 判定为主观下线(SDown)。

2.4.2 客观下线

当 redis-master 宕机时,哨兵节点 sentinel1、sentinel2 和 sentinel3 会通过投票对主节点的故障进行确认,当投票数达到或超过配置的法定票数 2时,redis-master 的故障被正式确认,触发客观下线(ODown)状态。

sentinel monitor redis-master 172.22.0.4 6379 2

2.4.3 选举出哨兵的 leader

当 redis-master 宕机后,哨兵需要从剩余的从节点中选出一个新的主节点。这项工作并不需要所有哨兵参与,而是通过选举产生一个领导者(leader),由该领导者负责将一个从节点升级为主节点。选举过程采用 Raft 算法,其核心原则是“先下手为强”,即率先发出拉票请求的节点更有可能成为 leader,而这一过程受网络延时的随机性影响。具体哪个哨兵节点被选为 leader 并不重要,关键是确保能顺利选出一个领导者完成任务,假定一共有三个哨兵节点 S1 S2 S3:

以下是优化后的表述,并转为 MD 表格:

步骤描述
1每个哨兵节点向其他所有哨兵节点发起拉票请求。例如,S1 -> S2、S1 -> S3、S2 -> S1、S2 -> S3、S3 -> S1、S3 -> S2。
2收到拉票请求的哨兵节点会回复投票响应(投或不投)。投票决定规则如下:如果节点尚未向其他节点投票,则会将票投给第一个向其拉票的节点;否则不会投票。例如,S1 向 S2 拉票,若 S2 未投票,则投给 S1,否则不投。每个哨兵节点只有一票。
3一轮投票结束后,得票数超过半数的节点自动成为 leader。如果出现平票(如 S1 投 S2、S2 投 S3、S3 投 S1,每人一票),则重新进行投票。这也是建议设置奇数个哨兵节点的原因,因为偶数个节点会增加平票概率,导致不必要的开销。
4leader 节点负责从从节点中挑选一个升级为新的主节点。当其他哨兵节点发现新的主节点已经出现,选举随即结束。

2.4.4 leader 挑选出合适的 slave 成为新的 master

比较顺序描述
1比较优先级,优先级数值小的从节点优先(依据配置文件中的 slave-priority 或 replica-priority 配置项)。
2比较复制偏移量(replication offset),复制数据多的从节点优先。
3比较运行 ID(run id),运行 ID 小的从节点优先。

当某个从节点被选定为新的主节点后,leader 哨兵会指示该节点执行 slave no one 命令,将其提升为主节点,并同时指示其余的从节点重新配置,依附于这个新主节点,完成主从关系的更新。


http://www.kler.cn/a/466138.html

相关文章:

  • spring mvc源码学习笔记之六
  • vite-plugin-imagemin安装问题
  • 数据安全防护
  • Maven 教程之 pom.xml 详解
  • 【小程序开发】- 小程序版本迭代指南(版本发布教程)
  • 服务器等保测评日志策略配置
  • springBoot集成netty中登录鉴权、在pieline消息传递
  • df.groupby(pd.Grouper(level=1)).sum()
  • 解决 `pnpm install` 出现 `ERR_PNPM_ENOENT` 错误的方法
  • 【前端】掌握 JavaScript Map:从入门到精通
  • “善弈者”也需妙手,Oclean欧可林:差异化不是说说而已
  • 适用于小白的程序报错提问 AI 模板
  • scala概念
  • Linux实验报告14-Linux内存管理实验
  • Cpp::哈希表的两种模拟实现方式(27)
  • 肉鸽游戏的魅力
  • 1.2[hardware][day2]
  • 2025考研江南大学复试科目控制综合(初试807自动控制原理)
  • ArcgisServer过了元旦忽然用不了了?许可过期
  • RS485方向自动控制电路分享
  • 【Ubuntu20.04】Apollo10.0 Docker容器部署+常见错误解决
  • 景区自助售卡机与定点酒店的合作双赢之策-景区酒店方案
  • kafka怎么保证顺序消费?
  • 新年股市首个交易日表演“跳水赛”旁观
  • AI数据标注师理论部分考试题库 - 500题
  • OSPF特殊区域(open shortest path first LSA Type7)