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

Redis哨兵模式内存缩容

Redis哨兵模式内存缩容

  • 检查节点信息
  • 从节点内存缩容
    • 最大内存配置修改
    • 停机缩容
    • 缩容后检查
  • 主节点内存缩容
  • 回退操作

检查节点信息

通过哨兵获取集群名和主节点地址:

# docker exec -it pod_sentinel_1 redis-cli -p 26379 info sentinel# Sentinelsentinel_masters:1 sentinel_tilt:0 sentinel_tilt_since_seconds:-1 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=mymaster,status=ok,address=mymaster_0.redis.prod.com:6379,slaves=2,sentinels=3#集群名称:mymaster#主节点: mymaster_0.redis.prod.com

通过哨兵获取从节点地址:

# docker exec -it pod_sentinel_1 redis-cli -p 26379 sentinel slaves mymaster | grep -A3 name1)1)"name"2)"mymaster_1.redis.prod.com:6379"3)"ip"4)"mymaster_1.redis.prod.com"--2)1)"name"2)"mymaster_2.redis.prod.com:6379"3)"ip"4)"mymaster_2.redis.prod.com"

查看Redis内存配置和使用量:

# cat /opt/compose/redis/config/redis.conf | grep memorymaxmemory 18gb maxmemory-policy noeviction# docker exec -it pod_redis_1 redis-cli -p 6379 --user xxx -a xxxxxx info memory | grep human | egrep 'used_memory|maxmemory'used_memory_human:41.46M#已分配的总内存(以人类可读格式显示)used_memory_rss_human:48.99M#Redis常驻内存(以人类可读格式显示)used_memory_peak_human:81.47M#最大内存使用量(以人类可读格式显示)used_memory_lua_human:31.00K#Lua引擎使用的内存(以人类可读格式显示)used_memory_vm_total_human:63.00K#VM引擎的Eval框架和函数框架使用的内存(以人类可读格式显示)used_memory_scripts_human:184B#Eval脚本和函数脚本使用的内存(以人类可读格式显示)maxmemory_human:18.00G#最大可用内存配置

⚠️maxmemory不能小于used_memory_peakused_memory_rss

检查数据目录:

# docker exec -it pod_redis_1 redis-cli -p 6379 --user xxx -a xxxxxx config get dirWarning: Using a password with'-a'or'-u'option on thecommandline interface may not be safe.1)"dir"2)"/data"# docker exec -it pod_redis_1 redis-cli -p 6379 --user xxx -a xxxxxx config get dbfilenameWarning: Using a password with'-a'or'-u'option on thecommandline interface may not be safe.1)"dbfilename"2)"dump.rdb"#获取容器内目录在宿主机的挂载路径# docker inspect pod_redis_1 -f '{{.Mounts}}'[{bind /opt/compose/redis/data /data rwtruerprivate}{bind /opt/compose/redis/config /config rwtruerprivate}]

检查Redis数据量:

# docker exec -it pod_redis_1 redis-cli -p 6379 --user xxx -a xxxxxx dbsize(integer)19322

检查服务器物理内存和磁盘空间:

# free -htotal usedfreeshared buff/cache available Mem: 31G1.4G 24G1.6G4.8G 27G Swap: 15G 0B 15G# df -Th# du -sh /opt/compose/redis/data364M /opt/compose/redis/data

确保剩余磁盘空间足够Redis将所有内存数据落盘。

从节点内存缩容

⚠️注意事项

  • 节点缩容建议挨个轮流修改重启,先缩容两个从节点,最后缩容主节点。
  • maxmemory不能小于used_memory_peakused_memory_rss

最大内存配置修改

确认最大内存配置:

# 检查maxmemroy配置# docker exec -it pod_redis_1 redis-cli -p 6379 --user xxx -a xxxxxx config get maxmemoryWarning: Using a password with'-a'or'-u'option on thecommandline interface may not be safe.1)"maxmemory"2)"19327352832"# docker exec -it pod_redis_1 redis-cli -p 6379 --user xxx -a xxxxxx info memory | grep maxmemory_humanmaxmemory_human:18.00G# 检查最大内存使用值# docker exec -it pod_redis_1 redis-cli -p 6379 --user xxx -a xxxxxx info memory | grep used_memory_peak_humanused_memory_peak_human:69.28M

修改maxmemory配置并持久化到配置文件:

# 修改maxmemroy配置为8gbdockerexec-itpod_redis_1 redis-cli-p6379--userxxx-axxxxxx configsetmaxmemory 8gb# 持久化到配置文件dockerexec-itpod_redis_1 redis-cli-p6379--userxxx-axxxxxx config rewrite

检查配置文件Rewrite成功:

# cat /opt/compose/redis/config/redis.conf | grep maxmemorymaxmemory 8gb

停机缩容

依次停止Redis和Sentinel进程:

dockerstop pod_redis_1dockerstop pod_sentinel_1#检查是否已停止dockerpsps-ef|grepredis

备份落盘后的Redis数据:

cp-p/opt/compose/redis/data/dump.rdb /opt/compose/redis/data/dump.rdb.bak20260328

最后,当前节点的服务器可以进行关机内存缩容。

缩容后检查

检查服务器物理内存:

free-h

依次启动Redis和Sentinel进程:

dockerstart pod_redis_1dockerstart pod_sentinel_1#检查是否已启动dockerpsps-ef|grepredis

确认当前节点已经加入集群:

dockerexec-itpod_sentinel_1 redis-cli-p26379sentinel slaves mymaster|grep-A3name

确认主从同步正常:

# docker exec -it pod_redis_1 redis-cli -p 6379 --user xxx -a xxxxxx info replication | grep mastermaster_host:mymaster_0.redis.sre.zclocal master_port:6379 master_link_status:up

检查最大内存配置(可选):

dockerexec-itpod_redis_1 redis-cli-p6379--userxxx-axxxxxx info memory|grepmaxmemory_human

另外一个节点也按照上面的流程进行缩容即可。

主节点内存缩容

确认主节点地址和集群名:

dockerexec-itpod_sentinel_1 redis-cli-p26379info sentinel

通过哨兵发起手动故障转移:

dockerexec-itpod_sentinel_1 redis-cli-p26379sentinel failover mymaster

确认新的主节点地址:

dockerexec-itpod_sentinel_1 redis-cli-p26379info sentinel

后面参考前文从节点的缩容步骤即可。

回退操作

回退服务器物理内存修改操作。

如果有数据丢失,利用备份恢复数据文件。

cp-p/opt/compose/redis/data/dump.rdb.bak20260328 /opt/compose/redis/data/dump.rdb

依次启动Redis和Sentinel进程:

dockerstart pod_redis_1dockerstart pod_sentinel_1#检查是否已启动dockerpsps-ef|grepredis

检查Redis数据量:

dockerexec-itpod_redis_1 redis-cli-p6379--userxxx-axxxxxx dbsize

References
【1】https://redis.io/docs/latest/commands/info/
【2】https://redis.io/docs/latest/operate/oss_and_stack/management/sentinel/#sentinel-commands

http://www.jsqmd.com/news/603029/

相关文章:

  • 2026电力能源巡检进化论:如何基于企业级AI Agent构建非侵入式数据分析架构?
  • API统一管控平台:new-api、one-api、Grok2API、Quotio、UniAPI、Sub2API、OpenAI Router
  • 面向智慧安防的YOLO26口罩佩戴自动识别系统:数据集构建、模型训练与部署全流程(免费获取模型)
  • B站成分检测器深度解析:5大革新特性重塑评论区交互体验
  • 如何让Arduino设备秒变智能家居节点?ArduinoHA实战指南
  • GHelper:革新性华硕硬件控制工具,游戏玩家与移动办公者的精准性能解决方案
  • 快速原型:用快马平台一键生成yolov8网络结构交互可视化工具
  • 手撕 Transformer (5):模型构建
  • 编程第一步:借力copilot学生认证在快马平台生成你的第一个python小游戏
  • 别再为视频生成发愁了!用ComfyUI+Wan 2.1,保姆级本地部署教程(附工作流文件)
  • 学Simulink——基于Simulink的固定频率滞环电流控制Boost变换器
  • Linux线程
  • 2026年ROSS提升阀公司推荐,ROSS气控阀/ROSS单联阀/ROSS调压阀,ROSS提升阀制造商找哪家 - 品牌推荐师
  • Flowise开源大模型工作流:支持LoRA微调模型的节点集成方案
  • 胡桃讲编程:CPU 为啥还要兼职当 GPU0(集成显卡)?微星 GL62M 7REX 硬核科普|地下程序员实战篇
  • DW_apb_i2c验证指南
  • Apache IoTDB C# 原生接口保姆级教程:从环境搭建到全接口实战
  • 告别‘电音’:用WaveRNN和FFTNet给你的AI语音合成项目选个又快又好的声码器
  • 2026年NMN十大品牌红黑榜实测:这3类NMN品牌千万别碰,买前必看 - 资讯焦点
  • 学Simulink——基于Simulink的单位功率因数(UPF)整流控制策略
  • 1916 城市高质量创新(2000-2024)
  • OpenClaw开源贡献:为gemma-3-12b-it开发并共享自定义技能
  • 新手也能懂:用Prescan和Matlab给你的自动驾驶小车做个红绿灯“考官”
  • YimMenu:GTA5游戏增强与安全防护的终极解决方案
  • MKVToolNix Batch Tool 全功能指南:从批量处理到生态协作
  • 告别繁琐编辑:宝可梦数据自动化工具让创建效率提升90%
  • 手把手教你配置Maven+Nexus:搞定SNAPSHOT自动更新与RELEASE稳定发布
  • 如何在Windows 10系统上运行Android应用:WSA移植版解决方案
  • 2026江苏保温管制造TOP5供应商名单出炉,区域能源系统格局盘点 - 精选优质企业推荐榜
  • 达沃斯震撼警告|《人类简史》作者赫拉利:别担心AI抢工作,它要接管的是法律、宗教甚至总统