V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Songxwn
V2EX  ›  Linux

Redis 哨兵模式配置 - 在 Rocky Linux 上

  •  1
     
  •   Songxwn · 2023-05-31 00:20:18 +08:00 · 1649 次点击
    这是一个创建于 543 天前的主题,其中的信息可能已经有所发展或是发生改变。

    介绍

    • Redis 是一个高性能的 key-value 数据库,完全开源,遵守 BSD 协议。Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis 不仅仅支持简单的 key-value 类型的数据,同时还提供了 list 、set 、zset 、hash 等数据结构的存储。
    • Redis 有很多应用场景,其中最常见的是作为缓存。Redis 的读写性能优异,逐渐有取代 memcached ,成为首选服务端缓存的组件此外,Redis 还可以用于计数器、消息队列、分布式锁、会话缓存等场景。
    • 在 JumpServer 中,Redis 主要用于存储会话信息和任务队列。
    • 本文介绍了在 Rocky 下载的安装配置哨兵模式。

    订阅

    个人博客: https://songxwn.com/redis-sentinel/

    RSS: https://songxwn.com/atom.xml

    知乎: https://zhuanlan.zhihu.com/p/633493210

    环境

    Redis 版本: 6.27

    系统:Rocky Linux 8.8 (关闭 SElinux ,关闭防火墙)

    安装

    dnf module install redis:6
    
    systemctl enable --now redis
    
    systemctl status redis
    
    

    基础配置

    vim /etc/redis.conf 
    
    # 修改业务配置
    
    

    配置绑定 IP (默认绑定 lookback ,监听 6379 端口)

    #bind 127.0.0.1 -::1
    
    bind * -::*
    
    # 注释原来的配置,配置绑定所有 IPv4 和 IPv6 地址
    
    

    配置访问密码(默认无密码)

    requirepass pass@word
    
    

    配置内存满载策略(默认为noeviction 即不做任何淘汰)

    maxmemory-policy allkeys-lru
    
    # 从所有的键中选择最近最少使用的键进行淘汰。
    
    

    配置最大使用内存(默认无限制)

    maxmemory 512MB
    
    # 默认数字单位为 bytes ,可根据业务和实际物理内存配置。
    
    

    重启生效

    systemctl restart redis
    
    systemctl status redis
    
    redis-cli --version
    
    # 查看版本
    
    

    PS:至此,单机部署已完成。

    配置哨兵( sentinel )模式

    Redis 哨兵模式是 Redis 在主从复制基础上构建的一套高可用解决方案,它可以自动监控 Redis 主节点和从节点的状态,当主节点出现故障时,哨兵会自动将一个从节点切换为新的主节点,以保证系统的高可用性。哨兵模式的优势包括:

    1. 自动故障转移:当主节点出现故障时,哨兵会自动将一个从节点切换为新的主节点,以保证系统的高可用性。
    2. 自动配置提醒:哨兵会自动监控 Redis 主节点和从节点的状态,并在发现异常时发送邮件或短信提醒管理员。
    3. 自动恢复:当 Redis 主节点恢复正常时,哨兵会自动将其切换回主节点,并将之前选举出来的从节点切换回从节点。

    优缺点

    优点:

    • 对节点进行监控,来完成自动的故障发现与转移

    缺点:

    • 特别是在主从切换的瞬间存在访问瞬断的情况,等待时间比较长,至少十来秒不可用。
    • 哨兵模式只有一个主节点对外提供服务,没法支持很高的并发
    • 单个主节点内存也不宜设置得过大,否则会导致持久化文件过大,影响数据恢复或主从同步的效率。

    PS:与主从相比,哨兵仅解决了手动切换主从节点问题,至于其他的问题,基本上仍然存在。

    节点规划(哨兵要奇数个,建议 3 节点起步)

    主机名 角色 IP 地址
    Redis_S1 Master 192.168.205.1
    Redis_S2 slaves 192.168.205.2
    Redis_S3 slaves 192.168.205.3

    配置主从复制

    Redis_S1 主节点配置

    vim /etc/redis.conf
    
    protected-mode no
    
    # 关闭保护模式,默认为打开的。关闭此模式是为了让 slaves 连接进来。
    
    requirepass pass123
    
    # 配置访问密码,slaves 也要配置对应的 masterauth 密码。
    
    bind * -::*
    
    # 配置绑定 IP
    
    maxmemory-policy allkeys-lru
    
    maxmemory 512MB
    
    

    Redis_S2 从节点配置

    vim /etc/redis.conf
    
    protected-mode no
    
    # 关闭保护模式,默认为打开的。
    
    masterauth pass123
    
    # 配置访问密码,slaves 也要配置对应的 masterauth 密码。
    
    replicaof 192.168.205.1 6379
    
    # 从节点配置,配置主节点的 IP
    
    bind * -::*
    
    # 配置绑定 IP
    
    maxmemory-policy allkeys-lru
    
    maxmemory 512MB
    
    

    Redis_S3 从节点配置

    vim /etc/redis.conf
    
    protected-mode no
    
    # 关闭保护模式,默认为打开的。
    
    masterauth pass123
    
    # 配置访问密码,slaves 也要配置对应的 masterauth 密码。
    
    replicaof 192.168.205.1 6379
    
    
    # 从节点配置,配置主节点的 IP
    
    bind * -::*
    
    # 配置绑定 IP
    
    maxmemory-policy allkeys-lru
    
    maxmemory 512MB
    
    

    所有节点

    systemctl restart redis
    
    # 重启配置生效
    
    

    验证主从配置

    redis-cli 
    127.0.0.1:6379> AUTH password
    127.0.0.1:6379> info replication
    
    # 输入密码查看状态
    
    

    哨兵模式配置

    每节点配置启动

    systemctl enable --now redis-sentinel
    
    systemctl status redis-sentinel
    
    ss -an | grep 26379
    
    # 哨兵服务默认监听端口号 26379
    
    

    每节点修改配置

    vim /etc/redis-sentinel.conf
    
    
    sentinel monitor mymaster 192.168.205.1 6379 2
    
    # 配置监控主节点的 IP 、端口号、2 代表多少个 Sentinel 实例认为主服务器不可用,才会触发自动故障转移。
    
    sentinel auth-pass mymaster pass123
    
    # 主节点的密码
    
    sentinel down-after-milliseconds mymaster 10000
    
    # 指定 Sentinel 在多长时间内未收到来自主服务器的回复后,将主服务器标记为主观下线。
    # 单位为毫秒
    
    
    sentinel parallel-syncs mymaster 1
    
    # 用于指定在自动故障转移期间,最多可以有多少个从服务器同时对新的主服务器进行同步。
    # 为 1 即可
    
    PS:mymaster 为自定义名称
    
    

    检查

    redis-cli -p 26379 info sentinel
    
    
    4 条回复    2023-05-31 10:55:21 +08:00
    dooonabe
        1
    dooonabe  
       2023-05-31 09:02:51 +08:00
    有三个节点为什么不用 cluster 模式
    7lQM1uTy635LOmbu
        2
    7lQM1uTy635LOmbu  
       2023-05-31 09:57:02 +08:00 via Android
    @dooonabe 自媒体来引流私域的,不用纠结
    Songxwn
        3
    Songxwn  
    OP
       2023-05-31 10:16:26 +08:00
    主要是个人学习来给 jumpserver 用,而 Jumpserver 不支持集群模式。
    julyclyde
        4
    julyclyde  
       2023-05-31 10:55:21 +08:00   ❤️ 1
    @Songxwn 这个回答说明你已经深入了解过了。很赞
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   947 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 22:45 · PVG 06:45 · LAX 14:45 · JFK 17:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.