Redis主从哨兵与集群

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis主从哨兵与集群介绍及实现

什么是Redis

redis是非关系型、开源,支持水平扩展的NoSQL数据库,基于key-value存储,提供海量的数据访问,支持数据持久化(RDB、AOF模式),可用来做分布式缓存中间件。采用单线程模型使的线程安全且性能瓶颈不束于cpu,避免了不必要的上下文切换和竞争条件,同时它是非阻塞的,采用epoll作为I/O多路复用技术的实现。

RDB模式:

就是每隔一段时间,定时保存,有点像MySQL中进程用到的mysqldump
默认redis就是开启RDB的
优势

  • 每隔一段时间,全量备份
  • 灾备简单,dump.rdb文件拷走就完了
  • 在RDB备份的时候会fork一个新进程来操作,这就不影响提供读写进程的效率了

劣势

  • 当备份后和故障间这段时间的数据无法保存
  • 新fork的子进程会从父进程copy全部的内存数据(这个时候内存会瞬间膨胀两倍),会造成CPU和内存负担
  • 由于是定时的备份,所以时效差

AOF模式:

有点类似于mysql的binlog,他是把我们所有Redis的写操作命令记录下来了
AOF的特点

  • 以日志的形式来记录用于的写操作
  • 文件是以追加的方式而不是修改的方式
  • redis的aof的恢复其实就是把文件从头到位执行一遍

优势

  • 每秒数据的记录和操作
  • aof的文件也是一个,所以当文件比较大的时候会触发aof文件重写机制进行文件压缩

劣势

  • 同样的数据,AOF比RDB大的多
  • aof同步的时候比rdb慢的多
  • AOF重写的时候也会fork一个进程来操作

支持的数据类型

(5大数据常用类型)

string、list、hash、set、zset

redis={
        k1:'123',      字符串
        k2:[1,2,3,4],   列表/数组
        k3:{1,2,3,4}     集合
        k4:{name:lqz,age:12}  字典/哈希表
        k5:{('lqz',18),('egon',33)}  有序集合
}

使用场景

1. 计数器

可以对 String 进行自增自减运算,从而实现计数器功能。

Redis 这种内存型数据库的读写性能非常高,很适合存储频繁读写的计数量。

2. 缓存

将热点数据放到内存中,设置内存的最大使用量以及淘汰策略来保证缓存的命中率。

3. 查找表

例如 DNS 记录就很适合使用 Redis 进行存储。

查找表和缓存类似,也是利用了 Redis 快速的查找特性。但是查找表的内容不能失效,而缓存的内容可以失效,因为缓存不作为可靠的数据来源。

4. 消息队列

List 是一个双向链表,可以通过 lpush 和 rpop 写入和读取消息

不过最好使用 Kafka、RabbitMQ 等消息中间件。

5. 会话缓存

可以使用 Redis 来统一存储多台应用服务器的会话信息。

当应用服务器不再存储用户的会话信息,也就不再具有状态,一个用户可以请求任意一个应用服务器,从而更容易实现高可用性以及可伸缩性。

6. 分布式锁实现(可看分布式锁实战篇)

在分布式场景下,无法使用单机环境下的锁来对多个节点上的进程进行同步。

可以使用 Redis 自带的 SETNX 命令实现分布式锁,除此之外,还可以使用官方提供的 RedLock 分布式锁实现。

7. 其它

Set 可以实现交集、并集等操作,从而实现共同好友等功能。

ZSet 可以实现有序性操作,从而实现排行榜等功能。
**

Redis主从

是指将一台 Redis 服务器的数据,复制到其他的 Redis 服务器。前者称为 主节点(master),后者称为 从节点(slave)。且数据的复制是 单向 的,只能由主节点到从节点。Redis 主从复制支持 主从同步 和 从从同步 两种,后者是 Redis 后续版本新增的功能,以减轻主节点的同步负担。

主从复制主要的作用

  • 数据冗余: 主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
  • 故障恢复: 当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复 (实际上是一种服务的冗余)。
  • 负载均衡: 在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务 (即写 Redis 数据时应用连接主节点,读 Redis 数据时应用连接从节点),分担服务器负载。尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高 Redis 服务器的并发量。
  • 高可用基石: 除了上述作用以外,主从复制还是哨兵和集群能够实施的 基础,因此说主从复制是 Redis 高可用的基础。

实现-----------------------------------------------------------------------------------------------------

# slave的配置
# master的配置
replicaof 127.0.0.1 6379
masterauth icoding
127.0.0.1:6379>info replication

Redis故障转移哨兵

在复制的基础上,哨兵实现了 自动化的故障恢复 功能,下方是官方对于哨兵功能的描述:

  • 监控(Monitoring): 哨兵会不断地检查主节点和从节点是否运作正常。
  • 自动故障转移(Automatic failover): 当 主节点 不能正常工作时,哨兵会开始 自动故障转移操作,它会将失效主节点的其中一个 从节点升级为新的主节点,并让其他从节点改为复制新的主节点。
  • 配置提供者(Configuration provider): 客户端在初始化时,通过连接哨兵来获得当前 Redis 服务的主节点地址。
  • 通知(Notification): 哨兵可以将故障转移的结果发送给客户端。

其中,监控和自动故障转移功能,使得哨兵可以及时发现主节点故障并完成转移。而配置提供者和通知功能,则需要在与客户端的交互中才能体现。

实现-----------------------------------------------------------------------------------------------------

# 建议哨兵也搭建成集群方式,3台redis就搭建3个sentinel
# 先完成一个哨兵的配置,将sentinel.conf进行修改
# 访问控制关闭
protected-mode no
port 26379
daemonize yes
pidfile /var/run/redis-sentinel-26379.pid
dir /usr/local/redis-6379/sentinel
logfile /usr/local/redis-6379/sentinel/redis-sentinel.log
# 哨兵监控的master节点,后面这个2是指几个哨兵发现master宕机了,才进行故障转移
sentinel monitor mymaster 127.0.0.1 6379 2
# 设置主机访问密码
sentinel auth-pass mymaster xxxx
# 这是哨兵多久连接不上master就认为master宕机了的时间,单位是毫秒
sentinel down-after-milliseconds mymaster 3000
# 新的master出现后,其他follow的slave并行同步的个数,并行的越多同时阻塞的就越多
sentinel parallel-syncs mymaster 1

其他sentinel配置需要根据实际情况修改端口号即可

# 启动哨兵
redis-sentinel sentinel.conf
# 进入哨兵进行状态查询
sentinel master mymaster
sentinel slaves mymaster
sentinel sentinels mymaster

Redis 集群

集群的主要作用

  1. 数据分区: 数据分区 (或称数据分片) 是集群最核心的功能。集群将数据分散到多个节点,一方面 突破了 Redis 单机内存大小的限制,存储容量大大增加;另一方面 每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力。Redis 单机内存大小受限问题,在介绍持久化和主从复制时都有提及,例如,如果单机内存太大,bgsave 和 bgrewriteaof 的 fork 操作可能导致主进程阻塞,主从环境下主机切换时可能导致从节点长时间无法提供服务,全量复制阶段主节点的复制缓冲区可能溢出……
  2. 高可用: 集群支持主从复制和主节点的 自动故障转移 (与哨兵类似),当任一节点发生故障时,集群仍然可以对外提供服务。

集群的特性

  • HA的:每个集群节点都是一组M/S(主/从),为什么是三组节点?3个节点,6个Redis
  • 分布式的:

    • 三个Master,三个slave
    • 数据是根据crc16(key)mod 16384分摊到三个master节点上

Slot槽点

  • Redis会在创建的时候生成16384个slot(固定数值,不变,可以理解为文件夹)
  • 16384/3=5461(如果除不尽,会在一个master上多放一个slot)
  • 每一个key在set时会hash个固定文件夹里,三个master的total才是完整数据
  • 每个slot原则上可以放无数个key,依赖于内存大小

如果三台master内存不够需要扩展

  • 只需要在集群中加入新的master
  • 把现有master上的slot移动一部分给他就行

实现-----------------------------------------------------------------------------------------------------
创建六个配置文件,然后根据不同的端口号修改对应的端口值

# 后台执行
daemonize yes
# 端口号
port xxxx
# 为每一个集群节点指定一个 pid_file
pidfile ~/Desktop/redis-cluster/redis_xxxx.pid
# 启动集群模式
cluster-enabled yes
# 每一个集群节点都有一个配置文件,这个文件是不能手动编辑的。确保每一个集群节点的配置文件不通
cluster-config-file nodes-xxxx.conf
# 集群节点的超时时间,单位:ms,超时后集群会认为该节点失败
cluster-node-timeout 5000
# 最后将 appendonly 改成 yes(AOF 持久化)
appendonly yes

分别启动 6 个 Redis 实例

redis-server ~/Desktop/redis-cluster/redis_xxxx.conf

建立集群

redis-cli --cluster create --cluster-replicas 1 127.0.0.1:xxxx 127.0.0.1:xxxx 127.0.0.1:xxxx 127.0.0.1:xxxx 127.0.0.1:xxxx 127.0.0.1:xxxx
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
16天前
|
NoSQL Linux Redis
06- 你们使用Redis是单点还是集群 ? 哪种集群 ?
**Redis配置:** 使用哨兵集群,结构为1主2从,加上3个哨兵节点,总计分布在3台Linux服务器上,提供高可用性。
228 0
|
24天前
|
负载均衡 监控 NoSQL
Redis的集群方案有哪些?
Redis集群包括主从复制(基础,手动故障恢复)、哨兵模式(自动高可用)和Redis Cluster(官方分布式解决方案,自动分片和容错)。此外,还有如Codis、Redisson和Twemproxy等第三方工具用于代理和负载均衡。选择方案需考虑应用场景、数据规模和并发需求。
191 2
|
30天前
|
NoSQL Redis
Redis集群(六):集群常用命令及说明
Redis集群(六):集群常用命令及说明
187 0
|
1天前
|
NoSQL Redis
Redis入门到通关之Redis主从数据同步原理
Redis入门到通关之Redis主从数据同步原理
|
1天前
|
存储 NoSQL 算法
Redis 搭建分片集群
Redis 搭建分片集群
|
24天前
|
NoSQL Java 测试技术
面试官:如何搭建Redis集群?
**Redis Cluster** 是从 Redis 3.0 开始引入的集群解决方案,它分散数据以减少对单个主节点的依赖,提升读写性能。16384 个槽位分配给节点,客户端通过槽位信息直接路由请求。集群是无代理、去中心化的,多数命令直接由节点处理,保持高性能。通过 `create-cluster` 工具快速搭建集群,但适用于测试环境。在生产环境,需手动配置文件,启动节点,然后使用 `redis-cli --cluster create` 分配槽位和从节点。集群动态添加删除节点、数据重新分片及故障转移涉及复杂操作,包括主从切换和槽位迁移。
32 0
面试官:如何搭建Redis集群?
|
28天前
|
存储 缓存 NoSQL
【Redis深度专题】「核心技术提升」探究Redis服务启动的过程机制的技术原理和流程分析的指南(集群功能分析)(一)
【Redis深度专题】「核心技术提升」探究Redis服务启动的过程机制的技术原理和流程分析的指南(集群功能分析)
320 0
|
1月前
|
NoSQL Redis Docker
使用Docker搭建一个“一主两从”的 Redis 集群(超详细步骤)
使用Docker搭建一个“一主两从”的 Redis 集群(超详细步骤)
68 0
|
6月前
|
存储 NoSQL 网络安全
Redis安装(单机、主从、哨兵、集群)
Redis安装(单机、主从、哨兵、集群)
132 1
|
8月前
|
NoSQL Redis 数据安全/隐私保护
redis高可用环境搭建(主从+哨兵)
redis高可用环境搭建(主从+哨兵)
74 0

热门文章

最新文章