摘要
Redis学习心得八:群集方式,解决Redis容量难题。数据分拆,让客户端打进不同节点,提高性能。
正文
Redis学习心得八:群集方式
创作者:Grey
全文详细地址:Redis学习心得八:群集方式
前边提及的Redis学习心得七:主从复制和卫兵只有处理Redis的点射工作压力金刚级服务器宕机难题,下面要讲的Redis Cluster方式,主要是用于处理Redis的点射容积难题。
怎样来处理Redis点射容积难题呢?
假如数据信息能够分拆,我们可以让不一样业务流程的手机客户端打进不一样的Redis案例中。
假如数据信息不可以分拆,大家有以下方法:
计划方案2-1 modula方法
能够根据Hash再加上牙模型的方法来精准定位打进哪一个Redis案例中。
这类方法的缺点取决于:模标值固定不动,会危害分布式系统下的扩展性。
计划方案2-2 random方法
即每一次要求redis的案例是任意的,一部分手机客户端承担push数据信息,一部分手机客户端承担消費数据信息,那样的情景能够适用消息队列。
计划方案2-3 ketama方法
这类方法是根据一致性Hash优化算法(沒有牙模型),整体规划成一个环状,环状上面有许多虚似连接点,每一次挑选的案例根据hash优化算法相匹配到实际的一个连接点。实体模型以下:
Client1~Client4根据Hash各自找到环上A~B四个点
这类方法的优势取决于:提升连接点的情况下能够分摊别的连接点的工作压力,不容易导致全局性大转变。
缺陷取决于:增加连接点导致一小部分数据信息不可以击中,会促使缓存击穿,压到mysql
解决方法:取离我近期的两个物理学连接点
modula,random和ketama方法都是以手机客户端下手,由于每一个手机客户端都必须与redis案例创建联接,因此,这类状况会造成联接的成本费很高。如何解决这个问题呢?
我们可以在手机客户端和Redis中间提升一个代理商层,根据代理商层去完成原来在手机客户端要完成的三个计划方案。
这时,代理商层就非常容易变成一个服务器宕机。因此代理商能够做群集,随后最前面根据LVS来做web服务,避免LVS挂了,能够根据KeepAlived来配制LVS,另外,KeepAlived还可以做为代理商层健康体检的专用工具。全部框架图以下:
这三种方式的缺点都取决于:只有让Redis做缓存文件,没法做数据库查询。(由于数据信息会遗失)
要处理这个问题,能够根据预系统分区的方法,提升槽位的定义:http://www.redis.cn/topics/cluster-tutorial.html
能够根据redis-cluster 方式(无主模型)来处理。
手机客户端任意地要求随意一个redis案例,随后由Redis将要求发送给恰当的Redis连接点。Redis Cluster完成了一种混和方式的查看路由器,但并并不是立即将要求从一个redis连接点分享到另一个redis连接点,只是在手机客户端的协助下立即redirected到恰当的redis连接点。
可是数据信息分治算法的情况下,会产生一个难题,没法做汇聚实际操作,怎么解决呢?
我们可以应用hash tag,让同一组key打进同一个redis案例上边,而且对同一hash tag下的key能够开展汇聚实际操作。
Twemproxy实战演练
Twemproxy 也叫 nutcraker。是 Twitter 开源系统的一个 Redis 和 Memcache 服务器代理,关键用以管理方法 Redis 和 Memcached 群集,降低与Cache 网络服务器立即联接的总数。
运行3个redis服务项目案例:假定为:
- 6379
- 6381
- 6380
在/usr/local/src文件目录下,免费下载全新的twemproxy的源代码包
cd /usr/local/src
## 免费下载源代码
wget https://GitHub.com/twitter/twemproxy/archive/refs/tags/v0.4.1.tar.gz
## 缓解压力
tar xf v0.4.1.tar.gz
## 重新命名
mv twemproxy-0.4.1/ twemproxy/
下面依照官方网流程编译程序安裝
yum install automake libtool -y
cd /usr/local/src/twemproxy/
autoreconf -fvi
./configure --enable-debug=full
make
src/nutcracker -h
## 安裝成服务项目
cp nutcracker.init /etc/init.d/nutcracker
chmod x /etc/init.d/nutcracker
mkdir /etc/nutcracker
cp /usr/local/src/twemproxy/conf/* /etc/nutcracker/
cp /usr/local/src/twemproxy/src/nutcracker /usr/bin
下面改动twemproxy的环境变量
vi /etc/nutcracker/nutcracker.yml
改动为:
alpha:
listen: 127.0.0.1:22121
hash: fnv1a_64
distribution: ketama
auto_eject_hosts: true
redis: true
server_retry_timeout: 2000
server_failure_limit: 1
servers:
- 127.0.0.1:6379:1
- 127.0.0.1:6380:1
- 127.0.0.1:6381:1
运行
service nutcracker start
联接到代理商:
redis-cli -p 22121
127.0.0.1:22121> set k1 1
OK
127.0.0.1:22121> get k1
"1"
不兼容的一些实际操作。
127.0.0.1:22121> keys *
Error: Server closed the connection
127.0.0.1:22121> watch k1
Error: Server closed the connection
127.0.0.1:22121> mult
Error: Server closed the connection
127.0.0.1:22121> multi
Error: Server closed the connection
关注不迷路
扫码下方二维码,关注宇凡盒子公众号,免费获取最新技术内幕!
评论0