slave node,readonly,get,这个时候才能在slave node进行读取
redis cluster,主从架构是出来,读写分离,复杂了点,也可以做,jedis客户端,对redis cluster的读写分离支持不太好的
默认的话就是读和写都到master上去执行的
如果你要让最流行的jedis做redis cluster的读写分离的访问,那可能还得自己修改一点jedis的源码,成本比较高
要不然你就是自己基于jedis,封装一下,自己做一个redis cluster的读写分离的访问api
核心的思路,就是说,redis cluster的时候,就没有所谓的读写分离的概念了
读写分离,是为了什么,主要是因为要建立一主多从的架构,才能横向任意扩展slave node去支撑更大的读吞吐量
redis cluster的架构下,实际上本身master就是可以任意扩展的,你如果要支撑更大的读吞吐量,或者写吞吐量,或者数据量,都可以直接对master进行横向扩展就可以了
也可以实现支撑更高的读吞吐的效果
不会去跟大家直接讲解的,很多东西都要带着一些疑问,未知,实际经过一些实验和操作之后,让你体会的更加深刻一些
redis cluster,主从架构,读写分离,没说错,没有撒谎
redis cluster,不太好,server层面,jedis client层面,对master做扩容,所以说扩容master,跟之前扩容slave,效果是一样的
3、实验自动故障切换 -> 高可用性
redis-trib.rb check 192.168.31.187:7001
比如把master1,187:7001,杀掉,看看它对应的19:7004能不能自动切换成master,可以自动切换
切换成master后的19:7004,可以直接读取数据
再试着把187:7001给重新启动,恢复过来,自动作为slave挂载到了19:7004上面去
3、实现redis cluster的水平扩容
redis cluster模式下,不建议做物理的读写分离了
我们建议通过master的水平扩容,来横向扩展读写吞吐量,还有支撑更多的海量数据
redis单机,读吞吐是5w/s,写吞吐2w/s
扩展redis更多master,那么如果有5台master,不就读吞吐可以达到总量25/s QPS,写可以达到10w/s QPS
redis单机,内存,6G,8G,fork类操作的时候很耗时,会导致请求延时的问题
扩容到5台master,能支撑的总的缓存数据量就是30G,40G
100台,600G,800G,甚至1T+,海量数据
----------------------------------------------------------
redis是怎么扩容的
------- 加入master 加入slave
1、加入新master
mkdir -p /var/redis/7007
port 7007cluster-enabled yescluster-config-file /etc/redis-cluster/node-7007.confcluster-node-timeout 15000daemonize yespidfile /var/run/redis_7007.piddir /var/redis/7007logfile /var/log/redis/7007.logbind 192.168.31.227appendonly yes
搞一个7007.conf,再搞一个redis_7007启动脚本
手动启动一个新的redis实例,在7007端口上
redis-trib.rb add-node 192.168.31.227:7007 192.168.31.187:7001
![亿级流量场景下,大型缓存架构设计实现,你知道吗?](http://img.jiangsulong.com/220418/212JJZ7-52.jpg)
文章插图
redis-trib.rb check 192.168.31.187:7001
连接到新的redis实例上,cluster nodes,确认自己是否加入了集群,作为了一个新的master,
![亿级流量场景下,大型缓存架构设计实现,你知道吗?](http://img.jiangsulong.com/220418/212JH910-53.jpg)
文章插图
2、reshard一些数据过去
resharding的意思就是把一部分hash slot从一些node上迁移到另外一些node上
redis-trib.rb reshard 192.168.31.187:7001
要把之前3个master上,总共4096个hashslot迁移到新的第四个master上去
How many slots do you want to move (from 1 to 16384)? 4096
![亿级流量场景下,大型缓存架构设计实现,你知道吗?](http://img.jiangsulong.com/220418/212JMb2-54.jpg)
文章插图
检查一下分配的情况:
![亿级流量场景下,大型缓存架构设计实现,你知道吗?](http://img.jiangsulong.com/220418/212JI449-55.jpg)
文章插图
3、添加node作为slave
eshop-cache03
mkdir -p /var/redis/7008
port 7008cluster-enabled yescluster-config-file /etc/redis-cluster/node-7008.confcluster-node-timeout 15000daemonize yespidfile /var/run/redis_7008.piddir /var/redis/7008logfile /var/log/redis/7008.logbind 192.168.31.227appendonly yes
redis-trib.rb add-node --slave --master-id 28927912ea0d59f6b790a50cf606602a5ee48108 192.168.31.227:7008 192.168.31.187:7001
![亿级流量场景下,大型缓存架构设计实现,你知道吗?](http://img.jiangsulong.com/220418/212JJY1-56.jpg)
文章插图
检查加入情况:
![亿级流量场景下,大型缓存架构设计实现,你知道吗?](http://img.jiangsulong.com/220418/212JM604-57.jpg)
文章插图
4、删除node
先用resharding将数据都移除到其他节点,确保node为空之后,才能执行remove操作
先将slot移空
![亿级流量场景下,大型缓存架构设计实现,你知道吗?](http://img.jiangsulong.com/220418/212JM3H-58.jpg)
文章插图
移空后执行删除:
![亿级流量场景下,大型缓存架构设计实现,你知道吗?](http://img.jiangsulong.com/220418/212JI5P-59.jpg)
推荐阅读
- 私域流量的真相
- 百度seo流量浮动,网站到底该如何应对?
- 对DBA、开发、测试、产品同时友好 大规模多存储场景的数据库选型与服务平台建设
- 手淘推荐是什么流量入口 手淘推荐流量怎么获得
- RSS|在流量大厂的围攻下 有人希望20多岁老掉牙的技术复活
- 手淘推荐流量突然下降 手淘推荐是什么流量
- 全球最大CDN厂商Akamai:新冠疫情下互联网流量激增带来的安全新挑战
- 淘宝店铺没有自然流量进来怎么办 淘宝店流量一直起不来
- 交管12123怎么取消缴费?
- 淘宝新品上架多久会有自然流量 淘宝每天上新品可以提高流量吗