Redis 单机哨兵模式部署文档
本文档用于在一台 Linux 服务器上部署 Redis 主从复制 + Redis Sentinel:
- Redis Master:
6379 - Redis Replica:
6380、6381 - Redis Sentinel:
26379、26380、26381 - Sentinel Master Name:
mymaster - Sentinel Quorum:
2
重要说明:单机哨兵模式只适合开发、测试、演练或资源受限场景。因为 Master、Replica 和 3 个 Sentinel 都在同一台服务器上,服务器宕机时整套 Redis 仍会不可用。生产环境应至少使用 3 个互相独立的节点部署 Sentinel,并把 Redis 主从放在不同故障域。
1. 架构说明
1.1 单机部署拓扑
┌─────────────────────────────────────────────┐
│ Linux Server │
│ │
│ Redis Master 127.0.0.1:6379 │
│ ├── replication ──> Redis Replica 1 │
│ │ 127.0.0.1:6380 │
│ └── replication ──> Redis Replica 2 │
│ 127.0.0.1:6381 │
│ │
│ Sentinel 1 127.0.0.1:26379 │
│ Sentinel 2 127.0.0.1:26380 │
│ Sentinel 3 127.0.0.1:26381 │
└─────────────────────────────────────────────┘
1.2 工作机制
Redis Replica 通过 replicaof 复制 Master 数据。Sentinel 负责监控 Master 和 Replica,当 Sentinel 达成故障判断并完成投票后,会把 Replica 提升为新的 Master,并重新配置旧 Master 或其他 Replica。
应用不要固定连接 6379,而应通过支持 Sentinel 的 Redis 客户端连接 Sentinel 地址列表,并使用 mymaster 发现当前 Master。
2. 环境准备
2.1 示例环境
| 项目 | 示例值 |
|---|---|
| 操作系统 | Ubuntu 22.04 / Debian 12 / Rocky Linux 9 |
| Redis 版本 | Redis 7.x 或 8.x |
| Redis 用户 | redis |
| 配置目录 | /etc/redis |
| 数据目录 | /var/lib/redis |
| 日志目录 | /var/log/redis |
2.2 端口规划
| 进程 | 端口 | 用途 |
|---|---|---|
| Redis Master | 6379 |
写入和读取,初始主节点 |
| Redis Replica 1 | 6380 |
复制节点,故障时可提升为主节点 |
| Redis Replica 2 | 6381 |
复制节点,故障时可提升为主节点 |
| Sentinel 1 | 26379 |
Sentinel 监控和服务发现 |
| Sentinel 2 | 26380 |
Sentinel 监控和服务发现 |
| Sentinel 3 | 26381 |
Sentinel 监控和服务发现 |
如果应用和 Redis 在同一台机器,可以使用 127.0.0.1。如果应用在其他机器,不要在 Sentinel 配置里使用 127.0.0.1,应改为 Redis 服务器的内网 IP,否则客户端从 Sentinel 获取到的 Master 地址也会是 127.0.0.1。
3. 安装 Redis
3.1 Ubuntu / Debian
sudo apt-get update
sudo apt-get install -y lsb-release curl gpg
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
sudo chmod 644 /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" \
| sudo tee /etc/apt/sources.list.d/redis.list
sudo apt-get update
sudo apt-get install -y redis
3.2 Rocky Linux / RHEL / CentOS
sudo yum install -y redis
3.3 检查版本并关闭默认服务
不同发行版默认服务名可能是 redis-server 或 redis。本文使用自定义多实例 systemd 服务,因此先停掉默认服务,避免端口冲突。
redis-server --version
redis-cli --version
sudo systemctl disable --now redis-server 2>/dev/null || true
sudo systemctl disable --now redis 2>/dev/null || true
4. 创建目录和权限
sudo useradd -r -s /sbin/nologin redis 2>/dev/null || true
sudo mkdir -p /etc/redis
sudo mkdir -p /var/lib/redis/6379 /var/lib/redis/6380 /var/lib/redis/6381
sudo mkdir -p /var/log/redis
sudo chown -R redis:redis /var/lib/redis /var/log/redis
sudo chmod 750 /var/lib/redis /var/log/redis
5. 配置 Redis Master
创建 /etc/redis/redis-6379.conf:
port 6379
bind 127.0.0.1
protected-mode yes
tcp-keepalive 300
daemonize no
pidfile /run/redis/redis-6379.pid
logfile /var/log/redis/redis-6379.log
loglevel notice
dir /var/lib/redis/6379
dbfilename dump-6379.rdb
appendonly yes
appendfilename "appendonly-6379.aof"
appendfsync everysec
requirepass <REDIS_PASSWORD>
masterauth <REDIS_PASSWORD>
replica-priority 100
replica-announce-ip 127.0.0.1
replica-announce-port 6379
说明:
<REDIS_PASSWORD>替换为 Redis 数据节点访问密码。masterauth在当前节点是 Master 时不会使用,但当它故障恢复后被 Sentinel 改为 Replica 时会用到,所以主从节点都建议配置。- 如果应用在其他机器,将
bind 127.0.0.1和replica-announce-ip 127.0.0.1改成服务器内网 IP,例如10.0.0.10。
6. 配置 Redis Replica
6.1 配置 Redis Replica 1
创建 /etc/redis/redis-6380.conf:
port 6380
bind 127.0.0.1
protected-mode yes
tcp-keepalive 300
daemonize no
pidfile /run/redis/redis-6380.pid
logfile /var/log/redis/redis-6380.log
loglevel notice
dir /var/lib/redis/6380
dbfilename dump-6380.rdb
appendonly yes
appendfilename "appendonly-6380.aof"
appendfsync everysec
requirepass <REDIS_PASSWORD>
masterauth <REDIS_PASSWORD>
replica-priority 100
replicaof 127.0.0.1 6379
replica-read-only yes
replica-announce-ip 127.0.0.1
replica-announce-port 6380
6.2 配置 Redis Replica 2
创建 /etc/redis/redis-6381.conf:
port 6381
bind 127.0.0.1
protected-mode yes
tcp-keepalive 300
daemonize no
pidfile /run/redis/redis-6381.pid
logfile /var/log/redis/redis-6381.log
loglevel notice
dir /var/lib/redis/6381
dbfilename dump-6381.rdb
appendonly yes
appendfilename "appendonly-6381.aof"
appendfsync everysec
requirepass <REDIS_PASSWORD>
masterauth <REDIS_PASSWORD>
replica-priority 100
replicaof 127.0.0.1 6379
replica-read-only yes
replica-announce-ip 127.0.0.1
replica-announce-port 6381
如果使用内网 IP,replicaof 和 replica-announce-ip 也要同步调整。
replica-read-only yes 是 Redis Replica 的默认行为,显式写入配置文件可以避免误写从节点,也方便后续配置审计。除非有非常明确的历史兼容需求,不建议设置为 no。
补充说明:
appendfsync everysec是 AOF 的常用策略,性能和可靠性比较均衡;极端故障下可能丢失约 1 秒写入。always更安全但性能代价明显,no依赖操作系统刷盘,不建议用于需要数据安全的场景。replica-priority 100用于 Sentinel 选择可提升的 Replica。值为0表示该节点永远不参与提升;多个 Replica 优先级相同时,Sentinel 还会结合复制偏移量等信息选择候选节点。tcp-keepalive 300用于让系统定期探测空闲 TCP 连接,帮助更快清理异常断开的连接。loglevel notice适合普通部署。排障时可临时调为verbose,长期不建议使用过高日志级别。
设置配置文件权限:
sudo chown redis:redis /etc/redis/redis-6379.conf /etc/redis/redis-6380.conf /etc/redis/redis-6381.conf
sudo chmod 640 /etc/redis/redis-6379.conf /etc/redis/redis-6380.conf /etc/redis/redis-6381.conf
7. 配置 Sentinel
Sentinel 需要 3 个配置文件。Sentinel 会自动重写自己的配置文件来保存当前状态,所以这些配置文件必须对 redis 用户可写。
7.1 Sentinel 26379
创建 /etc/redis/sentinel-26379.conf:
port 26379
bind 127.0.0.1
protected-mode yes
daemonize no
pidfile /run/redis/sentinel-26379.pid
logfile /var/log/redis/sentinel-26379.log
loglevel notice
dir /tmp
requirepass <SENTINEL_PASSWORD>
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel auth-pass mymaster <REDIS_PASSWORD>
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
7.2 Sentinel 26380
复制 /etc/redis/sentinel-26379.conf 为 /etc/redis/sentinel-26380.conf,并修改端口、pid、日志:
port 26380
bind 127.0.0.1
protected-mode yes
daemonize no
pidfile /run/redis/sentinel-26380.pid
logfile /var/log/redis/sentinel-26380.log
loglevel notice
dir /tmp
requirepass <SENTINEL_PASSWORD>
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel auth-pass mymaster <REDIS_PASSWORD>
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
7.3 Sentinel 26381
复制 /etc/redis/sentinel-26379.conf 为 /etc/redis/sentinel-26381.conf,并修改端口、pid、日志:
port 26381
bind 127.0.0.1
protected-mode yes
daemonize no
pidfile /run/redis/sentinel-26381.pid
logfile /var/log/redis/sentinel-26381.log
loglevel notice
dir /tmp
requirepass <SENTINEL_PASSWORD>
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel auth-pass mymaster <REDIS_PASSWORD>
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
设置权限:
sudo chown redis:redis /etc/redis/sentinel-26379.conf /etc/redis/sentinel-26380.conf /etc/redis/sentinel-26381.conf
sudo chmod 640 /etc/redis/sentinel-26379.conf /etc/redis/sentinel-26380.conf /etc/redis/sentinel-26381.conf
参数说明:
| 参数 | 说明 |
|---|---|
sentinel monitor mymaster 127.0.0.1 6379 2 |
监控名为 mymaster 的 Master,Quorum 为 2 |
sentinel auth-pass |
Sentinel 连接 Redis Master / Replica 使用的密码 |
down-after-milliseconds |
Sentinel 多久收不到有效响应后主观判定节点下线 |
failover-timeout |
故障转移流程超时时间 |
parallel-syncs |
故障转移后同时向新 Master 同步的 Replica 数量 |
loglevel notice |
Sentinel 常规日志级别,便于观察故障转移事件 |
8. 创建 systemd 服务
8.1 Redis 多实例服务
创建 /etc/systemd/system/redis-node@.service:
[Unit]
Description=Redis Server Instance %i
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=redis
Group=redis
ExecStart=/usr/bin/redis-server /etc/redis/%i.conf --daemonize no
RuntimeDirectory=redis
Restart=always
RestartSec=3
LimitNOFILE=65535
PrivateTmp=true
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
8.2 Sentinel 多实例服务
创建 /etc/systemd/system/redis-sentinel@.service:
[Unit]
Description=Redis Sentinel Instance %i
After=network-online.target redis-node@redis-6379.service redis-node@redis-6380.service redis-node@redis-6381.service
Wants=network-online.target
[Service]
Type=simple
User=redis
Group=redis
ExecStart=/usr/bin/redis-server /etc/redis/sentinel-%i.conf --sentinel --daemonize no
RuntimeDirectory=redis
Restart=always
RestartSec=3
LimitNOFILE=65535
PrivateTmp=true
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
重新加载 systemd:
sudo systemctl daemon-reload
9. 启动服务
先启动 Redis Master 和 Replica:
sudo systemctl enable --now redis-node@redis-6379
sudo systemctl enable --now redis-node@redis-6380
sudo systemctl enable --now redis-node@redis-6381
再启动 3 个 Sentinel:
sudo systemctl enable --now redis-sentinel@26379
sudo systemctl enable --now redis-sentinel@26380
sudo systemctl enable --now redis-sentinel@26381
查看状态:
sudo systemctl status redis-node@redis-6379
sudo systemctl status redis-node@redis-6380
sudo systemctl status redis-node@redis-6381
sudo systemctl status redis-sentinel@26379
sudo systemctl status redis-sentinel@26380
sudo systemctl status redis-sentinel@26381
10. 部署验证
10.1 验证 Redis 主从
redis-cli -p 6379 -a <REDIS_PASSWORD> PING
redis-cli -p 6380 -a <REDIS_PASSWORD> PING
redis-cli -p 6381 -a <REDIS_PASSWORD> PING
预期返回:
PONG
查看复制状态:
redis-cli -p 6379 -a <REDIS_PASSWORD> INFO replication
redis-cli -p 6380 -a <REDIS_PASSWORD> INFO replication
redis-cli -p 6381 -a <REDIS_PASSWORD> INFO replication
Master 侧应看到:
role:master
connected_slaves:2
两个 Replica 侧都应看到:
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
slave_read_only:1
写入测试:
redis-cli -p 6379 -a <REDIS_PASSWORD> SET sentinel:test ok
redis-cli -p 6380 -a <REDIS_PASSWORD> GET sentinel:test
redis-cli -p 6381 -a <REDIS_PASSWORD> GET sentinel:test
预期返回:
ok
10.2 验证 Sentinel
查询当前 Master:
redis-cli -p 26379 -a <SENTINEL_PASSWORD> SENTINEL get-master-addr-by-name mymaster
预期返回:
1) "127.0.0.1"
2) "6379"
查看 Sentinel 是否发现两个 Replica:
redis-cli -p 26379 -a <SENTINEL_PASSWORD> SENTINEL replicas mymaster
查看 Sentinel 是否发现另外两个 Sentinel:
redis-cli -p 26379 -a <SENTINEL_PASSWORD> SENTINEL sentinels mymaster
检查 Quorum 和多数派是否满足:
redis-cli -p 26379 -a <SENTINEL_PASSWORD> SENTINEL ckquorum mymaster
预期返回类似:
OK 3 usable Sentinels. Quorum and failover authorization can be reached
11. 故障转移演练
11.1 停止当前 Master
sudo systemctl stop redis-node@redis-6379
观察 Sentinel 日志:
sudo tail -f /var/log/redis/sentinel-26379.log
正常情况下会看到 +sdown、+odown、+try-failover、+switch-master 等事件。
11.2 查看新的 Master
等待数秒后执行:
redis-cli -p 26379 -a <SENTINEL_PASSWORD> SENTINEL get-master-addr-by-name mymaster
预期新 Master 变为其中一个 Replica,例如:
1) "127.0.0.1"
2) "6380"
也可能返回 6381。以 Sentinel 返回的端口为准,检查新 Master 角色:
redis-cli -p 6380 -a <REDIS_PASSWORD> INFO replication
预期:
role:master
11.3 恢复旧 Master
重新启动 6379:
sudo systemctl start redis-node@redis-6379
等待 Sentinel 自动重配置后,检查 6379:
redis-cli -p 6379 -a <REDIS_PASSWORD> INFO replication
预期 6379 会变成新 Master 的 Replica。下面以新 Master 是 6380 为例:
role:slave
master_host:127.0.0.1
master_port:6380
master_link_status:up
11.4 可选:切回原始端口
如果需要让 6379 再次成为 Master,确认当前复制状态正常后,可以执行一次手动 failover:
redis-cli -p 26379 -a <SENTINEL_PASSWORD> SENTINEL failover mymaster
等待完成后再次确认:
redis-cli -p 26379 -a <SENTINEL_PASSWORD> SENTINEL get-master-addr-by-name mymaster
redis-cli -p 6379 -a <REDIS_PASSWORD> INFO replication
redis-cli -p 6380 -a <REDIS_PASSWORD> INFO replication
redis-cli -p 6381 -a <REDIS_PASSWORD> INFO replication
不要频繁切换主从。每次切换后都应确认复制链路恢复正常。
12. 应用接入方式
应用侧应使用支持 Sentinel 的 Redis 客户端,配置内容通常包括:
masterName = mymaster
sentinelNodes = 127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381
redisPassword = <REDIS_PASSWORD>
sentinelPassword = <SENTINEL_PASSWORD>
接入要求:
- 不要把应用固定写死到
127.0.0.1:6379。 - 应用必须支持 Sentinel 服务发现。
- 如果应用不在 Redis 同机部署,Sentinel 返回的 Master 地址必须是应用可访问的内网 IP。
- 如果 Sentinel 配了
requirepass,客户端也必须支持 Sentinel 认证。
13. 日常运维命令
查看服务:
systemctl status redis-node@redis-6379
systemctl status redis-node@redis-6380
systemctl status redis-node@redis-6381
systemctl status redis-sentinel@26379
查看日志:
journalctl -u redis-node@redis-6379 -f
journalctl -u redis-sentinel@26379 -f
tail -f /var/log/redis/redis-6379.log
tail -f /var/log/redis/sentinel-26379.log
查看当前 Master:
redis-cli -p 26379 -a <SENTINEL_PASSWORD> SENTINEL get-master-addr-by-name mymaster
查看主从复制:
redis-cli -p 6379 -a <REDIS_PASSWORD> INFO replication
redis-cli -p 6380 -a <REDIS_PASSWORD> INFO replication
redis-cli -p 6381 -a <REDIS_PASSWORD> INFO replication
检查 Sentinel 健康:
redis-cli -p 26379 -a <SENTINEL_PASSWORD> SENTINEL ckquorum mymaster
redis-cli -p 26379 -a <SENTINEL_PASSWORD> SENTINEL master mymaster
redis-cli -p 26379 -a <SENTINEL_PASSWORD> SENTINEL replicas mymaster
redis-cli -p 26379 -a <SENTINEL_PASSWORD> SENTINEL sentinels mymaster
14. 安全建议
14.1 绑定地址和防火墙
如果只允许本机应用访问,保持:
bind 127.0.0.1
protected-mode yes
如果允许内网访问,示例:
bind 127.0.0.1 10.0.0.10
protected-mode yes
同时只放通可信来源:
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" port port="6379" protocol="tcp" accept' --permanent
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" port port="6380" protocol="tcp" accept' --permanent
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" port port="6381" protocol="tcp" accept' --permanent
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" port port="26379-26381" protocol="tcp" accept' --permanent
sudo firewall-cmd --reload
不要把 Redis 或 Sentinel 端口暴露到公网。
14.2 密码和 ACL
本文用 requirepass 演示,配置简单。生产环境建议使用 Redis ACL,为应用、运维、Sentinel 分配不同账号和最小权限。
14.3 配置文件保护
配置文件包含密码,必须限制权限:
sudo chown redis:redis /etc/redis/*.conf
sudo chmod 640 /etc/redis/*.conf
Sentinel 会重写自己的配置文件,不要用配置管理工具无脑覆盖 Sentinel 配置,否则可能丢失 Sentinel 发现到的状态信息。
15. 可选增强参数
下面这些参数不是单机哨兵模式启动所必需,但在准生产或生产环境中建议评估后启用。
15.1 内存上限和淘汰策略
如果 Redis 用作缓存,应明确配置内存上限和淘汰策略,避免 Redis 占满服务器内存:
maxmemory 4gb
maxmemory-policy allkeys-lru
如果 Redis 用作不能丢数据的存储,不要随意启用淘汰策略,应优先扩容、拆分实例或限制写入。
15.2 主节点写入保护
Redis 复制是异步复制。为了减少 Master 和 Replica 断联时继续写入带来的数据丢失窗口,可以在 Master 配置中评估启用:
min-replicas-to-write 1
min-replicas-max-lag 10
含义是至少有 1 个延迟不超过 10 秒的 Replica 时,Master 才接受写入。该配置会提高数据安全性,但在 Replica 异常、网络抖动或单机资源紧张时可能导致 Master 拒写。开发测试环境通常不建议默认开启。
15.3 慢查询和延迟监控
建议保留慢查询记录,便于定位大 Key、慢命令和异常访问:
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 100
slowlog-log-slower-than 10000 表示记录执行时间超过 10 毫秒的命令。阈值应按业务延迟要求调整。
15.4 RDB 快照策略
本文默认开启 AOF。是否额外开启 RDB 快照,取决于恢复策略和磁盘空间。常见配置示例:
save 900 1
save 300 10
save 60 10000
同时使用 AOF 和 RDB 可以让恢复方式更灵活,但会增加磁盘 I/O。写入压力大的实例应结合压测评估。
16. 常见问题
16.1 Sentinel 启动失败
检查配置文件是否存在且可写:
ls -l /etc/redis/sentinel-26379.conf
sudo -u redis test -w /etc/redis/sentinel-26379.conf && echo writable
Sentinel 必须使用配置文件启动,并且该文件必须可写。
16.2 Replica 一直无法同步
检查:
replicaof地址和端口是否正确。- Master 和 Replica 的
<REDIS_PASSWORD>是否一致。 - Replica 是否配置了
masterauth <REDIS_PASSWORD>。 - Master 日志和 Replica 日志是否有认证失败或连接失败。
- 两个 Replica 的数据目录是否独立,例如
/var/lib/redis/6380和/var/lib/redis/6381。
16.3 SENTINEL ckquorum 不通过
常见原因:
- 3 个 Sentinel 没有全部启动。
- Sentinel 之间密码不一致。
- Sentinel 配置文件里的
bind或端口不正确。 - Sentinel 配置文件不可写,导致状态无法持久化。
16.4 应用通过 Sentinel 拿到 127.0.0.1
这是因为 sentinel monitor 或 Redis replica-announce-ip 使用了 127.0.0.1。如果应用在其他机器,需要改为 Redis 服务器的内网 IP,并重启或重新配置 Sentinel。
16.5 Master 停止后没有故障转移
检查:
- 是否有至少 3 个可用 Sentinel。
SENTINEL ckquorum mymaster是否返回 OK。- 至少一个 Replica 是否在线且复制状态正常。
- 两个 Replica 是否都配置了
replica-priority 0,如果是,则不会有节点被提升为 Master。 - Sentinel 日志中是否出现
no-good-slave、认证失败或网络连接失败。
17. 生产环境调整建议
单机哨兵模式迁移到生产时,至少调整为:
Server A: Redis Master + Sentinel 1
Server B: Redis Replica + Sentinel 2
Server C: Redis Replica + Sentinel 3
生产检查项:
- 至少 3 个 Sentinel,部署在独立主机或独立可用区。
- Redis 主从不要放在同一台服务器。
- 应用客户端必须支持 Sentinel。
- 定期演练故障转移。
- 监控
SENTINEL ckquorum、INFO replication、内存、连接数、慢查询、AOF/RDB 持久化状态。 - 使用内网访问控制、ACL、TLS 或专用网络隔离。
- 设计备份和恢复流程,不要把 Sentinel 当成备份方案。
18. 参考资料
- Redis 官方文档:High availability with Redis Sentinel
https://redis.io/docs/latest/operate/oss_and_stack/management/sentinel/ - Redis 官方文档:Install Redis on Linux
https://redis.io/docs/latest/operate/oss_and_stack/install/archive/install-redis/install-redis-on-linux/ - Redis 官方文档:Redis replication
https://redis.io/docs/latest/operate/oss_and_stack/management/replication/ - Redis 官方文档:Redis security
https://redis.io/docs/latest/operate/oss_and_stack/management/security/ - Redis 官方文档:Sentinel client spec
https://redis.io/docs/latest/develop/reference/sentinel-clients/
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)