李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 读书观影
  • 系列
  • AI工具集
  • 论坛
  • 友圈
    • 友链
    • 朋友圈
    • 游客中心
  • 留言
    • 留言
    • 走心评论
  • 关于
    • 关于本站
    • Now
    • 每日心情
    • 网站地图
    • 网站统计
    • 赞助
  • 星球穿梭
  • 🚇开往
静亦定 动亦定
惟坚韧者始能遂其志
  1. 首页
  2. 原创
  3. 正文

深入理解Redis

2019年11月22日 260 0 0
本文最后更新于 2019年11月22日,距今已 2547 天,其中的信息可能已经发生变化,请注意甄别。

主从复制

主从复制

redis主从复制特点:

  • 一个master可以有多个slave
  • 一个slave只能有一个master
  • 数据流是单向的,从master到slave

配置主从

实现方式有两种:

  1. 命令方式
  2. 配置文件方式

命令方式

在从服务器上执行以下命令即可:

slaveof  主服务器的IP  端口号

slaveof命令是异步的,不阻塞。
从服务器现有的数据会先被清空,然后再从主服务器同步数据

停止一台从服务器的复制操作,在此台从服务器上执行以下命令:

slaveof no   one

配置文件方式

只需要修改从服务器的配置

修改配置文件

假如主服务器IP是: 127.0.0.1

端口是: 6379

# slaveof <masterip> <masterport>
slaveof  127.0.0.1 6379

// 配置此服务器只提供读取操作
slave-read-only yes

然后重启从服务器的redis服务

查看主从信息命令:

redis-cli -p 6379 info replication

主从+Sentinel哨兵模式

Redis Sentinel是Redis官方的高可用性解决方案。

Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:

监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。

提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。

自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

Redis Sentinel 是一个分布式系统, 你可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故障迁移, 以及选择哪个从服务器作为新的主服务器。

虽然 Redis Sentinel 释出为一个单独的可执行文件 redis-sentinel , 但实际上它只是一个运行在特殊模式下的 Redis 服务器。

此种模式下,客户端要访问的服务IP不是主节点,而是sentiner服务器的 IP。

配置主从

  1. 快速生成主节点的配置文件
    编译全新文件/etc/redis/redis-6380.conf, 添加如下内容
    port 6380
    daemonize yes
    protected-mode no
    pidfile /var/run/redis-6380.pid
    logfile /var/log/redis-6380.log
    dir /redis/data/

    假如是多个主机实现的,就需要更改为 protected-mode yes,并且添加bind 0.0.0.0

  2. 快速生成从节点的配置文件
    [root@s1 ~]# sed 's/6380/6381/g' /etc/redis/redis-6380.conf > /etc/redis/redis-6381.conf
    [root@s1 ~]# sed 's/6380/6382/g' /etc/redis/redis-6380.conf > /etc/redis/redis-6382.conf

    查看配置文件内容,检验配置结果

    [root@s1 ~]# cat /etc/redis/redis-6381.conf
    port 6381
    daemonize yes
    pidfile /var/run/redis-6381.pid
    logfile /var/log/redis-6381.log
    dir /redis/data/
    [root@s1 ~]# cat /etc/redis/redis-6382.conf
    port 6382
    daemonize yes
    pidfile /var/run/redis-6382.pid
    logfile /var/log/redis-6382.log
    dir /redis/data/
  3. 配置主从关系
    [root@s1 ~]# echo "slaveof  172.16.153.178 6380" >> /etc/redis/redis-6381.conf
    [root@s1 ~]# echo "slaveof  172.16.153.178 6380" >> /etc/redis/redis-6382.conf
  4. 启动服务,并验证进程
    [root@s1 ~]# /usr/local/bin/redis-server /etc/redis/redis-6380.conf
    [root@s1 ~]# /usr/local/bin/redis-server /etc/redis/redis-6381.conf
    [root@s1 ~]# /usr/local/bin/redis-server /etc/redis/redis-6382.conf
    [root@s1 ~]# ps -ef |grep redis
    root       4335      1  0 19:30 ?        00:00:03 /usr/local/bin/redis-server *:6380
    root       4490      1  0 20:17 ?        00:00:00 /usr/local/bin/redis-server *:6381
    root       4495      1  0 20:17 ?        00:00:00 /usr/local/bin/redis-server *:6382
    root       4500   3755  0 20:17 pts/0    00:00:00 grep --color=auto redis

    配置sentinel

    获取程序
    Sentinel 程序可以在编译后的 src 文档中发现, 它是一个命名为 redis-sentinel 的程序。

运行一个 Sentinel 所需的最少配置如下所示:

Redis 源码中包含了一个名为 sentinel.conf 的文件, 这个文件是一个带有详细注释的 Sentinel 配置文件示例。

运行一个 Sentinel 所需的最少配置如下所示:

// 监控一个 Redis 服务器
// 名称为 mymaster ,IP 为 127.0.0.1 端口为 6380
// 最后的 2  是指最少有 2 个 Sentinel 实例同意一台 redis 服务器宕机,才会认为 客观下线。
// sentinel monitor  自定义的主节点名称 主节点的 IP  主节点端口   票数 

sentinel monitor mymaster 127.0.0.1 6380 2

sentinel down-after-milliseconds mymaster 3000

// 180 秒后开始故障自动装换
sentinel failover-timeout mymaster 5000

sentinel parallel-syncs mymaster 1

各个选项的功能如下:

down-after-milliseconds选项指定了 Sentinel 认为服务器已经断线所需的毫秒数。
如果服务器在给定的毫秒数之内, 没有返回 Sentinel 发送的 PING 命令的回复, 或者返回一个错误, 那么 Sentinel 将这个服务器标记为主观下线(subjectively down,简称 SDOWN )。

不过只有一个 Sentinel 将服务器标记为主观下线并不一定会引起服务器的自动故障迁移: 只有在足够数量的 Sentinel 都将一个服务器标记为主观下线之后, 服务器才会被标记为客观下线(objectively down, 简称 ODOWN ), 这时自动故障迁移才会执行。

将服务器标记为客观下线所需的 Sentinel 数量由对主服务器的配置决定。

parallel-syncs选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长。

最终的配置文件:

daemonize yes
port 27000
dir "/tmp"
logfile "27000.log"

sentinel monitor mymaster 127.0.0.1 6380 2
sentinel down-after-milliseconds mymaster 3000
sentinel failover-timeout mymaster 5000
sentinel parallel-syncs mymaster 1
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
分享到

深入理解Redis

也可使用浏览器菜单中的「分享」功能

微信扫一扫分享

标签: Redis 分布式
最后更新:2019年11月22日

岁月同一天 11 月 12 日

回望过去的今天,你在写什么

  • AI
    1 年前 2025年11月12日
    高性价比大模型部署实战:共绩算力 + QWEN-2.5-7B 从入门到生产全指南

    在大模型应用落地过程中,算力成本往往成为中小企业和个人开发者的核心痛点——传统云服务商单卡4090每小时费用高达数十元,…

  • AI
    1 年前 2025年11月12日
    深度拆解 MemGen:Agent 生成式隐式记忆框架的原理、源码与实战

    在智能体(Agent)的能力进化中,记忆系统是决定其“自进化”能力的核心——它需要像人类一样,在推理过程中动态调用、重构…

相关文章
  • 内存耗尽后Redis会发生什么?2021年3月3日
  • 为什么同样是分布式架构的Kafka需要Leader而Redis不需要?2021年3月22日
  • SpringBoot集成Redis,从Redis中获取数据为null,但实际上Redis中是存在对应的数据的,是什么原因导致的呢?2021年1月19日
  • 部署consul配置中心2025年3月20日
  • 分布式、多线程、高并发概念与区别2019年10月18日

李锋镝

既然选择了远方,便只顾风雨兼程。

打赏 点赞
< 上一篇
下一篇 >
1234567891112131415161718192021222324252627282930313233343536373839404142434446474849505152535455575859606162636465666769727476777879808182858687909293949596979899
取消回复
…

文章评论

还没有评论,快来抢沙发吧~

天长地久有时尽,此恨绵绵无绝期。

听点儿音乐吧 朋友~
文章目录
最新 热点 随机
最新 热点 随机
给服务器加了WAF 又一个逆天改命的人:小小徐 AI的生成能力等于生产力吗? NGINX严重漏洞(CVE-2026-15176、CVE-2026-93479、CVE-2026-97205) Kratos-plus v1.1.27更新说明 php2shell远程执行漏洞修复(CVE-2026-109618 和 CVE-2026-109619)
给主题增加了游客中心功能心气没了,干什么都不得劲给服务器加了WAF我觉得是时候公布我的导航网站了游本昌去世关于主题加载速度优化的一点儿小演进
突破AI大项目理解瓶颈:三大进阶策略+实战落地指南 Eclipse反编译插件Jad安装 内存耗尽后Redis会发生什么? 日积月累的力量|读《刻意练习》有感 【PostgreSQL 15】PostgreSQL 15对UNIQUE和NULL的改进 Redisson分布式锁的watch dog自动续期机制
最近评论
李锋镝 发布于 3 天前(11月09日) 我也刷到了,说是恶意引流的
皮皮社长 发布于 3 天前(11月09日) 我刷到的,怎么是说剧本骗流量的?如果真的是用来骗流量,那真恶心。欺骗网友感情。
李锋镝 发布于 3 天前(11月09日) 现在我这个是十个,其实也够用了
老张博客 发布于 3 天前(11月09日) 雷池唯一不好的就是只能免费5个网站。
fairy 发布于 6 天前(11月06日) 机器人快来我这里吧!
标签聚合
数据库 多线程 K8s ElasticSearch Claude Redis 日常 分布式 JVM MySQL AI编程 Theme SQL AI 架构 IDEA WordPress JAVA SpringBoot Spring
友情链接
  • 林羽凡
  • sssr7844的博客
  • Mr.Sun的博客
  • 知向前端
  • 韩小韩博客
  • 搬砖日记
  • 九仞之行
  • 老张博客
  • 刘永博客
  • 皮皮社
  • 哥斯拉
  • 懋和道人
  • 瓦匠个人小站
  • lijie blog
  • 韩情脉脉
  • Serendipity
  • 彬红茶日记
  • 志文工作室
  • Honesty

COPYRIGHT © 2016-2026 lifengdi.com. ALL RIGHTS RESERVED.

lifengdi.com 十年之约虫洞

Domain age badge for lifengdi.com

Theme Kratos-plus By Dylan Li

津ICP备2024022503号-3

京公网安备11011502039375号