redis-sharding – 一个 Redis Proxy

redis-sharding 是一个由perl写的 Redisproxy,使用它,你可以将数据分布存储在多个Redis实例上,而在操作数据时却像只操作一个实例一样。利用它相当于透明地解决了 Redis 单线程无法有效利用多核心服务器的问题。当然,我们更期待官方的cluster方案。

项目地址:https://github.com/kni/redis-sharding

架构:

                              /- Redis (node 1)
 Client 1 ---                /-- Redis (node 2)
              Redis Sharding --- Redis (node 3)
 Client 2 ---                \-- Redis (node 4)
                              \- Redis (node 5)

启动redis-sharding,分别为使用默认host,port与指定host,port的方式:

 perl redis_sharding.pl                             --nodes=10.1.1.2:6380,10.1.1.3:6380,...
 perl redis_sharding.pl                 --port=6379 --nodes=10.1.1.2:6380,10.1.1.3:6380,...
 perl redis_sharding.pl --host=10.1.1.1 --port=6379 --nodes=10.1.1.2:6380,10.1.1.3:6380,...

redis-sharding还支持重新切分数据,但这需要暂时停掉proxy,下面是将原来的db 9的数据重新sharding到B1-B5五个实例上:

停掉redis-sharding后再执行:

perl resharding.pl --db=9 --from=A1 --nodes=B1,B2,B3,B4,B5
perl resharding.pl --db=9 --from=A2 --nodes=B1,B2,B3,B4,B5

然后再启动新的管理B1-B5的redis-sharding实例即可:

perl redis_sharding.pl --nodes=B1,B2,B3,B4,B5

anyShare据说看到好文章不转的人,服务器容易宕机!
          

无觅相关文章插件,快速提升流量

  1. 有点儿像lvs,
    有两个问题:
    1.proxy机器还要解决单点的问题
    2.海量访问的情况下proxy是否能够承担?
    客户端路由(由配置中心分发路由策略)是解决海量访问的好的解决办法.又没有人有更好的解决方案?

    • 其实就是一般的proxy,包含数据路由功能。类似的就像Memcached的proxy moxi一样:
      http://www.kafka0102.com/2010/01/21.html

      关于单点问题没有细看,但应该可以有很多方法实现,比如利用redis的replication功能。

      海量数据访问的好的解决方案,这个课题就太大了,上面的proxy做路由的方式只是中心化方案的一种,类似的还有mongodb的auto-sharding机制等,当然还有去中心化的设计,比如dynamo和cassandra。要说完美的解决方案肯定是没有的。只能说针对当前业务最合适的解决方案。