最新资讯

  • [Redis#19] 集群 | 数据分片 | docker模拟 | 故障转移 | 集群扩容

[Redis#19] 集群 | 数据分片 | docker模拟 | 故障转移 | 集群扩容

2025-04-27 22:01:12 2 阅读

目录

集群

数据分片算法

1. 哈希求余

2 一致性哈希算法

3. 哈希槽分区算法 (Redis 使用)

Docker搭建集群

i:创建目录和配置文件

编写 generate.sh 脚本

执行生成命令

ii:编写 docker-compose.yml

网络配置

iii: 构建集群

连接并验证集群

重定向

主节点宕机自动处理流程

故障判定

故障迁移

Fail 状态的影响

实验

集群扩容

一、加入集群

二、分配哈希槽

三、添加从节点


  • 本章节相关操作不需要记忆,后续工作中如果用到了能查到即可。
  • 重点在于理解流程和原理。
基本概念
  • 上篇文章讲述的哨兵模式, 提高了系统的可用性. 但是真正用来存储数据的还是 master 和 slave 节点. 所有的数据都需要存储在单个 master 和 slave 节点中.
  • 如果数据量很大, 接近超出了 master/slave 所在机器的物理内存, 就可能出现严重问题了.
  • 虽然硬件价格在不断降低, 一些中大厂的服务器内存已经可以达到 TB 级别了, 但是 1TB 在当前这个 "大数据" 时代, 俨然不算什么, 有的时候我们确实需要更大的内存空间来保存更多的数据.

如何获取更大的空间?

加机器即可! 所谓 "大数据" 的核心, 其实就是一台机器搞不定了, 用多台机器来搞.

Redis 的集群就是在上述的思路之下, 引入多组 Master/Slave, 每一组 Master/Slave 存储数据全集的一部分, 从而构成一个更大的整体, 称为 Redis 集群 (Cluster)

集群

集群这个词,可以从广义上来理解,也可以从狭义上来理解。

  • 其中广义的集群,只要是多个机器,构成了分布式系统。我们前面学过的哨兵模式,也可以算作是一种广义上的集群。
  • 狭义的集群,是 Redis 提供的一种集群模式,在这个集群模式之下,主要解决存储空间不足的问题,即 拓展存储空间。

我们前面的哨兵模式提高了系统的可用性,哨兵模式中,本质上还是 Redis 主从节点存储数据,其中要是请求一个主节点/从节点,就得存储整个数据的“全集”。

  • 但是集群中主要要解决的问题就是要 引入多台机器, 每台机器存储一部分数据。
  • 只要机器规模足够大, 就可以存储任意数据的大小了。比如:

  • Redis 的集群通过引入多组 Master/Slave 来分散数据存储压力。
  • 每一组 Master/Slave 存储数据全集的一部分,构成一个更大的整体。
  • 假定整个数据 全集为 1TB,三组 Master/Slave 可以每组存储 1/3 的数据。
  • 每个 Slave 是对应 Master 的备份(Master 故障时,Slave 会补位成 Master)。
  • 每个 红框部分称为一个分片 (Sharding),用于进一步扩展存储容量。

关于使用硬盘代替内存

  • 硬盘虽然可以存储更多数据,但访问速度远慢于内存。
  • 在某些应用场景(如搜索引擎),既需要存储较多数据,又希望有非常高的读写速度。这时我们就可以引入 redis 集群啦

这其中每个服务器集群上都需要存储一定规模的数据,也就是把数据分为了多份,但是数据在分成多份的时候,应该怎么分?这就是我们接下来需要主要研究的问题。


数据分片算法

分片的核心思路是用多组机器来存数据的每个部分,那么接下来的核心问题就是,给定一个数据(一个具体的 key),那么这个数据应该存储在哪个分片上?读取的时候又应该去哪个分片读取?围绕这个问题,业界有三种比较主流的实现方式:

  1. 哈希求余
  2. 一致性哈希算法
  3. 哈希槽分区算法

1. 哈希求余

哈希求余,就是借鉴了哈希表的基本思想

借助哈希函数,把一个 key 映射到整数,再针对数据的长度,求余就可以得到一个数组的下标。

哈希求余的分片算法具体是什么样子的呢?

  • 比如有三个分片,编号 0 1 2,此时就可以针对要插入的数据的 key 计算出一个哈希值
  • (计算 哈希值的算法,一般是针对一个字符串里面的内容进行一系列的变换,比如 md5 算法就是一种哈希算法,它是把一个字符串变换成为一个 16 进制的数字)。
  • 在把这个 哈希值余上一个分片个数,就会得到一个下标。此时就可以把这个数据放到该下标对应的分片中了。

  • 比如,hash(key) % N => 0,由于求出的余数是 0,此时这个 key 对应的数据就要 存储在 0 号分片中。
  • 后续查询 key 的时候也是同样的算法。只要 key 是一样的,hash 函数式一样的,得到的分片的值就是一样的。
  • 随着业务逐渐增长,数据变多的时候,仅有的几个分片就不足以保存数据了,这就需要对集群进行扩容,引入新的分片。

这时候,哈希求余算法的缺点就体现出来了,就是在增加集群容量,需要对数据进行 搬运的时候,开销非常大,很多数据都需要搬运原因就是,扩容后 N的值会变大,那么原先的求余就不再适用了,此时要把 所有数重新计算。计算完毕后,还要面临复杂的搬运数据的过程。,大部分的数据都是需要搬运的,这就是扩容的开销非常大。

从上图中可以看到,其中的 21 个数据,只有 3 个 key 没有被搬运,其他的 key 都是搬运过的。

当然,哈希求余的分片算法也是有一定优点的,那就是 简单高效,数据分配比较均匀。


2 一致性哈希算法

哈希求余这种操作中,当前的 key 属于哪个分片是交替的。例如某些数据的 hash 值分别是 102, 103, 104,这些数据在对 3 求余后,得到的值分别是 0, 1, 2,它们哈希求余求出的值是交替的,交替分布在不同的集群中。

而在一致性哈希算法中,我们改进了这种交替存储的方式为连续存储。一致性哈希算法的过程如下:

  • 数据空间映射首先把数据空间全部映射到一个圆环上,数据按照顺时针方向增长。
  • 分片定位:假设当前存在三个分片,将这些 分片放到圆环的某个位置。
  • Key 映射与分配:对于每一个 key,通过哈希函数 计算得到 哈希值 H,并将 H 映射到圆环上的对应位置。从 H 所在的位置开始,顺时针向下找,找到的第一个分片即为该 key 所从属的分片。

这相当于 N 个分片的位置将整个圆环分成了 N 个管辖区间,key 的哈希值落在某个区间内,就归该区间管理。

在这种一致性哈希算法情况下,如果需要对数据进行扩容,原有分片在环上的位置不动,只需要在环上 安排一个新的分片(如下图粉色区域)。

此时只需把 3 号分片上的部分数据搬运给新增的分片(如 4 号分片),而其他分片管理的区间保持不变。

这种方式 相比哈希求余减少了数据搬运成本,但可能导致各分片的数据量不均匀,出现 数据倾斜 现象。


3. 哈希槽分区算法 (Redis 使用)

  • 求余%:扩容不便
  • 一致性分片:数据倾斜

为了解决上述问题,Redis 集群引入了哈希槽算法,其公式为:

hash_slot = crc16(key) % 16384
  • 这里 CRC 是一种哈希算法,16384 等于 16*1024 或者说是 2^14。
  • 此算法 结合了 一致性哈希 和 哈希求余 的特点
  • 将哈希值映射到 16384 个槽位上,然后把这些 槽位均匀地分配给每个分片。每个分片会使用“位图” 这样的数据结构来记录自己持有的槽位号,用 0/1 表示是否持有该槽位。

假设当前有三个分片,一种可能的分配方式如下:

  • 0 号分片: [0,5461],共 5462 个槽位
  • 1 号分片: [5462,10923],共 5462 个槽位
  • 2 号分片: [10924,16383],共 5460 个槽位

实际上,分片方式非常灵活,每个分片持有的 槽位号可以是连续或不连续的。尽管不是严格意义上的均匀,但差异很小,使得数据分布较为均衡。

当需要进行扩容时,比如新增一个 3 号分片,可以通过重新分配原有的槽位来实现:

  • 0 号分片: [0,4095],共 4096 个槽位
  • 1 号分片: [5462,9557],共 4096 个槽位
  • 2 号分片: [10924,15019],共 4096 个槽位
  • 3 号分片: [4096,5461]+[9558,10923]+[15019,16383],共 4096 个槽位

此时,每个分片分出一部分槽位给新来的分片,并且保证最终所有分片持有的槽位个数接近,此处因为 16384 / 4可以除尽,所以最终四个分片的槽位数目完全相同。

最后进行数据拷贝时,只需要0 1 2三个分片,分别单向拷贝一部分数据给3号分片即可。

此外,还有一些关于 Redis 集群的问题需要注意:

Redis 集群最多有 16384 个分片吗?

在 Redis 集群中,key 是要先映射到槽位上,再映射到分片上的。这种设计的目的是为了确保数据分布的均匀性:

  • 如果每个分片包含的槽位较多,并且槽位个数相当,那么可以认为每个分片包含的 key 数量也是相等的,从而保证了数据分布的均匀性。
  • 然而,如果每个分片包含的槽位非常少,槽位的数量可能无法直观地反映出 key 的数量,这种情况之下,数据的均匀性就难以保证。
  • 此外,如果每个分片中包含的槽数非常少,则会导致集群中的服务器规模变得非常庞大,随着服务器数量的增加,出现故障的概率也会相应增大。

为什么是16384个槽位?

  • 节点之间通过心跳包通信,心跳包中包含了该节点持有哪些槽位,这个是使用位图这样的数据结构表示的。
  • 表示 16384 个槽位需要的位图大小是 2KB,如果给定的槽位数更多了,此时就需要消耗更多的空间。
  • 这对于内存来说不算什么,但是 在频繁的网络心跳包中,还是一个不小的开销,因为网络带宽是比内存更稀缺的资源
  • 另一方面,Redis 集群一般不建议超过 1000 个分片。16384个槽位,对于最大 1000 个分片来说是足够用的,同时也会使对应的槽位配置位图体积不至于很大

参考:


Docker搭建集群

接下来使用docker搭建一个如下集群,拓扑结构如下:

注意

  • 本示例中我们将创建11个Redis节点
  • 其中前9个用于演示集群的搭建,后两个用于演示集群扩容。

i:创建目录和配置文件

首先,创建一个名为 redis-cluster 的目录,并在该目录下创建两个文件:

编写 generate.sh 脚本

generate.sh 内容如下,此脚本将为每个 Redis 实例创建配置文件并设置不同的 IP 地址:

#!/bin/bash

# 创建并配置前9个节点
for port in $(seq 1 9); do
    mkdir -p redis${port}
    touch redis${port}/redis.conf
    cat << EOF > redis${port}/redis.conf
port 6379
bind 0.0.0.0
protected-mode no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.30.0.10${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
EOF
done

# 创建并配置第10和11个节点(用于后续扩容)
for port in $(seq 10 11); do
    mkdir -p redis${port}
    touch redis${port}/redis.conf
    cat << EOF > redis${port}/redis.conf
port 6379
bind 0.0.0.0
protected-mode no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.30.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
EOF
done

C++ 和 Java 中的循环

  • C++: range based for(C++ 也有 std::for_each,STL 中的一个函数)
  • Java: for each

Shell 脚本中的循环如上

解释

  • seq: 一个 Linux 命令,生成 [1, 9]
  • : 续行符,把下一行的内容和当前行合并成一行。
    • 默认情况下,shell 要求把所有的代码都写到一行里,使用续行符来换行。
  • { }: 在 shell 中表示变量,不是表示代码块。
    • 对于 for使用 dodone 来表示代码块的开始和结束
    • 循环体内的代码。
  • 字符串拼接:在 shell 中拼接字符串是直接写到一起,而不需要使用 +

预期效果

  • 得到 11 个目录,每个目录里都有一个配置文件。
  • 配置文件中,IP 地址各不相同。

注意cluster-announce-ip 172.30.0.10${port} 的值对于每个实例是不同的,以确保它们在网络中的唯一性。


执行生成命令

运行以下命令以执行 generate.sh 脚本,这将在 redis-cluster/ 目录下生成相应的子目录及配置文件:

bash generate.sh

生成后的目录结构应类似于:

每个 redis.conf 文件的内容除了 cluster-announce-ip 不同外,其他部分都相同。例如,redis1/redis.conf 包含如下内容:

配置说明

  • cluster-enabled yes: 开启集群模式。
  • cluster-config-file nodes.conf: 集群节点自动生成的配置文件。
  • cluster-node-timeout 5000: 节点失联的超时时间(毫秒)。
  • 🎢cluster-announce-ip 172.30.0.101: 节点自身的 IP 地址。
  • cluster-announce-port 6379: 节点自身的业务端口。
  • cluster-announce-bus-port 16379: 节点自身的总线端口,用于集群管理信息交互。

注意:

  • cluster-announce-ip: Docker 容器的 IP 地址。
  • port: 容器内的  Redis 端口。
  • 业务端口: 用于业务数据通信。(eg. 客户端访问的
  • 管理端口: 用于管理任务通信。

故障处理

  • 如果某个分片中的 Redis 主节点挂了,就需要让从节点成为主节点,就需要通过刚才 管理端口 来完成相应的操作。
  • 服务器端口绑定: 一个服务器可以绑定多个端口号。

ii:编写 docker-compose.yml

接下来,我们需要编写 docker-compose.yml 文件来定义 Docker 容器网络和服务。以下是配置示例:

networks:
  mynet:
    ipam:
      config:
        - subnet: 172.30.0.0/24

services:
  redis1:
    image: 'redis:5.0.9'
    container_name: redis1
    restart: always
    volumes:
      - ./redis1/:/etc/redis/
    ports:
      - 6371:6379
      - 16371:16379
    command:
      redis-server /etc/redis/redis.conf
    networks:
      mynet:
        ipv4_address: 172.30.0.101
  redis2:
    image: 'redis:5.0.9'
    container_name: redis2
    restart: always
    volumes:
      - ./redis2/:/etc/redis/
    ports:
      - 6372:6379
      - 16372:16379
    command:
      redis-server /etc/redis/redis.conf
    networks:
      mynet:
        ipv4_address: 172.30.0.102
  redis3:
    image: 'redis:5.0.9'
    container_name: redis3
    restart: always
    volumes:
      - ./redis3/:/etc/redis/
    ports:
      - 6373:6379
      - 16373:16379
    command:
      redis-server /etc/redis/redis.conf
    networks:
      mynet:
        ipv4_address: 172.30.0.103
  redis4:
    image: 'redis:5.0.9'
    container_name: redis4
    restart: always
    volumes:
      - ./redis4/:/etc/redis/
    ports:
      - 6374:6379
      - 16374:16379
    command:
      redis-server /etc/redis/redis.conf
    networks:
      mynet:
        ipv4_address: 172.30.0.104
  redis5:
    image: 'redis:5.0.9'
    container_name: redis5
    restart: always
    volumes:
      - ./redis5/:/etc/redis/
    ports:
      - 6375:6379
      - 16375:16379
    command:
      redis-server /etc/redis/redis.conf
    networks:
      mynet:
        ipv4_address: 172.30.0.105
  redis6:
    image: 'redis:5.0.9'
    container_name: redis6
    restart: always
    volumes:
      - ./redis6/:/etc/redis/
    ports:
      - 6376:6379
      - 16376:16379
    command:
      redis-server /etc/redis/redis.conf
    networks:
      mynet:
        ipv4_address: 172.30.0.106
  redis7:
    image: 'redis:5.0.9'
    container_name: redis7
    restart: always
    volumes:
      - ./redis7/:/etc/redis/
    ports:
      - 6377:6379
      - 16377:16379
    command:
      redis-server /etc/redis/redis.conf
    networks:
      mynet:
        ipv4_address: 172.30.0.107
  redis8:
    image: 'redis:5.0.9'
    container_name: redis8
    restart: always
    volumes:
      - ./redis8/:/etc/redis/
    ports:
      - 6378:6379
      - 16378:16379
    command:
      redis-server /etc/redis/redis.conf
    networks:
      mynet:
        ipv4_address: 172.30.0.108
  redis9:
    image: 'redis:5.0.9'
    container_name: redis9
    restart: always
    volumes:
      - ./redis9/:/etc/redis/
    ports:
      - 6379:6379
      - 16379:16379
    command:
      redis-server /etc/redis/redis.conf
    networks:
      mynet:
        ipv4_address: 172.30.0.109
  redis10:
    image: 'redis:5.0.9'
    container_name: redis10
    restart: always
    volumes:
      - ./redis10/:/etc/redis/
    ports:
      - 6380:6379
      - 16380:16379
    command:
      redis-server /etc/redis/redis.conf
    networks:
      mynet:
        ipv4_address: 172.30.0.110
  redis11:
    image: 'redis:5.0.9'
    container_name: redis11
    restart: always
    volumes:
      - ./redis11/:/etc/redis/
    ports:
      - 6381:6379
      - 16381:16379
    command:
      redis-server /etc/redis/redis.conf
    networks:
      mynet:
        ipv4_address: 172.30.0.111
网络配置
  • subnet: 此处为了后续创建静态的 IP,就需要先手动创建出网络,同时给这个网段分配 IP。这里分配的 网络号是 172.30.0,其中这个网络号是私网格式的一种,需要注意的是,不能和当前主机上现有的其他网段冲突0/24 是主机号。
  • volumes: 配置文件映射,确保容器内的配置文件与宿主机上的配置文件同步更新。
  • ports: 端口映射,需要注意的是,映射右边的端口必须和配置文件中的保持一致。
  • ipv4_address: 静态配置的网络 IP,这里的 IP 也必须和之前的配置文件中的一致。

启动容器之前,要把之前测试的容器关掉,避免冲突

博主在测试机上没什么有用的,就粗暴的直接全都删掉了

由于要启动是一个容器,所以上面的文件会比较长。

启动容器:

docker compose up -d

此时十一个容器就启动了。

但是这些容器目前还是单独的节点,尚未构成集群。


iii: 构建集群

接下来需要把这些服务容器全部构建为集群,使用如下命令:

redis-cli --cluster create 172.30.0.101:6379 172.30.0.102:6379 172.30.0.103:6379 172.30.0.104:6379 172.30.0.105:6379 172.30.0.106:6379 172.30.0.107:6379 172.30.0.108:6379 172.30.0.109:6379 --cluster-replicas 2
  • --cluster create 表示建立集群,后面填写每个节点的 IP 和端口。
  • --cluster-replicas 2 表示每个主节点需要两个从节点备份。设置了这个配置之后,Redis 就会知道,每 3 个节点是一组(一个分片)。但是分配的时候,谁是主节点,谁是从节点,都是随机的。

这样redis就会依据规则自动构建集群,每三个节点构成一个分片(因为指定了一个主有两个从),并且会自动构建主从关系。

输入命令后,出现以下界面:

  • 1 部分,是信号槽的分配部分,可以看到redis内部采用了连续分配的方式,将信号槽均匀的分配给三个分片。
  • 2 部分,是主从关系的建立部分,第一行表示:172.30.0.105:6379成为172.30.0.101:6379的从节点。那么这六行日志,就表示xxx.101xxx.102xxx.103成为了三个主节点,其余的节点成为这三个的从节点。
  • 3 部分,是一段日志,就是具体把那一部分槽位具体分配给哪一个分片,比如xxx.101拿到了[0-5460]的槽位号。

输入 yes 之后才会真正创建。

见到 [OK] 之后说明集群建立完成。

连接并验证集群

使用客户端连接集群中的任何一个节点,都相当于连上了整个集群。:

redis-cli -h 172.30.0.101 -p 6379

在客户端中,我们使用 cluster nodes 来查看当前集群的信息。

重定向

尝试插入数据:

报错了,因为当前集群发生了分片,每个分片都只能存储一部分数据,key1经过哈希运算,发现并不是这个节点可以存储的值,于是就报错了。

想要解决这个问题,可以在启动时加上-c选项,此时插入数据,会自动重定向到对应的节点。

如图,每次操作数据是,如果该数据不属于当前分片,就会触发一次重定向,自动跳转到对应的客户端。命令行前面的 ip 一直在改变,这就说明我们的客户端一直在切换。

但是redis中,有一些命令同时操作多个key,比如最后一个命令mget,此时又报错了。因为这几个key属于不同分片,那么就无法同时处理,因此在集群的情况下,最好不要一次性操作多个key


主节点宕机自动处理流程

如果在集群中,某一个分片的主节点宕机了,会发生什么?在部署集群时,并没有引入哨兵节点,但是集群也会完成哨兵的工作,如果主节点宕机了,集群会自动完成重新选主的过程。

接下来就讲解集群中是如何完成故障转移的。

故障判定

Redis 集群中的所有节点会周期性地使用心跳包进行通信,确保各节点之间的连接状态和集群配置信息的同步。以下是心跳包交互的具体过程:

  • 跳包通信:节点A给节点B发送ping包,B接收到后返回一个pong。这些消息除了类型属性外,其余部分相同,并包含以下集群配置信息:
    • 节点ID
    • 所属分片
    • 主/从角色
    • 附属主节点(如果为从节点)
    • 持有的哈希槽位图
  • 随机化心跳检测每个节点每秒钟随机选择一部分节点发送ping包,而非向所有节点发送,以减少大量节点存在时的心跳包数量。
  • PFAIL 状态:当节点A尝试与节点B通信未果时,A首先尝试重置TCP连接;若仍然失败,则将B标记为PFAIL(主观下线)状态。
  • Gossip协议确认:一旦A判定B为PFAIL,它会通过内置的Gossip协议与其他节点沟通,确认B的状态。每个节点维护自己的“下线列表”,反映其视角下的故障节点。
  • FAIL 状态:如果多数节点(超过半数)也认为B处于PFAIL状态,那么A将正式把B标记为FAIL(客观下线),并通知其他节点更新状态。
故障迁移

当一个节点被标记为FAIL时,根据该节点的角色,可能触发不同的响应:

  • 从节点故障:如果是从节点,通常不需要特别处理,因为它们不直接服务客户端请求。
  • 主节点故障:如果故障节点是主节点,则需要进行故障迁移,流程如下:
    1. 资格审查:从节点检查自身是否符合晋升条件,即与原主节点的最后通信时间不超过设定阈值。
    2. 休眠等待:符合条件的从节点进入一段随机的休眠期,休眠时间=500ms基础时间+[0,500ms]随机时间+排名*1000msoffset 的值越大,则排名越靠前(越小)。这一策略有助于防止多个从节点同时竞选。
    3. 拉票选举:休眠结束后的 从节点开始向其他集群的主节点拉票。只有主节点有投票权,且每个主节点只能投一票。
    4. 晋升为主:获得超过半数主节点支持的从节点晋升为主节点,并执行SLAVEOF NO ONE命令脱离原主节点控制。并且让同一分片中的其它节点执行 slaveof
    5. 最后,新的主节点会把自己成为主节点的消息,同步给其他集群的节点,大家也都会更新自己保存的集群结构信息

此过程类似于 Raft算法,旨在选出网络状况较好的节点作为新的主节点,保证集群的服务连续性和数据一致性。

Fail 状态的影响

在某些情况下,单个节点的故障可能导致整个集群进入fail状态,具体情形包括但不限于:

  • 某一分片内的所有主节点和从节点都不可用。
  • 某一分片内主节点故障且 无可用从节点可晋升。
  • 超过半数的主节点失效。

实验

如图:

首先通过docker stop redis1,关掉了redis1节点,也就是xxx.101下线了,而这是一个主节点。登录6372端口的客户端,查看当前集群,可以发现xxx.106成为了新的主节点,而xxx.105原先是xxx.101的从节点。

重启redis1,其变为了reids5的从节点。

此处 集群的故障转移,和哨兵的故障转移是有一些差别的

  • 哨兵:sdown/odown
  • 集群:PFAIL/FAIL

集群扩容

一、加入集群
  • 命令格式
    • 使用 --cluster add-node 选项将新节点添加到集群。
  • 具体操作
    • 新增节点:要增加到集群的节点。
    • 集群任意节点:用于标识要加入哪一个集群。
redis-cli --cluster add-node 172.30.0.110:6379 172.30.0.101:6379

这样就可以把xxx.110节点加入到集群中,登入任意客户端查看:

通过上述命令,可以将 xxx.110 节点加入到集群中。登录任意客户端查看,可以看到集群内部已有 xxx.110,且是一个主节点。但需要注意的是,新增节点没有分配哈希槽。

二、分配哈希槽
  • 命令格式
    • 使用 --cluster reshard 选项给新节点分配哈希槽(注意是 reshard 不是 shared)。
redis-cli --cluster reshard 172.30.0.101:6379

执行步骤

  • 系统会询问要移动多少个 slots(哈希槽)。假设需要移动4096个哈希槽给新节点,则输入 4096
  • 接着询问将这些哈希槽移动给哪个节点。此时应选择 哈希槽为 0的主节点,并复制其ID。

  • 最后询问从哪些节点中空出这些哈希槽。可以 选择 all 表示从所有现有节点平均提取,或自己指定节点ID,以 done 结束。
  • 最终向用户确认是否要执行该操作。

执行完毕后,进入任意客户端查看集群现状,可以看到新节点获得了三个范围的哈希槽。

问题:搬运哈希槽的过程可能比较久,在此期间用户的访问合法性如何?

  • 大部分哈希槽在搬运过程中仍可正常访问。
  • 如果 用户访问正在移动的哈希槽,则可能会导致访问失败。
三、添加从节点
  • 命令格式
    • 使用 add-node 命令配合 --cluster-slave--cluster-master-id 选项来添加从节点。
redis-cli --cluster add-node 新节点 --cluster-slave --cluster-master-id 主节点的ID
  • 参数说明
    • --cluster-slave:指定新添加的节点作为从节点。
    • --cluster-master-id:后面跟着的是主节点的ID,表示该节点从属于哪一个节点。
redis-cli --cluster add-node 172.30.0.111:6379 172.30.0.101:6379 --clusterslave --cluster-master-id  [172.30.1.110 节点的 nodeId-->] 7ec6d4a0e616916afab017f30d9a1434e375e80a

此时扩容目标初步达成,但是为了保证整个集群的可用性,还需要给主节点添加一些从结点,保证主节点宕机之后,有接班人~

sum:

主从复制:分担了读取压力

哨兵:监控,稳健性提高

集群:存储数据量 提升

本文地址:https://www.vps345.com/3926.html

搜索文章

Tags

PV计算 带宽计算 流量带宽 服务器带宽 上行带宽 上行速率 什么是上行带宽? CC攻击 攻击怎么办 流量攻击 DDOS攻击 服务器被攻击怎么办 源IP 服务器 linux 运维 游戏 云计算 javascript 前端 chrome edge deepseek Ollama 模型联网 API CherryStudio python MCP 进程 操作系统 进程控制 Ubuntu ssh llama 算法 opencv 自然语言处理 神经网络 语言模型 阿里云 网络 网络安全 网络协议 ubuntu 数据库 centos oracle 关系型 安全 分布式 RTSP xop RTP RTSPServer 推流 视频 harmonyos 华为 开发语言 typescript 计算机网络 ssl c# 前端框架 Flask FastAPI Waitress Gunicorn uWSGI Uvicorn flutter Hyper-V WinRM TrustedHosts udp unity asm php android 宝塔面板访问不了 宝塔面板网站访问不了 宝塔面板怎么配置网站能访问 宝塔面板配置ip访问 宝塔面板配置域名访问教程 宝塔面板配置教程 Dell R750XS 科技 ai java 人工智能 个人开发 vue.js audio vue音乐播放器 vue播放音频文件 Audio音频播放器自定义样式 播放暂停进度条音量调节快进快退 自定义audio覆盖默认样式 鸿蒙 uni-app fastapi mcp mcp-proxy mcp-inspector fastapi-mcp agent sse 深度学习 YOLO 目标检测 计算机视觉 pycharm ide pytorch filezilla 无法连接服务器 连接被服务器拒绝 vsftpd 331/530 HCIE 数通 面试 性能优化 jdk intellij-idea 架构 GaN HEMT 氮化镓 单粒子烧毁 辐射损伤 辐照效应 tcp/ip numpy rust http macos adb efficientVIT YOLOv8替换主干网络 TOLOv8 后端 信息与通信 经验分享 学习方法 笔记 学习 docker 容器 DeepSeek-R1 API接口 live555 源码剖析 rtsp实现步骤 流媒体开发 ollama下载加速 大模型 github 创意 社区 远程控制 远程看看 远程协助 WSL2 cpu 内存 实时 使用 数据结构 c语言 jenkins C语言 c++ 低代码 vscode 开源 HarmonyOS Next DigitalOcean GPU服务器购买 GPU服务器哪里有 GPU服务器 apache YOLOv8 NPU Atlas800 A300I pro asi_bench 自动化 蓝耘科技 元生代平台工作流 ComfyUI 命名管道 客户端与服务端通信 jmeter 软件测试 gateway Clion Nova ResharperC++引擎 Centos7 远程开发 统信UOS 麒麟 bonding 链路聚合 mount挂载磁盘 wrong fs type LVM挂载磁盘 Centos7.9 sqlserver qt stm32项目 单片机 stm32 nginx 机器学习 安装教程 GPU环境配置 Ubuntu22 CUDA PyTorch Anaconda安装 debian PVE C 环境变量 进程地址空间 golang AI编程 物联网 iot 华为云 windows gpu算力 react.js 前端面试题 node.js 持续部署 代码调试 ipdb 嵌入式硬件 僵尸进程 oceanbase rc.local 开机自启 systemd kubernetes VMware安装Ubuntu Ubuntu安装k8s k8s 深度优先 图论 并集查找 换根法 树上倍增 ddos ollama llm 大数据 爬虫 数据挖掘 网络用户购物行为分析可视化平台 大数据毕业设计 1024程序员节 chatgpt llama3 Chatglm 开源大模型 Qwen2.5-coder 离线部署 ping++ 运维开发 conda Dify word图片自动上传 word一键转存 复制word图片 复制word图文 复制word公式 粘贴word图文 粘贴word公式 zotero WebDAV 同步失败 代理模式 pip 银河麒麟服务器操作系统 系统激活 Ubuntu Server Ubuntu 22.04.5 Linux sql KingBase firewalld 负载均衡 智能手机 NAS Termux Samba 豆瓣 追剧助手 迅雷 nas 微信 rabbitmq Windsurf AI Agent ESP32 aws googlecloud websocket flask spring boot AIGC tomcat postman mock mock server 模拟服务器 mock服务器 Postman内置变量 Postman随机数据 LDAP mysql cuda cudnn anaconda 实时音视频 微服务 springcloud 腾讯云 maven intellij idea 智能路由器 外网访问 内网穿透 端口映射 redis mybatis vim git ansible dubbo 嵌入式 linux驱动开发 arm开发 大数据平台 gitee 进程信号 transformer kamailio sip VoIP rust腐蚀 mcu .net ffmpeg 音视频 温湿度数据上传到服务器 Arduino HTTP YOLOv12 gitlab 博客 fpga开发 多线程服务器 Linux网络编程 监控 自动化运维 计算机外设 电脑 mac 软件需求 pillow rtsp rtp json html5 firefox https mongodb WSL win11 无法解析服务器的名称或地址 小程序 微信小程序域名配置 微信小程序服务器域名 微信小程序合法域名 小程序配置业务域名 微信小程序需要域名吗 微信小程序添加域名 web安全 Kali Linux 黑客 渗透测试 信息收集 django web3.py vue3 HTML audio 控件组件 vue3 audio音乐播放器 Audio标签自定义样式默认 vue3播放音频文件音效音乐 自定义audio播放器样式 播放暂停调整声音大小下载文件 产品经理 agi microsoft .netcore 程序人生 微信分享 Image wxopensdk Linux PID string模拟实现 深拷贝 浅拷贝 经典的string类问题 三个swap 云原生 游戏服务器 TrinityCore 魔兽世界 客户端 java-ee adobe elk 交互 Python 网络编程 聊天服务器 套接字 TCP Socket webrtc xrdp 远程桌面 远程连接 崖山数据库 YashanDB 跨域 宠物 毕业设计 免费学习 宠物领养 宠物平台 Ubuntu 24.04.1 轻量级服务器 NFS redhat vue 小艺 Pura X excel W5500 OLED u8g2 TCP服务器 并查集 leetcode chfs ubuntu 16.04 群晖 文件分享 中间件 iis NPS 雨云服务器 雨云 springsecurity6 oauth2 授权服务器 token sas 能力提升 面试宝典 技术 IT信息化 环境迁移 编辑器 MacMini Mac 迷你主机 mini Apple prometheus 网络穿透 云服务器 kylin 银河麒麟操作系统 国产化 rpc 远程过程调用 Windows环境 Ubuntu DeepSeek DeepSeek Ubuntu DeepSeek 本地部署 DeepSeek 知识库 DeepSeek 私有化知识库 本地部署 DeepSeek DeepSeek 私有化部署 监控k8s集群 集群内prometheus 直播推流 服务器部署ai模型 Playwright 自动化测试 tcpdump rsyslog bug 毕设 jar 相差8小时 UTC 时间 Java gpt linux上传下载 职场和发展 kvm 无桌面 命令行 蓝桥杯 k8s集群资源管理 云原生开发 媒体 微信公众平台 risc-v hadoop VR手套 数据手套 动捕手套 动捕数据手套 CPU 主板 电源 网卡 vmware 卡死 ipython SSH 服务 SSH Server OpenSSH Server svn 华为od OD机试真题 华为OD机试真题 服务器能耗统计 ai小智 语音助手 ai小智配网 ai小智教程 智能硬件 esp32语音助手 diy语音助手 av1 电视盒子 机顶盒ROM 魔百盒刷机 matlab 3d 数学建模 bootstrap html web ci/cd ros2 moveit 机器人运动 系统架构 jupyter Ubuntu 24 常用命令 Ubuntu 24 Ubuntu vi 异常处理 express eureka Trae AI代码编辑器 css 服务器数据恢复 数据恢复 存储数据恢复 北亚数据恢复 oracle数据恢复 输入法 联想开天P90Z装win10 selenium 测试工具 dba 宕机切换 服务器宕机 远程 命令 执行 sshpass 操作 Deepseek okhttp Redis Desktop wireshark 显示过滤器 安装 ICMP Wireshark安装 pygame 压力测试 XCC Lenovo 交换机 telnet 远程登录 ecm bpm DeepSeek 繁忙 服务器繁忙 解决办法 替代网站 汇总推荐 AI推理 压测 ECS minio 向日葵 Minecraft unix embedding ArcTS 登录 ArcUI GridItem 鸿蒙系统 arkUI rime list devops 远程工作 skynet 课程设计 chrome devtools chromedriver 硬件架构 playbook AI大模型 LLM thingsboard postgresql visual studio code iDRAC R720xd Cursor IIS .net core Hosting Bundle .NET Framework vs2022 elasticsearch XFS xfs文件系统损坏 I_O error es jvm spring shell 磁盘监控 safari 系统 dell服务器 go 缓存 Google pay Apple pay gitea 服务器主板 AI芯片 dify 技能大赛 小游戏 五子棋 android studio sdkman file server http server web server zabbix bash 集成学习 集成测试 数据集 yum 服务器配置 生物信息学 openEuler Invalid Host allowedHosts ip命令 新增网卡 新增IP 启动网卡 rdp 实验 selete 高级IO 程序员 nvidia 王者荣耀 DNS 政务 分布式系统 监控运维 Prometheus Grafana 软件工程 ESXi mysql离线安装 ubuntu22.04 mysql8.0 MQTT协议 消息服务器 代码 DevEco Studio spring cloud 源码 设计模式 混合开发 环境安装 JDK 硬件 设备 GPU PCI-Express 微信小程序 jetty undertow UOS 统信操作系统 threejs 3D etcd 数据安全 RBAC 企业微信 Linux24.04 deepin Erlang OTP gen_server 热代码交换 事务语义 金融 centos-root /dev/mapper yum clean all df -h / du -sh MNN Qwen ip ui sqlite3 京东云 音乐服务器 Navidrome 音流 基础入门 编程 部署 ruoyi docker run 数据卷挂载 交互模式 DeepSeek行业应用 Heroku 网站部署 串口服务器 freebsd hugo 思科模拟器 思科 Cisco docker搭建nacos详解 docker部署nacos docker安装nacos 腾讯云搭建nacos centos7搭建nacos 测试用例 功能测试 springboot远程调试 java项目远程debug docker远程debug java项目远程调试 springboot远程 kind AI写作 AI作画 react next.js 部署next.js QQ 聊天室 eNSP 网络规划 VLAN 企业网络 camera Arduino 电子信息 飞牛NAS 飞牛OS MacBook Pro linux环境变量 cnn muduo X11 Xming RAID RAID技术 磁盘 存储 其他 游戏程序 Reactor C++ windwos防火墙 defender防火墙 win防火墙白名单 防火墙白名单效果 防火墙只允许指定应用上网 防火墙允许指定上网其它禁止 数据库架构 数据管理 数据治理 数据编织 数据虚拟化 k8s资源监控 annotations自动化 自动化监控 监控service 监控jvm idm 弹性计算 虚拟化 KVM 计算虚拟化 弹性裸金属 多进程 漏洞 Docker Compose docker compose docker-compose 安全威胁分析 vscode 1.86 ecmascript Linux无人智慧超市 LInux多线程服务器 QT项目 LInux项目 单片机项目 grafana 直流充电桩 充电桩 IPMI iftop 网络流量监控 netty SSH TRAE 系统安全 裸金属服务器 弹性裸金属服务器 make命令 makefile文件 p2p unity3d 银河麒麟 kylin v10 麒麟 v10 Xterminal 状态管理的 UDP 服务器 Arduino RTOS 开机自启动 机器人 安卓 驱动开发 Linux awk awk函数 awk结构 awk内置变量 awk参数 awk脚本 awk详解 Portainer搭建 Portainer使用 Portainer使用详解 Portainer详解 Portainer portainer ue4 着色器 ue5 虚幻 目标跟踪 OpenVINO 推理应用 Netty 即时通信 NIO gradle nuxt3 C# MQTTS 双向认证 emqx bot Docker 边缘计算 IIS服务器 IIS性能 日志监控 ceph 文件系统 路径解析 计算机 code-server MQTT mosquitto 消息队列 SysBench 基准测试 rocketmq r语言 数据可视化 数据分析 sqlite MS Materials 深度求索 私域 知识库 openssl 密码学 业界资讯 模拟退火算法 iBMC UltraISO RAGFLOW RAG 检索增强生成 文档解析 大模型垂直应用 CLion IDE echarts 信息可视化 网页设计 腾讯云大模型知识引擎 数据库系统 图像处理 kafka hibernate 国产操作系统 ukui 麒麟kylinos openeuler 统信 虚拟机安装 框架搭建 医疗APP开发 app开发 报错 Dell HPE 联想 浪潮 大模型入门 大模型教程 curl wget remote-ssh springboot 设置代理 实用教程 JAVA linux 命令 sed 命令 asp.net大文件上传 asp.net大文件上传源码 ASP.NET断点续传 asp.net上传文件夹 asp.net上传大文件 .net core断点续传 .net mvc断点续传 火绒安全 RoboVLM 通用机器人策略 VLA设计哲学 vlm fot robot 视觉语言动作模型 具身智能 VPS Nuxt.js 孤岛惊魂4 protobuf 序列化和反序列化 uniapp 恒源云 webstorm vSphere vCenter 软件定义数据中心 sddc RTMP 应用层 kali 共享文件夹 虚拟机 virtualenv ragflow CORS 剧本 ios 传统数据库升级 银行 大语言模型 LLMs mariadb 强制清理 强制删除 mac废纸篓 工业4.0 IPMITOOL BMC 硬件管理 minicom 串口调试工具 opcua opcda KEPServer安装 oneapi 大模型微调 open webui 微信开放平台 微信公众号配置 VMware 灵办AI pdf VSCode 华为认证 网络工程师 Ark-TS语言 移动云 鲲鹏 FTP 服务器 网站搭建 serv00 visualstudio cmos SSL 域名 Anolis nginx安装 linux插件下载 docker命令大全 5G 3GPP 卫星通信 图形化界面 指令 mq raid5数据恢复 磁盘阵列数据恢复 AI 原生集成开发环境 Trae AI GCC crosstool-ng SWAT 配置文件 服务管理 网络共享 硬件工程 嵌入式实习 wsl2 wsl VMware安装mocOS macOS系统安装 Kylin-Server 服务器安装 EasyConnect micropython esp32 mqtt Cline gcc 多层架构 解耦 nextjs reactjs RustDesk自建服务器 rustdesk服务器 docker rustdesk 黑客技术 Docker Hub docker pull 镜像源 daemon.json 流式接口 URL 本地部署 api pyqt 监控k8s 监控kubernetes 半虚拟化 硬件虚拟化 Hypervisor 系统开发 binder 车载系统 framework 源码环境 WebRTC openwrt 分析解读 田俊楠 大模型面经 大模型学习 ux 多线程 open Euler dde WebUI DeepSeek V3 服务器管理 宝塔面板 配置教程 网站管理 网工 opensearch helm pgpool 搜索引擎 ssrf 失效的访问控制 CrewAI SRS 流媒体 直播 开发环境 SSL证书 本地部署AI大模型 qemu libvirt sysctl.conf vm.nr_hugepages LInux UOS1070e WebVM 基础环境 策略模式 单例模式 clickhouse 流水线 脚本式流水线 代码托管服务 outlook 信号 DenseNet 视频编解码 dash 正则表达式 odoo 服务器动作 Server action can 线程池 USB网络共享 高效日志打印 串口通信日志 服务器日志 系统状态监控日志 异常记录日志 无人机 rustdesk DIFY 网络药理学 生信 gromacs 分子动力学模拟 MD 动力学模拟 程序员创富 epoll dns 互信 自动化编程 swoole 三级等保 服务器审计日志备份 致远OA OA服务器 服务器磁盘扩容 FTP服务器 上传视频至服务器代码 vue3批量上传多个视频并预览 如何实现将本地视频上传到网页 element plu视频上传 ant design vue vue3本地上传视频及预览移除 ssh漏洞 ssh9.9p2 CVE-2025-23419 arm lsb_release /etc/issue /proc/version uname -r 查看ubuntu版本 多个客户端访问 IO多路复用 回显服务器 TCP相关API 网络结构图 匿名管道 推荐算法 fd 文件描述符 软考 HarmonyOS 7z etl 安防软件 端口测试 powerpoint keepalived sonoma 自动更新 n8n dity make xshell termius iterm2 tcp c neo4j 数据仓库 数据库开发 database tailscale derp derper 中转 triton 模型分析 矩阵 线性代数 电商平台 大文件分片上传断点续传及进度条 如何批量上传超大文件并显示进度 axios大文件切片上传详细教 node服务器合并切片 vue3大文件上传报错提示错误 大文件秒传跨域报错cors C++软件实战问题排查经验分享 0xfeeefeee 0xcdcdcdcd 动态库加载失败 程序启动失败 程序运行权限 标准用户权限与管理员权限 CDN 实战案例 xcode 单元测试 DOIT 四博智联 Docker引擎已经停止 Docker无法使用 WSL进度一直是0 镜像加速地址 perf Unity Dedicated Server Host Client 无头主机 服务网格 istio 链表 hive DBeaver kerberos 网络攻击模型 flink rclone AList webdav fnOS cursor MCP server C/S windows日志 反向代理 安全架构 产测工具框架 IMX6ULL 管理框架 python3.11 Jellyfin LORA NLP TrueLicense firewall openstack Xen H3C 序列化反序列化 matplotlib Linux的基础指令 cfssl composer 常用命令 文本命令 目录命令 超融合 服务器无法访问 ip地址无法访问 无法访问宝塔面板 宝塔面板打不开 Logstash 日志采集 影刀 #影刀RPA# 历史版本 下载 前后端分离 语法 Typore 图形渲染 黑苹果 ROS 自动驾驶 FunASR ASR 聚类 佛山戴尔服务器维修 佛山三水服务器维修 昇腾 npu 实习 捆绑 链接 谷歌浏览器 youtube google gmail figma 虚拟局域网 WSL2 上安装 Ubuntu 我的世界服务器搭建 Wi-Fi vpn c/c++ 串口 强化学习 prompt Spring Security 我的世界 我的世界联机 数码 实时互动 alias unalias 别名 mamba ISO镜像作为本地源 gpt-3 文心一言 视觉检测 云电竞 云电脑 todesk ocr VMware创建虚拟机 regedit 开机启动 可信计算技术 显卡驱动 tidb GLIBC 大模型应用 用户缓冲区 模拟实现 GoogLeNet ArkTs ArkUI OpenSSH 支付 微信支付 开放平台 交叉编译 云服务 saltstack Hive环境搭建 hive3环境 Hive远程模式 IPv4 子网掩码 公网IP 私有IP 主从复制 webgl SenseVoice 人工智能生成内容 考研 Mac内存不够用怎么办 备份SQL Server数据库 数据库备份 傲梅企业备份网络版 IM即时通讯 剪切板对通 HTML FORMAT ruby cocoapods 阿里云ECS gaussdb dns是什么 如何设置电脑dns dns应该如何设置 Ubuntu共享文件夹 共享目录 Linux共享文件夹 xss 在线预览 xlsx xls文件 在浏览器直接打开解析xls表格 前端实现vue3打开excel 文件地址url或接口文档流二进 版本 游戏引擎 seleium yolov8 pppoe radius flash-attention Kali 渗透 AI agent 架构与原理 双系统 GRUB引导 Linux技巧 线程 RAGFlow 本地知识库部署 DeepSeek R1 模型 P2P HDLC 小番茄C盘清理 便捷易用C盘清理工具 小番茄C盘清理的优势尽显何处? 教你深度体验小番茄C盘清理 C盘变红?!不知所措? C盘瘦身后电脑会发生什么变化? uv glibc 移动魔百盒 算力 USB转串口 CH340 Ubuntu22.04 开发人员主页 Radius trea idea less 邮件APP 免费软件 IDEA Cookie lio-sam SLAM edge浏览器 lua vue-i18n 国际化多语言 vue2中英文切换详细教程 如何动态加载i18n语言包 把语言json放到服务器调用 前端调用api获取语言配置文件 wps 社交电子 高效远程协作 TrustViewer体验 跨设备操作便利 智能远程控制 aarch64 编译安装 HPC Deepseek-R1 私有化部署 推理模型 EMQX 通信协议 软负载 AI-native Docker Desktop 音乐库 飞牛 junit 读写锁 显示管理器 lightdm gdm 办公自动化 自动化生成 pdf教程 rnn 同步 备份 建站 阻塞队列 生产者消费者模型 服务器崩坏原因 laravel langchain 键盘 性能测试 arcgis sentinel seatunnel g++ g++13 nac 802.1 portal iphone midjourney wordpress 无法访问wordpess后台 打开网站页面错乱 linux宝塔面板 wordpress更换服务器 HTTP 服务器控制 ESP32 DeepSeek rag ragflow 源码启动 备选 网站 调用 示例 银河麒麟桌面操作系统 Kylin OS 运维监控 AD域 k8s二次开发 集群管理 游戏机 pyautogui 远程服务 Vmamba yaml Ultralytics 可视化 vasp安装 查询数据库服务IP地址 SQL Server 语音识别 AutoDL 干货分享 黑客工具 密码爆破 代理 技术共享 Linux环境 DeepSeek r1 Open WebUI cd 目录切换 OpenManus eclipse 宝塔 信号处理 qt项目 qt项目实战 qt教程 x64 SIGSEGV SSE xmm0 稳定性 看门狗 MacOS录屏软件 执法记录仪 智能安全帽 smarteye EtherNet/IP串口网关 EIP转RS485 EIP转Modbus EtherNet/IP网关协议 EIP转RS485网关 EIP串口服务器 国标28181 视频监控 监控接入 语音广播 流程 SIP SDP miniapp 真机调试 调试 debug 断点 网络API请求调试方法 银河麒麟高级服务器 外接硬盘 Kylin apt 国内源 frp Node-Red 编程工具 流编程 根服务器 tensorflow 华为机试 串口驱动 CH341 uart 485 NLP模型 AISphereButler EtherCAT转Modbus ECT转Modbus协议 EtherCAT转485网关 ECT转Modbus串口网关 EtherCAT转485协议 ECT转Modbus网关 自学笔记 小米 澎湃OS Android bcompare Beyond Compare 做raid 装系统 Java Applet URL操作 服务器建立 Socket编程 网络文件读取 模拟器 教程 bat VM搭建win2012 win2012应急响应靶机搭建 攻击者获取服务器权限 上传wakaung病毒 应急响应并溯源 挖矿病毒处置 应急响应综合性靶场 需求分析 规格说明书 deep learning 升级 CVE-2024-7347 内网服务器 内网代理 内网通信 EMUI 回退 降级 web3 自动化任务管理 uni-file-picker 拍摄从相册选择 uni.uploadFile H5上传图片 微信小程序上传图片 easyui linux安装配置 big data 嵌入式Linux IPC 相机 权限 飞书 log4j yum源切换 更换国内yum源 ubuntu24.04.1 VS Code 单一职责原则 IO模型 飞牛nas fnos AP配网 AK配网 小程序AP配网和AK配网教程 WIFI设备配网小程序UDP开 spark HistoryServer Spark YARN jobhistory Headless Linux xml 游戏开发 asp.net大文件上传下载 小智AI服务端 xiaozhi TTS 工作流 workflow vr AD 域管理 虚拟显示器 zookeeper nfs 免费域名 域名解析 磁盘镜像 服务器镜像 服务器实时复制 实时文件备份 banner 软件构建 DocFlow 自定义客户端 SAS 僵尸世界大战 游戏服务器搭建 minecraft trae 迁移指南 GIS 遥感 WebGIS npm ros 大大通 第三代半导体 碳化硅 重启 排查 系统重启 日志 原因 IMX317 MIPI H265 VCU UDP的API使用 Linux的权限 毕昇JDK 怎么卸载MySQL MySQL怎么卸载干净 MySQL卸载重新安装教程 MySQL5.7卸载 Linux卸载MySQL8.0 如何卸载MySQL教程 MySQL卸载与安装 Windows ai工具 v10 软件 ldap armbian u-boot 分布式训练 项目部署到linux服务器 项目部署过程 ftp MI300x Claude AnythingLLM AnythingLLM安装 vscode1.86 1.86版本 ssh远程连接 LLM Web APP Streamlit 英语 cpp-httplib 区块链 ubuntu20.04 ros1 Noetic 20.04 apt 安装 ABAP 网络爬虫 top Linux top top命令详解 top命令重点 top常用参数 存储维护 NetApp存储 EMC存储 react native word 增强现实 沉浸式体验 应用场景 技术实现 案例分析 AR 多路转接 知识图谱 kotlin ssh远程登录 虚幻引擎 CentOS Stream CentOS virtualbox visual studio 问题解决 ubuntu24 vivado24 Sealos 企业网络规划 华为eNSP ranger MySQL8.0 浏览器开发 AI浏览器 ShenTong rancher 烟花代码 烟花 元旦 智能音箱 智能家居 性能调优 安全代理 嵌入式系统开发 网络建设与运维 网络搭建 神州数码 神州数码云平台 云平台 searxng PPI String Cytoscape CytoHubba 防火墙 NAT转发 NAT Server wsgiref Web 服务器网关接口 ip协议 ardunio BLE 云桌面 微软 AD域控 证书服务器 合成模型 扩散模型 图像生成 deekseek TCP协议 浏览器自动化 抗锯齿 拓扑图 软件卸载 系统清理 iventoy VmWare OpenEuler css3 OpenHarmony 鸿蒙开发 移动开发 Linux权限 权限命令 特殊权限 nlp Unity插件 milvus sequoiaDB 程序 性能分析 MVS 海康威视相机 prometheus数据采集 prometheus数据模型 prometheus特点 UDP proxy模式 vu大文件秒传跨域报错cors PX4 MacOS db 带外管理 软链接 硬链接 onlyoffice 在线office 服务器时间 磁盘清理 进程优先级 调度队列 进程切换 SSH 密钥生成 SSH 公钥 私钥 生成 本地化部署 镜像 大模型推理 容器技术 chrome 浏览器下载 chrome 下载安装 谷歌浏览器下载 docker搭建pg docker搭建pgsql pg授权 postgresql使用 postgresql搭建 私有化 iperf3 带宽测试 玩机技巧 软件分享 软件图标 MySql QT 5.12.12 QT开发环境 Ubuntu18.04 kernel 云耀服务器 对比 工具 meld DiffMerge 项目部署 harmonyOS面试题 个人博客 KylinV10 麒麟操作系统 Vmware su sudo 环境配置 上传视频文件到服务器 uniApp本地上传视频并预览 uniapp移动端h5网页 uniapp微信小程序上传视频 uniapp app端视频上传 uniapp uview组件库 物联网开发 欧标 OCPP deployment daemonset statefulset cronjob SEO 树莓派 VNC AI Agent 字节智能运维 域名服务 DHCP 符号链接 配置 deepseek r1 信创 信创终端 中科方德 粘包问题 代理服务器 健康医疗 互联网医院 MDK 嵌入式开发工具 论文笔记 sublime text 极限编程 rpa 端口聚合 windows11 加解密 Yakit yaklang Linux find grep 钉钉 navicat SVN Server tortoise svn 流量运营 大模型部署 抓包工具 Attention System V共享内存 进程通信 HiCar CarLife+ CarPlay QT RK3588 docker desktop image 查看显卡进程 fuser ArtTS HAProxy jina nvm whistle llama.cpp xpath定位元素 端口 查看 ss docker部署翻译组件 docker部署deepl docker搭建deepl java对接deepl 翻译组件使用 开发 gnu autodl 状态模式 rtsp服务器 rtsp server android rtsp服务 安卓rtsp服务器 移动端rtsp服务 大牛直播SDK 中兴光猫 换光猫 网络桥接 自己换光猫 Qwen2.5-VL vllm 多端开发 智慧分发 应用生态 鸿蒙OS IMM grub 版本升级 扩容 nosql 金仓数据库 2025 征文 数据库平替用金仓 hexo wpf fast Xinference hosts 元服务 应用上架 换源 Debian 李心怡 沙盒 java-rocketmq win服务器架设 windows server perl 计算生物学 生物信息 基因组 Python基础 Python教程 Python技巧 内网环境 h.264 WLAN HarmonyOS NEXT 原生鸿蒙 docker部署Python zip unzip 网卡的名称修改 eth0 ens33 fstab 热榜 风扇控制软件 开机黑屏 搜狗输入法 中文输入法 电视剧收视率分析与可视化平台 离线部署dify 像素流送api 像素流送UE4 像素流送卡顿 像素流送并发支持 论文阅读 centos 7 西门子PLC 通讯 yolov5 js ubuntu 18.04 dock 加速 搭建个人相关服务器 虚拟现实 MAVROS 四旋翼无人机 数字证书 签署证书 openvpn server openvpn配置教程 centos安装openvpn 智能电视 安装MySQL 通信工程 毕业 达梦 DM8 conda配置 conda镜像源 AI员工 接口优化 服务器正确解析请求体 IO macOS mm-wiki搭建 linux搭建mm-wiki mm-wiki搭建与使用 mm-wiki使用 mm-wiki详解 解决方案 MobaXterm vnc yum换源