Redis【4】 - 主从复制、心跳机制、哨兵
- 上一篇: https://blog.csdn.net/LawssssCat/article/details/105131393
- 下一篇:https://lawsssscat.blog.csdn.net/article/details/105157134
Redis 集群概述
单台 Redis 服务器可能遇到的问题
- 单个 Redis 服务器会发生 单点故障, 并且一台服务器需要处理所有的请求负载,压力较大 (容错性差)
- 从容量上,单个 Redis 服务器的内存容量有限,就算一台 Redis 服务器内容容量为 256G,也不能将所有内容作为 Redis 存储内容。
一般来说,单台Redis最大使用内容不应该超过 20G
基本描述
- 高可用 (High Availability):通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高可用。
- 高并发(High Concurrency):通过设计保证系统能够同时并行处理很多请求
通常指标有:
- 响应时间(Response Time)
- 吞吐量(Throught)
- 每秒查询率 QPS (Query Per Second)
- 并发用户数
- 等
响应来说,牺牲了 一致性
提升系统的并发能力
提升系统并发能力的方式,主要有两种:垂直扩展(Scale Up)与水平扩展(Scale Out)。
# 垂直扩展(升硬件)
垂直扩展:提升单机处理能力。垂直扩展的方式只有两种
增强单机硬件性能,如:
添加 CPU 核数如 32 核,升级更好的网卡如万兆,升级根号的硬盘如SSD,扩充硬盘容量如 2T,扩充系统内存如 128G提升单机架构性能,如:
使用 Cache 来减少 IO 次数,使用异步来增加单服务吞吐量,使用无锁数据结构来减少响应时间
如果预算不是问题,单机扩展往往最自接,快捷
但有一个致命的不足,单机性能总是有限的。
所以分布式架构设计高并发终极解决方案还是水平扩展
# 水平扩展(分压力)
水平扩展:只要增加服务器数量,就能线性扩充系统性能。
水平扩展对系统架构设计是有要求的,难点在于:如何在架构各层进行可水平扩展 的设计
Redis 主从复制
简介
一个 Redis 服务可以有多个该服务的复制品,这个 Redis 服务成为 Master
其他复制称为 Slaves
如图:我们将一个 Redis 服务器作为主库(master),其他三台作为从库(Slave),主库只负责写数据,每次有数据库更新的数据同步到它所有的从库,而从库只负责读数据。
两个好处:
- 读写分离:提高服务器的负载能力,可根据读请求的规模自由增加或减少从库的数量
- 可用性:数据被复制成好几份,一台机器故障,可以快速从其他机器获取数据并回复。
在 Redis 主从模式中,一台主库可以拥有多个从库 ,但是一个从库只能隶属于一个主库。
工作流程
# 建立连接阶段 slaveof(或 replicaof)
启动从服务器
设置 master 的 地址和端口,保存 master 信息
# --port 6380 指定从库服务的 端口号
# --slaveof 127.0.0.1 6379 指定主服务器/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf --port 6380 --slaveof 127.0.0.1 6379
加上 slaveof 参数启动另一个 Redis 实例作为从库,并且监听 6380 端口
登录从服务器
/usr/local/redis/bin/redis-cli -p 6380 -a root
主从变换
# 不是任何的从
slaveof no one # 指定从属的主服务器
slaveof ip地址 端口号
# 数据同步阶段 psync
数据同步阶段 master 说明
- 如果master 数据量大,同步阶段应该避免高峰期,避免master 阻塞,影响业务正常执行
- 复制缓冲区大小设定不合理,会导致数据溢出。
如果进行全量复制时,部分复制的缓存区被被填满,会出现指令丢失情况
这种情况下,在进行完成复制后,会进行第二次全量复制(如果部分复制的缓存区一直被填满,一直出现指令丢失,会导致slave陷入死循环状态)
避免这种情况,需要修改主服务器配置:repl-backlog-size 1mb
,来调整复制缓存区的大小。
改多少合理?
计算机性能决定
master 单机内存占用主机内存的哔哩不应过大,建议使用50%~70%
的内存,留下30%~50%
内存用于执行 bgsave命令和创建复制缓冲区
数据同步阶段 slave 说明
为了避免 slave 进行全量复制、部分复制时,服务器响应阻塞或数据不同步,建议关闭此期间的对外服务
slave-server-stale-data yes|no
数据同步阶段,master发送给slave信息可以理解为 master 是 slave的一个客户端,主动向 slave 发送命令
多个 slave 同时对 master 请求数据同步,master 发送的 RDB 文件增多,会对宽带造成巨大冲击。如果master带宽不足,数据同步需要错峰
(后面会讲技术方面的解决方案)slave
过多时,建议调整拓扑结构时,由一主多从结构变成树状结构,中间的节点即是master,也是slave。注意,使用树状结构时,由于层级深度,导致深度越高的 slave 与 最顶层的 master 间数据同步延迟较大,数据一致性差,应谨慎选择
问题解决
PSYNC 失败:-NOMASTERLINK Can’t SYNC while not connected with my master
127.0.0.1:6380> PSYNC Entering replica output mode... (press Ctrl-C to quit) SYNC with master failed: -NOMASTERLINK Can't SYNC while not connected with my master
这个问题,有两个可能性
- 你的主服务器自定义了密码
那么从服务器在连接时要指定主服务器的密码
- 主服务器设置成了 slave 模式(从服务器)
登录客户端,用slaveof no one
命令改回来
- 你的主服务器自定义了密码
master_link_status:down
同步不成功,并且在info里面发现,master_link_status:down
要么是上面的情况,要么是防火墙没开
打开防火墙端口命令# 端口看你自己情况 firewall-cmd --zone=public --add-port=3679/tcp --permanent firewall-cmd --reload
# 命令传播阶段
这个阶段就一句话:保证实时数据同步
- 当 master 数据库状态被修改后,导致主从服务器数据状态不一致,此时需要让主从数据同步到一致的状态,同步的动作成为 命令传播
- master 将接收到的
数据变更命令
发送给 slave,slave 接收命令
后执行命令
。
部分复制(的细节)
命令传播阶段出现了断网现象和处理
- 网络闪断:忽略
- 短时间网络中断:部分复制
- 长时间网络中断:全量复制
部分复制的三个核心要输(下面一个个说)
- 服务器的运行 id (run id)
- 主服务器的复制积压缓冲区 (也就是前面简称的:复制缓冲区)
- 主主从服务器的复制偏移量
1. 服务器运行ID(runid)
- 概念:服务器运行 id 是每台服务器每次运行的身份识别码,一台服务器多次运行可以生成多个运行 id
- 组成:运行 id 由 40 位字符组成,是一个随机的十六进制字符
例如:
1b26e30907309452dede588893477e847cfcedd4
ffffffffffaaaaaaaaaaeeeeeeeeee1111111111 (神选idRedis【4】 - 主从复制、心跳机制、哨兵相关推荐
- Redis 的主从复制
Redis主从复制 概述 一般来说,要将Redis运用于工程项目中,只使用一台Redis是万万不能的,原因如下: 从结构上,单个Redis服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压 ...
- 分布式缓存架构(3)-Redis事务主从复制哨兵机制
Redis的主从复制 概述: redis的复制功能是支持多个数据库之间的数据同步.一类是主数据库,一类是从数据库,主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数据库,而从数据库一般是 ...
- Redis源码解析(15) 哨兵机制[2] 信息同步与TILT模式
Redis源码解析(1) 动态字符串与链表 Redis源码解析(2) 字典与迭代器 Redis源码解析(3) 跳跃表 Redis源码解析(4) 整数集合 Redis源码解析(5) 压缩列表 Redis ...
- Redis运维和开发学习笔记(5) 主从复制和sentinel哨兵模式
Redis运维和开发学习笔记(5) 主从复制和sentinel哨兵模式 主从复制 将主节点的数据改变同步给从节点 作用 备份数据 读写分离 存在的问题: 手动干预切主等操作 主节点的写能力受到单机限制 ...
- 【重难点】【Redis 02】Redis 的持久化、Redis 的主从复制和集群、哨兵
[重难点][Redis 02]Redis 的持久化.Redis 的主从复制和集群.哨兵 文章目录 [重难点][Redis 02]Redis 的持久化.Redis 的主从复制和集群.哨兵 一.Redis ...
- Redis(主从复制、哨兵模式、集群)概述及部署
Redis(主从复制.哨兵模式.集群)概述及部署 前言 一.主从复制 (1)主从复制原理 (2)主从复制作用 (3)主从复制流程 (4)搭建主从复制 ①修改master节点配置文件 ②修改Slave节 ...
- Redis07:redis的主从复制(原理与哨兵模式)、集群(搭建与它的优缺点)
Redis的主从复制 什么的主从复制 主机数据更新后根据配置和策略, 自动同步到备机的master/slaver机制,Master以写为主,slave以读为主 能干什么? 读写分离,性能扩展 容灾快速 ...
- 实现redis 手动_Redis精华所在,一口气说完Redis的主从复制和哨兵模式
主从复制概念 主从复制指将一台redis的数据复制另外一台redis服务器上,前者称为主节点(master),后者称为从节点(slave). 注意复制的过程是单向的,只能从主节点到从节点,主节点以写为 ...
- Redis的主从复制和 哨兵模式
前言 持久化解决了单机redis的数据保存问题,但是redis还是存在以下两个问题: (1)假如某天这台redis服务器挂了,redis服务将彻底丧失 (2)redis的读和写都集中到一台机上,如果请 ...
- Redis的主从复制与高可用搭建(哨兵模式)
前言 为什么要使用Redis 首先我们先介绍些redis的基本概念,redis是Nosql数据库,是一个key-value存储系统.虽然redis是key-value的存储系统,但是redis支持的v ...
最新文章
- golang 调用 c 动态库so 静态库a
- c语言实验设计报告,C语言实验设计报告.doc
- 使用RDLC报表向报表传入参数
- PAT甲级1009 Product of Polynomials:[C++题解]多项式乘法、高精度乘法
- java的xms与xmx和服务器内存_JAVA_OPTS参数-Xms和-Xmx的作用
- 【PHP】创建文件并写入内容
- jquery基础总结
- React-Router面试题汇总
- Java技术系列文章汇集(长期更新)
- mysql批量导入已经格式好的文本数据
- python测试c语言代码_numpy C语言源代码调试(一)
- open_flash_chat
- 城镇化把握质量 数据分析让管理更创新
- Mellanox刘通:开放的理念让Mellanox的优势愈加凸显
- 一位清华学长的CTO成长之路 -- 不断的打破自己的边界
- win10中安装step7 5.6
- 七宗罪----人性本恶
- 梯度消失和梯度爆炸原因及其解决方案
- 软件工程师为什么单身的六宗罪
- 如何在SSD和HDD VPS主机之间进行选择
热门文章
- Redis 的主从复制