您的位置:首页 > 健康 > 养生 > 07.31 Redis集群

07.31 Redis集群

2024/12/27 1:01:58 来源:https://blog.csdn.net/weixin_44265455/article/details/140851925  浏览:    关键词:07.31 Redis集群

一、Redis集群和高可用概念

Redis集群主要内容有主从复制,哨兵模式,cluster(集群)。其中,主从复制是一切的基础。

主从复制最少要三台,一主两从;

哨兵模式最少也要三台,一主两从;

cluster集群最少要6台,生产中一般是三三制,即9台。

1.1 主从复制

Redis的主从复制和mysql的主从复制工作模式类似,主可以写,写入主的数据通过RDB的方式把数据同步到从服务器,从库不能更新到主。

缺点:不能故障自动化恢复;只有主能够写。

1.2 哨兵

主要功能就是实现故障自动化恢复。

主从复制完成之后,从服务器变成只读模式。故障切换时,主故障,变成从服务器,主变成从之后,也会进入只读模式。

缺点:从节点一旦故障,读会受到影响。

1.3 集群

把每两台服务器作为主从模式,形成一个大的主从的集群。

解决了哨兵无法实现的写操作的负载均衡,是一个较为完善的高可用方案。

缺点:为了保证高可用,对数据的完整性要求不高。每个小集群之间是互相独立的。

二、主从复制

2.1 主从复制的原理和流程

主节点和从节点:数据的复制是单向的,由主复制到从。

主从复制的流程

从向主发送同步请求(sync command),主收到请求后,fork一个子进程创建RDB文件,创建完成后,同步RDB文件发送给从。

建立主从复制模式后,从就进入只读模式,只有主可以写入。

2.2 主从复制的简单实现

架构 :部署主从复制

  • redis1 :主 :20.0.0.51
  • redis2 :从1 :20.0.0.52
  • redis3 :从2 :20.0.0.53

对主从同步操作 :

systemctl stop firewalld
setenforce 0
yum -y install ntpdate
ntpdate ntp.aliyun.com

对主配置

vim /etc/redis/6379.conf
#--70行-- 修改或直接注释,注释即默认监听所有
bind 0.0.0.0
#--137行--
daemonize yes
#--700行-- 修改
appendonly yes/etc/init.d/redis_6379 restart

从服务器配置

vim /etc/redis/6379.conf
#--70行--
bind 0.0.0.0
#--287行-- 解注释
replicaof 20.0.0.51 6379
## 格式:replicaof <主的ip> <主的端口>
#--700行--
appendonly yes/etc/init.d/redis_6379 restart

三、哨兵模式

3.1 哨兵模式的原理

哨兵和主从模式的架构基本一致,区别在于主从之间,从从之间都在互相监听,在此基础之上实现故障切换。

主切换之后变成从,会自动变成只读模式

切换方式:主宕机后,从服务器切换成主不是按照权重、优先级等方式进行切换,而是所有从服务器通过投票,选举出主。

选举算法:Raft算法,选一个离当前时间点更新最近的从变成主。

3.2 哨兵模式简单实现

哨兵配置

主从同步操作

#进入源码包
cd /opt/redis-5.0.7
#编辑哨兵模式的配置文件
vim sentinel.conf
#--22行-- 
##哨兵模式的默认端口26379
#--17行--  取消注释
protected-mode no
##关闭保护模式
#--27行--
daemonize yes
##开启后台运行
#--37行--
logfile "/var/log/sentinel.log"
## sentinel 的日志路径
#--66行--
dir "/var/lib/redis/6379"
##数据库的工作目录
#--85行--
sentinel monitor mymaster 20.0.0.51 6379 2
##初始化监听都是监听主的状态 20.0.0.51 6379
## 2 :对应是从服务器的数量以及投票的参与者,参与者要和从服务器的数量一致。
## 两台从服务器投票通过,主才能进行故障转移#--114行--
sentinel down-after-milliiseconds mymaster 30000
##判断主服务器宕机的时间间隔,30 000 ms ,单位ms
#--146行--
sentinel failover-timeout mymaster 180000
##判断故障节点的超时的最大时间 180 000 ms
cd /opt/redis-5.0.7
#先启动主的哨兵,再启动从
redis-sentinel sentinel.conf &
#查看哨兵状态
redis-cli -p 26379 info sentinel

检测哨兵功能:停止主的redis服务,

四、集群

4.1 集群的概念

集群(cluster),是redis3.0之后的分布式存储方案。

集群由多个节点组成,redis数据保存在这些节点,集群中的节点分为主和从。

主节点负责读写以及维护集群的信息;

从节点进行主节点数据的复制,也可以查数据。

4.2 Redis集群的数据分片

在集群概念中,引用的是**hash slots (哈希槽)**的概念。创建了集群,就有16384个hash slots,编号从0-16383。

以三个节点为例:主1,主2,主3

主1的槽位:0-5460

主2的槽位:5461-10922

主3的槽位:10923-16383

一个节点的主和从如果全部失败,整个集群都将不可用。

4.3 集群的简单实现

简单架构示例

主1 :redis1 :20.0.0.51

主2 :redis2 :20.0.0.52

主3 :redis3 :20.0.0.53

从1 :redis4 :20.0.0.54

从2 :redis5 :20.0.0.55

从3 :redis6 :20.0.0.56

实现:

集群所有节点同步操作

首先关闭防火墙,关闭安全机制,并进行时间同步

systemctl stop firewalld
setenforce 0
ntpdate ntp.aliyun.com

修改配置文件

vim /etc/redis/6379.conf#--89行-- 修改
protect-mode no
## 关闭保护模式
#--137行-- 修改
daemonize yes
## 允许后台启动
#--833行-- 取消注释
cluster-enabled yes
## 允许集群模式
#--841行-- 取消注释
cluster-config-file nodes-6379.conf
## 集群配置文件
#--847行-- 取消注释
cluster-node-timeout 15000
## 集群超时时间 , 15 000 ms ,15s
#--700行-- 修改
appendonly yes
##开启AOF持久化设置#重启服务
/etc/init.d/redis_6379 restart

选一台主机分配主从:命令如下

redis-cli -h 20.0.0.51 --cluster create 20.0.0.51:6379 20.0.0.52:6379 20.0.0.53:6379 20.0.0.54:6379 20.0.0.55:6379 20.0.0.56:6379 --cluster-replicas 1

解释:

  • -h 20.0.0.51 :集群的主连接节点,在哪台主机上操作就用哪个地址
  • –cluster create :创建集群,主从不能指定,集群会自动分配
  • –cluster-replicas :每个主有几个从,1就是一主一从,所以前面的6台服务器成为一主一从的三个节点
redis-cli -h 20.0.0.51 -p 6379
#查看hash slots
cluster slots
#查看节点情况
cluster nodes

注意:

  • 操作时moved不是报错,是系统提示客户端去指定位置的哈希槽进行读或者写,系统提示啥,就去那操作即可,这个节点是该节点的主
  • 集群的功能只是满足了高可用和负载均衡,不能保证数据的完整性

4.4 手动配置主从关系

在集群创建之后,可以使用 Redis 命令将节点重新配置为主节点或从节点。这可以通过 cluster meetcluster replicate 命令完成。

  1. 将某个节点设置为从节点

    使用 cluster replicate 命令将节点设置为从节点。假设将 20.0.0.54:6379 节点设置为20.0.0.51:6379 节点的从节点:

    redis-cli -h 20.0.0.54 -p 6379 cluster replicate <master-node-id>
    

    在这个命令中,<master-node-id> 是主节点的 ID,可以通过 cluster nodes 命令找到这个 ID。

  2. 将某个节点设置为主节点

    如果需要将一个从节点提升为主节点,可以先使用 cluster failover 命令进行故障转移(如果主节点发生故障),或者手动更改节点角色。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com