五、redis集群进化过程简单梳理

导读

前面文章【一、深入理解redis之需要掌握的知识点 】中,我们对redis需要学习的内容框架进行了一个梳理。

二、redis中String和List两种数据类型和应用场景 】、【二、redis中Hash、Set、SortedSet应用场景 】两篇文章我们对redis中String、List、Hash、Set、SortedSet五种数据类型做了一下讲解,并且对他们各自的应用场景进行了介绍。

三、redis数据存储之跳跃表(SKIP LIST) 】深入学习了支撑SortedSet排序背后的数据结构,跳跃表;

【四、redis持久化之RDB与AOF 】学习了redis中的两种持久化策略:RDB(快照)和AOF(追加日志);

本篇文章我们将要学习redis集群的进化过程,包括解决单点故障问题和性能瓶颈问题等。
在这里插入图片描述

如需了解更多更详细内容也可关注本人CSDN博客:不吃_花椒
在这里插入图片描述

单点故障

主从复制-集群一变多|多实例|全量同步

1.一个master可以配备一个或多个slave服务器。

2.为了保证slave可以在任何时候都可以保证与master之间数据一致,redis存在以下几种机制:

①master与slave连接正常时,master会发送一连串的命令流来保证对slave的更新,以便于将自身数据集的改变复制给slave:包括客户端的写入,key的过期或者被逐出等。

②当master与slave之间的连接断开后,slave在重新连接后会努力尝试只获取网络断开期间丢失的命令流。

③当slave无法进行部分重同步时,slave会请求全量同步。全量同步就是发送快照+发送快照期间的命令流。

3.redis主从同步的方式默认为异步。

4.可以使用复制来避免 master 将全部数据集写入磁盘造成的开销:一种典型的技术是配置你的 master Redis.conf 以避免对磁盘进行持久化,然后连接一个 slave ,其配置为不定期保存或是启用 AOF。但是,这个设置必须小心处理,因为重新启动的 master 程序将从一个空数据集开始:如果一个 slave 试图与它同步,那么这个 slave 也会被清空。

5.如果 master 使用复制功能的同时未配置持久化,那么自动重启进程这项应该被禁用。

6.无需磁盘参与的复制:Redis 2.8.18 是第一个支持无磁盘复制的版本。在此设置中,子进程直接发送 RDB 文件给 slave,无需使用磁盘作为中间储存介质。

7.在实际使用中要把redis的keys 命令和 FLUSHALL等命令都禁用掉

配置方式:

1.主从复制

配置基本的 Redis 复制功能是很简单的:只需要将以下内容加进 slave 的配置文件:

slaveof 192.168.1.1 6379

2.只读性质的 slave

自从 Redis 2.6 之后, slave 支持只读模式且默认开启。redis.conf 文件中的 slave-read-only 变量控制这个行为,且可以在运行时使用 CONFIG SET 来随时开启或者关闭。只读模式下的 slave 将会拒绝所有写入命令,因此实践中不可能由于某种出错而将数据写入 slave 。

3.设置一个 slave 对 master 进行验证

如果你的 master 通过 requirepass 设置了密码,则在所有同步操作中配置 slave 使用该密码是很简单的。

要在正在运行的实例上执行此操作,请使用 redis-cli 并输入:config set masterauth <password>要永久设置的话,请将其添加到您的配置文件中:

masterauth <password>

性能瓶颈压力大

分片/分区-集群一变多|多实例|分而治之
详见后续文章(redis缓存之AKF问题解决方案

1.客户端分区
2.代理分区
3.redis分区-redis集群

AKF(X-Y-Z)问题:

1.X轴:主从复制的全量同步解决了单点故障问题,也就是AKF理论中的X轴。
2.Y轴:按照不同的业务使用不同的redis服务。订单、用户、支付等都使用不同的服务。也就是AKF理论中的Y轴。
3.Z轴:使用分区概念解决单机及大数据量的性能瓶颈

Data-数据-压测

压测:

使用redis自带的redis-benchmark命令可以进行压测

Redis-benchmark使用方式
-h host
 -p port
 -c clients连接数-默认50线程
 -n requests 请求数量-默认10万连接
 -d size SET/GET数据大小-默认3bytes
 -q 静默模式,只显示结果
 -t 要压测的命令 

本机压测示例:

redis-benchmark -c5000 -n100000
-q -t set
单机最大端口数量65535

单用户文件描述符默认限制 1024

可使用ulimit -n命令查看|ulimit -SHn 100000
单机压测结果:

Redis-benchmark -c 100 -n1000000 -q -tset 是在使用默认SYNC同步时并发是10万最优,开启最高安全的SYNC同步时并发是3.5万最优。

局域网内压测结果:并发3.5万最优。

外网压测结果:并发1.3万最优。

得出结论:网络带宽、磁盘IO、网卡(至少千兆)速度等对QPS的影响很大

如需了解更多更详细内容也可关注本人CSDN博客:不吃_花椒

后续redis中将要讲解的内容梳理

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

往期文章

Redis

一、深入理解redis之需要掌握的知识点

二、redis中String和List两种数据类型和应用场景

二、redis中基础数据类型Hash、Set、SortedSet及其应用场景

三、redis数据存储之跳跃表(SKIP LIST)

四、redis持久化之RDB与AOF

Java集合

一、深入理解-Java集合初篇

二、Jdk1.7和1.8中HashMap数据结构及源码分析

三、JDK1.7和1.8HashMap数据结构及源码分析-续

四、深入理解Java中的HashMap「网易面试快答」

五、深入理解JDK1.7中HashMap哈希冲突解决方案

六、深入理解JDK1.8中HashMap哈希冲突解决方案

七、JDK1.7中HashMap扩容机制

八、JDK1.8中HashMap扩容机制

Java-IO体系

一、C10K问题经典问答

二、java.nio.ByteBuffer用法小结

三、Channel 通道

四、Selector选择器

五、Centos-Linux安装nc

六、windows环境下netcat的安装及使用

七、IDEA的maven项目的netty包的导入(其他jar同)

八、JAVA IO/NIO

九、网络IO原理-创建ServerSocket的过程

十、网络IO原理-彻底弄懂IO

十一、JAVA中ServerSocket调用Linux系统内核

十二、IO进化过程之BIO

十三、Java-IO进化过程之NIO

十四、使用Selector(多路复用器)实现Netty中Reactor单线程模型

十五、使用Selector(多路复用器)实现Netty中Reactor主从模型

十六、Netty入门服务端代码

十七、IO进化过程之EVENT(EPOLL-事件驱动异步模型)

如需了解更多更详细内容也可关注本人CSDN博客:不吃_花椒

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值