Redis集群三种方式详解

一、Redis集群三种方式的优缺点

Redis集群主要有三种方式,分别是:一主一从、一主多从、三主三从。它们各自有优缺点:

一主一从:利用主从复制来实现数据备份,当主节点宕机时,从节点可以顶替主节点成为主节点,实现高可用性。这种方式的优点是部署简单,不需要考虑负载均衡、数据拆分等问题。缺点则是数据容灾能力有限,扩展性不够。

一主多从:一个主节点可以配多个从节点,实现读写分离和负载均衡,即主节点可读写,从节点只读。这种方式的优点是可扩展性较好,可根据需求调整从节点数量以满足负载需求;能够有效利用多台机器的计算资源,提高系统整体吞吐量;同时主节点出现故障时,从节点之间可以选举出一台作为主节点,实现高可用性。缺点是容灾能力相对一主一从模式也有限,而且主节点过多时容易导致节点间通信负担加重。

三主三从:与一主多从类似,三个主节点通过Paxos算法协商确定,主节点之间进行复制,从节点对主节点进行读写分离。三主三从的优点是数据容灾能力强,可扩展性较好,同时也能够容忍多个主节点之间出现故障,具备高可用性。

二、Redis集群三种方式的配置

Redis集群的三种方式都需要在配置文件redis.conf中进行相应的配置。

1、一主一从配置

# Master节点配置
port 6379
daemonize yes
bind 127.0.0.1
pidfile /var/run/redis_6379.pid
loglevel notice
logfile /var/log/redis/redis_6379.log
dir /var/lib/redis/6379
requirepass xyqzyh5678

# Slave节点配置
slaveof 127.0.0.1 6379
port 6380
daemonize yes
bind 127.0.0.1
pidfile /var/run/redis_6380.pid
loglevel notice
logfile /var/log/redis/redis_6380.log
dir /var/lib/redis/6380

2、一主多从配置

# Master节点配置
port 6379
daemonize yes
bind 127.0.0.1
pidfile /var/run/redis_6379.pid
loglevel notice
logfile /var/log/redis/redis_6379.log
dir /var/lib/redis/6379
requirepass xyqzyh5678

# Slave节点配置
slaveof 127.0.0.1 6379
port 6380
daemonize yes
bind 127.0.0.1
pidfile /var/run/redis_6380.pid
loglevel notice
logfile /var/log/redis/redis_6380.log
dir /var/lib/redis/6380

slaveof 127.0.0.1 6379
port 6381
daemonize yes
bind 127.0.0.1
pidfile /var/run/redis_6381.pid
loglevel notice
logfile /var/log/redis/redis_6381.log
dir /var/lib/redis/6381

3、三主三从配置

# 节点1的配置
port 7001
daemonize yes
pidfile /var/run/redis_7001.pid
cluster-enabled yes
cluster-config-file /etc/redis/7001.conf
cluster-node-timeout 15000
appendonly yes

# 节点2的配置
port 7002
daemonize yes
pidfile /var/run/redis_7002.pid
cluster-enabled yes
cluster-config-file /etc/redis/7002.conf
cluster-node-timeout 15000
appendonly yes

# 节点3的配置
port 7003
daemonize yes
pidfile /var/run/redis_7003.pid
cluster-enabled yes
cluster-config-file /etc/redis/7003.conf
cluster-node-timeout 15000
appendonly yes

# 节点4的配置
port 7004
daemonize yes
pidfile /var/run/redis_7004.pid
cluster-enabled yes
cluster-config-file /etc/redis/7004.conf
cluster-node-timeout 15000
appendonly yes

# 节点5的配置
port 7005
daemonize yes
pidfile /var/run/redis_7005.pid
cluster-enabled yes
cluster-config-file /etc/redis/7005.conf
cluster-node-timeout 15000
appendonly yes

# 节点6的配置
port 7006
daemonize yes
pidfile /var/run/redis_7006.pid
cluster-enabled yes
cluster-config-file /etc/redis/7006.conf
cluster-node-timeout 15000
appendonly yes

三、Redis集群三种方式原理

1、一主一从原理:主从复制

主从复制是Redis提供的一种高可用性方案,它的实现原理是主节点将自身的数据以异步方式复制到从节点中,同时从节点可以在不影响主节点的情况下,对复制过来的数据进行读取操作。

主从复制的实现利用的是Redis的RDB文件,当主节点执行写操作时,Redis会将同步方式同时将命令更新到AOF文件和内存数据库中,随后向绑定的所有从节点发送同步命令,从节点根据同步命令更新自己的内存数据库。

2、一主多从原理:主从复制+读写分离

一主多从结构与一主一从类似,在此不再详细阐述。它的读写分离实现原理是将写操作全部交给主节点处理,而读操作则可以由主节点和从节点共同承担。当从节点发起读操作时,Redis会将同步命令发送到主节点,让主节点将最新的数据同步到从节点中,然后从节点就能够对数据进行读操作了。

3、三主三从原理:Paxos算法实现数据同步

三主三从模式是Redis集群的最佳实践,它使用Paxos算法实现数据同步,从而保证在任意节点故障或网络分区的情况下,系统仍然能够正常运行。

Paxos算法是由Leslie Lamport于1990年提出的一种基于消息传递的一致性算法。它的实质是通过消息传递机制,保证多个进程在数值上的一致性。在Redis中,三个主节点通过Paxos算法协商确定数据的一致性,从节点对主节点进行读写分离,每个主节点都会将数据复制到其他两个主节点和它们的从节点,从而实现数据的同步和备份。

四、Redis集群节点

在Redis集群中,节点可以分为主节点和从节点两种类型。主节点负责数据的存储和管理,从节点则通过主节点进行数据的同步和读写分离。

Redis集群中有三种角色,分别是:主节点、从节点和无状态节点。在三主三从结构中,每个主节点绑定两个从节点,同时充当无状态节点以处理请求。

主节点的职责是负责数据的写入和同步。当它的一个从节点崩溃时,它会自动选出一个从节点充当备份。

从节点则负责数据的读取,并通过心跳机制与主节点保持同步。当主节点故障时,从节点之间会选举出一台作为新的主节点,其他从节点则成为新的从节点。

无状态节点(Non-Data-Sharing Node)既不保存数据,也不影响数据的分割和分发,仅用于处理客户端发来的请求。每个主节点在接收到请求时,会通过哈希函数将其转发给对应的无状态节点,该节点负责将请求的变更同步到主节点和从节点中。

五、Redis集群搭建

1、Redis单节点搭建

首先安装Redis并执行以下命令启动服务:

sudo apt install redis-server
sudo systemctl start redis-server

然后在redis.conf配置文件中添加以下内容:

dbfilename dump.rdb
appendonly yes

运行以下命令重启Redis:

sudo systemctl restart redis-server

至此,Redis单节点搭建完成。

2、Redis三主三从集群搭建

首先下载安装Redis,并将其安装在三个不同的服务器上。安装完成后在每个节点的redis.conf配置文件中添加以下内容:

port 7000
pidfile /var/run/redis_7000.pid
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
appendonly yes

然后启动三个节点的Redis,使用以下命令创建集群:

redis-cli --cluster create 192.168.1.2:7000 192.168.1.3:7000 192.168.1.4:7000

在通过正常的Redis客户端进行连接和操作前,需要先进行节点验证:

redis-cli --cluster check 192.168.1.2:7000
redis-cli --cluster check 192.168.1.3:7000
redis-cli --cluster check 192.168.1.4:7000

至此,Redis三主三从集群搭建完成。

六、Redis集群原理

Redis集群的工作方式是,将数据按一定规则分散到多个节点上,同时每个节点维护一份部分数据的拷贝,当需要访问数据时,会先计算出该数据应该在哪个节点上,然后进行访问。

Redis集群内部采用的哈希槽分配算法,将哈希值在0~16383之间的整数划分为16384个桶,每个桶对应一个槽。当执行SET、GET等操作时,根据操作的key计算出哈希值,并根据哈希值计算出对应的槽,然后将数据存储在该槽对应的节点上。如果对应节点宕机,则由备份节点接管槽的数据。

Redis集群的节点之间使用Gossip通信,用于集群的成员发现和状态更新。每个节点都会向集群中的一部分节点发送PING消息,在收到PING消息时,节点会回复PONG消息,用于确认集群中的节点是否正常工作。当节点感知到集群中有节点宕机时,会将宕机信息广播给其他节点。

七、Redis Cluster集群

Redis Cluster是Redis官方提供的集群方案,它基于Redis的多节点模型,以一定规则将数据分散到多个节点上,从而保证数据的高可用性和负载均衡。

Redis Cluster的主要特点是:

  • 分布式:数据在多个节点之间分

    原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/271294.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝的头像小蓝
上一篇 2024-12-16 14:54
下一篇 2024-12-16 14:54

相关推荐

  • Vb运行程序的三种方法

    VB是一种非常实用的编程工具,它可以被用于开发各种不同的应用程序,从简单的计算器到更复杂的商业软件。在VB中,有许多不同的方法可以运行程序,包括编译器、发布程序以及命令行。在本文中…

    编程 2025-04-29
  • Python程序的三种基本控制结构

    控制结构是编程语言中非常重要的一部分,它们指导着程序如何在不同的情况下执行相应的指令。Python作为一种高级编程语言,也拥有三种基本的控制结构:顺序结构、选择结构和循环结构。 一…

    编程 2025-04-29
  • Python缓存图片的处理方式

    本文将从多个方面详细阐述Python缓存图片的处理方式,包括缓存原理、缓存框架、缓存策略、缓存更新和缓存清除等方面。 一、缓存原理 缓存是一种提高应用程序性能的技术,在网络应用中流…

    编程 2025-04-29
  • 使用Go-Redis获取Redis集群内存使用率

    本文旨在介绍如何使用Go-Redis获取Redis集群的内存使用率。 一、Go-Redis简介 Go-Redis是一个用于连接Redis服务器的Golang客户端。它支持Redis…

    编程 2025-04-28
  • Python三种基本输入元素

    本文将从多个方面对于Python三种基本输入元素进行详细的阐述并给出代码示例。 一、Python三种基本输入元素解答 Python三种基本输入元素包括命令行参数、标准输入和文件输入…

    编程 2025-04-28
  • Python在线编辑器的优势与实现方式

    Python在线编辑器是Python语言爱好者的重要工具之一,它可以让用户方便快捷的在线编码、调试和分享代码,无需在本地安装Python环境。本文将从多个方面对Python在线编辑…

    编程 2025-04-28
  • Java表单提交方式

    Java表单提交有两种方式,分别是get和post。下面我们将从以下几个方面详细阐述这两种方式。 一、get方式 1、什么是get方式 在get方式下,表单的数据会以查询字符串的形…

    编程 2025-04-27
  • 用Pythonic的方式编写高效代码

    Pythonic是一种编程哲学,它强调Python编程风格的简单、清晰、优雅和明确。Python应该描述为一种语言而不是一种编程语言。Pythonic的编程方式不仅可以使我们在编码…

    编程 2025-04-27
  • Java多版本支持实现方式

    本文将从以下几个方面阐述如何实现Java多版本支持,并给出可行的代码示例。 一、多版本Java环境概述 Java是一门跨平台的编程语言,但是在不同的应用场景下,可能需要使用不同版本…

    编程 2025-04-27
  • SpringBoot Get方式请求传参用法介绍

    本文将从以下多个方面对SpringBoot Get方式请求传参做详细的阐述,包括URL传参、路径传参、请求头传参、请求体传参等,帮助读者更加深入地了解Get请求方式下传参的相关知识…

    编程 2025-04-27

发表回复

登录后才能评论