首页
/ 使用Ansible Playbook部署Redis Sentinel高可用集群 - bbotte项目实践指南

使用Ansible Playbook部署Redis Sentinel高可用集群 - bbotte项目实践指南

2025-07-01 17:45:09作者:裘晴惠Vivianne

Redis高可用方案概述

Redis作为高性能的内存数据库,在生产环境中通常需要部署高可用方案来保证服务的稳定性。常见的Redis高可用方案主要包括以下几种:

  1. Redis Cluster:官方提供的分布式解决方案,支持数据分片
  2. Redis Sentinel:官方推荐的高可用方案,轻量级且易于配置
  3. Keepalived+LVS+Redis:基于虚拟IP的传统高可用方案
  4. Codis集群:第三方提供的代理分片方案

本文重点介绍如何使用Ansible Playbook自动化部署Redis Sentinel高可用集群,这是bbotte项目中实现Redis高可用的核心方案。

环境准备

主机规划

我们需要准备三台服务器,规划如下:

  • vm01 (10.211.55.4):初始Redis主节点
  • vm02 (10.211.55.5):初始Redis从节点
  • vm03 (10.211.55.6):Sentinel监控节点

Ansible主机配置

在Ansible的hosts文件中配置目标服务器:

[server]
10.211.55.4 host_name=vm01
10.211.55.5 host_name=vm02
10.211.55.6 host_name=vm03

同时确保各节点的/etc/hosts文件包含正确的主机名解析。

Ansible Playbook详解

以下是完整的Redis安装和配置Playbook:

#jinja2: variable_start_string: "[%", variable_end_string: "%]"
---
- hosts: server
  remote_user: root
  vars:
    hostname: '[% host_name %]'
    ipv4: '{{ansible_default_ipv4.address}}'
  tasks:
    - name: 时间同步
      command: ntpdate ntp1.aliyun.com
    
    - name: 分发hosts文件
      copy: src=/root/ansible/hosts dest=/etc/hosts owner=root group=root mode=0644 force='yes'
    
    - name: 设置主机名
      shell: 'hostname {{host_name}}'
      register: host_name_change
    - debug: msg='{{host_name_change.stdout}}'
    
    - name: 关闭iptables
      service: name=iptables enabled=yes state=stopped
    
    - name: 分发redis安装包
      copy: src=/root/ansible/redis-3.2.0.tar.gz dest=/tmp/ owner=root group=root mode=0644
    
    - name: 安装redis
      shell: cd /tmp/; tar -xzf /tmp/redis-3.2.0.tar.gz; cd /tmp/redis-3.2.0; make -j4; make install
    
    - name: 复制redis配置文件
      copy: src=/tmp/redis-3.2.0/redis.conf dest=/etc/ owner=root group=root mode=0644 force='yes'
    
    - name: 复制redis启动脚本
      copy: src=/root/ansible/redis_init.sh dest=/etc/init.d/redis owner=root group=root mode=0755 force='yes'
    
    - name: 创建redis数据目录
      shell: mkdir -p /var/redis
    
    - name: 修改redis配置
      shell: |
        sed -i 's/daemonize\ no/daemonize\ yes/g' /etc/redis.conf
        sed -i '/bind 127.0.0.1/d' /etc/redis.conf
        echo bind {{ipv4}} 127.0.0.1 >> /etc/redis.conf
        sed -i 's/dir\ .\//dir\ \/var\/redis/g' /etc/redis.conf
        sed -i 's/appendonly\ no/appendonly\ yes/g' /etc/redis.conf
    
    - name: 启动redis服务
      service: name=redis enabled=yes state=restarted
    
    - name: 检查redis状态
      shell: echo info |redis-cli |head -n 19
      register: result
    - debug: msg={{result}}

Playbook关键点解析

  1. 变量定义:使用Jinja2模板语法定义主机名和IP变量
  2. 基础配置:包括时间同步、主机名设置、防火墙关闭等
  3. Redis安装:通过源码编译安装Redis 3.2.0版本
  4. 配置修改
    • 启用守护进程模式
    • 绑定本地和外部IP
    • 设置数据目录
    • 启用AOF持久化
  5. 服务管理:使用自定义的init脚本管理Redis服务

Redis主从配置

在所有节点安装完成后,我们需要配置主从关系:

  1. 主节点(vm01):保持默认配置不变
  2. 从节点(vm02):在/etc/redis.conf末尾添加:
    slaveof 10.211.55.4 6379
    
    然后重启Redis服务

验证主从关系:

redis-cli -h 10.211.55.5 info replication

输出应显示角色为slave,并正确连接到主节点。

Sentinel配置与部署

在vm03节点上配置Sentinel:

  1. 停止Redis服务
  2. 复制并编辑sentinel.conf:
    cp /tmp/redis-3.2.0/sentinel.conf /etc/
    
  3. 精简配置内容:
    port 26379
    dir /tmp
    sentinel monitor mymaster 10.211.55.4 6379 1
    sentinel down-after-milliseconds mymaster 30000
    sentinel parallel-syncs mymaster 1
    sentinel failover-timeout mymaster 180000
    
  4. 启动Sentinel:
    redis-sentinel /etc/sentinel.conf &
    

Sentinel关键配置说明

  • mymaster:监控的Redis主节点名称
  • 10.211.55.4 6379:初始主节点地址
  • 1:判定主节点失效所需的Sentinel数量
  • down-after-milliseconds:判定节点不可用的超时时间
  • parallel-syncs:故障转移时允许同时同步的从节点数
  • failover-timeout:故障转移超时时间

故障转移测试

  1. 在主节点(vm01)上写入测试数据:
    redis-cli set website devops2u.com
    
  2. 停止主节点Redis服务
  3. 观察Sentinel日志和从节点状态变化

典型故障转移过程

  1. Sentinel检测到主节点不可用
  2. 开始故障转移流程
  3. 选举新的主节点(原从节点vm02)
  4. 其他从节点重新配置为连接到新主节点
  5. 原主节点恢复后自动成为新主节点的从节点

集群恢复与维护

当原主节点恢复后,应将其配置为新主节点的从节点:

  1. 在原主节点(vm01)的redis.conf中添加:
    slaveof 10.211.55.5 6379
    
  2. 启动Redis服务
  3. 验证复制状态

Sentinel管理命令

  • 查看Sentinel状态:
    redis-cli -p 26379 info sentinel
    
  • 查看客户端连接:
    redis-cli -p 26379 client list
    

多集群高可用架构

对于多个Redis集群,可以通过Sentinel相互监控实现更高层次的可用性:

sentinel_1/sentinel_2      sentinel_2/sentinel_1
          |                        |
  —————————————————      ———————————————————
  |                \   /                    |
  |                  X                      |
  |                /   \                    |
redis1主—————–——–——      —————————————–—–redis2主
  |                                         |
redis1从                                 redis2从

这种架构既实现了各集群内部的高可用,又通过Sentinel的相互监控提高了整体可靠性。

总结

通过Ansible Playbook自动化部署Redis Sentinel高可用集群,bbotte项目实现了:

  1. 快速、一致的Redis集群部署
  2. 自动化的主从配置
  3. 可靠的故障检测和转移机制
  4. 易于扩展的监控架构

这种方案特别适合需要高可用Redis服务的中小型应用场景,既保证了数据安全,又简化了运维复杂度。

登录后查看全文
热门项目推荐

热门内容推荐

最新内容推荐

项目优选

收起
openHiTLS-examplesopenHiTLS-examples
本仓将为广大高校开发者提供开源实践和创新开发平台,收集和展示openHiTLS示例代码及创新应用,欢迎大家投稿,让全世界看到您的精巧密码实现设计,也让更多人通过您的优秀成果,理解、喜爱上密码技术。
C
53
465
kernelkernel
deepin linux kernel
C
22
5
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
349
381
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
7
0
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
132
185
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
873
517
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
336
1.1 K
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
179
264
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
609
59
note-gennote-gen
一款跨平台的 Markdown AI 笔记软件,致力于使用 AI 建立记录和写作的桥梁。
TSX
83
4