Redis集群的搭建及管理
目录
5.1、基本介绍 https://github.com/sohutv/cachecloud.. 52
一、概述
本次通过搭建适用于机房的Redis集群作为对企业需要的Redis服务管理集群,这里针对于Redis的性能与存储方式作为介绍,以Cachecloud作为集群管理介绍,讲述了Redis集群的搭建、管理及使用。其中,Redis服务安装及测试与Redis集群安装及测试针对于Redis 5版本及以上,Cachecloud管理集群针对与Redis 3以上、Redis 5以下。本次对Cachecloud的集群只做最基础的安装及使用讲解及不进行任何后续优化,只使用源码包。PS:要不是公司内部要我培训Redis,我才不是闲的没事来整理这个!o(╥﹏╥)o
二、Redis介绍
具体看官网,讲得再多不离其中其宗。简单一点,为什么要使用缓存数据库,假如系统有千万级别的数据,数据信息基本不变,但每次加载所有数据时都要请求数据库,重复的查询操作严重降低了服务器性能。针对这种数据,把它们加入缓存数据库中,每次取数判断缓存数据库中是否为空,如果为空,再去请求数据库并将数据加入缓存。如下:
2.1、Redis与Memcache的对比
2.1.1、区别(单服务)
1)存储方式:Memecache把数据全部存在内存里,断电后会挂掉,数据不能超过内存大小。Redis部份存在硬盘上,保证数据的持久性。
2)数据支持:Memcache对数据类型支持相对简单。Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储,相对复杂。
3)底层模型:新版本的redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
4)value大小:redis最大可以达到512MB,而memcache最大仅有1MB。
5)运行环境:redis目前官方只支持LINUX 上去行,从而省去了对于其它系统的支持,这样的话可以更好的把精力用于本系统 环境上的优化,虽然后来微软有一个小组为其写了补丁,但是没有放到主干上。
2.1.2、优劣
应该说Memcached和Redis都能很好的满足解决我们的问题,它们性能都很高,总的来说,可以把Redis理解为是对Memcached的拓展,是更加重量级的实现,提供了更多更强大的功能。具体来说:
1)性能:性能上都很出色,具体到细节,由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起 Memcached,还是稍有逊色。
2)内存空间和数据量大小:MemCached可以修改最大内存,采用LRU算法。Redis增加了VM的特性,突破了物理内存的限制。
3)操作性:MemCached数据结构单一,仅用来缓存数据,而Redis支持更加丰富的数据类型,也可以在服务器端直接对数据进行丰富的操作,这样可以减少网络IO次数和数据体积。
4)可靠性:MemCached不支持数据持久化,断电或重启后数据消失,但其稳定性是有保证的。Redis支持数据持久化和数据恢复,允许单点故障,但是同时也会付出性能的代价。
2.1.3、适用
Memcached:动态系统中减轻数据库负载,提升性能;做缓存,适合多读少写,大数据量的情况(如人人网大量查询用户信息、好友信息、文章信息等)。
Redis:适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统(如新浪微博的计数和微博发布部分系统,对数据安全性、读写要求都很高)。
2.2、Redis与Kafka的对比
redis是内存数据库,只是它的list数据类型刚好可以用作消息队列而已。
kafka是消息队列,消息的存储模型只是其中的一个环节,还提供了消息ACK和队列容量、消费速率等消息相关的功能,更加完善。
2.3、Redis适用场景
不需要实时更新但是又极其消耗数据库的数据。
需要实时更新,但是更新频率不高的数据。
在某个时刻访问量极大而且更新也很频繁的数据。
注:大部分数据其实都可以放在缓存数据库中,但涉及到钱、密钥、业务关键性核心数据等私密性数据等,是不能放在缓存数据库中的。
三、Redis服务安装及测试
这里只说编译安装了,详情请看:
https://blog.csdn.net/qq_37960324/article/details/104476378
这个主要针对于无网环境,更具有建设性(这个挺重要的!)
3.1、获取安装包
http://download.redis.io/releases/
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
3.2、安装依赖
安装的编译工具:make、gcc
3.3、解压编译
解压至当前目录
tar xf redis-5.0.7.tar.gz
编译
make
make PREFIX=/usr/local/redis install
3.4、配置
拷贝主配置文件
cp redis.conf /usr/local/redis/
编辑配置文件
daemonize yes:支持后台进程
sed -i -e "s/bind 127.0.0.1/#bind 127.0.0.1/g" /usr/local/redis/redis.conf
sed -i -e "s/# requirepass foobared/requirepass 123456/g" /usr/local/redis/redis.conf
sed -i -e "s/daemonize no/daemonize yes/g" /usr/local/redis/redis.conf
3.5、启动并检查
cd /usr/local/redis/bin/
./redis-server ../redis.conf
检查
四、Redis集群安装及测试
参考官网中文版:http://redisdoc.com/topic/cluster-spec.html
参考:http://redisdoc.com/topic/cluster-tutorial.html
一、集群简介
1、什么是redis集群?
redis集群是一个可以在多个redis节点之间进行数据共享的设施(installation)
图片来源:https://www.cnblogs.com/bcde/p/11163362.html
2、redis集群特性
不支持需要同时处理多个键的 Redis 命令, 因为执行这些命令需要在多个 Redis 节点之间移动数据, 并且在高负载的情况下, 这些命令将降低 Redis 集群的性能, 并导致不可预测的行为。
Redis 集群通过分区(partition)来提供一定程度的可用性(availability): 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求。
3、redis集群优点
将数据自动切分(split)到多个节点的能力。
当集群中的一部分节点失效或者无法进行通讯时, 仍然可以继续处理命令请求的能力。
4、连接
与任意实例连接,即可获得整个集群的数据!通过这个,得做一下读写分离了。
二、集群数据共享
参考:https://www.cnblogs.com/bcde/p/11163362.html
参考:https://www.cnblogs.com/wangfajun/p/12198149.html
Redis 集群使用数据分片(sharding)而非一致性哈希(consistency hashing)来实现: 一个 Redis 集群包含 16384 个哈希槽(hash slot), 数据库中的每个键都属于这 16384 个哈希槽的其中一个, 集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽, 其中 CRC16(key) 语句用于计算键 key 的 CRC16 校验和 。
这个得在之后的集群操作中熟悉。
三、集群主从复制
为了使得集群在一部分节点下线或者无法与集群的大多数(majority)节点进行通讯的情况下, 仍然可以正常运作, Redis 集群对节点使用了主从复制功能: 集群中的每个节点都有 1 个至 N 个复制品(replica), 其中一个复制品为主节点(master), 而其余的 N-1 个复制品为从节点(slave)。
只要一个槽点存活一个节点服务器,那么集群就不会蹦!
四、Redis 集群的一致性保证(guarantee)风险项,需要考虑解决办法
Redis 集群不保