文章目录

  • 一、Redis高可用
    • 1、什么是高可用
    • 2、Redis的高可用技术
  • 二、Redis主从复制
    • 1、Redis主从复制的作用
    • 2、主从复制的流程
  • 三、主从复制的搭建
    • 实验准备
    • 1、所有主机安装Redis
    • 2、修改master节点的配置文件(20.0.0.12)
    • 3、修改两个slave节点Redis配置文件
    • 4、验证主从效果
  • 四、Redis哨兵模式
    • 1、哨兵模式的原理
    • 2、哨兵模式的作用
    • 3、哨兵模式的结构
  • 五、搭建Redis哨兵模式
    • 1、修改三个哨兵节点的配置文件
    • 2、启动哨兵模式
    • 3、故障模拟
  • 六、Redis群集模式
    • 1、集群的作用
    • 2、Redis集群的数据分片
    • 3、集群模式的主从复制模型
  • 七、搭建Redis群集模式
    • 实验准备
    • 1、开启集群功能
    • 2、所有节点启动redis服务
    • 3、启动集群
    • 4、测试集群

一、Redis高可用

1、什么是高可用

在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。

但是在Redis语境中,高可用的含义似乎要宽泛一些,除了保证提供正常服务(如主从分离、快速容灾技术),还需要考虑数据容量的扩展、数据安全不会丢失等。

2、Redis的高可用技术

在Redis中,实现高可用的技术主要包括持久化、主从复制、哨兵和cluster集群,下面分别说明它们的作用,以及解决了什么样的问题。

  • 持久化: 持久化是最简单的高可用方法(有时甚至不被归为高可用的手段),主要作用是数据备份,即将数据存储在硬盘,保证数据不会因进程退出而丢失。

  • 主从复制: 主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份(和同步),以及对于读操作的负载均衡和简单的故障恢复。

    • 缺陷:故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制。
  • 哨兵: 在主从复制的基础上,哨兵实现了自动化的故障恢复。(主挂了,找一个从成为新的主,哨兵节点进行监控)

    • 缺陷:写操作无法负载均衡;存储能力受到单机的限制。
  • Cluster集群: 通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案。(6台起步,成双成对,3主3从)

持久化技术已在前一篇文章中进行介绍( Redis 高可用之持久化 - 掘金 (juejin.cn) ),本文将具体主从复制、哨兵、Cluster集群三种高可用技术。


二、Redis主从复制

  • 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。
  • 默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

1、Redis主从复制的作用

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

2、主从复制的流程

(1)若启动一个slave机器进程,则它会向Master机器发送一个sync command命令,请求同步连接。

(2)无论是第一次连接还是重新连接,Master机器都会启动一个后台进程,将数据快照保存到数据文件中(执行rdb操作),同时Master还会记录修改数据的所有命令并缓存在数据文件中。

(3)后台进程完成缓存操作之后,Master机器就会向slave机器发送数据文件,slave端机器将数据文件保存到硬盘上,然后将其加载到内存中,接着Master机器就会将修改数据的所有操作一并发送给slave端机器。若slave出现故障导致宕机,则恢复正常后会自动重新连接。

(4)Master机器收到slave端机器的连接后,将其完整的数据文件发送给slave端机器,如果Mater同时收到多个slave发来的同步请求,则Master会在后台启动一个进程以保存数据文件,然后将其发送给所有的slave端机器,确保所有的slave端机器都正常。


三、主从复制的搭建

实验准备

master:20.0.0.12
slave1:20.0.0.6
slave2:20.0.0.5

1、所有主机安装Redis

参考上一篇博客 Redis安装部署


2、修改master节点的配置文件(20.0.0.12)

vim /etc/redis/6379.conf
bind 0.0.0.0
appendonly yes  /etc/init.d/redis_6379 restart


![](https://img-blog.csdnimg.cn/2afe3a1ad5dc44ec858f3dcae6025529.png)

3、修改两个slave节点Redis配置文件

vim /etc/redis/6379.conf
bind 0.0.0.0
replicaof 20.0.0.12 6379
appendonly yes/etc/init.d/redis_6379 restart








4、验证主从效果

##在master节点上看日志
tail -f /var/log/redis_6379.log ##在master创建数据
redis-cli
set name run
get name


##在从节点上查看
redis-cli
get name



四、Redis哨兵模式

哨兵的核心功能:在主从复制的基础上,哨兵引入了主节点的自动故障转移。

1、哨兵模式的原理

是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master,并将所有slave连接到新的master。所以整个运行哨兵的集群的数量不得少于3个节点

2、哨兵模式的作用

  • 监控: 哨兵会不断地检查主节点和从节点是否运作正常。
  • 自动故障转移: 当主节点不能正常工作时,哨兵会开始自动故障转移操,它会将失效主节点的其中一个从节点升级为新的主节点,并让其它从节点改为复制新的主节点。
  • 通知(提醒): 哨兵可以将故障转移的结果发送给客户端。

3、哨兵模式的结构

  • 哨兵节点: 哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的redis节点,不存储数据

  • 数据节点: 主节点和从节点都是数据节点。

哨兵的启动依赖于主从模式,所以须把主从模式安装好的情况下再去做哨兵模式。所有节点上都需要部署哨兵模式,哨兵模式会监控所有的 Redis 工作节点是否正常,当 Master 出现问题的时候,因为其他节点与主节点失去联系,因此会投票,投票过半就认为这个 Master 的确出现问题,然后会通知哨兵间,然后从 Slaves 中选取一个作为新的 Master。

需要特别注意的是,客观下线是主节点才有的概念;如果从节点和哨兵节点发生故障,被哨兵主观下线后,不会再有后续的客观下线和故障转移操作。


五、搭建Redis哨兵模式

接着上面的主从复制的实验做

1、修改三个哨兵节点的配置文件

vim /opt/redis-5.0.7/sentinel.conf
protected-mode no
port 26379
daemonize yes                                   logfile "/var/log/sentinel.log"
dir "/var/lib/redis/6379"
sentinel monitor mymaster 20.0.0.12 6379 2


2、启动哨兵模式

##启动三台哨兵
##先启master,再启slave
cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &



3、故障模拟

##查看redis-server进程号
ps -ef | grep redis
##杀死master节点上redis-server的进程号
kill -9  进程号       redis-cli -p 26379 info Sentinel




六、Redis群集模式

  • 集群,即Redis Cluster,是Redis 3.0开始引入的分布式存储方案。

  • 集群由多个节点(Node)组成,Redis的数据分布在这些节点中。

  • 集群中的节点分为主节点和从节点:只有主节点负责读写请求和集群信息的维护;从节点只进行主节点数据和状态信息的复制。

1、集群的作用

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

(2)高可用:集群支持主从复制和主节点的自动故障转移(与哨兵类似);当任一节点发生故障时,集群仍然可以对外提供服务

通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案。

2、Redis集群的数据分片

Redis集群引入了哈希槽的概念。

Redis集群有16384个哈希槽(编号0-16383)。
集群的每个节点负责一部分哈希槽。

每个Key通过CRC16校验后对16384取余来决定放置哪个哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。

以3个节点组成的集群为例:
节点A包含0到5460号哈希槽
节点B包含5461到10922号哈希槽
节点C包含10923到16383号哈希槽

3、集群模式的主从复制模型

  • 集群中具有A、B、C三个节点,如果节点B失败了,整个集群就会因缺少5461-10922这个范围的槽而不可以用。
  • 为每个节点添加一个从节点A1、B1、C1整个集群便有三个Master节点和三个slave节点组成,在节点B失败后,集群选举B1位为主节点继续服务。当B和B1都失败后,集群将不可用。

七、搭建Redis群集模式

实验准备

master1:20.0.0.12
slave1:20.0.0.5
master2:20.0.0.7
slave2:20.0.0.6
master3:20.0.0.10
slave3:20.0.0.11

6台全部安装redis

1、开启集群功能

cd /opt/redis-5.0.7/
vim redis.conf
......
bind 20.0.0.12                    #69行,修改为监听自己的物理网卡IP
protected-mode no                         #88行,修改为no,关闭保护模式
port 6379                                 #92行,redis默认监听端口
daemonize yes                             #136行,开启守护进程,以独立进程启动
appendonly yes                            #699行,修改为yes,开启AOF持久化
cluster-enabled yes                       #832行,取消注释,开启群集功能
cluster-config-file nodes-6379.conf       #840行,取消注释,群集名称文件设置
cluster-node-timeout 15000                #846行,取消注释,群集超时时间设置





##将文件传给另外5个节点,之后每个节点要修改监听地址为自己的IP
scp redis.conf 20.0.0.5:`pwd`
scp redis.conf 20.0.0.6:`pwd`
scp redis.conf 20.0.0.7:`pwd`
scp redis.conf 20.0.0.10:`pwd`
scp redis.conf 20.0.0.11:`pwd`


依此类推,总共传给5台服务器;
之后每个节点要修改监听地址为自己的IP地址

cd /opt/redis-5.0.7/
vim redis.conf





2、所有节点启动redis服务

redis-server redis.conf

3、启动集群

##在任意一个节点启动集群即可
redis-cli --cluster create 20.0.0.12:6379 20.0.0.7:6379 20.0.0.10:6379 20.0.0.5:6379 20.0.0.6:6379 20.0.0.11:6379 --cluster-replicas 1
##前三台为master,后三台为slave

4、测试集群

#加-c参数,节点之间就可以互相跳转
redis-cli -h 20.0.0.12 -p 6379 -c
#查看节点的哈希槽编号范围
cluster slots
#赋值
set name run
#查看键的哈希槽编号
cluster keyslot 键名
​
​
redis-cli -h 20.0.0.12 -p 6379 -c
20.0.0.12:6379> cluster slots      #查看节点的哈希槽编号范围
1) 1) (integer) 10923         #第一对主从的哈希槽编号范围2) (integer) 163833) 1) "20.0.0.10"     #主节点2) (integer) 63793) "5f128a6e204d1d6f6dc924ad8b39034a8e9f3261"4) 1) "20.0.0.11"     #从节点2) (integer) 63793) "4a05a086eec06fa4da58b15512d1c81184bc5ee5"
2) 1) (integer) 5461          #第二对主从的哈希槽编号范围2) (integer) 109223) 1) "20.0.0.7"     #主节点2) (integer) 63793) "3008bba29dfbf342bc448ba3062b0a331c8d009e"4) 1) "20.0.0.6"     #从节点2) (integer) 63793) "ee61a4709d6420bb540b2c28218fdd2dfe358b7a"
3) 1) (integer) 0             #第三对主从的哈希槽编号范围2) (integer) 54603) 1) "20.0.0.12"     #主节点2) (integer) 63793) "d1ddb554b3edaebefa6672b2f1f8171393e1f7f3"4) 1) "20.0.0.5"     #从节点 2) (integer) 63793) "71e1f705ce01ca31ab16fa3cf07d7e6cbfab5978"
20.0.0.12:6379>
​
​
#在12节点新建name键,会自动跳转到7节点进行存放
20.0.0.12:6379> set name run
-> Redirected to slot [5798] located at 20.0.0.7:6379
OK
20.0.0.7:6379> cluster keyslot name    #查看name键的哈希槽编号
(integer) 5798
20.0.0.7:6379> quit       #退出数据库
[root@mas ~]# redis-cli -h 20.0.0.12 -p 6379 -c     #重新登录10节点
20.0.0.12:6379> keys *     #12节点中没有name键
(empty list or set)
20.0.0.12:6379> get name    #查看name键的值,会根据键的哈希槽编号自动跳转到7节点进行获取
-> Redirected to slot [5798] located at 20.0.0.7:6379
"run"
20.0.0.7:6379>            #已跳转到7节点

Redis高可用——主从复制、哨兵模式、集群相关推荐

  1. Redis高可用方案-哨兵与集群

    祝大家每日进步,有技术问题多多交流,同时欢迎大家关注我的头条号:IT人孙会良 Redis高可用方案 一.名词解释 二.主从复制 Redis主从复制模式可以将主节点的数据同步给从节点,从而保障当主节点不 ...

  2. 从零开始搭建高可用RabbitMQ镜像模式集群

    文章目录 RabbitMQ集群模式搭建 准备工作 选取任意一个节点作为master节点, 进行文件同步, 我这里选择138作为master节点 组成集群 配置镜像队列(设置镜像队列策略) 集群配置参数 ...

  3. redis命令,SpringBoot整合Redis6,主从复制,哨兵模式,集群,springCache初高级应用。

    目录 1. Docker安装Redis 2. Redis的基础 2.1 redis的key命令 2.2 reids的数据结构(6.0新增的数据结构) 1. String(字符串)类型 2. List( ...

  4. Redis高可用之哨兵模式

    我们前面学习了Redis的主从模式,可以实现读写分离和数据备份,减轻Redis中master节点的压力.但是主从模式仅仅是减轻了master节点的读压力和做数据备份,一旦master节点挂了之后,我们 ...

  5. Redis高可用方案-哨兵模式-SpringBoot整合

    哨兵是用来放哨的,能实时监控我们redis集群的状态,保证redis服务器不会挂掉 ​ 搭建:https://blog.csdn.net/Zer01ne/article/details/8301040 ...

  6. redis高可用(哨兵模式篇)

    哨兵模式(sentinel) ​ 当我们使用主从复制时,从库宕机依然可以将请求发送给主库或者其他从库,但是 Master 宕机,只能响应读操作,写请求无法再执行.所以主从复制架构面临一个严峻问题,主库 ...

  7. 2.redis高可用-持久化-主从复制-哨兵-cluster集群概述与部署,内容依旧多看完直接通透!

    文章目录 一,Redis 高可用 1.持久化 2.主从复制 3.哨兵 4.集群(cluster) 二,Redis 持久化方式 1.持久化的功能 2.持久化的方式 三, RDB 持久化 1.触发条件 2 ...

  8. Redis 高可用之哨兵集群

    Redis 高可用之哨兵集群 前言 哨兵集群 启动并初始化 Sentinel 初始化 Sentinel 状态 初始化Sentinel监视的主服务器列表 创建连向主服务器的网络连接 获取主服务器信息 获 ...

  9. 【Redis】高可用架构之Cluster集群和分⽚

    高可用架构之Cluster集群和分⽚ 1. 前言 2. Cluster 模式介绍 2.1 什么是Cluster模式? 2.2 为什么需要Cluster模式? 2.2.1 垂直拓展(scale up)和 ...

最新文章

  1. python数据结构与算法:单向链表
  2. python pandas写入数据后保存_python读取MySQL数据使用pandas写入到csv,并保存列名
  3. 职称计算机和职称英语期限,专业技术职称考试,职称英语和职称计算机有效期多长时间,每年什么时候报名啊?上海的...
  4. 又一个 Java 面试神器!
  5. 强人工智能还有多远?先用10到20年突破这5个数学问题
  6. boost::geometry::svg用法的测试程序
  7. iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer...
  8. python 可执行文件_如何通过Python函数运行的可执行文件的终端...
  9. Diango博客--8.解锁博客侧栏
  10. db2插入的时候怎么自增_3篇长文讲“自增ID”,大部分人仍然搞错了!?
  11. 如何让Log4net日志文件按每月归成一个文件夹,StaticLogFileName参数的用法
  12. 对付ring0 inline hook
  13. H5中 时间格式NAN-NAN-NAN
  14. python程序员工资-均薪3万?Python程序员就业各岗位薪资一览,你拖后腿了吗?...
  15. CTF—古典密码(凯撒密码、维吉尼亚密码、培根密码等)
  16. reset()方法 submit()方法
  17. GC 的背景和一般原理--什么是GC,minor gc,major gc,full gc
  18. 用jxcell导出图表到excel
  19. 如何用电脑画平面坐标图_如何画平面直角坐标系
  20. 微信视频号运营 1000 问

热门文章

  1. python wait notify_java与python多线程wait,notify操作比较
  2. c++第二次作业-定期存款利息计算器
  3. 深度学习相关学术会议
  4. 从制造中来到智造中去
  5. inprivate浏览是什么意思_打开浏览器无痕是什么意思
  6. localStorage在Safari浏览器无痕模式下失效
  7. 2020春招补录全过程
  8. java的 %3c%3c 运算符_scanf(%3c%3c, a, b)
  9. S60v5 编程环境的搭建
  10. 滨江学院c语言期中考试试题,南信大滨江学院linux期末作业.doc