Redis(99)Redis的高可用性如何实现?

作者:Victor356日期:2025/11/2

实现Redis的高可用性是确保系统在硬件故障、网络中断或其他问题发生时依然能够正常运行的重要手段。Redis提供了多种机制来实现高可用性,包括主从复制哨兵模式Redis集群。以下是详细的实现步骤和代码示例。

1. 主从复制

主从复制(Master-Slave Replication)是Redis实现高可用性的基础。通过配置多个从节点(Slave),可以在主节点(Master)出问题时继续提供读操作。

配置主从复制

假设有两台机器:主节点 192.168.1.100 和从节点 192.168.1.101。

主节点配置(192.168.1.100)

在主节点的redis.conf中,配置基础选项:

1# redis.conf
2
3# 绑定主节点IP
4bind 192.168.1.100
5
6# 端口
7port 6379
8
9# 开启持久化(可选)
10appendonly yes
11

启动主节点服务:

1redis-server /path/to/redis.conf
2
从节点配置(192.168.1.101)

在从节点的redis.conf中,配置基础选项:

1# redis.conf
2
3# 绑定从节点IP
4bind 192.168.1.101
5
6# 端口
7port 6379
8
9# 指定主节点IP和端口
10replicaof 192.168.1.100 6379
11
12# 设置主节点的认证密码(如果有)
13masterauth your_master_password
14
15# 开启持久化(可选)
16appendonly yes
17

启动从节点服务:

1redis-server /path/to/redis.conf
2

2. 哨兵模式(Redis Sentinel)

哨兵模式通过监控主从架构的Redis实例,自动进行故障转移(failover)以实现高可用性。

配置哨兵模式

假设有三台机器:192.168.1.100(Master)、192.168.1.101(Slave1)、192.168.1.102(Slave2),以及一台哨兵节点192.168.1.103。

哨兵配置(192.168.1.103)

在哨兵节点的sentinel.conf文件中,配置哨兵选项:

1# sentinel.conf
2
3port 26379
4
5# 哨兵监控的主节点,格式:sentinel monitor <master-name> <ip> <port> <quorum>
6sentinel monitor mymaster 192.168.1.100 6379 2
7
8# 主节点密码(如果有)
9sentinel auth-pass mymaster your_master_password
10
11# 故障转移时从节点提升为主节点的判断时间(毫秒)
12sentinel down-after-milliseconds mymaster 5000
13
14# 故障转移超时时间(毫秒)
15sentinel failover-timeout mymaster 10000
16
17# 配置通知脚本和客户端重配置脚本(可选)
18# sentinel notification-script mymaster /path/to/notify.sh
19# sentinel client-reconfig-script mymaster /path/to/reconfig.sh
20

启动哨兵服务:

1redis-sentinel /path/to/sentinel.conf
2

3. Redis集群

Redis集群通过分片(sharding)将数据分布到多个节点上,实现数据水平扩展和高可用性。

配置Redis集群

假设有六台机器:192.168.1.100到192.168.1.105,每台机器上运行一个Redis实例。

启动Redis实例

在每台机器上,创建一个单独的配置文件,例如redis-7000.conf,并配置集群选项:

1# redis-7000.conf
2
3port 7000
4
5cluster-enabled yes
6cluster-config-file nodes-7000.conf
7cluster-node-timeout 5000
8
9appendonly yes
10
11# 绑定IP
12bind 192.168.1.100
13

启动每个Redis实例:

1redis-server /path/to/redis-7000.conf
2
创建集群

在任意一个节点上使用redis-cli创建集群:

1redis-cli --cluster create \
2192.168.1.100:7000 192.168.1.101:7000 192.168.1.102:7000 \
3192.168.1.103:7000 192.168.1.104:7000 192.168.1.105:7000 \
4--cluster-replicas 1
5

这将创建一个具有3个主节点和3个从节点的集群。

4. 自动化脚本示例

自动化配置主从复制

创建脚本setup_replication.sh

1#!/bin/bash
2
3MASTER_IP="192.168.1.100"
4SLAVE_IP="192.168.1.101"
5
6# 配置主节点
7cat <<EOF > /etc/redis/redis-master.conf
8bind $MASTER_IP
9port 6379
10appendonly yes
11EOF
12
13# 启动主节点
14redis-server /etc/redis/redis-master.conf
15
16# 配置从节点
17cat <<EOF > /etc/redis/redis-slave.conf
18bind $SLAVE_IP
19port 6379
20replicaof $MASTER_IP 6379
21appendonly yes
22EOF
23
24# 启动从节点
25redis-server /etc/redis/redis-slave.conf
26
27echo "主从复制配置完成"
28

自动化配置哨兵模式

创建脚本setup_sentinel.sh

1#!/bin/bash
2
3SENTINEL_IP="192.168.1.103"
4MASTER_IP="192.168.1.100"
5MASTER_PORT=6379
6
7# 配置哨兵
8cat <<EOF > /etc/redis/sentinel.conf
9port 26379
10sentinel monitor mymaster $MASTER_IP $MASTER_PORT 2
11sentinel auth-pass mymaster your_master_password
12sentinel down-after-milliseconds mymaster 5000
13sentinel failover-timeout mymaster 10000
14EOF
15
16# 启动哨兵
17redis-sentinel /etc/redis/sentinel.conf
18
19echo "哨兵配置完成"
20

自动化配置Redis集群

创建脚本setup_cluster.sh

1#!/bin/bash
2
3NODES=(
4    "192.168.1.100:7000"
5    "192.168.1.101:7000"
6    "192.168.1.102:7000"
7    "192.168.1.103:7000"
8    "192.168.1.104:7000"
9    "192.168.1.105:7000"
10)
11
12# 创建集群配置文件
13for NODE in "${NODES[@]}"; do
14    IP=$(echo $NODE | cut -d':' -f1)
15    PORT=$(echo $NODE | cut -d':' -f2)
16    cat <<EOF > /etc/redis/redis-$PORT.conf
17bind $IP
18port $PORT
19cluster-enabled yes
20cluster-config-file nodes-$PORT.conf
21cluster-node-timeout 5000
22appendonly yes
23EOF
24    redis-server /etc/redis/redis-$PORT.conf
25done
26
27# 创建集群
28yes yes | redis-cli --cluster create \
29    ${NODES[0]} ${NODES[1]} ${NODES[2]} \
30    ${NODES[3]} ${NODES[4]} ${NODES[5]} \
31    --cluster-replicas 1
32
33echo "Redis集群配置完成"
34

总结

通过主从复制、哨兵模式和Redis集群,Redis可以实现高可用性和扩展性。上述配置示例和自动化脚本为您提供了实现这些机制的详细步骤。根据不同的用例和需求,选择适合的高可用性方案可以确保Redis实例在各种故障情况下依然保持高可用和可靠。


Redis(99)Redis的高可用性如何实现?》 是转载文章,点击查看原文


相关推荐


Redis Sentinel哨兵集群
新手小白*2025/10/30

一、Redis主从复制中的问题 Redis主从复制集群可以将主节点的数据改变同步给从节点,这样从节点就可以起到两个作用:第一:作为主节点的一个备份,一旦主节点出了故障不能继续对外提供服务时,从节点可以作为后备"顶"上来,并且保证数据尽量不丢失。第二,从节点可以扩展主节点的读能力,通过实现读写分离结构,可以大大减轻主节点在进行高并发读写操作时的访问压力。 但是主从同步也带了一些问题: 一旦主节点故障,需要手动将一个从节点晋升为主节点,slaveof no one。 需要修改客户端或


Python 的内置函数 enumerate
IMPYLH2025/10/27

Python 内建函数列表 > Python 的内置函数 enumerate Python 的内置函数 enumerate 是一个非常有用的工具函数,主要用于在遍历序列(如列表、元组或字符串)时,同时获取元素的索引和值。 基本语法如下: enumerate(iterable, start=0) 其中: iterable 表示任何可迭代对象start 是可选参数,指定索引的起始值,默认为 0 使用示例: fruits = ['apple', 'banana', 'orange'] f


系统与网络安全------弹性交换网络(5)
virelin_Y.lin2025/10/25

资料整理于网络资料、书本资料、AI,仅供个人学习参考。 VLAN间通信 VLANIF VLANIF虚接口 三层交换机 具备路由功能的交换机,称之为三层交换机或多层交换机 VLAN间通信解决方案 VLANIF虚接口 VLANIF虚接口 每个VLAN都对应一个VLANIF接口 VLANIF接口是一种三层虚拟接口,可以实现VLAN间的三层互通 给每个VLAN需要配置一个VLAN虚接口,配置接口IP地址,作为VLAN内主机的网关地址 VLANIF接口不占用额外的物理端口资


仓颉语言核心技术全解析与实战教程
IT·陈寒2025/10/22

文章目录 语言特性深度解析标准库源码拆解实战项目复盘项目概览项目结构核心实现点 入门基础教程安装 SDK创建第一个项目基础语法 第三方库适配服务端应用开发鸿蒙应用开发性能优化总结与实践建议 博主介绍:全网粉丝10w+、CSDN合伙人、华为云特邀云享专家,阿里云专家博主、星级博主,51cto明日之星,热爱技术和分享、专注于Java技术领域 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟 语言特性深度解析 仓颉语言是一种面向多端的


[人工智能-大模型-30]:大模型应用层技术栈 - 上下文增强层:谁掌握了更高效、更精准的上下文增强能力,谁就能构建出真正有价值的智能系统。
文火冰糖的硅基工坊2025/10/22

上下文增强层(Context Augmentation)”是一个在人工智能、特别是大语言模型(LLM)应用架构中非常关键的概念。它通常出现在构建智能对话系统、检索增强生成(RAG)系统或企业级AI代理(Agent)的分层设计中。 我们可以将其理解为:在原始用户输入(Query)和模型生成(Generation)之间,一个至关重要的“信息注入”环节。它的核心使命是——让模型在回答问题时,拥有更丰富、更准确、更相关的背景信息,从而提升回答的质量、准确性和实用性。 一、上下文增强层的定位(在系统


【SpringCloud(7)】SpringCloud Config分布式配置中心;服务端与客户端配置;SpringCloud Bus总线;bus刷新全局广播
凉凉心.2025/10/20

1. SpringCloud Config 分布式配置中心 1.1 目前分布式微服务架构的痛点 微服务意味着要将单体应用中的业务拆分成一个个自服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能允许,所以一套集中式的、动态的配置管理设备是必不可少的 SpringCloud提供了ConfigServer来解决这个问题。 1.1 SpringCloud Config是什么? SpringCloud Config为微服务架构中的微服务提供集中化的


Vue 内置组件全解析:提升开发效率的五大神器
90后晨仔2025/10/19

在 Vue 开发中,除了我们日常编写的业务组件外,框架还提供了一系列内置组件,它们为我们处理常见的开发场景提供了优雅的解决方案。今天,我们就来深入探讨 Vue 的五大内置组件:Transition、TransitionGroup、KeepAlive、Teleport 和 Suspense。 1. Transition - 丝滑的过渡动画 什么是 Transition? Transition 组件用于在元素或组件的插入、更新和移除时添加动画效果,让用户体验更加流畅。 基本使用 <template


Java Kubernetes本地部署RuoYi框架jar包
自由的疯2025/10/18

在本地 Kubernetes 集群中部署 RuoYi 框架的 JAR 包是一个很好的实践,可以帮助你更好地理解和掌握 Kubernetes 的应用部署流程。以下是详细的步骤,指导你在本地 Kubernetes 集群中部署 RuoYi 框架的 JAR 包。 1. 准备环境 1.1 安装 Minikube 或 kind 首先,确保你已经安装了 Minikube 或 kind 来本地运行 Kubernetes 集群。这里以 Minikube 为例进行说明。 安装 kubectl: curl -LO


从 Tomcat 与 Jetty 的对比,聊聊影响一个服务并发能力的关键因素
G探险者2025/10/16

大家好,我是G探险者! 在 Java 服务体系中,Tomcat 与 Jetty 是最常见的 Web 容器。很多人认为,只要加大连接数或线程数,就能提升并发能力。 但事实远比想象复杂:连接数只是冰山一角,背后还有线程模型、I/O 模型、内核资源限制等多重因素。 本文从 Tomcat 与 Jetty 的对比 入手,系统讲清楚——到底是什么在决定你的服务并发上限。 🧩 一、Tomcat 与 Jetty 的架构差异 1️⃣ Tomcat 的工作模型 Tomcat 默认采用 多线程 + 阻塞 I/O


面试真实经历某商银行大厂Java问题和答案总结(三)
360_go_php2025/10/15

​ 1. 深拷贝和浅拷贝 ​编辑 问:什么是深拷贝和浅拷贝?它们之间有什么区别? 浅拷贝(Shallow Copy): 浅拷贝指的是复制对象的引用,而不是复制对象本身。也就是说,对于对象中的引用类型字段,浅拷贝只是复制了这些字段的引用,而没有复制字段引用的对象本身。 如果原始对象和拷贝对象中有相同的引用类型字段,修改其中一个字段会影响到另一个对象。​编辑 深拷贝(Deep Copy): 深拷贝指的是复制对象本身,并且递归地复制对象中的所有引用类型字段,确保两个对象中的引用类型字段互不影响。

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0