搜索

首页  >  问答  >  正文

redis数据库把它分散到两台机器

我有一个4G的redis数据库,现在已经存在,我想要把它分散到两台机器,一台机器2G,该怎么做?

看了一下redis cluster,都是讲单点失败,主从复制,这个不是我的需求。

sf的redis服务器是多大的内存?

阿神阿神2800 天前691

全部回复(6)我来回复

  • 大家讲道理

    大家讲道理2017-04-21 10:59:02

    不太确定你在用什么客户端,不同的客户端有 distributed 的最基本实现,但是这些都是客户端实现,在增加删除节点时需要你自己重新算 hash 迁移数据。Redis 3 会有服务端的支持,就会简单很多了。

    基本目前的客户端实现都是基于 @TechAd 说的 consistent hashing,比如 ruby 客户端就有 Redis::Distributed 可以用,你的需求把 4G 数据分到两台机器也很简单,已经有 https://github.com/yankov/redis-migra... 可以直接用,看下实现,其实也很简单。

    希望对你有帮助。

    回复
    0
  • 巴扎黑

    巴扎黑2017-04-21 10:59:02

    推荐你搜搜一致性哈希的相关算法,大体思路是,在客户端做一个路由,对key做一个hash,然后mod 2, 分别将key-value存储到0, 1两台机器上去,读取的时候也是这样。可以参考memcache的,给你一个参考链接http://blogread.cn/it/article/5271

    回复
    0
  • 大家讲道理

    大家讲道理2017-04-21 10:59:02

    可以使用3L的做法,或者最直接的办法就是在业务层把数据分开,写在配置里面就可以了,这样以后在拆分的时候会很方便,逻辑也简单,如果真的需要做分布式,建议使用mongoDB

    回复
    0
  • PHPz

    PHPz2017-04-21 10:59:02

    如果你不需要pepline的话推荐使用https://github.com/twitter/twemproxy Twitter退出的代理,自动hash,故障自动切换

    回复
    0
  • 怪我咯

    怪我咯2017-04-21 10:59:02

    问一下,twemproxy是不是不支持主备自动切换?

    回复
    0
  • 巴扎黑

    巴扎黑2017-04-21 10:59:02

    如果你是用redis cluster来做这个数据迁移的话,可以看看其官方的介绍:
    假设您将预先存在的数据集拆分为 N 个主节点,如果没有预先存在的分片,则 N=1,则需要执行以下步骤才能将数据集迁移到 Redis 集群:
    阻止你的客户。目前无法自动实时迁移到 Redis 集群。您也许能够在您的应用程序/环境的上下文中编排实时迁移。
    使用 BGREWRITEAOF 命令为所有 N 个 master 生成一个仅追加文件,并等待 AOF 文件完全生成。
    将 AOF 文件从 aof-1 保存到 aof-N 某处。此时,如果您愿意,您可以停止旧实例(这很有用,因为在非虚拟化部署中,您经常需要重复使用相同的计算机)。
    创建一个由N个master和0个slave组成的Redis集群。您稍后将添加奴隶。确保所有节点都使用仅附加文件来实现持久性。
    停止所有集群节点,用您预先存在的仅附加文件替换它们的仅附加文件,第一个节点为 aof-1,第二个节点为 aof-2,最多为 aof-N。
    使用新的 AOF 文件重新启动 Redis 集群节点。他们会抱怨有些钥匙根据他们的配置不应该在那里。
    使用 redis-trib fix 命令来修复集群,以便根据每个节点是否权威的哈希槽来迁移密钥。
    最后使用 redis-trib 检查以确保您的集群正常。
    重新启动修改为使用 Redis 集群感知客户端库的客户端。w

    回复
    0
  • 取消回复