【Redis】三种集群模式(主从复制、哨兵模式、Cluster)

news2024/11/18 20:28:40

图片

前言

redis有三种集群模式,其中主从是最常见的模式。Sentinel 哨兵模式是为了弥补主从复制集群中主机宕机后,主备切换的复杂性而演变出来的。哨兵顾名思义,就是用来监控的,主要作用就是监控主从集群,自动切换主备,完成集群故障转移。cluster 模式是redis官方提供的集群模式,使用了Sharding 技术,不仅实现了高可用、读写分离、也实现了真正的分布式存储。

一、主从复制

Redis的主从复制是一种数据复制技术,在主从复制模式中,有一个主节点和多个从节点。主节点负责处理写请求,而从节点则负责处理读请求。这种模式下的数据同步是单向的,即只能从主节点向从节点同步数据。当主节点出现故障时,其中一个从节点可以被提升为新的主节点,以保证服务的持续可用。

图片

代码配置

1. 在application.yml中添加以下配置:

spring:
  redis:
    master:
      url: redis://localhost:6379
    slave:
      url: redis://localhost:6380

2. Spring Boot集成Redis主从模式的代码示例:


@Configuration
public class RedisConfig {

    @Value("${spring.redis.master.url}")
    private String masterUrl;

    @Value("${spring.redis.slave.url}")
    private String slaveUrl;

    @Bean
    public LettuceConnectionFactory connectionFactory() {
        return new LettuceConnectionFactory(new RedisStandaloneConfiguration(masterUrl, EnumSet.of(RedisClientConfiguration.Command.SLAVE_READ_ONLY)));
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(connectionFactory());
        return template;
    }
}

主要作用:

  1. 数据冗余:通过主从复制,可以实现数据的热备份,增加数据的安全性和可靠性。

  2. 故障恢复:当主节点出现异常时,可以从节点接管服务,从而快速恢复Redis服务的可用性。

  3. 负载均衡:结合读写分离,主节点负责写操作,而从节点负责读操作,这样可以分摊服务器负载,特别是在写操作较少的情况下,通过多个从节点分担读负载可以提高Redis服务器的并发能力。

  4. 高可用性:主从复制作为Redis高可用的基石之一,对于哨兵和集群等高级架构至关重要。

工作原理:

redis 的复制分为两部分操作 同步(SYNC)和 命令传播(command propagate)

  • 同步(SYNC)用来将从服务器的状态 更新到 和主服务器 一致。白话文解释就是从服务器主动获取 主服务器的数据。保持数据一致。具体实现是,主服务器收到SYNC命令后,生成RDB快照文件,然后发送给从服务器。

  • 命令传播 (command propagate)用于在主服务器数据被修改后,主从不一致,为了让从服务器保持和主服务器状态一致,而做的命令传播。白话文解释就是主服务器收到客户端修改数据命令后,数据库数据发生变化,同时将命令缓存起来,然后将缓存命令发送到从服务器,从服务器通过载入缓存命令来达到主从数据一致。这就是所谓的命令传播。

  • 为什么需要有同步和命令传播的两种复制操作:当只有同步操作时候,那么在从服务器向主服务器发送SYNC命令时候,主服务器在生成RDB快照文件时候,仍然会收到客户端的命令修改数据状态,这部分数据如果不能传达给从服务器,那么就会出现主从数据不一致的现象。这时候就出现了命令传播,主服务器收到从服务器的SYNC命令后,生成RDB快照文件同时,将此段时间内收到的命令缓存起来,然后使用命令传播的操作发送从服务器。来达到主从数据一致。

图片

在Redis 2.8版本之前,主从复制是通过全量复制实现的,这通常是一个较重的操作。而在Redis 2.8及其后续版本中,引入了增量复制,这是一种更高效的复制方式,它只在网络中断期间或从节点未及时同步数据时才发送写命令的快照。

总结来说,Redis的主从复制不仅提高了数据安全性,还增强了Redis服务的性能和可靠性。

优缺点

优点:

  1. 实现读写分离,提高了可用性,解决了单机故障;

  2. 主从复制期间master和slave都是非阻塞方式,仍然可用;

  3. redis主从复制的优点主要是提高了可用性缺点。

缺点:

  1. master宕机期间,需要手动切换主机,同时会有部分数据不能及时同步从服务器,造成数据不一致(需要人工手动介入);

  2. slave宕机后,多个slave恢复后,大量的SYNC同步会造成master IO压力倍增(可以手动规避启动时间);

  3. 在线扩容较复杂。

环境搭建

创建redis-cluster目录,然后复制3份redis(也可以一个redis三份不同的配置文件,启动的时候,读取相应的配置文件);

分别修改它们的redis.conf配置文件,如下所示:

redis-6380/redis.conf​​​​​​​

port 6380
pidfile /var/run/redis-6380.pid
logfile "redis-6380.log"
dbfilename dump-6380.rdb
daemonize yes

redis-6381/redis.conf

port 6381
pidfile /var/run/redis-6381.pid
logfile "redis-6381.log"
dbfilename dump-6381.rdb
daemonize yes
# 如果不通过修改配置文件,也可以在客户端中输入“SLAVEOF 127.0.0.1 6380”即刻生效!!
# 也可以在客户端中输入“SLAVEOF NO ONE”来断开主从关系
replicaof 127.0.0.1 6380

redis-6382/redis.conf

port 6382
pidfile /var/run/redis-6382.pid
logfile "redis-6382.log"
dbfilename dump-6382.rdb
daemonize yes
replicaof 127.0.0.1 6380

开启3个客户端,来连接这3个redis服务实例;利用ping查看服务是否正常,并且通过info replication查看自己在集群中的角色

图片

二、Sentinel 哨兵模式

哨兵模式是为了解决主从复制集群中主机宕机后,主备切换的复杂性而演变出来的。在这种模式下,有一个或多个哨兵节点,它们的主要作用就是监控主从集群,自动切换主备,完成集群故障转移。

Redis的哨兵模式是一种特殊的高可用解决方案。哨兵能够实时检测master的状态,当master处于故障状态时,哨兵会根据一定的选举算法选出一个新的主节点,并将其他从节点切换到新的主节点上。Redis的哨兵模式中,为了确保其健壮性,至少需要部署3个实例。这三个实例分别扮演不同的角色:主节点、从节点和哨兵节点。

图片

主要功能:

  1. 集群监控:负责监控 Redis master 和 slave 进程是否正常工作;

  2. 消息通知:如果某个 Redis 实例出现故障,那么哨兵负责发送消息作为报警通知给管理员;

  3. 故障转移:如果 master node 挂掉了,会自动转移到 slave node 上;

  4. 配置中心:如果故障转移发生了,通知 client 客户端习新的 master 地址。

工作原理:

每个Sentinel(哨兵)进程以每秒钟一次的频率向整个集群中的Master主服务器,Slave从服务器以及其他Sentinel(哨兵)进程发送一个 PING 命令。

如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel(哨兵)进程标记为主观下线(SDOWN)。

如果一个Master主服务器被标记为主观下线(SDOWN),则正在监视这个Master主服务器的所有 Sentinel(哨兵)进程要以每秒一次的频率确认Master主服务器的确进入了主观下线状态。

当有足够数量的 Sentinel(哨兵)进程(大于等于配置文件指定的值)在指定的时间范围内确认Master主服务器进入了主观下线状态(SDOWN), 则Master主服务器会被标记为客观下线(ODOWN)。

此时就会进行哨兵选举,选出一个领头的哨兵对主从数据库发起故障的修复(就是选一个从数据库作为新的Master)。

在一般情况下, 每个 Sentinel(哨兵)进程会以每 10 秒一次的频率向集群中的所有Master主服务器、Slave从服务器发送 INFO 命令。

当Master主服务器被 Sentinel(哨兵)进程标记为客观下线(ODOWN)时,Sentinel(哨兵)进程向下线的 Master主服务器的所有 Slave从服务器发送 INFO 命令的频率会从 10 秒一次改为每秒一次。

若没有足够数量的 Sentinel(哨兵)进程同意 Master主服务器下线, Master主服务器的客观下线状态就会被移除。若 Master主服务器重新向 Sentinel(哨兵)进程发送 PING 命令返回有效回复,Master主服务器的主观下线状态就会被移除。

哨兵监控

  • 如果 Redis 节点未在 [master-down-after-milliseconds] 指定的时间内,对向它发送 PING 命令的哨兵返回一个有效回复,该哨兵就会将这个服务器标记为下线。

  • 当某个哨兵先检测到主节点不可用时,系统并不会马上进行 failover 过程【最终只有一个 sentinel 节点作为 failover 的发起者,就需要选举一个 leader(采用类似 Raft 协议实现选举算法)】。该哨兵会通知其它哨兵,发送 [SENTINEL is-master-down-by-addr] 来询问其他哨兵是否认为主节点的服务器已下线并提议选举自己为领导者哨兵。

  • 如果在规定的时间内接收到多个哨兵(哨兵数量大于3且为奇数)的同意时,领导者哨兵产生。

哨兵通知及故障转移

  • 领导者哨兵选出一个从节点,并将其升级为主节点。

  • 向被选中的从节点发送 SLAVEOF NO ONE 命令,让它转变为主节点。

  • 通过发布与订阅功能,将更新后的配置传播给所有其他 Sentinel,其他 Sentinel 对他们自己的配置进行更新。

  • 向其他从节点发送 SLAVE OF 命令,让它们去复制新的主节点。 

  • 当所有的从节点都已经开始复制新的主节点时,领导者哨兵终止此次故障迁移操作。

  • 每当一个 Redis 实例被重新配置(reconfigured),无论是被设置成主节点、从节点、又或者被设置成其他主节点的从节点,哨兵都会向被重新配置的实例发送一个 CONFIG REWRITE 命令,从而确保这些配置会持久化到硬盘。

哨兵配置

图片

优缺点

优点:

  • 哨兵模式基于主从复制,因此主从复制的优点哨兵都具备;

  • 哨兵具备了主从切换和故障转移,因此集群有了更高的可用性。

  • sentinel 哨兵主要用来监控redis主从集群,提高了redis 主从集群的可用性。

缺点:

  • Redis较难支持在线扩容,在线扩容比较复杂。

环境搭建

1. 搭建 1 主 2 从共 3 个节点的 Redis 主从复制节点。

#8000 为主节点端口,8001和8002为对应从节点
8000>./redis-server redis.conf
8001>./redis-server redis.conf
8002>./redis-server redis.conf

2. 新建3个哨兵节点并配置哨兵 sentinel.conf 文件。新建端口为18000、18001、18002 共三个哨兵节点,启动:./redis-sentinel sentinel.conf

bind 127.0.0.1
port 18000 #其他两个分别为 18002、18003
protected-mode no  #若想从远程连接redis集群,需要将sentinel的protected-mode修改为no
sentinel myid sentinel-1  #设定sentinel myid 每个都不一样,使用yum安装的时候,直接就生成了
sentinel monitor mymaster 127.0.0.1 8000 2 #数字2,表示主机挂掉后salve投票看让谁接替成为主机,得票数多少后成为主机。
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 15000
sentinel parallel-syncs mymaster 2
sentinel auth-pass mymaster 123456  #设置用于与主服务器和从服务器进行身份验证的密码

3. 使用 Redis-cli 连接

$redis-cli -h 127.0.0.1 -p 8000 -a 123456

Redis -cli 连接到主库可以执行 set 命令,连接到从库执行 set 命令会有异常提示

(error)READONLY You cant write against a read only save

4. 使用 Jedis.jar 连接 Redis 哨兵

Set<String> sentinels = new HashSet<String>(Arrays.asList(
    "127.0.0.1:18000",
    "127.0.0.1:18001",
    "127.0.0.1:18002"
));
JedisSentinelPool pool = new JedisSentinelPool("mymaster",sentinels,jedisPoolConfig,"123456");

Redis Sentinel是Redis高可用的实现方案。Sentinel是一个管理多个Redis实例的工具,它可以实现对Redis的监控、通知、自动故障转移。

三、Cluster 集群模式

Redis3.0版本之前只支持单例模式,在3.0版本及以后才支持集群 redis集群采用P2P模式,是完全去中心化的,不存在中心节点或者代理节点。

在集群模式下,Cluster实现了分布式存储,数据被分片存储在多个节点上,每个节点负责一部分数据。这种模式下的数据同步是双向的,即可以在各个节点之间进行数据同步。此外,当某个节点出现故障时,其负责的数据可以被其他节点接管,以保证服务的持续可用。

图片

主要作用

1. 数据分区

  • 数据分区(或称数据分片)是集群最核心的功能(分布式);

  • 集群将数据分散到多个节点,一方面突破了 Redis 单机内存大小的限制,存储容量大大增加,另一方面每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力;

  • Redis 单机内存大小受限问题,例如,如果单机内存太大,bgsave 和 bgrewriteaof 的 fork 操作可能导致主进程阻塞,主从环境下主机切换时可能导致从节点长时间无法提供服务,全量复制阶段主节点的复制缓冲区可能溢出。

2. 高可用

  • 集群支持主从复制(模式)和主节点的自动故障转移(与哨兵类似),当任意节点发送故障时,集群仍然可以对外提供服务。

3. 数据分片

  • Redis 集群引入了哈希槽的概念,有 16384 个哈希槽(编号 0~16383);

  • 集群的每个节点负责一部分哈希槽,每个 Key 通过 CRC16 校验后对 16384 取余来决定放置哪个哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。

数据分片原理

redis 数据分片使用的是hash slot, redis集群有16384个哈希槽,每个Key通过CRC16校验后对16384取模来决定放置哪一个槽。

当存取redis key时候,redis会根据CRC16算法得到一个结果,然后把结果和16384求余,通过这个值去对应得节点获取数据。

这个时候,应用客户端实际上只需要连接其中任意一个节点即可,然后Redis Cluster 中每个节点都保存了其他节点得槽信息。这样当存取key计算完槽之后,通过保存槽信息从配置中获取节点信息,然后再去对应得节点获取数据。

综上所述,每个Redis集群理论上最多可以有16384个节点。

复制原理

redis-cluster集群引入了主从复制模型,一个主节点对应一个或者多个从节点,当主节点宕机的时候,就会启用从节点。当其它主节点 ping 一个主节点 A 时,如果半数以上的主节点与 A 通信超时,那么认为主节点 A 宕机了。如果主节点 A 和它的从节点 A1 都宕机了,那么该集群就无法再提供服务了。

一致性保存

Redis-Cluster 使用了异步复制:主节点对客户端请求回复状态后,异步发起写操作给从节点,会存在一个时间间隙。

Redis-Cluster 出现网络分区时,当一个客户端与至少包含一个主节点在内的少数节点被孤立,可能导致在节点超时时间(node timeout)内,另一个网络分区内的大部分节点重新选举被孤立主节点的从节点为新的主节点。节点超时时间选项为 cluster-node-timeout 15000(毫秒)。

群集部署

群集部署建议至少3台以上的master节点,建议使用3主3从六个节点的模式。

 Cluster 群集由多个redis服务器组成的分布式网络服务群集,群集中有多个master主节点,每个主节点都可读可写,节点之间会互相通信,两两相连,redis群集无中心节点。

1. 新建3主3从 Redis-cluster:6 个 Redis 启动目录,并新建 6 份 Redis 配置文件 redis.conf。并启动 6 个 Redis。

port 8000
cluster-enabled yes
cluster-config-file nodes.conf  #集群配置名
cluster-node-timeout 15000
appendonly yes  #快照压缩功能开启

2. 配置 Ruby 运行环境:安装 Ruby 及 Ruby-Redis 管理工具(redis 的版本和 ruby 包的版本最好保持一致)

yum install ruby rubygems -y
gem install redis-5.0.4.gem

3. 配置 Redis-Cluster:
使用 redis-trib.rb 的 create 命令创建 Redis-Cluster;

./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 
 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 

根据命令提示输入选项后(输入“yes”),会创建一个新的集群。

选项 replicas 1:表示集群中的每个主节点对应一个从节点,后三个地址为从节点。

图片

四、结语

以上三种模式各有优缺点,可以根据实际情况选择适合的模式来使用Redis。例如,如果对高可用性有较高要求,可以选择哨兵模式或集群模式;如果对性能有较高要求,可以选择主从复制模式。

图片

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

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

相关文章

Excel表格的快速动态扩展与删除行

实例需求&#xff1a;工作表中的表格&#xff08;ListObject&#xff09;名称为Table1&#xff0c;表格列数不确定&#xff0c;需要实现如下功能&#xff1a; 当用户完成最后一行最后一列输入之后&#xff08;如果该单元格为空&#xff0c;则视为输入未完成&#xff09;&#…

Golang个人web框架开发-学习流程

Golang-个人web框架 github仓库创建github仓库 web框架学习开发周期第一阶段--了解第一阶段思考小结 第二阶段第三阶段 github仓库 github地址&#xff1a;ameamezhou/golang-web-frame 后续还将继续学习更新 创建github仓库 设置免密登录 ssh-keygen 一路回车就OK 上面有告…

x-www-form-urlencoded接收方式代码示例

数据回推方式是 “x-www-form-urlencoded”&#xff0c;可以选择使用 GET 或 POST 方法来接收数据回推。 使用 GET 方法接收数据回推时&#xff0c;您可以将数据作为查询参数附加在请求的 URL 中。例如&#xff1a; http://example.com/callback?param1value1&param2val…

Vue3使用

1、列表实现 <el-table :data"tableData" border style"width: 100%" selection-change"handleSelectionChange" :header-cell-style"{text-align:center}"><el-table-column type"selection" width"55"…

JAVA——数据类型与运算符

数据类型 注意事项&#xff1a;1.初始化操作是可选的, 但是建议创建变量的时候都显式初始化. 2.最后不要忘记分号, 否则会编译失败. 3.初始化设定的值为 10L , 表示一个长整型的数字. 10l 也可以. 4.float 类型在 Java 中占四个字节, 遵守 IEEE 754 标准. 由于表示的数据精度范…

广东金牌电缆:法大大电子合同助力业务风险管控

广东金牌电缆集团股份有限公司&#xff08;以下简称“广东金牌电缆”&#xff09;成立于2013年&#xff0c;现为广东省电线电缆重点生产企业、广东省守合同重信用单位、国家专精特新小巨人企业、国家高新技术企业&#xff0c;拥有自主商标“夺冠”&#xff0c;“夺冠”商标被评…

P4学习(五)实验二:Basic Tunneling

目录 一. 实验目的二. 实验过程1. Topo2. Parse3.Ingress 三. 实验结果1. 测试dst_addr 10.0.2.2的正常包2.测试走隧道的正常包3.发给h3但是带上隧道标签的包4.测试总结 四. 拓展1.table-entries里的匹配规则2.myTunnel_header.py 一. 实验目的 In this exercise, we will add…

“一键中日文件夹名转换 - 批量修改,轻松实现中文到日语的名称翻译“

在处理大量文件夹时&#xff0c;你是否曾为中日文件夹名称的转换而感到困扰&#xff1f;现在&#xff0c;有了我们的批量修改工具&#xff0c;这些烦恼全部消失&#xff01;只需简单几步&#xff0c;就能将中文名的文件夹名称翻译成日语&#xff0c;让你的文件管理更加高效。 …

最新企业数据实时同步软件推荐

实时同步软件能够帮助企业快速、准确地共享和更新数据&#xff0c;提高工作效率和决策质量。本文将介绍企业数据实时同步的概念、意义和应用场景&#xff0c;并推荐几款非常优秀的企业数据实时同步软件。 一、数据实时同步的意义 企业数据实时同步是指在企业内部或跨部门之间&…

13 STM32-随机数发生器 (RNG)

13.1 随机数发生器 (RNG)简介 RNG 处理器是一个以连续模拟噪声为基础的随机数发生器&#xff0c;在主机读数时提供一个 32 位的随机数. RNG 提供由模拟量发生器产生的 32 位随机数,两个连续随机数的间隔为 40 个 PLL48CLK 时钟信号周期 13.2 RNG框图 随机数发生器采用模拟电路…

多目标优化(Python):多目标粒子群优化算法(MOPSO)求解ZDT1、ZDT2、ZDT3、ZDT4、ZDT6(提供Python代码)

一、多目标粒子群优化算法 多目标粒子群优化算法&#xff08;MOPSO&#xff09;是一种用于解决多目标优化问题的进化算法。它基于粒子群优化算法&#xff08;PSO&#xff09;&#xff0c;通过引入多个目标函数和非支配排序来处理多目标问题。 MOPSO的基本思想是将问题转化为在…

React配置src根目录@

文章目录 1.打开webpack配置文件2.配置webpack 1.打开webpack配置文件 yarn eject or npm run eject 如果报错了记得提前 git commit一下 2.配置webpack 找到 webpack.config.js 文件在 webpack.config.js 文件中找到 alias 配置在alias里添加: path.resolve(src) , 或者 : pa…

文本按照标点符号切分符号丢掉问题

问题&#xff1a;文本按照标点符号切分符号丢掉问题 项目场景&#xff1a;需要对一个文字段落按照标点符号切分成一个个句子&#xff0c;使用正则切分的过程中发现标点符号丢了&#xff0c; 问题描述 文本按照标点符号切分符号丢掉问题 原始代码&#xff1a; public static v…

在分类任务中准确率(accuracy)、精确率(precision)、召回率(recall)和 F1 分数是常用的性能指标,如何在python中使用呢?

在机器学习和数据科学中&#xff0c;准确率&#xff08;accuracy&#xff09;、精确率&#xff08;precision&#xff09;、召回率&#xff08;recall&#xff09;和 F1 分数是常用的性能指标&#xff0c;用于评估分类模型的性能。 1. 准确率&#xff08;Accuracy&#xff09;…

ChatGPT Plus续费充值,到账延迟,如何申诉?

ChatGPT Plus充值总是到账延迟比较严重&#xff0c;一般多是通过充值链接代充值遇到&#xff0c;如果是账号登陆充值&#xff0c;是即时到账。但是有的客户不愿意提供账号密码&#xff0c;遇到延迟到账的情况如何解决呢&#xff1f;客户可按下面操作申诉&#xff0c;可快速到账…

大创项目推荐 深度学习花卉识别 - python 机器视觉 opencv

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &a…

Ansys Zemax | 如何使用光学制造全息图修正像差

附件下载 联系工作人员获取附件 本文介绍了利用光学全息图降低单透镜像差的方法。在描述了表示全息图构造光束的两个 ZMX 文件之后&#xff0c;本文演示了如何在重现文件中设置 OFH。然后解释了如何轻松地从重现文件中访问任何结构造光束变量&#xff0c;以实现衍射受限单透镜…

Git一台电脑 配置多个账号

Git一台电脑 配置多个账号 Git一台电脑 配置多个账号 常用的Git版本管理有 gitee github gitlab codeup &#xff0c;每个都有独立账号&#xff0c;经常需要在一个电脑上向多个代码仓提交后者更新代码&#xff0c;本文以ssh 方式为例配置 1 对应账号 公私钥生成 建议&#…

canvas绘制图形

目录 1、canvas绘制矩形 2、canvas绘制线 3、canvas绘制圆 4、canvas绘制多圈动画圆 HTML5<canvas>元素用于图形的绘制&#xff0c;Canvas API主要聚焦于2D图形。 1、canvas绘制矩形 canvas是一个二维网格&#xff0c;左上角坐标为(0,0)&#xff0c;横轴为x轴&…

【Git】实习使用记录

浏览器可以访问github仓库&#xff0c;但是使用git就用不了 https://blog.csdn.net/m0_63230155/article/details/132070860 可能是git http和https代理的问题 git config --global --unset http.proxy git config --global --unset https.proxy可能之前http和https之前是…