最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis 集群模式優(yōu)化和備份策略

 更新時間:2025年11月25日 15:14:37   作者:文靜小土豆  
本文主要介紹了Linux系統(tǒng)和Redis集群模式的優(yōu)化和備份策略,在Linux系統(tǒng)優(yōu)化方面,重點(diǎn)介紹了內(nèi)存管理、文件句柄、網(wǎng)絡(luò)/TCP調(diào)優(yōu)、CPU調(diào)度和頻率、I/O子系統(tǒng)等參數(shù)的調(diào)整建議,感興趣的朋友跟隨小編一起看看吧

現(xiàn)有系統(tǒng)環(huán)境

  • 操作系統(tǒng):Rocky Linux release 9.5
  • 內(nèi)存:16G
  • CPU:8核心
  • SSD 存儲

系統(tǒng)參數(shù)調(diào)優(yōu)建議

內(nèi)存管理

  • vm.swappiness
    vm.swappiness 降低,以減少對 swap 的依賴。默認(rèn)值是較高(通常 60),可以調(diào)成 105,根據(jù)你的工作負(fù)載決定。較低值能使系統(tǒng)更傾向于使用內(nèi)存,而不是 swap。
 vm.swappiness=10

永久設(shè)置可以寫入 /etc/sysctl.d/99-sysctl.conf 或者 /etc/sysctl.conf

  • vm.dirty_ratiovm.dirty_background_ratio
    控制內(nèi)核將多少臟頁 (dirty pages) 寫回磁盤。對于 SSD,可以適當(dāng)調(diào)高,以減少頻繁的寫回,但也不能太高。
    例如:
vm.dirty_background_ratio = 5
vm.dirty_ratio = 20

這兩個值需要結(jié)合實(shí)際 I/O 壓力測試。

  • 關(guān)閉或限制 swap(視具體情況)

    • 如果應(yīng)用對內(nèi)存需求很大、且對 swap 延遲敏感,可以考慮關(guān)閉 swap(swapoff +從 fstab 移除 swap)。
    • 或者使用 zram(壓縮內(nèi)存)來代替 swap。

文件句柄 & 進(jìn)程數(shù)

  • fs.file-max
    提高系統(tǒng)能打開的最大文件描述符數(shù)
fs.file-max = 2000000

這個值要根據(jù)并發(fā)連接數(shù)和負(fù)載調(diào)整。

  • 用戶級別的 file descriptors
    修改 /etc/security/limits.d/ 下的配置(例如 99-nofile.conf),對于服務(wù)賬號 (如應(yīng)用進(jìn)程) 提高 nofile 限制。

網(wǎng)絡(luò) / TCP 調(diào)優(yōu)

  • net.core.somaxconn
    增加監(jiān)聽 socket 的 backlog 隊列長度。
net.core.somaxconn = 1024
  • net.ipv4.tcp_fin_timeout
    調(diào)低 TIME_WAIT 狀態(tài)持續(xù)時間(視場景慎用)
net.ipv4.tcp_fin_timeout = 30
  • net.ipv4.tcp_tw_reuse
    允許重用處于 TIME_WAIT 的 TCP socket
net.ipv4.tcp_tw_reuse = 1
  • 接收 / 發(fā)送緩沖區(qū)
    可以適當(dāng)調(diào)大 rmemwmem
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

CPU 調(diào)度與頻率

  • CPU 調(diào)頻策略 (governor)
    根據(jù)負(fù)載選擇合適的調(diào)頻策略 (governor),例如 performance(高性能) 或 schedutil / ondemand。如果負(fù)載是較為穩(wěn)定且追求響應(yīng)性,可以設(shè)置為 performance。
# 安裝 cpupower(如果還沒裝)
dnf install kernel-tools
# 設(shè)置 governor
cpupower frequency-set --governor performance
  • CPU 親和性 (Affinity)
    • 對關(guān)鍵服務(wù) (應(yīng)用進(jìn)程 /關(guān)鍵線程) 設(shè)置 CPU 親和性 (affinity),使它們跑在專門的核心上,減少調(diào)度開銷。
  • 調(diào)度器調(diào)優(yōu) (Scheduler)
    • 默認(rèn) Linux 調(diào)度器 (CFS)對大多數(shù)場景不錯。如果有特殊實(shí)時或延遲敏感任務(wù),可以深入調(diào)度器參數(shù) (但風(fēng)險較高)

I/O 子系統(tǒng) (SSD) 優(yōu)化

  • I/O 調(diào)度器 (Scheduler)
    對于 SSD (尤其是 NVMe),推薦使用 noopmq-deadline 等輕量調(diào)度器或者直接使用 none(如果硬件和內(nèi)核版本支持)。其實(shí)在現(xiàn)代內(nèi)核中,NVMe 的默認(rèn)調(diào)度器就非常高效。
echo none > /sys/block/nvme0n1/queue/scheduler

(替換為實(shí)際使用的設(shè)備名)

  • 隊列深度 (nr_requests / queue_depth)
    • 可以調(diào)優(yōu)每個塊設(shè)備的 I/O 隊列深度 (取決于硬件)。
  • 刷盤 (flush) 策略
    • 根據(jù)你的 SSD 特性和寫負(fù)載,可以調(diào)整 dirty_* 參數(shù)(見上文)以控制內(nèi)核何時將緩存寫回磁盤。
  • 文件系統(tǒng)選擇與掛載選項
    • 如果使用 XFS / EXT4 /其他文件系統(tǒng),掛載時選擇適合 SSD 的 mount 參數(shù) (如 noatime, nodiratime)。
    • 可以考慮啟用 discard / fstrim (手動或定時),但 discard 對性能的影響依設(shè)備而異。

日志 & 服務(wù)調(diào)優(yōu)

  • 關(guān)閉或禁用不必要的 systemd 服務(wù)
    • systemd-analyze blame 查看啟動和運(yùn)行時開銷,禁用不必要的服務(wù)。
  • 日志輪詢 /日志級別
    • 如果日志非常頻繁 (例如大量 rsyslogjournal),考慮減少日志寫頻率或級別。長期高頻日志會對 SSD 寫入造成壓力。

整理參數(shù)

一定要先備份自己系統(tǒng)當(dāng)前的參數(shù)在修改,萬一有問題方便回退。

# /etc/sysctl.d/99-performance.conf
# === 內(nèi)存管理 ===
vm.swappiness = 10
vm.dirty_ratio = 20
vm.dirty_background_ratio = 5
# 可能還加 dirty_expire / writeback,根據(jù)具體測試調(diào)優(yōu)
# vm.dirty_expire_centisecs = 500
# vm.dirty_writeback_centisecs = 100
# 可選:如果你知道內(nèi)存不是特別緊張,可設(shè)置 overcommit
# vm.overcommit_memory = 1
# === 文件句柄限制 ===
fs.file-max = 2000000
# === 網(wǎng)絡(luò) / TCP 參數(shù) ===
net.core.somaxconn = 8192  # 監(jiān)聽 backlog
net.core.netdev_max_backlog = 50000
# 接收 / 發(fā)送緩沖
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096   87380   16777216
net.ipv4.tcp_wmem = 4096   65536   16777216
# TIME_WAIT 和連接重用
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
# Keepalive
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
# 網(wǎng)絡(luò)安全相關(guān)
kernel.sysrq = 0
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.accept_source_route  =0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.tcp_syncookies = 1
kernel.dmesg_restrict = 1
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
kernel.threads-max = 655350
# === 其他網(wǎng)絡(luò) /系統(tǒng)選項 ===
# 可以根據(jù)需要打開更多,但這里是基礎(chǔ)

應(yīng)用這個配置

sysctl --system

參數(shù)說明

  • 上面 sysctl 設(shè)置中,vm.swappiness=10 是為了讓系統(tǒng)盡量少用 swap。
  • Redis 的 maxmemory 設(shè)置 (12 GB) 是示例,根據(jù) Redis 實(shí)例所在機(jī)器上同時運(yùn)行的其他進(jìn)程 +操作系統(tǒng)需求來決定。如果 Redis 是主要服務(wù),可以設(shè)置得更高,但建議不要占用所有內(nèi)存。
  • allkeys-lru 淘汰策略是業(yè)界常用策略,適合緩存 +熱點(diǎn)數(shù)據(jù)混合類型場景。
  • lazyfree-lazy-eviction 等異步釋放設(shè)置,可以減少 Redis 主線程因內(nèi)存回收 (刪除大對象) 的阻塞。
  • AOF 重寫策略 (auto-aof-rewrite-percentagemin-size) 設(shè)置,能平衡磁盤寫入和文件大小。
  • hz 參數(shù) (心跳 /后臺任務(wù)頻率) 控制周期性后臺任務(wù) (如過期檢查) 的頻率。調(diào)高可以更快響應(yīng)但會增加 CPU 開銷。

注意事項

  • 過度調(diào)優(yōu)風(fēng)險:如果參數(shù)設(shè)置不當(dāng)(如非常低的 swappiness 或非常高的 dirty_ratio),可能導(dǎo)致系統(tǒng)內(nèi)存壓力過大或頻繁寫盤。
  • SSD 寫壽命:調(diào)高內(nèi)存中的 “臟頁” 寫回策略會增加寫量,需要權(quán)衡。
  • 系統(tǒng)穩(wěn)定性:部分調(diào)優(yōu) (如 CPU governor 改為 performance) 會增加功耗和溫度,需要監(jiān)控硬件狀態(tài)。
  • 版本兼容性:不同內(nèi)核版本 (RHEL / Rocky) 對某些內(nèi)核參數(shù)的默認(rèn)值或支持可能不一樣,調(diào)優(yōu)前要確認(rèn)。
  • 監(jiān)控覆蓋盲點(diǎn):調(diào)優(yōu)后必須有監(jiān)控和報警機(jī)制,以便及時發(fā)現(xiàn)調(diào)優(yōu)帶來的副作用。

Redis 應(yīng)用參數(shù)調(diào)優(yōu)建議

調(diào)優(yōu)方案

  • 集群模式:Redis Cluster
  • 節(jié)點(diǎn):6 節(jié)點(diǎn) —— 3 主 + 3 從
  • 每節(jié)點(diǎn)資源:16 GB 內(nèi)存,8 核 CPU
  • 業(yè)務(wù)特性:混合讀寫,讀略多于寫;有較大的緩存空間需求;容許偶爾 key 淘汰(cache 模式)
  • 持久化需求:需要 AOF + RDB 混合以兼顧數(shù)據(jù)持久性和恢復(fù)速度

具體配置建議

下面是建議寫入 redis.conf

配置建議值 / 設(shè)置說明與理由
maxmemory大約 48 GB(64 GB 節(jié)點(diǎn)的 ~75%)留出一部分給操作系統(tǒng) + fork 過程中的開銷。
maxmemory-policyallkeys-lru選擇 LRU 淘汰策略,以便在滿內(nèi)存時清除最少使用的 key。
maxmemory-samples5控制 LRU 近似采樣的樣本數(shù),默認(rèn)是 5,通常夠用。
lazyfree-lazy-evictionyes使用后臺異步釋放內(nèi)存(異步刪除),減少主線程停頓。
lazyfree-lazy-expireyes異步過期 key 的內(nèi)存釋放。
appendonlyyes啟用 AOF。保證持久性。
appendfsynceverysec每秒 fsync,一般來說在可靠性與性能之間是一個比較好的折中。
auto-aof-rewrite-percentage100當(dāng) AOF 大小增長到 100%(翻倍)時觸發(fā)重寫。這個值可根據(jù)實(shí)際 AOF 增長速度調(diào)整。
auto-aof-rewrite-min-size64mb最小 AOF 重寫大小限制(避免過小文件頻繁重寫)
aof-load-truncatedyes啟動時如果 AOF 被截斷,可以繼續(xù)加載(更健壯)。 ([codingnote.cc][3])
lua-time-limit5000(ms)限制 Lua 腳本最大執(zhí)行時間,防止長腳本阻塞。
集群相關(guān)
cluster-enabledyes開啟集群。
cluster-config-filenodes.conf(具體路徑根據(jù)部署)保存集群節(jié)點(diǎn)配置。
cluster-node-timeout15000(ms)節(jié)點(diǎn)互連超時閾值,較常用值。
cluster-replica-validity-factor10(默認(rèn)或視情況設(shè))決定從節(jié)點(diǎn)是否有資格做 failover(與 node-timeout 和 ping 周期有關(guān))。
cluster-migration-barrier1控制當(dāng)主節(jié)點(diǎn)只有一個從節(jié)點(diǎn)時,從節(jié)點(diǎn)是否可以遷移到其他主上。
cluster-require-full-coverageno即使某些 slot 沒覆蓋,也允許讀寫,提升容錯性。
網(wǎng)絡(luò) & 性能
timeout3000(秒或 ms,根據(jù)版本)客戶端連接超時設(shè)置(視具體版本配置)
tcp-keepalive60保持空閑連接,避免連接過早關(guān)閉。
慢日志slowlog-log-slower-than比如 10000(微秒或微秒級,視版本)記錄慢命令,有助于調(diào)優(yōu)。
slowlog-max-len128保存慢日志條數(shù)上限。
數(shù)據(jù)結(jié)構(gòu)內(nèi)存優(yōu)化
hash-max-ziplist-entries / hash-max-ziplist-value512 / 64(示例)對小 hash 使用 ziplist 編碼節(jié)省內(nèi)存。類似配置常見于實(shí)踐。 ([CNDBA][4])
list-max-ziplist-entries / list-max-ziplist-value512 / 64同上,對 list 優(yōu)化。
客戶端 & 連接
使用連接池建議客戶端使用連接池(如 JedisPool、Lettuce 等),避免頻繁建立連接。
使用 Pipeline(批量命令)減少往返開銷。
命令建模
避免 KEYS *使用 SCANKEYS 是阻塞命令,在大數(shù)據(jù)量下嚴(yán)重影響性能。
優(yōu)化 Lua 腳本簡短、快速防止腳本阻塞主線程,特別是在集群中。

Redis 配置整理

########################################
# Redis 性能 +集群 配置示例
# 這個配置文件只做參考 不能直接拿來用 Redis 是不允許再參數(shù)后買你添加注釋的直接使用會報錯
########################################
# 內(nèi)存管理
maxmemory 12gb           # 假設(shè)節(jié)點(diǎn)內(nèi)存 16G,為 Redis 留約 12G
maxmemory-policy allkeys-lru   # 使用 LRU 淘汰所有鍵(適合緩存 + 數(shù)據(jù)混合場景)
maxmemory-samples 5
# 延遲釋放
lazyfree-lazy-eviction yes
lazyfree-lazy-expire yes
lazyfree-lazy-server-del yes
# 持久化 (RDB + AOF)
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
# RDB 快照 (可根據(jù)需要)
save 900 1
save 300 10
save 60 10000
# 集群配置 (如果是 Redis Cluster)
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
cluster-replica-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage no
# 性能 /調(diào)度相關(guān)
hz 10
dynamic-hz yes
# Lua 腳本執(zhí)行限制
lua-time-limit 5000  # 毫秒
# 慢日志 (監(jiān)控慢命令)
slowlog-log-slower-than 10000   # 微秒 (10 ms) — 根據(jù)業(yè)務(wù)調(diào)整
slowlog-max-len 128
# 內(nèi)存碎片 / 編碼優(yōu)化
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
# 安全性 (可選,根據(jù)場景啟用)
# requirepass yourpassword
# rename-command FLUSHALL ""
# 其他 (可選,根據(jù)需求)
notify-keyspace-events ""

注意事項

  • fork 延遲風(fēng)險:RDB 快照或 AOF 重寫時會 fork,如果數(shù)據(jù)量很大,fork 可能占用大量內(nèi)存 + 導(dǎo)致延遲波動。
  • 內(nèi)存碎片:頻繁刪除 / 寫入大對象可能導(dǎo)致內(nèi)存碎片化。要監(jiān)控 used_memory_rss vs used_memory。
  • AOF 重寫失敗:如果磁盤 I/O 不夠快,重寫可能失敗或耗時過長。
  • 誤配置淘汰策略:如果設(shè)置不當(dāng)(例如 noeviction),可能寫入失敗(OOM),或策略太激進(jìn)導(dǎo)致重要數(shù)據(jù)被淘汰。
  • 客戶端不 cluster-aware:如果客戶端不是集群感知 (cluster-aware),可能頻繁 MOVED 重定向,影響性能。
  • 監(jiān)控盲點(diǎn):如果沒有全面監(jiān)控,可能看不出調(diào)優(yōu)的負(fù)面影響(如重寫延遲、failover 異常、內(nèi)存碎片)。

Redis 備份

優(yōu)先備份主節(jié)點(diǎn)

  • 只對主節(jié)點(diǎn) (master) 做快照 /持久化備份,因為副本 (replica) 節(jié)點(diǎn)上只是復(fù)制,備份主節(jié)點(diǎn)就可以恢復(fù)完整數(shù)據(jù)。

使用 RDB (快照) + AOF 組合

  • RDB 用于周期性冷備 (point-in-time snapshot)。
  • AOF 用于更高的數(shù)據(jù)持久性 (命令日志),減少數(shù)據(jù)丟失窗口。
  • 混合使用可以兼顧恢復(fù)速度 (RDB) 和數(shù)據(jù)完整性 (AOF)

定期觸發(fā) BGREWRITEAOF 與 BGSAVE

  • 對 AOF 做重寫 (rewrite),防止日志無限增長。
  • 對 RDB 做快照 (BGSAVE),用于冷備

備份文件長期保留與版本管理

  • 將 RDB/AOF 備份文件復(fù)制 /歸檔到異地存儲 (如 NAS、對象存儲)。
  • 為備份文件打時間戳 /版本,方便恢復(fù)時回滾。

校驗與恢復(fù)演練

  • 使用 redis-check-aof / redis-check-rdb 工具校驗備份文件健康性
  • 定期做恢復(fù)演練 (集群恢復(fù)、單節(jié)點(diǎn)恢復(fù)) 以驗證備份策略有效。

操作方法

獲取主節(jié)點(diǎn)列表

獲取所有主節(jié)點(diǎn)

/usr/local/redis/bin/redis-cli -h 192.168.1.11 -p 6379 -a ugwFsSNuzgS4e62e CLUSTER NODES|grep master | grep -v "fail" | awk '{print $2}' | cut -d@ -f1

這條命令會列出所有 master 節(jié)點(diǎn)的

備份所有主節(jié)點(diǎn) RDB和AOF

注意:此腳本需要現(xiàn)在測試環(huán)境中測試沒問題 再拿到生產(chǎn)環(huán)境中使用。

#!/bin/bash
REDIS_IP="192.168.1.11"         # 任意一個集群節(jié)點(diǎn)(用于獲取節(jié)點(diǎn)列表)
REDIS_PORT="6379"
REDIS_PWD="ugwFsSNuzgS4e62e"
BACKUP_DIR="/root/backup/"
TIMEOUT=300  
mkdir -p "$BACKUP_DIR" || { echo "ERROR: 無法創(chuàng)建備份目錄 $BACKUP_DIR"; exit 1; }
# 獲取所有 master 節(jié)點(diǎn)
nodes=$(redis-cli -c -h "$REDIS_IP" -p "$REDIS_PORT" -a "$REDIS_PWD" CLUSTER NODES | \
  grep master | grep -v fail | awk '{print $2}' | cut -d@ -f1)
for node in $nodes; do
  ip=$(echo "$node" | cut -d: -f1)
  port=$(echo "$node" | cut -d: -f2)
  echo "=== 開始備份:Redis 節(jié)點(diǎn) $ip:$port ==="
  # 觸發(fā) BGSAVE (RDB)
  redis-cli -h "$ip" -p "$port" -a "$REDIS_PWD" BGSAVE
  if [ $? -ne 0 ]; then
    echo "WARNING: BGSAVE 在 $ip:$port 執(zhí)行失敗"
  fi
  # 等待 BGSAVE 完成
  start_time=$(date +%s)
  while true; do
    inprog=$(redis-cli -h "$ip" -p "$port" -a "$REDIS_PWD" INFO persistence | \
      grep rdb_bgsave_in_progress | cut -d: -f2 | tr -d '\r')
    if [ "$inprog" = "0" ]; then
      echo "BGSAVE 完成:$ip:$port"
      break
    fi
    now=$(date +%s)
    elapsed=$(( now - start_time ))
    if [ $elapsed -gt $TIMEOUT ]; then
      echo "ERROR: BGSAVE 超時 ($elapsed 秒) 在 $ip:$port" >&2
      break
    fi
    echo "等待 BGSAVE 完成 ($elapsed 秒) ..."
    sleep 5
  done
  # 獲取 RDB 文件路徑
  DIR=$(redis-cli -h "$ip" -p "$port" -a "$REDIS_PWD" CONFIG GET dir | awk 'NR==2')
  DBFILE=$(redis-cli -h "$ip" -p "$port" -a "$REDIS_PWD" CONFIG GET dbfilename | awk 'NR==2')
  src_rdb="${DIR}/${DBFILE}"
  if [ ! -f "$src_rdb" ]; then
    echo "ERROR: 未找到 RDB 文件: $src_rdb" >&2
  else
    dst_rdb="${BACKUP_DIR}/${ip}_${port}_$(date +%Y%m%d_%H%M%S).rdb"
    cp "$src_rdb" "$dst_rdb" && echo "RDB 備份保存到 $dst_rdb"
  fi
  aof_enabled=$(redis-cli -h "$ip" -p "$port" -a "$REDIS_PWD" CONFIG GET appendonly | awk 'NR==2')
  if [ "$aof_enabled" = "yes" ]; then
    AOFDIR=$(redis-cli -h "$ip" -p "$port" -a "$REDIS_PWD" CONFIG GET appenddirname | awk 'NR==2')
    AOFNAME=$(redis-cli -h "$ip" -p "$port" -a "$REDIS_PWD" CONFIG GET appendfilename | awk 'NR==2')
    if [ -z "$AOFDIR" ]; then
      src_aof="${DIR}/${AOFNAME}"
      if [ -f "$src_aof" ]; then
        dst_aof="${BACKUP_DIR}/${ip}_${port}_$(date +%Y%m%d_%H%M%S).aof"
        cp "$src_aof" "$dst_aof" && echo "AOF 備份保存到 $dst_aof"
      else
        echo "ERROR: AOF 文件未找到: $src_aof" >&2
      fi
    else
      # Multi-Part AOF 模式 (Redis 7+)
      aof_dir_full="${DIR}/${AOFDIR}"
      if [ -d "$aof_dir_full" ]; then
        dst_mp_dir="${BACKUP_DIR}/${ip}_${port}_AOF_$(date +%Y%m%d_%H%M%S)"
        mkdir -p "$dst_mp_dir"
        cp "${aof_dir_full}"/* "$dst_mp_dir"/ && echo "MP-AOF 備份到 $dst_mp_dir"
      else
        echo "ERROR: AOF 目錄不存在: $aof_dir_full" >&2
      fi
    fi
  else
    echo "AOF 未啟用在 $ip:$port,跳過 AOF 備份"
  fi
done
echo "=== 所有節(jié)點(diǎn)備份完成 ==="

Redis 集群恢復(fù) (恢復(fù) / 回滾) 操作命令

單節(jié)點(diǎn)恢復(fù)

  1. 停止要恢復(fù)的節(jié)點(diǎn)
# 或者停止對應(yīng)的 Redis 服務(wù) / systemd 單元
redis-cli -h <ip> -p <port> SHUTDOWN
  1. 將備份文件 (RDB / AOF) 放回該節(jié)點(diǎn)的數(shù)據(jù)目錄
cp /backup/redis/cluster/<ip>_<port>_YYYYMMDD_HHMMSS.rdb /var/lib/redis/$port/dump.rdb
# 如果是 aof
cp /backup/redis/cluster/<ip>_<port>_YYYYMMDD_HHMMSS.aof /var/lib/redis/$port/appendonly.aof
  1. 設(shè)置正確權(quán)限
    確保文件所有者和權(quán)限與 Redis 進(jìn)程一致,比如:
chown redis:redis /var/lib/redis/$port/dump.rdb
chown redis:redis /var/lib/redis/$port/appendonly.aof
  • 啟動 Redis 節(jié)點(diǎn)
    • 啟動 Redis,查看日志確認(rèn)是否加載了 RDB / AOF。
  • 如果優(yōu)先加載 AOF:在 redis.conf 中 appendonly yes,那么 Redis 啟動時會優(yōu)先用 AOF 恢復(fù)
    • 如果你先還原 RDB,再開 AOF,可以臨時關(guān)閉 AOF,加載 RDB 后再打開

具體命令 (如果是 systemd):

systemctl start redis
  1. (可選)觸發(fā) BGREWRITEAOF
redis-cli -h <ip> -p <port> BGREWRITEAOF

集群級恢復(fù) /重新加入集群

恢復(fù)一個節(jié)點(diǎn)之后,如果這個節(jié)點(diǎn)之前屬于集群 (有 slot),你需要讓它重新加入 (如果它是孤立恢復(fù)):

  1. 與集群中的一個存活節(jié)點(diǎn)做 CLUSTER MEET
redis-cli -h <恢復(fù)節(jié)點(diǎn) IP> -p <恢復(fù)節(jié)點(diǎn) 端口> CLUSTER MEET <任意健康節(jié)點(diǎn) IP> <端口>
  1. 確認(rèn)節(jié)點(diǎn)狀態(tài)
    在恢復(fù)節(jié)點(diǎn)上運(yùn)行:
redis-cli -h <恢復(fù)節(jié)點(diǎn) IP> -p <恢復(fù)端口> CLUSTER NODES

看它是否成為了集群的一員 (節(jié)點(diǎn)狀態(tài)應(yīng)該是 slavemaster 等)。

  • 如果恢復(fù)的是主節(jié)點(diǎn),并且有 slot,需要重新分配 slot
    • 如果是原來的 master,要把 slot 分回去 (如果 slot 被遷移了)。
    • 使用 redis-cli --cluster reshard 進(jìn)行 slot 重分布 (reshard):將部分 slot 從其他節(jié)點(diǎn)遷移給該節(jié)點(diǎn)。
redis-cli --cluster reshard <一個集群節(jié)點(diǎn) IP:端口> --from <其他節(jié)點(diǎn)列表,用逗號分隔> --to <恢復(fù)節(jié)點(diǎn) id> --slots <slot 數(shù)量> --yes

注意事項

  • 恢復(fù)時間:如果集群節(jié)點(diǎn)很多、數(shù)據(jù)量大,恢復(fù) (尤其是 AOF 重寫) 可能比較慢。
  • 數(shù)據(jù)一致性:如果只是用 RDB 快照恢復(fù),可能丟失最后一次快照后的寫入。AOF 可以減少但也不能保證零丟失 (取決于 appendfsync 策略)。
  • 重寫 (rewrite) 期間性能影響:AOF 重寫是 fork 子進(jìn)程,會占用內(nèi)存和 CPU。
  • 磁盤空間:備份 RDB + AOF 文件可能占用大量磁盤空間,備份存儲要規(guī)劃好。
  • 安全:備份文件 (RDB / AOF) 本身也很敏感,應(yīng)保證備份存儲路徑權(quán)限、安全傳輸 (如 SFTP、對象存儲加密)。

到此這篇關(guān)于Redis 集群模式優(yōu)化和備份的文章就介紹到這了,更多相關(guān)redis 集群模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于redis的延遲雙刪策略總結(jié)

    關(guān)于redis的延遲雙刪策略總結(jié)

    這篇文章主要介紹了關(guān)于redis的延遲雙刪策略總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • redis多級緩存的用法及說明

    redis多級緩存的用法及說明

    文章介紹了多級緩存的實(shí)現(xiàn)原理、搭建環(huán)境、JVM進(jìn)程緩存、Lua語法入門、實(shí)現(xiàn)多級緩存、緩存同步策略、安裝Canal和監(jiān)聽Canal通知消息等內(nèi)容
    2026-03-03
  • 基于Redis實(shí)現(xiàn)抽獎功能及問題小結(jié)

    基于Redis實(shí)現(xiàn)抽獎功能及問題小結(jié)

    這篇文章主要介紹了基于Redis實(shí)現(xiàn)抽獎功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • 從IO多路復(fù)用到redis線程模型詳解

    從IO多路復(fù)用到redis線程模型詳解

    這篇文章主要介紹了從IO多路復(fù)用到redis線程模型,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2026-03-03
  • 基于redis分布式鎖實(shí)現(xiàn)秒殺功能

    基于redis分布式鎖實(shí)現(xiàn)秒殺功能

    這篇文章主要為大家詳細(xì)介紹了基于redis分布式鎖實(shí)現(xiàn)秒殺功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Redis中管道操作pipeline的實(shí)現(xiàn)

    Redis中管道操作pipeline的實(shí)現(xiàn)

    RedisPipeline是一種優(yōu)化客戶端與服務(wù)器通信的技術(shù),通過批量發(fā)送和接收命令減少網(wǎng)絡(luò)往返次數(shù),提高命令執(zhí)行效率,本文就來介紹一下Redis中管道操作pipeline的實(shí)現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • Redis實(shí)現(xiàn)分布式鎖全過程

    Redis實(shí)現(xiàn)分布式鎖全過程

    文章介紹Redis實(shí)現(xiàn)分布式鎖的方法,包括使用SETNX和EXPIRE命令確?;コ庑耘c防死鎖,Redisson客戶端提供的便捷接口,以及Redlock算法通過多節(jié)點(diǎn)共識提高容錯性,同時強(qiáng)調(diào)需合理設(shè)置鎖過期時間、唯一標(biāo)識,并注意網(wǎng)絡(luò)分區(qū)問題
    2025-08-08
  • Redis事務(wù)為什么不支持回滾

    Redis事務(wù)為什么不支持回滾

    事務(wù)是關(guān)系型數(shù)據(jù)庫的特征之一,那么作為 Nosql 的代表 Redis 中有事務(wù)嗎?如果有,那么 Redis 當(dāng)中的事務(wù)又是否具備關(guān)系型數(shù)據(jù)庫的 ACID 四大特性,本文就來詳細(xì)介紹一下
    2021-08-08
  • 銀河麒麟V10sp1服務(wù)器系統(tǒng)安裝redis不能使用的快速解決辦法

    銀河麒麟V10sp1服務(wù)器系統(tǒng)安裝redis不能使用的快速解決辦法

    這篇文章主要介紹了銀河麒麟V10sp1服務(wù)器系統(tǒng)安裝redis不能使用的快速解決辦法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Redis實(shí)現(xiàn)延遲任務(wù)的常見方案詳解

    Redis實(shí)現(xiàn)延遲任務(wù)的常見方案詳解

    延遲任務(wù)(Delayed?Task)是指在未來的某個時間點(diǎn),執(zhí)行相應(yīng)的任務(wù),本文為大家整理了Redis實(shí)現(xiàn)延遲任務(wù)的幾個常見方案,希望對大家有所幫助
    2024-04-04

最新評論

禹州市| 利津县| 安丘市| 赤壁市| 岳西县| 焉耆| 湖南省| 儋州市| 黔西县| 民县| 福州市| 屏边| 普定县| 绥棱县| 永吉县| 甘德县| 新沂市| 定州市| 泽库县| 图木舒克市| 广宁县| 平阳县| 石屏县| 武强县| 彭阳县| 高安市| 彰武县| 威海市| 莎车县| 太和县| 平度市| 清远市| 海口市| 恩平市| 文水县| 西乌珠穆沁旗| 沙洋县| 朝阳区| 鄄城县| 九寨沟县| 永昌县|