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四个点

image

这类方法的优势取决于:提升连接点的情况下能够分摊别的连接点的工作压力,不容易导致全局性大转变。

缺陷取决于:增加连接点导致一小部分数据信息不可以击中,会促使缓存击穿,压到mysql

解决方法:取离我近期的两个物理学连接点

modula,random和ketama方法都是以手机客户端下手,由于每一个手机客户端都必须与redis案例创建联接,因此,这类状况会造成联接的成本费很高。如何解决这个问题呢?

我们可以在手机客户端和Redis中间提升一个代理商层,根据代理商层去完成原来在手机客户端要完成的三个计划方案。

image

这时,代理商层就非常容易变成一个服务器宕机。因此代理商能够做群集,随后最前面根据LVS来做Web服务,避免LVS挂了,能够根据KeepAlived来配制LVS,另外,KeepAlived还可以做为代理商层健康体检的专用工具。全部框架图以下:

image

三种方式的缺点都取决于:只有让Redis做缓存文件,没法做数据库查询。(由于数据信息会遗失)

要处理这个问题,能够根据预系统分区的方法,提升槽位的定义:http://www.redis.cn/topics/cluster-tutorial.html

能够根据redis-cluster 方式(无主模型)来处理。

image

手机客户端任意地要求随意一个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

image

在/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条)

刀客源码 匿名评论