Redis集群环境搭建与哨兵模式浅析

本文介绍了Redis的主从复制配置过程,强调从库配置而非主库,展示了如何通过命令行设置从库并验证复制状态。在详细解释复制原理后,讨论了哨兵模式在主从切换中的作用,包括哨兵的监控、故障转移和自动恢复功能。最后,通过一个实际的哨兵配置案例,说明了哨兵模式如何提高系统可用性和健壮性,以及其优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis主从复制

环境配置

只配置从库,不用配置主库!

127.0.0.1:6379> info replication
# Replication

127.0.0.1:6379> info replication #查看当前库的信息
# Replication
role:master #角色 master
connected_slaves:0 # 没有从机
master_failover_state:no-failover
master_replid:2faeccf8ce52e9e7126e0b8c3301c4a54d02ceb3
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379> 

复制三个配置文件,然后修改对应的信息
1、端口
2、pid名字
3、log文件名字
4、dump.rdb名字

6379端口redis:

127.0.0.1:6379> info replication #查看信息
# Replication
role:master #角色:主
connected_slaves:0 #从机数量:0
master_failover_state:no-failover
master_replid:099d10a81ff0fc5e055c5bcff474551d6ebdf3be
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379> info replication #待6379端口连接完查看信息
# Replication
role:master #角色:主
connected_slaves:1 #从机数量:1
slave0:ip=127.0.0.1,port=6380,state=online,offset=14,lag=0
master_failover_state:no-failover
master_replid:0d913ac3b78b4df0a72243320b1d40b98d9a41da
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14
127.0.0.1:6379> 

6380端口redis:

127.0.0.1:6380> SLAVEOF 127.0.0.1 6379 #侍从127.0.0.1 6379 这个端口下的redis
OK
127.0.0.1:6380> info replication
# Replication
role:slave # 角色:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:0
slave_priority:100
slave_read_only:1
connected_slaves:0
master_failover_state:no-failover
master_replid:0d913ac3b78b4df0a72243320b1d40b98d9a41da
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:0
127.0.0.1:6380> 

细节
主机可以写,从机不能写只能读!主机中的所有信息和数据,都会自动被从机保存!示例如下:

主机可写可读

127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> get k1
"v1"

从机只能读,不能写!

127.0.0.1:6380> get k1
"v1"
127.0.0.1:6380> set k2 v2
(error) READONLY You can't write against a read only replica.

测试:如果主机断开连接,从机依旧连接到主机的,但是没有写操作,这个时候,主机如果回来了,从机依旧可以直接获取到主机写的信息!

如果是使用命令行来配置的主从,这个时候如果从机重启了,就会变回主机!但只要变回从机,立马就会从主机中获取值!

复制原理
Slave启动成功连接到master后会发送一个syn同步命令。
Master接到命令,启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,并完成一次完全同步。
全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步
但是只要是重新连接master,一次完全同步(全量复制)将被自动执行。

层层链路
上一个Master连接下一个Slave
这个时候也可以完成我们的主从复制!

如果没有老大了,这个时候能不能选择一个老大出来呢?

SLAVEOF NO ONE
谋权篡位
如果主机断开了连接,我们可以使用SLAVEOF NO ONE让自己变成主机!其他的节点就可以手动连接到最新的这个主节点(手动)

哨兵模式(自动选举老大的模式)

(自动选举老大的模式)

主从切换技术的方法是:当主服务器宕机后,需要手动把一台服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。Redis2.8开始正式提供了Sentinel(哨兵)架构来解决这个问题。

谋朝篡位的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转为主库

哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。

哨兵模式:顾名思义哨兵用来监视,哨兵以独立的进程监控多台服务器上的Redis是否正常运行

哨兵进程有两个作用:

  • 通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
  • 当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。

然而一个哨兵进程对Redis服务器进行监控,可能会出现问题,为此,我们可以使用多个哨兵进行监控,各个哨兵之间还会进行监控,这样就形成了多哨兵模式。

测试
我们目前的状态是一主二从6379为主 6380为从 6381为从

  1. 配置哨兵配置文件
[root@iz2ze4ak3swm586uk17dv3z bin]# cd etc/
[root@iz2ze4ak3swm586uk17dv3z etc]# ls
redis79.conf  redis80.conf  redis81.conf  redis.conf
[root@iz2ze4ak3swm586uk17dv3z etc]# vim sentinel.conf #创建一个配置文件

在文件中写入一段配置,保存并退出
在这里插入图片描述
后面的这个数字1,代表主机挂了,slave投票看让谁接替成为主机,票数最多的,就会成为主机!

2、启动哨兵!

PS:之前没找到redis-sentinal,折腾一番发现redis-sentinal在src目录下。

在这里插入图片描述
Runing in sentinel mode…

此时我们将6379shutdown
在这里插入图片描述
过了一会哨兵输出failover状态,做出故障转移投票处理,选出新的主机。

在这里插入图片描述
选出了新的master6381 (投票算法)

如果这个时候宕机的主机回来了,我们来看一下结果。

  1. 启动79端口redis:
    在这里插入图片描述
  2. 哨兵进程打印记录:
    在这里插入图片描述
  3. 此时查看信息:
    在这里插入图片描述
    原来的主机变成6381的从机了
    在这里插入图片描述
    主机的info replication 从机数也变成两个了!

哨兵模式优点:

1、哨兵集群,基于主从复制模式,所有的主从配置优点,它全有
2、主从可以切换,故障可以转移,系统的可用性就会更好
3、哨兵模式就是主从模式的升级,手动到自动,更加健壮方便

缺点:
1、Redis不好在线扩容,集群容量一旦到达上限,在线扩容就十分麻烦!
2、实现哨兵模式的配置其实是很麻烦的,里面有很多选择!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值