Redis 搭建主从复制、哨兵模式【Windows】

Redis 主从复制模式是一种用于数据冗余和可伸缩性的机制,它允许从服务器(Slave)从主服务器(Master)复制数据,从而实现数据的备份和读写分离。以下是关于Redis主从复制模式的详细介绍:

1. 主从复制模式的定义与特点

  • 定义:Redis 主从复制模式是一种数据同步策略,通过配置多台 Redis 服务器,一台作为主服务器(Master),负责处理写操作;而其他服务器作为从服务器(Slave),负责处理读操作。

  • 特点

    1. 主从复制模式实现了 读写分离,主服务器专注于处理写操作,而从服务器则专注于处理读操作,从而减轻主服务器的压力。

    2. 主从复制模式提供了 数据冗余,即使主服务器出现故障,从服务器仍然可以提供服务,保证系统的可用性。

2. 主从复制模式的工作原理

  1. 复制初始化:当从服务器启动时,它会主动向主服务器发送 SYNC 命令,请求与主服务器进行同步。

  2. RDB文件生成与传输:主服务器接收到 SYNC 命令后,会在后台执行 BGSAVE 命令,生成一个 RDB 文件(即 Redis 的数据快照文件),并将该文件发送给从服务器。

  3. 数据加载:从服务器接收到 RDB 文件后,会进行全盘加载,以获取主服务器的数据状态。

  4. 命令缓存与同步:在 RDB 文件传输过程中,主服务器会将其在此期间接收到的写命令记录在一个缓冲区中。当 RDB 文件传输完成后,主服务器会将缓冲区中的命令发送给从服务器,从服务器会执行这些命令,以保证与主服务器的数据状态一致。

  5. 后续复制过程:在后续的复制过程中,主服务器每次接收到写命令时,都会同步发送给从服务器,以保持主从数据的一致性。

3. 主从复制模式的配置

要配置 Redis 的主从复制模式,需要在 Redis 的配置文件中设置相应的选项。例如,在从服务器的配置文件中,可以通过设置 slaveof 选项来指定主服务器的 IP 地址和端口号。

4. 主从复制模式的优缺点

  • 优点

    1. 读写分离:通过读写分离,可以提高 Redis 的性能。
    2. 数据冗余:主从复制提供数据副本,可以用于灾难恢复。
    3. 读扩展:从节点可以处理读请求,分散读负载,提高系统的整体读取能力。
    4. 高可用性:当主节点出现故障时,可以手动或自动(使用 Redis Sentinel)将从节点提升为新的主节点,以此减少服务中断的时间。
    5. 跨数据中心复制:可以在不同的数据中心配置主从复制,以实现地理冗余。
  • 缺点

    1. 数据延迟:在高负载下,从节点与主节点之间的数据同步可能会有延迟,不能保证实时的强一致性。

    2. 写扩展限制:所有的写操作仍然需要通过主节点进行,因此主从复制不会提高写操作的性能。

    3. 故障转移不是自动的:在没有使用 SentinelRedis Cluster 的情况下,发生故障时需要手动进行故障转移。

    4. 内存使用:由于每个从节点都会保留数据的副本,这意味着每个节点都会消耗与主节点相似的内存资源。

    5. 成本:维护更多的服务器会增加硬件和运维成本。

通过以上的介绍,我们可以更清晰地了解 Redis 主从复制模式的工作原理、配置方式以及其优缺点,从而在实际应用中根据需求进行选择和配置。

以上内容由文心一言生成,主要是介绍一下 Redis 主从复制模式,顺便凑个字数。下面我们就来实现 Redis 主从复制模式。

5. 主从复制模式实现

下面带着大家手动实现 Redis 主从复制模式,首先我们先要下载 Redis,这里我就默认大家都已经安装了 Redis,没有安装的可以去网上搜一下教程,也不难。

由于我们是在一台服务器上模拟 Redis 主从复制模式,所以在一些配置方面还是和多台服务器上实现是不一样的。不过大同小异,下面就开始了。

5.1. 创建多个配置文件

如果在同一台机器上实现 Redis 主从复制模式,由于 Redis 会默认占用 6379 端口,所以我们需要为每个节点单独创建一个文件。

我们就搭建一个 主节点 和两个 从节点。他们的配置文件命名为:

主节点(master):redis-master-6379.conf
从节点(slaveA):redis-slave-6380.conf
从节点(slaveB):redis-slave-6381.conf

5.2. 修改配置

首先在 redis-master-6379.conf 中做以下修改:

在 Linux 中还有一个很快的方法完成创建配置文件这一步,后面我会介绍。

# 设置可以访问 Redis 的主机
bind 127.0.0.1
# 或者设置多个 IP
# bind 127.0.0.1 ipA ipB ...

# 数据文件,RDB 快照
dbfilename dump-6379.rdb

# AOF 文件,记录命令执行
appendfilename "appendonly-6379.aof"

# 在 windows 中不用设置 pidfile, 在 linux 中则需要设置
# (pidfile 用于保存 redis 进程编号)
pidfile /var/run/redis-6379.pid

其他的节点的配置文件与之类似,修改其中的 6379 为 63806381,然后单独创建一份 conf 文件即可。

  • 重要配置

最后一个 重要的配置 就是设置从节点跟随的主节点(在从节点的配置文件中书写,每个从节点配置文件中都要写):

# 这个用来配置主节点的 IP 和端口
slaveof 127.0.0.1 6379
  • 这里介绍在 Linux 中创建多个配置文件

首先创建一个 redis-master-6379.conf 文件,在其中做如上配置之后,使用以下命令创建从节点文件:

# 作用是将 redis-master-6379.conf 文件中所有的 6379 字符替换成 6380,
# 并将结果输出到 redis-slave-6380.conf 文件当中
sed 's/6379/6380/g' redis-master-6379.conf > redis-slave-6380.conf
5.3. 启动实例

配置好之后启动 Redis 实例:

  • 在 Windows 中
# 后台启动
# 启动主节点
start redis-server.exe redis-master-6379.conf

# 启动从节点
start redis-server.exe redis-slave-6380.conf
start redis-server.exe redis-slave-6381.conf
  • 在 Linux 中
# 后台启动
# 启动主节点
redis-server redis-master-6379.conf &

# 启动从节点
redis-server redis-slave-6380.conf &
redis-server redis-slave-6381.conf &

6. 哨兵模式

哨兵模式(Sentinel)是Redis中用于实现高可用性的一种机制。以下是关于哨兵模式的详细深入介绍:

6.1. 工作原理
  1. 监控:哨兵进程会周期性地向 Redis 的主节点和从节点发送 PING 命令来检测它们的状态。这些哨兵进程是独立的,并且会互相监控,以确保系统的高可用性。

  2. 自动故障迁移

    • 当哨兵进程检测到主节点(master)不可用时,它会根据投票机制(通常是超过半数的哨兵认为主节点不可用)来决定是否进行故障转移。
    • 如果达到指定哨兵数(quorum),哨兵会选择一个从节点(slave)将其升级为新的主节点。这个过程是自动的,无需人工干预。
    • 一旦新的主节点被选举出来,哨兵会通过消息订阅模式通知其他从节点,让它们更新配置并切换到新的主节点上。
6.2. 搭建哨兵节点
6.2.1. 创建配置文件

由于哨兵节点的数量一般与主从节点数量相同,所以这里就设置 一个主节点两个从节点,以及 三个哨兵节点

相关的配置文件命名为:sentinel-26379.confsentinel-26380.confsentinel-27381.conf

其中 sentinal-26379.conf 文件的配置如下:

port 26379
bind 127.0.0.1

# 监控主节点的状态,最后的 2 表示当有至少两个哨兵节点认为主节点宕机,
# 才重新设置主节点
sentinel monitor mymaster 127.0.0.1 6379 2

# 主节点 5000 毫秒后未响应则认为主节点宕机
sentinel down-after-milliseconds mymaster 5000

其他哨兵节点的配置文件依照上面的配置修改。

6.2.2. 启动实例

在启动哨兵节点之前要先启动 Redis 主从节点。然后启动哨兵节点。

相关的启动命令如下:

  • Windows 下
# 26379 端口
start redis-server.exe sentinel-26379.conf --sentinel

start redis-server.exe sentinel-26380.conf --sentinel
start redis-server.exe sentinel-26381.conf --sentinel
  • Linux 下
# 26379 端口
redis-sentinel sentinel-26379.conf &

redis-sentinel sentinel-26380.conf &
redis-sentinel sentinel-26381.conf &

启动之后就可以试验一下,关闭主节点之后,从节点是否能自动代替主节点了。

7. 总结

OK!关于 Redis 主从复制以及哨兵模式的搭建就到这里,之后我们还会介绍搭建 Redis 集群。虽然 Redis 主从模式提供了很好的高可用性,但是它的高并发并不高,因为只有一个主节点负责写入,而 Redis 集群则很好地缓解了这个问题。

image.png

本篇文章内容主要起到记录作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值