V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
black11black
V2EX  ›  Java

生产环境下的 redis 集群一般是如何部署的?

  •  
  •   black11black · 2020-03-19 03:08:16 +08:00 via Android · 6794 次点击
    这是一个创建于 1703 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题,java 人均百万并发系列问题,大家不要吐槽。

    一个好奇是 redis 节点默认单线程,不能急用多核心,那么如何部署才能榨干性能。

    我觉得应该按数据量大小分两种情况讨论,印象中 redis 的读写瓶颈在千万级左右。

    对于小于千万级数据量的需求,应该是 sentinel 就可以搞定的,不需要扩展至多台机器。一个问题是如果为了高可用性部署了 sentinel 集群,由于完全的镜像数据库,会导致实际可用内存变成 1/n

    而 cluster 又不能跟 setinel 结合,所以扩展到多台物理机器的情况下每台机器也占不满吧。

    菜鸡的小小疑问,大家勿喷
    21 条回复    2020-03-20 17:32:01 +08:00
    nvkou
        1
    nvkou  
       2020-03-19 03:09:52 +08:00 via Android
    你觉得 cpu 吃不满?那同一台机器再部署计算密集型业务就是了啊
    brucewzp
        2
    brucewzp  
       2020-03-19 08:25:09 +08:00 via iPhone
    cachecloud
    scriptB0y
        3
    scriptB0y  
       2020-03-19 09:36:57 +08:00
    cluster 没有必要用 sentinel 了,cluster 自身就带 fail over 功能。

    7 台机器,可以三台为 master,4 台为 replica。这样 7 台机器中可以随便挂掉任意两台。(必须是依次挂掉,不能同时挂)

    可以看下这个教程: https://redis.io/topics/cluster-tutorial
    zunceng
        4
    zunceng  
       2020-03-19 10:06:39 +08:00
    用 k8s 啊 基础服务和业务用同一个集群
    guyeu
        5
    guyeu  
       2020-03-19 10:09:47 +08:00
    分库。。
    sagaxu
        6
    sagaxu  
       2020-03-19 10:14:06 +08:00 via Android
    单实例读写没有千万吧,十万级
    fancy111
        7
    fancy111  
       2020-03-19 10:22:36 +08:00
    啥的读写瓶颈千万级啊,单机就几万。另外我没见过有几个公司达到百万并发的。
    你用哨兵不就是几台机器?
    cluster 又不能跟 setinel 结合? excuse me?
    vus520
        8
    vus520  
       2020-03-19 11:28:46 +08:00
    单实例十万级,网络就数万级。要多核心,那就多实例。
    threegrandfather
        9
    threegrandfather  
       2020-03-19 12:16:22 +08:00
    twemproxy+redis master+redis slave,twemproxy 和 redis master 按照 2:1 比例购买机器。单实例机器 2c12g,twemproxy 机器可以小一点。twemproxy 前面顶一个内网 lb。
    单实例 redis 不要超过 12G。
    zhoudaiyu
        10
    zhoudaiyu  
       2020-03-19 12:43:50 +08:00
    @scriptB0y 看到 redis 大佬了!请问 sentinel 可不可以看作缩水(低配)版的 cluster ?
    black11black
        11
    black11black  
    OP
       2020-03-19 14:14:14 +08:00
    @sagaxu 数据量千万级,不是并发千万级
    jonathan001
        12
    jonathan001  
       2020-03-19 15:23:30 +08:00
    @zunceng 你不怕互相影响么?
    zunceng
        13
    zunceng  
       2020-03-19 16:13:35 +08:00
    @jonathan001 和业务集群规模一起扩 感觉还好呀 可能量还小吧
    saytesnake
        14
    saytesnake  
       2020-03-19 16:28:54 +08:00
    直接原生 cluster,轻松简单无烦恼,sentinel 可用可不用。
    huntcool001
        15
    huntcool001  
       2020-03-19 16:47:49 +08:00
    现在一般不用 sentinel, 直接 cluster 就行了.
    scriptB0y
        16
    scriptB0y  
       2020-03-19 20:47:33 +08:00   ❤️ 1
    @zhoudaiyu 不是的,这两个是不同的东西。

    sentinel 做的事情基本上就是 master 挂了之后帮你提升 replica 为 master,跟你雇了个人盯着 master,出问题的时候执行切换的效果一样,所以它叫做 “sentinel”。本质上这还是一个 Redis 在工作,一个 Redis 在 backup。3 个 sentinel 节点在监工(为了节省资源可以和应用部署在一起,sentinel 基本不需要什么资源)。

    cluster 是完全另一个东西,它把 key 分散在多个 redis 实例上,这样就可以水平扩展了,这些实例本身会自己处理好 replica,failover。看起来 cluster 也能 failover,但是 cluster 是有限制的。1 ) cluster 不支持多个 key 的操作,比如 zinterstore,除非这些 key 存在于同一个实例上。这点想想就明白了,在多台 redis 上是无法保证都成功的。2 ) 只支持 1 个 db,db 0,select 是无效的。

    然而最大的问题是 3 )客户端必须以 cluster 的协议与 redis 沟通,因为客户端需要处理路由。

    可以看下 python 的客户端 https://redis-py-cluster.readthedocs.io/en/master/limitations-and-differences.html

    虽然有一些方案可以用代理的方式屏蔽 cluster 的处理

    redis 官方也出的 proxy: https://github.com/RedisLabs/redis-cluster-proxy

    pingcap 以前出品的 codis: https://github.com/CodisLabs/codis

    其实从单机迁移到 cluster 也是成本很大的,我之前看过一个公司的迁移经验分享,但是找不到链接了。。。

    所以场景还是不一样,水平扩展就用 clsuter,如果只需要 fail over 那就用 sentinel 模式。有很多公司也有不错的 proxy 方案
    zhoudaiyu
        17
    zhoudaiyu  
       2020-03-19 20:55:24 +08:00 via iPhone
    @scriptB0y 受益匪浅,终于明白这两个的区别了,大佬对 Redis 研究颇深啊,请问有没有好的博客或是网站介绍 redis 的 sentinel 和 cluster 啊
    Aresxue
        18
    Aresxue  
       2020-03-19 23:25:50 +08:00
    担心机器性能利用不充分就上虚拟化比如 docker, 就不用过度关注于资源调度的问题了
    daimaosix
        19
    daimaosix  
       2020-03-20 00:06:26 +08:00
    我们用的 docker
    d0m2o08
        20
    d0m2o08  
       2020-03-20 08:41:46 +08:00
    一切纠结资源调度的问题,都可以用 k8s 解决
    ---- 周树人
    xuzhzzz
        21
    xuzhzzz  
       2020-03-20 17:32:01 +08:00
    最近也在研究 redis 集群,没太懂你说的 redis-cluster 结合 setinel 是啥意思。。。类似于你开车出门怕车抛锚,你就让你朋友骑电动车跟在你后面,抛锚了就坐他电动车吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2864 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 06:39 · PVG 14:39 · LAX 22:39 · JFK 01:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.