主从复制-哨兵模式

1、什么是哨兵模式

反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从机转换为主机

2. 怎么实现哨兵模式

  1. 开启三个redis形成一主二从模式
  2. 自定义的/myredis目录下新建sentinel.conf文件,名字绝对不能错
  3. 配置哨兵,填写内容
sentinel monitor mymaster 127.0.0.1 主机端口 1
# 其中mymaster为监控对象起的服务器名称(主机名称) 1 为至少有多少个哨兵同意迁移的数量
  1. 启动哨兵
redis-sentinel 哨兵配置文件
[root@iZbp1htnoa70qlle394f3wZ myRedis]# redis-sentinel sentinel.conf
[root@iZbp1htnoa70qlle394f3wZ ~]# redis-sentinel /myRedis/sentinel.conf
18385:X 23 Jun 2022 11:01:31.349 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
18385:X 23 Jun 2022 11:01:31.349 # Redis version=5.0.14, bits=64, commit=00000000, modified=0, pid=18385, just started
18385:X 23 Jun 2022 11:01:31.349 # Configuration loaded
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 5.0.14 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in sentinel mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 26379
| `-._ `._ / _.-' | PID: 18385
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
18385:X 23 Jun 2022 11:01:31.350 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
18385:X 23 Jun 2022 11:01:31.350 # Sentinel ID is 2634eddce944efcd10839c8c295e14e6cdc3ec8c
18385:X 23 Jun 2022 11:01:31.350 # +monitor master mymaster 127.0.0.1 6479 quorum 1 # 监控的主机信息
  1. 测试哨兵
    将主机停止,观察哨兵的输出
18385:X 23 Jun 2022 11:01:31.350 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
18385:X 23 Jun 2022 11:01:31.350 # Sentinel ID is 2634eddce944efcd10839c8c295e14e6cdc3ec8c
18385:X 23 Jun 2022 11:06:08.116 # +sdown master mymaster 127.0.0.1 647979 quorum 1
18385:X 23 Jun 2022 11:06:08.116 # +odown master mymaster 127.0.0.1 6479 #quorum 1/1
18385:X 23 Jun 2022 11:06:08.116 # +new-epoch 1
18385:X 23 Jun 2022 11:06:08.116 # +try-failover master mymaster 127.0.0.1 6479
18385:X 23 Jun 2022 11:06:08.118 # +vote-for-leader 2634eddce944efcd10839c8c295e14e6cdc3ec8c 1
18385:X 23 Jun 2022 11:06:08.118 # +elected-leader master mymaster 127.0.0.1 6479
18385:X 23 Jun 2022 11:06:08.118 # +failover-state-select-slave master mymaster 127.0.0.1 6479
18385:X 23 Jun 2022 11:06:08.208 # +selected-slave slave 127.0.0.1:6481 127.0.0.1 6481 @ mymaster 127.0.0.1 6479
18385:X 23 Jun 2022 11:06:08.208 * +failover-state-send-slaveof-noone slave 127.0.0.1:6481 127.0.0.1 6481 @ mymaster 127.0.0.1 6479
18385:X 23 Jun 2022 11:06:08.308 * +failover-state-wait-promotion slave 127.0.0.1:6481 127.0.0.1 6481 @ mymaster 127.0.0.1 6479
18385:X 23 Jun 2022 11:06:08.310 # +promoted-slave slave 127.0.0.1:6481 127.0.0.1 6481 @ mymaster 127.0.0.1 6479
18385:X 23 Jun 2022 11:06:08.310 # +failover-state-reconf-slaves master mymaster 127.0.0.1 6479
18385:X 23 Jun 2022 11:06:08.367 * +slave-reconf-sent slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6479
18385:X 23 Jun 2022 11:06:09.356 * +slave-reconf-inprog slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6479
18385:X 23 Jun 2022 11:06:09.356 * +slave-reconf-done slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6479
18385:X 23 Jun 2022 11:06:09.419 # +failover-end master mymaster 127.0.0.1 6479
18385:X 23 Jun 2022 11:06:09.419 # +switch-master mymaster 127.0.0.1 6479 127.0.0.1 6481 # 将6481提升为主机
18385:X 23 Jun 2022 11:06:09.419 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6481
18385:X 23 Jun 2022 11:06:09.419 * +slave slave 127.0.0.1:6479 127.0.0.1 6479 @ mymaster 127.0.0.1 6481 # 原来的主机变成了从机
18385:X 23 Jun 2022 11:06:39.426 # +sdown slave 127.0.0.1:6479 127.0.0.1 6479 @ mymaster 127.0.0.1 6481

我们再次启动原先的主机(6479),打印信息

127.0.0.1:6479> info replication
# Replication
role:slave # 发现它已经变为从机
master_host:127.0.0.1
master_port:6481 # 主机为哨兵时切换的主机
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:124137
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:2ef742d412f1a564a98c0a378f0d9abe9eebbcdc
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:124137
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:123156
repl_backlog_histlen:982

3. 复制延时

由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到slave机器有一定的延时,当系统很繁忙的时候,延迟问题会更加严重,slave机器数量的增加也会使这个问题更加严重。

4. 选择方式

image
优先级在redis.conf中默认:slave priority 100 ,值越小优先级越高

偏移量是指获得源主机数据最全的

每个redis实例启动后都会随机生成一个40位的runid

posted @   小罗要有出息  阅读(239)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示