Redis篇之主从复制及哨兵模式

这篇具有很好参考价值的文章主要介绍了Redis篇之主从复制及哨兵模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

主从复制及哨兵模式

1、概念

主从复制:

是指将一台 Redis 服务器的数据,复制到其他的 Redis 服务器。前者称为主节点(Master/Leader),后者称为从节点(Slave/Follower), 数据的复制是单向的,只能由主节点复制到从节点(主节点以写为主、从节点只读)—— 读写分离。

默认情况下,每个Redis服务都是以Master角色启动,一个主节点可以有>=0个从节点,但是每个从节点只会有一个主节点。

架构图如下:

Redis篇之主从复制及哨兵模式

2、为什么要用主从复制

  1. 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余的方式。
  2. 故障恢复:当主节点故障时,从节点可以暂时替代主节点提供服务,是一种服务冗余的方式
  3. 负载均衡:在主从复制的基础上,配合读写分离,由主节点进行写操作,从节点进行读操作,分担务器的负载;尤其是在多读少写的场景下,通过多个从节点分担负载,提高并发量。
  4. 高可用(集群)基石:主从复制还是哨兵和集群能够实施的基础。

3、环境配置

Redis中有一个命令可以查看当前库信息:info replication

127.0.0.1:6379> INFO replication
# Replication
role:master # 当前库角色:master主节点
connected_slaves:0 # 从节点个数
master_replid:70a2687320104ee8f8845acd2e0312e6597a425f
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> 

注:本例配置为一主二从

3.1、首先到我们redis.conf文件所在路径,复制多个出来,为了便于区分,可以携带端口进行命名

Redis篇之主从复制及哨兵模式

3.2、修改每个配置文件

# 1. 修改端口号,每个配置文件需要是一个独立且未被占用的端口
port 6379

# 2. 开启守护进程模式运行,默认是no
daemonize yes

# 3. 修改pid文件名
pidfile "/var/run/redis_6379.pid"

# 4.log文件名,如果出现问题便于查询日志
logfile "../logs/6379.log"

# 5. dump.rdb文件名,存储内存中的快照
dbfilename "dump_6379.rdb"

# 6. dump文件的目录
dir "/home/base/redis-6.0.7/dump"

#其他两个文件按照这个配置依次修改即可

3.3、启动redis

[root@template src]# ./redis-server ../conf/redis-6379.conf 
[root@template src]# ./redis-server ../conf/redis-6380.conf 
[root@template src]# ./redis-server ../conf/redis-6381.conf 
[root@template src]# ps -ef|grep redis #查看服务
root     15191     1  0 14:45 ?        00:00:00 ./redis-server *:6379
root     15198     1  0 14:45 ?        00:00:00 ./redis-server *:6380
root     15207     1  0 14:45 ?        00:00:00 ./redis-server *:6381
root     15217 14879  0 14:46 pts/0    00:00:00 grep --color=auto redis

3.4、配置一主二从

注意,上文提到默认情况下,单个redis服务默认以master角色启动,所以我们只需要配置从机即可。

第一种方式:命令寻主

在两台从机进行连接后,进行认主:

[root@template src]# ./redis-cli -p 6380
127.0.0.1:6380> SLAVEOF 127.0.0.1 6379 # 绑定主机为本机的6379服务
OK
127.0.0.1:6380> INFO replication # 查看当前库信息
# Replication
role:slave # 角色为从机
master_host:127.0.0.1 # 主机的ip
master_port:6379 # 主机端口号
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_repl_offset:1
master_link_down_since_seconds:1681283474
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:826f635d3d7f3aaa12990efe9f52885f19759ffc
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

同样的步骤操作6381端口的redis即可,此处不再贴命令。

在主机中查看信息:

127.0.0.1:6379> INFO replication
# Replication
role:master
connected_slaves:2 # 从机数量:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=56,lag=0 # 从机1
slave1:ip=127.0.0.1,port=6381,state=online,offset=56,lag=0 # 从机2
master_replid:e9f03b8ed7269a557d899281999c5b8617b87ec1
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:56
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:56

注意:命令寻主方式还有一个问题,如果主机是设置了密码的,需要在从机的配置文件中的# masterauth <master-password>去掉#并且设置好自己的密码,否则主机是查看主机信息时会发现connected_slaves:0

第二种方式:配置文件寻主

命令寻主存在一个问题,那就是这种主从关系是暂时的,也就是说在重启服务之后主从关系就会丢失。所以在正式的开发中,都是在配置文件中指定主机的。

具体位置如下:

Redis篇之主从复制及哨兵模式

这样配置之后,从机重启时会自动寻主。

3.5、验证

主机命令:

127.0.0.1:6379> set name zhangsan
OK
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> KEYS *
1) "name"
2) "age"
127.0.0.1:6379> 

从机命令:

# 6380
127.0.0.1:6380> KEYS *
1) "name"
2) "age"
127.0.0.1:6380> get name
"zhangsan"

# 6381
127.0.0.1:6381> KEYS *
1) "name"
2) "age"
127.0.0.1:6381> get age
"20"

可以发现,两台从机都是可以读取到主机写入的数据的

那么这时就有一个问题,我们能不能用从机写数据,主机读数据?

127.0.0.1:6381> SET class 5
(error) READONLY You can't write against a read only replica.

不难发现,从机是不能进行写入操作的,其实配置文件中对此也有相关说明:官方解释是为了保证只读从机的安全性,具体如下:

Redis篇之主从复制及哨兵模式

在默认情况下,主机断电或者宕机后,从机的角色并不会发生变化,此时只能对数据库做读操作。直到主机恢复后,又会重新进行连接,恢复写操作。

那么此时就出现了一个新的问题,能不能在主机断电或者宕机的情况下,从机之间出现一个挑大梁的,担任起主机的角色,从而保证写操作的正常呢?

答案是有的,其实有两种方法可以达到此目的。

1、自我举荐

2、自动选举

什么叫自我举荐,就是我可以通过在从机上跑命令来任命当前从机为主机

# 6379
127.0.0.1:6379> SHUTDOWN save # 断开主机
not connected> exit


# 6380
127.0.0.1:6380> INFO replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:down # 发现此时主机的状态是down,掉线状态
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_repl_offset:2316
master_link_down_since_seconds:55
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:e9f03b8ed7269a557d899281999c5b8617b87ec1
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2316
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:2316
127.0.0.1:6380> SLAVEOF no one # 设置此从机为新的主机
OK
127.0.0.1:6380> INFO replication
# Replication
role:master # 角色成为了master
connected_slaves:0
master_replid:4413ca55dd34deb7deff01191b7c48f1806b398c
master_replid2:e9f03b8ed7269a557d899281999c5b8617b87ec1
master_repl_offset:2316
second_repl_offset:2317
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:2316

但是这种方式相对笨重,将6380变为主机之后,我们还需要手动操作6381认6380为主

所以此时就出现了一种更为高级的方式:自我选举,也就是大名鼎鼎的哨兵模式

4、哨兵模式(重点)

哨兵模式(Sentinel):可以理解为是一个监控,开启后哨兵会一直巡逻监视各个节点的情况,当master节点挂掉的时候,会从存活的从机中通过投票选举的方式选出一个从机成为新的master

单哨兵模式

Redis篇之主从复制及哨兵模式

哨兵的作用:

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

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

多哨兵模式

Redis篇之主从复制及哨兵模式

假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为主观下线。当后面的哨兵也检测到主服务器不可用,并且数量达到一 定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover[故障转移]操作。 切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线

配置哨兵

1、配置哨兵配置文件:sentinel.conf

sentinel monitor myRedis 127.0.0.1 6379 1
# myRedis表示hostname,你可以自己随意取名
# 最后的数字1表示当主机挂了之后,在从机中进行投票选主,票数大于1的晋升为主机

daemonize yes #设置为守护进程模式,为了更好的看哨兵的效果,可以先注释以观察投票选主的过程

2、启动哨兵

[root@template src]# ./redis-sentinel ../conf/sentinel.conf 
[root@template src]# ps -ef|grep redis
root      9941     1  0 16:58 ?        00:00:01 ./redis-server *:6379
root     10015     1  0 16:58 ?        00:00:01 ./redis-server *:6380
root     10042     1  0 16:58 ?        00:00:01 ./redis-server *:6381
root     14274  3592  0 17:02 pts/2    00:00:00 ./redis-cli -p 6379
root     15412     1  0 17:27 ?        00:00:00 ./redis-sentinel *:26379 [sentinel]
root     15418  4006  0 17:28 pts/4    00:00:00 grep --color=auto redis

3、测试

按照一主二从启动79/80/81,查看状态

断开79,查看80/81的状态,会发现主机变成了80/81其中的一台,并且另一台成为了新主机的从机

哨兵模式的优缺点

优点:

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

缺点:

  1. Redis不好在线扩容,集群容量一旦达到上限,在线扩容就十分麻烦

  2. 实现哨兵模式的配置很麻烦,里面有很多选择文章来源地址https://www.toymoban.com/news/detail-414861.html

到了这里,关于Redis篇之主从复制及哨兵模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Redis(主从复制、哨兵模式、集群)概述及部署

    Redis(主从复制、哨兵模式、集群)概述及部署

    目录 一、Redis高可用 二、redis持久化 2.1 持久化的功能 2.2 Redis 提供两种方式进行持久化 2.3 RDB 持久化 2.3.1 触发条件  2.3.2 执行流程 2.3.3 启动时加载 2.4 AOF持久化 2.5 执行流程 2.5.1 命令追加(append)  2.5.2 文件写入(write)和文件同步(sync) 2.5.3 文件重写(rewrite) 2.5.3.1 文件重写的

    2024年02月15日
    浏览(9)
  • 【Redis】三种集群模式(主从复制、哨兵模式、Cluster)

    【Redis】三种集群模式(主从复制、哨兵模式、Cluster)

    redis有三种集群模式,其中主从是最常见的模式。Sentinel 哨兵模式是为了弥补主从复制集群中主机宕机后,主备切换的复杂性而演变出来的。哨兵顾名思义,就是用来监控的,主要作用就是监控主从集群,自动切换主备,完成集群故障转移。cluster 模式是redis官方提供的集群模

    2024年01月21日
    浏览(10)
  • redis高可用——主从复制、哨兵模式、cluster集群

    redis高可用——主从复制、哨兵模式、cluster集群

    目录 1、redis群集有三种模式 2、主从复制 2.1、概述: 2.2、Redis主从复制有以下几个重要作用: 2.3、主从复制流程: 2.4、redis主从复制实验 3、哨兵模式. 3.1、概述: 3.2、 哨兵的核心功能: 3.3、哨兵模式原理: 3.6、 哨兵模式的作用; 3.7、故障转移机制 3.8、主节点的选举: 3.9、主

    2024年02月09日
    浏览(11)
  • Redis主从复制、哨兵模式、集群模式的搭建与springboot集成

    Redis主从复制、哨兵模式、集群模式的搭建与springboot集成

    Redis有三种模式:分别是主从同步/复制、哨兵模式、Cluster 主从复制 :主从复制是高可用Redis的基础,哨兵和群集都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单故障恢复。 缺陷:故障恢复无法自动化,写操作无

    2024年02月02日
    浏览(10)
  • Redis高可用(主从复制、哨兵模式和Cluster集群)

    Redis高可用(主从复制、哨兵模式和Cluster集群)

    目录 一、Redis高可用 1.持久化 2.主从复制 3.哨兵 4.Cluster集群 二、主从复制 1.概念 2.作用 3.主从复制流程 4.配置主从复制 三、哨兵模式 1.功能 2.作用 3.组成 4.故障转移机制 5.主节点选举依据 6.配置哨兵模式 7.故障模拟 8.恢复故障节点 四、Cluster群集 1.简介 2.作用 (1)数据分区

    2024年02月15日
    浏览(14)
  • Redis数据库 | 发布订阅、主从复制、哨兵模式、缓存雪崩

    Redis数据库 | 发布订阅、主从复制、哨兵模式、缓存雪崩

    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息 Redis 客户端可以订阅任意数量的频道 Redis主从复制是指在Redis中设置一个主节点(Master)和一个或多个从节点(Slave),

    2024年02月15日
    浏览(12)
  • Linux Redis主从复制 | 哨兵监控模式 | 集群搭建 | 超详细

    Linux Redis主从复制 | 哨兵监控模式 | 集群搭建 | 超详细

    4.1 环境部署 4.2 安装Redis(主从服务器) 4.3 修改Master节点Redis配置文件 (192.168.163.100) 4.4 修改Slave节点Redis配置文件 (192.168.163.110 192.168.163.120) 4.5 验证结果 5.1 哨兵模式的原理 5.2 哨兵模式的作用 5.3哨兵模式的结构 哨兵结构由两部分组成, 哨兵节点 和 数据节点 : 哨兵节点:

    2023年04月14日
    浏览(10)
  • 从小白到大神之路之学习运维第41天---第三阶段---Redis高可用集群(redis 的主从复制、redis的哨兵模式操作)

    从小白到大神之路之学习运维第41天---第三阶段---Redis高可用集群(redis 的主从复制、redis的哨兵模式操作)

    第三阶段基础 时  间:2023年6月15日 参加人:全班人员 内  容: Redis高可用集群 目录 一、redis主从复制原理介绍 主从复制特点: 主从复制实现原理: 二、主从复制实现操作(多机实例实现)   前提配置: 主库操作: 从库一操作: 从库二操作: 主库变化: 验  证: 三、

    2024年02月09日
    浏览(14)
  • Redis---主从复制 & 哨兵

    Redis---主从复制 & 哨兵

    目录 一、主从复制 1、什么是主从复制呢? 2、案例演示  2.1  配置文件   2.2   一主二仆 2.2.1 相关题目: 2.3  薪火相传    反客为主 3、复制原理和工作流程 3.1、slave启动,同步清初 3.2  首次连接,全量复制 3.3  心跳持续,保持通信(和TCP的心跳数据包很像)  3.4  进入

    2024年02月05日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包