Redis集群实现多数据库储存的高效方案 (redis集群 多数据库)

随着互联网技术的不断发展,数据存储和管理的需求也越来越高。在这个过程中,NoSQL数据库逐渐崭露头角。其中,Redis作为一款高性能的NoSQL数据库,已经被广泛应用于互联网业界。为满足业务需求,有时需要将多个数据源保存到不同的数据库中。本文将介绍如何使用。

一、Redis集群概览

在讨论Redis集群实现多数据库储存的方案之前,首先需要了解Redis集群的概念。Redis集群是一组相互协作的Redis节点,通过数据自动分片实现数据的高可用和横向扩展。Redis集群在运行时,自动将数据分布在不同节点上,同时提供一致性哈希算法的支持,确保操作的线性化,保证了系统的高可用性和性能。

二、Redis集群多数据库的方案

Redis集群提供了多个数据库的支持,通过选择不同的数据库实现对多个数据源的存储。可以通过在配置文件中指定不同的数据库数目,然后通过SELECT语句选择不同的数据库进行存储和查询。

Redis的SELECT语句支持范围是0-15,共16个数据库。例如,通过SELECT 0选择之一个数据库进行数据存储,通过SELECT 1选择第二个数据库进行数据存储,以此类推。

Redis集群的多数据库方案可以使用以下两种方式进行实现:

1. 手动分片

手动分片是一种最基本的方案。通过将数据按照一定规则映射到多个节点中进行存储,这种方式能够满足基本的多数据库储存需求。

这种方案的优点在于简单易实现,适用于小型数据量的应用。但是,这种分片方案存在着一些缺点。手动分片需要对数据进行一定的规则划分,当节点数目增加时,规则的制定和管理会变得困难。如果有一台节点出现问题,需要进行手动数据迁移,这会影响系统的可用性。

2. 使用Redis官方内置工具cluster

Redis官方提供了内置工具cluster,可以自动实现数据的分片和迁移。在cluster模式下,Redis将数据自动划分为多个槽,并使用一致性哈希算法将槽映射到不同的节点进行存储。在cluster模式下,每个节点只需要管理一部分的槽,当发生节点失效、新增节点等情况时,数据会自动进行迁移,系统可用性得到保证。

三、Redis集群多数据库方案的应用场景

Redis集群多数据库方案的应用场景非常广泛,下面列举一些常见的场景。

1. 大数据量高并发的应用场景。

在高并发的场景下,单节点的Redis的容量和性能会存在瓶颈,在这种情况下,仅仅通过Redis机器的横向扩展,是被动的,或者说可能是难以实现的。而Redis集群在现实中得到了广泛的应用。Redis集群架构可以通过自动数据分片、数据分散,实现大容量的请求数量,同时还保证了高可用性。

2. 面向服务的多数据库架构

面向服务的多数据库架构在现今的互联网应用场景中被广泛应用。例如,在一些大型企业的网站应用中,不同的业务使用需要不同的数据源,而这些数据源可能是由不同的Redis服务器提供的,通过Redis集群多数据库方案,可以将不同的数据源存储到不同的Redis database中,并通过SELECT语句进行区分。

3. 日志收集和分析系统。

在日志收集和分析系统中,日志数量巨大,传统的存储结构可能会导致大量数据拆分和存储。Redis集群多数据库方案可以将不同的日志存储到不同的数据库中,并通过SELECT语句进行区分,同时保证了存储效率和可用性。

四、Redis集群多数据库架构方案的优势

Redis集群多数据库架构方案的优势在于高可用性、自动分片和易扩展。

1. 高可用性

Redis集群中的每个节点都有自己的主从复制机制,因此如果有节点出现问题,其他节点会自动进行迁移工作,以确保数据的可用性。

2. 自动分片

自动分片是Redis集群的核心能力之一,集群自动将数据分布在不同的节点上,可以有效地提高系统的容量和性能。

3. 易扩展性

Redis集群架构可以通过配置文件或者命令行进行节点的添加或删除,对于集群的扩容或缩容非常方便。

Redis集群多数据库方案是为了应对大数据量、高并发的场景而提供的解决方案。Redis集群使用一致性哈希算法对数据进行自动划分和平衡,以实现高可用性和高性能的数据存储。在实际应用中,使用Redis集群多数据库方案可以提高数据存取的效率,同时减少了维护成本。相信在未来的发展中,Redis集群在多数据库储存方案的应用中将会得到更加广泛的应用。

相关问题拓展阅读:

  • 玩转Redis的高可用(主从、哨兵、集群)

玩转Redis的高可用(主从、哨兵、集群)

所谓的高可用,也叫 HA(High Availability),是分布式系统架构设计中必须考虑的因素之一,它是保证系统SLA的重要指标。Redis 高可用的主要有三种模式:

主从模式

哨兵模式和集群模式

Redis 提供了 Redis 提供了复制(replication)功能,当一台 redis 数据库中的数据发生了变化,这个变化会被自动地同步到其他的 redis 机器上去。

Redis 多机器部署时,这些机器节点会被分成两类,一类是主节点(master 节点),一类是从节点(slave 节点)。一般

主节点可以进行读、写操作

,而

从节点只能进行读操作

。一个主节点可以有多个从节点,但是一个从节点只会有一个主节点,也就是所谓的

一主多从结构

· 支持主从复制,主机会自动将数据同步到从机,可以进行读写分离;

· Master 是以非阻塞的方式为主 Slaves 提供服务。所以在 Master-Slave 同步期间,客户端仍然可以提交查询或修改请求;

· Slave 同样是以非阻塞的方式完成数据同步。在同步期间,如果有客户端提交查询请求,Redis 则返回同步之前的数据。

· Redis 不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的 IP 才能恢复;

· 主机宕机,宕机前有部分数据未能及时同步到从机,切换 IP 后面还会引入数据不一致的问题,降低了系统的可用性;

· Redis 较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂;

· Redis 的主节点和从节点中的数据是一样的,降低的内存的可用性

实际生产中,我们优先考虑哨兵模式。这种模式下,master 宕机,哨兵会自动选举 master 并将其他的 slave 指向新的 master。

在主从模式下,redis 同时提供了哨兵命令 redis-sentinel ,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵进程向所有的 redis 机器人发送命令,等待 Redis 服务器响应,从而监控运行的多个 Redis 实例。一般为了便于决策选举,使用

奇数个哨兵

。多个哨兵构成一个哨兵集群,哨兵直接也会相互通信,检查哨兵是否正常运行,同时发现 master 战机哨兵之间会进行决策选举新的 master

哨兵模式的作用:

· 通过发送命令,让 Redis 服务器返回监控其运行状态,包括主服务器和从服务器;

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

哨兵很像 kafka 集群中的 zookeeper 的功能。

· 哨兵模式是基于主从模式的,所有主从的优点,哨兵模式都具有。

· 主从可以自动切换,系统更健壮,可用性更高。

· 具有主从模式的缺点,每台机器上的数据是一样的,内存的可用性较低。

· Redis 较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。

Redis 集群模式本身没有使用一致性 hash 算法,而是使用 slots 插槽

Redis 哨兵模式基本已经可以实现高可用,读写分离 ,但是在这种模式下每台 Redis 服务器都存储相同的数据,很浪费内存,所以在 redis3.0 上加入了 Cluster 集群模式,实现了 Redis 的分布式存储,对数据进行分片,也就是说每台 Redis 节点上存储不同的内容;每个节点都会通过集群总线(cluster bus),与其他的节点进行通信。

通讯时使用特殊的端口号,即对外服务端口号加 10000。例如如果某个 node 的端口号是 6379,那么它与其它 nodes 通信的端口号是 16379。nodes 之间的通信采用特殊的二进制协议。

对客户端来说,整个 cluster 被看做是一个整体,客户端可以连接任意一个 node 进行操作,就像操作单一 Redis 实例一样,

当客户端操作的时候 key 没有分配到该 node 上时,Redis 会返回转向指令,指向正确的 node,这有点儿像浏览器页面的 302 redirect 跳转。

根据官方推荐,集群部署至少要 3 台以上的 master 节点,更好使用 3 主 3 从六个节点的模式。

在 Redis 的每一个节点上,都有这么两个东西,

一个是插槽(slot),它的的取值范围是:,

可以从上面 redis-trib.rb 执行的结果看到这个 slot 在三个 master 上的分布。还有一个就是 cluster,可以理解为是一个集群管理的插件,类似的哨兵。

当我们的存取的 Key 到达的时候,Redis 会根据

crc16

的算法对计算后得出一个结果,然后把结果和求余数,这样每个 key 都会对应一个编号在之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。

为了保证高可用,

redis-cluster 集群引入了主从模式

,一个主节点对应一个或者多个从节点。当其它主节点 ping 主节点 master 1 时,如果半数以上的主节点与 master 1 通信超时,那么认为 master 1 宕机了,就会启用 master 1 的从节点 slave 1,将 slave 1 变成主节点继续提供服务。

如果 master 1 和它的从节点 slave 1 都宕机了,整个集群就会进入 fail 状态,因为集群的 slot 映射不完整。

如果集群超过半数以上的 master 挂掉,无论是否有 slave,集群都会进入 fail 状态。

redis-cluster

采用去中心化的思想

,没有中心节点的说法,客户端与 Redis 节点直连,不需要中间代理层,客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。

对 redis 集群的扩容就是向集群中添加机器,缩容就是从集群中删除机器,并重新将个 slots 分配到集群中的节点上(数据迁移)。

扩缩容也是使用集群管理工具 redis-tri.rb。

扩容时,先使用 redis-tri.rb add-node 将新的机器加到集群中,这是新机器虽然已经在集群中了,但是没有分配 slots,依然是不起做用的。在使用 redis-tri.rb reshard 进行分片重哈希(数据迁移),将旧节点上的 slots 分配到新节点上后,新节点才能起作用。

缩容时,先要使用 redis-tri.rb reshard 移除的机器上的 slots,然后使用 redis-tri.rb add-del 移除机器。

采用去中心化思想,数据按照 slot 存储分布在多个节点,节点间数据共享,可动态调整数据分布;

可扩展性:可线性扩展到 1000 多个节点,节点可动态添加或删除;

高可用性:部分节点不可用时,集群仍可用。通过增加 Slave 做 standby 数据副本,能够实现故障自动 failover,节点之间通过 gossip 协议交换状态信息,用投票机制完成 Slave 到 Master 的角色提升;

降低运维成本,提高系统的扩展性和可用性。

1.Redis Cluster 是无中心节点的集群架构,依靠 Goss 协议(谣言传播)协同自动化修复集群的状态。但 GosSIp 有消息延时和消息冗余的问题,在集群节点数量过多的时候,节点之间需要不断进行 PING/PANG 通讯,不必须要的流量占用了大量的网络资源。虽然 Reds4.0 对此进行了优化,但这个问题仍然存在。

2.数据迁移问题

Redis Cluster 可以进行节点的动态扩容缩容,这一过程,在目前实现中,还处于半自动状态,需要人工介入。在扩缩容的时候,需要进行数据迁移。

而 Redis 为了保证迁移的一致性,迁移所有操作都是同步操作

,执行迁移时,两端的 Redis 均会进入时长不等的阻塞状态,对于小 Key,该时间可以忽略不计,但如果一旦 Key 的内存使用过大,严重的时候会接触发集群内的故障转移,造成不必要的切换。

主从模式:master 节点挂掉后,需要手动指定新的 master,可用性不高,基本不用。

哨兵模式:master 节点挂掉后,哨兵进程会主动选举新的 master,可用性高,但是每个节点存储的数据是一样的,浪费内存空间。数据量不是很多,集群规模不是很大,需要自动容错容灾的时候使用。

集群模式:数据量比较大,QPS 要求较高的时候使用。

Redis Cluster 是 Redis 3.0 以后才正式推出,时间较晚,目前能证明在大规模生产环境下成功的案例还不是很多,需要时间检验。

关于redis集群 多数据库的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《Redis集群实现多数据库储存的高效方案 (redis集群 多数据库)》
文章链接:https://zhuji.vsping.com/135756.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。