理论基础
单点故障,服务不可用,无法处理大量的并发数请求,数据丢失灾难
开启多redis进程,默认是单线程开启多线程导致CPU压力过大,对服务器纵向钱的消耗服务器硬件性能CPU成本合理性,限制了redis的服务性能上限
redis服务数量,增加服务器数量单一增加,组合成集群模式,共享任务资源,主从固执(自定切换,单机平静,写的性能无法均衡),哨兵模式
redis集群介绍
redis是一个提供多个redis节点共享数据的程序集,
redis集群并不支持处理多个keys的命令,因为这需要在怒通额节点键一定数据,从而打不到性redis那样的性能,在搞负载
去中心化:
多台相同的服务器组成集群后,服务器之间不存在主次关系,中心服务器和普通服务器之间去中心化,共享,挂掉一个不会影响,方便横向扩容可以水没有特别的典型的单点故障,同时去中心化心事HA方式是分布式实现的。
主从复制
主从复制时高可用的基础,哨兵和集群都是主从复制基础上实现的,实现数据的多级备份,解决读操作的负载君合衡单点故障的恢复
缺点:故障恢复无法自动化,写无法负载均衡,存储能力收到限制
原理:从发送sync同步请求
主,首先缓存写入小左命令,
派生一个子进程,触发rdb的持久化,在触发rdb持久化完成过程中,客户端在持续写入,这段数据保存在内存或缓存中,这类数据靠AOF进行持久化
在rdb持久化完成,生成.RDB文件后,主会将rdb文件给从,slave保存在磁盘,进行恢复,接着,master就会将次改数据的所有操作发给手拉车端服务器,如果slave宕机,则恢复正常后自动重新连接
master收到slave端连接后,将完整的数据发给slave,如果master同时收到多个请求,master会在后台启动一个进行保存数据,然后发给slave端
哨兵
实现自动化的故障切换
缺思安,写不行,存储不行
作用:监控集群:监控master和slave是否正常
消息通知:有故障,发型消息给管理员
故障切换:master出现问题,切换slave上
配置中心:故障发生,通知clint客户端新的master
客观下线(至少需要n台哨兵参与)
设定:每秒向master 发送ping命令
① 设置超时时间(5s)
② master的响应必须是有效响应
以以上为前提条件,在单台哨兵认为master挂掉之后,会向其他n个哨兵进行询问
询问master是否真挂了,如果其他哨兵通过检测依然会“主观认为master挂了”
那么可以认为,master 已经客观下线了
集群
解决写操作的问题,以及存储收到的限制,实现搞可用
cluster集群模式,实现redis的分布式部署,官方推荐至少要3台以上的master节点和3个slave节点
在redis-cluster集群中,可以给每个节点谈价,主节点和从节点直接准村主从模型,当用户需要处理更多请求的时候,可以天界啊节点扩展系统的读性能
实验
主从搭建
需要3台服务器,master:192.168.17.20
slave:192.168.17.10
slave2:192.168.17.30
第一步,三台服务器安装redis
关闭防火墙,核心防护,安装redis
启动redis
vim /etc/redis/6379.conf
重启服务
[root@manager ~]# vim /etc/redis/6379.conf
[root@manager ~]# /etc/init.d/redis_6379 restart
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
Starting Redis server...
[root@manager ~]#
在slave服务器上
/etc/init.d/redis_6379 restart
重启服务
第三步,验证
搭建哨兵模式
在主从的基础上搭建
master:192.168.17.20
slave:192.168.17.10
slave2:192.168.17.30
第一步,在所有节点修改哨兵配置文件
vim /opt/redis-5.0.9/sentinel.conf
第二步,启动哨兵模式
[root@manager ~]# vim /opt/redis-5.0.7/sentinel.conf
[root@manager ~]# cd /opt/redis-5.0.7/
[root@manager redis-5.0.7]# ls
00-RELEASENOTES COPYING Makefile redis.conf runtest-moduleapi src
BUGS deps MANIFESTO runtest runtest-sentinel tests
CONTRIBUTING INSTALL README.md runtest-cluster sentinel.conf utils
[root@manager redis-5.0.7]# redis-sentinel sentinel.conf &
[1] 44830
[root@manager redis-5.0.7]#
查看哨兵信息
验证
cluster集群
主节点负责读写请求,和集群信息维护,从节点只能进行主节点数据和状态信息的复制
1,作用
数据分区
数据分区还集群的最核心功能,集群将数据分散到多个节点一方面突破redis单子内存大小的限制,存储容量大大增加,另一方面每个主节点都恶意对外可以提供读写服务,大大提高了集群的响应力
高可用
集群支持主从复制和朱及诶单的自定故障切换,当任意节点发送故障时,集群人可以对外提供服务
数据分片
redis集群引入哈斯草的概念,有18384个哈希槽,每个节点负责一部分,
搭建cluster集群
redis集群一般需要6个节点,3主,3从,可以在一台服务器上进行实验
主节点端口号6001 ,6002,6003,从节点端口号6004,6005,6006
第一步:创建文件
[root@manager redis]# mkdir -p redis-cluster/redis600{1..6} //创建
[root@manager redis]# ls
6379.conf redis-cluster
[root@manager redis]# vim /opt/redis.sh //创建复制文本
[root@manager redis]# ls
6379.conf redis-cluster
[root@manager opt]# vim /opt/redis.sh
[root@manager opt]# sh -x /opt/redis.sh
脚本
#!/bin/bash
for i in {1..6}
do
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis600$i
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis600$i
done
启动脚本
第二步:修改端口6001的主配置文件
[root@manager redis6001]# ls
redis-cli redis.conf redis-server
[root@manager redis6001]# vim redis.conf
其他端口同样配置
第三步:配置启动
[root@manager redis6001]# vim /opt/redis_start.sh
[root@manager redis6001]# redis-server redis.conf
59094:C 08 Aug 2021 19:52:30.189 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
59094:C 08 Aug 2021 19:52:30.189 # Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=59094, just started
59094:C 08 Aug 2021 19:52:30.189 # Configuration loaded
[root@manager redis6001]# ps -ef | grep redis
root 44831 1 0 8月07 ? 00:04:16 redis-sentinel *:26379 [sentinel]
root 59095 1 0 19:52 ? 00:00:00 redis-server 127.0.0.1:6001 [cluster]
root 59100 58528 0 19:52 pts/0 00:00:00 grep --color=auto redis
[root@manager redis6001]# sh -x /opt/redis_start.sh
启动脚本
#!/bin/bash
for d in {1..6}
do
cd /etc/redis/redis-cluster/redis600$d
redis-server redis.conf
done
验证启动
[root@manager redis6001]# ps -ef | grep redis
root 44831 1 0 8月07 ? 00:04:16 redis-sentinel *:26379 [sentinel]
root 59095 1 0 19:52 ? 00:00:00 redis-server 127.0.0.1:6001 [cluster]
root 59113 1 0 19:53 ? 00:00:00 redis-server 127.0.0.1:6002 [cluster]
root 59115 1 0 19:53 ? 00:00:00 redis-server 127.0.0.1:6003 [cluster]
root 59120 1 0 19:53 ? 00:00:00 redis-server 127.0.0.1:6004 [cluster]
root 59125 1 0 19:53 ? 00:00:00 redis-server 127.0.0.1:6005 [cluster]
root 59133 1 0 19:53 ? 00:00:00 redis-server 127.0.0.1:6006 [cluster]
root 59138 58528 0 19:53 pts/0 00:00:00 grep --color=auto redis
加入集群
[root@manager redis6001]# vim /opt/redis_start.sh
[root@manager redis6001]# redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 127.0.0.1:6005 to 127.0.0.1:6001
Adding replica 127.0.0.1:6006 to 127.0.0.1:6002
Adding replica 127.0.0.1:6004 to 127.0.0.1:6003
测试集群
[root@manager redis6001]# redis-cli -p 6001 -c
127.0.0.1:6001> cluster slots
1) 1) (integer) 10923
2) (integer) 16383
3) 1) "127.0.0.1"
2) (integer) 6003
3) "f2cea879839dee1a81a37e5bad4a81731650deeb"
4) 1) "127.0.0.1"
2) (integer) 6006
3) "33cf75909ba39168f8ca4f46fcd0bcd3c9dab4dd"
2) 1) (integer) 0
2) (integer) 5460
3) 1) "127.0.0.1"
2) (integer) 6001
3) "a05883cefa7ed188d217141e67171436fee32924"
4) 1) "127.0.0.1"
2) (integer) 6004
3) "82315f16270b175155c5fc86d7e4e0817ee320f2"
3) 1) (integer) 5461
2) (integer) 10922
3) 1) "127.0.0.1"
2) (integer) 6002
3) "a725cbdc5238cf10809cf125fe41a2be568010ad"
4) 1) "127.0.0.1"
2) (integer) 6005
3) "6ea050d8f635126f1b0d16b2ca1a3b75152d8344"
小结
小结:
redis 中
1,redis基本概念
nosql(非关数据库)
区别:存储类型,事务支持的区别,天然二维表,一种是多数据类型
nosql中的定位,内存缓存型数据库,并且介绍了redis的特性,持久化
redis特别强调了单进程模型(多进程优点)
rdb,aof工作机制和区别
red:类型快照
主进程派生子进行(过程中会祖册子进程),以bgsave的形式生成rdb文件
aof:类似同步,基于bin-log
主进程派生子进程,也会阻塞,以bgrewriteaof的形式将缓存形式放入缓冲区,再从缓冲区中同步至磁盘(其中三种模式,always,no,everysec模式)
redis再开启氢气时默认是youngaof方式,同时晋档aof未开启是,才会使用rdb
简单过滤一下碎片,挥手机制
redis的数据类型
字符串
hash
列表
set无序
set有序
3,redis集群模式
主从,哨兵,cluster
主从复制(核心)
介绍了主从优缺点,并且组合方案(哨兵,集群)
优缺点:组合方案
*** 主从复制的工作模式,(原理方向)
master—salve进行主从复制
哨兵模式
介绍了哨兵+主从这种组合的优缺点,基于了cluster方案
哨兵模式工作原理
哨兵模式中哨兵如何手机redis集群和哨兵本省的信息
哨兵之间ping
魔兵模式符合做到故障转移
**** 投票机制
集群
主要是在面试官你们用不用redis ,用什么架构,集群多少台节点(官推3M-3S)
集群模式以数据分片+分布式组成的
同时cluster中将16384哈希槽平均分配到每个节点