redis集群简单介绍

本期我为大家分享的知识点为redis的集群简单介绍

知识结构:

1.背景介绍
2.知识剖析
3.编码实战
4.常见问题
5.参考文献
6.更多讨论

1.背景介绍

Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,是已知性能最快的Key-Value DB。

redis特点
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
丰富的数据类型 – Redis支持二进制的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。
支持数据的备份,即master-slave模式的数据备份。
支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

为什么使用集群

大型网站应用,热点数据量往往巨大为了提高网站响应速度,热点数据保存在内存中,单台服务主机的内存资源往往是有限制的,通过横向可伸缩扩展,使用多台主机提供服务,能够获得更好的效果。

2.知识剖析

REDIS集群
Redis集群是一个由多个Redis服务器组成的分布式网络服务器群,集群中的各个服务器被称为节点(node),这些节点会相互连接并进行通信。分布式的Redis集群没有中心节点,所以用户不必担心某个节点会成为整个集群的性能瓶颈。

REDIS分布式
主从模式:Master会将数据同步到slave,而slave不会将数据同步到master。Slave启动时会连接master来同步数据。
读写分离模型:可以利用master来插入数据,slave提供检索服务。这样可以有效减少单个机器的并发访问数量

REDIS集群分片
集群使用分片来扩展数据库的容量,并将命令请求的负载交给不同的节点来分担。
集群将整个数据库分为 16384 个槽(slot),所有键都属于这 16384 个槽的其中一个,计算键 key属于哪个槽的公式为 slot_number = crc16(key) % 16384 ,其中 crc16 为 16 位的循环冗余校验和函数。集群中的每个主节点都可以处理 0 个至 16384 个槽,当 16384 个槽都有某个节点在负责处理时,集群进入上线状态,并开始处理客户端发送的数据命令请求。

REDIS集群转向

对于一个被指派了槽的主节点来说,这个主节点只会处理属于指派给自己的槽的命令请求。如果一个节点接收到了与自己处理的槽无关的命令请求,那么节点会向客户端返回一个转向错误(redirection error),告诉客户端,哪个节点负责处理这条命令,之后客户端需要根据错误中包含的地址和端口号重新向正确的节点发送命令请求。

REDIS集群的缺点

集群无法正常提供服务的情况。
a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完整时进入fail状态.
ps : redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认yes.
b:如果集群超过半数以上master挂掉,无论是否有slave,集群进入fail状态.

REDIS集群搭建

1.ruby环境
2.配置多个redis节点
3.集群的启动(/redis-trib.rb create --replicas 1 127.0.0.1 9001)
4.客服端配置

3.编码实战

在服务器中搭建redis集群

4.常见问题

1.redis集群的启动及关闭
redis的集群启动需要先开启所有的redis客户端;然后使用集群命令进行设置及打开;关闭的时候需要全部关闭,集群就会关闭;
如果配置完后不更改配置启动,直接一次启动集群的所有客户端即可;如果对配置有更改,需要删除存留的conf文件,然后重新用集群命令启动;

2.异步复制导致数据丢失
因为master -> slave的复制是异步的,所以可能有部分数据还没复制到slave,master就宕机了,此时这些部分数据就丢失了

解决办法,搜索配置文件进行如下配置;
min-slaves-to-write 1
min-slaves-max-lag 10
要求至少有1个slave,
数据复制和同步的延迟不能超过10秒如果说一旦所有的slave,数据复制和同步的延迟都超过了10秒钟,那么这个时候,master就不会再接收任何请求了

3.安装集群事安装ruby出现的问题
yum install ruby ;
yum install rubygems ;
gem install redis ;
其中 gem install redis执行会报错:redis requires Ruby version >= 2.2.2

原因是:centos默认支持ruby是2.0.0,所以需要安装rvm将ruby版本升至2.2.3;

5.参考资料


https://blog.csdn.net/u013063153/article/details/71191138/
https://blog.csdn.net/u013063153/article/details/71191138/
https://blog.csdn.net/shaonian_wo/article/details/78007722
https://www.cnblogs.com/mafly/p/redis_cluster.html



6.更多讨论

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值