redis集群的新玩法

理论基础

单点故障,服务不可用,无法处理大量的并发数请求,数据丢失灾难
开启多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哈希槽平均分配到每个节点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值