black11black
V2EX  ›  Java

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

  •  
  •   black11black · Mar 19, 2020 via Android · 7930 views
    This topic created in 2421 days ago, the information mentioned may be changed or developed.
    如题,java 人均百万并发系列问题,大家不要吐槽。

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

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

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

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

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

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

    可以看下这个教程: https://redis.io/topics/cluster-tutorial
    zunceng
    zunceng
    Mar 19, 2020
    4
    用 k8s 啊 基础服务和业务用同一个集群
    guyeu
    guyeu
    Mar 19, 2020
    5
    分库。。
    sagaxu
    sagaxu
    Mar 19, 2020 via Android
    6
    单实例读写没有千万吧,十万级
    fancy111
    fancy111
    Mar 19, 2020
    7
    啥的读写瓶颈千万级啊,单机就几万。另外我没见过有几个公司达到百万并发的。
    你用哨兵不就是几台机器?
    cluster 又不能跟 setinel 结合? excuse me?
    vus520
    vus520
    Mar 19, 2020
    8
    单实例十万级,网络就数万级。要多核心,那就多实例。
    threegrandfather
    threegrandfather
    Mar 19, 2020
    9
    twemproxy+redis master+redis slave,twemproxy 和 redis master 按照 2:1 比例购买机器。单实例机器 2c12g,twemproxy 机器可以小一点。twemproxy 前面顶一个内网 lb。
    单实例 redis 不要超过 12G。
    zhoudaiyu
    zhoudaiyu
    Mar 19, 2020
    10
    @scriptB0y 看到 redis 大佬了!请问 sentinel 可不可以看作缩水(低配)版的 cluster ?
    black11black
    black11black
    OP
    Mar 19, 2020
    11
    @sagaxu 数据量千万级,不是并发千万级
    jonathan001
    jonathan001
    Mar 19, 2020
    12
    @zunceng 你不怕互相影响么?
    zunceng
    zunceng
    Mar 19, 2020
    13
    @jonathan001 和业务集群规模一起扩 感觉还好呀 可能量还小吧
    saytesnake
    saytesnake
    Mar 19, 2020
    14
    直接原生 cluster,轻松简单无烦恼,sentinel 可用可不用。
    huntcool001
    huntcool001
    Mar 19, 2020
    15
    现在一般不用 sentinel, 直接 cluster 就行了.
    scriptB0y
    scriptB0y
    Mar 19, 2020❤️1
    16
    @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
    zhoudaiyu
    Mar 19, 2020 via iPhone
    17
    @scriptB0y 受益匪浅,终于明白这两个的区别了,大佬对 Redis 研究颇深啊,请问有没有好的博客或是网站介绍 redis 的 sentinel 和 cluster 啊
    Aresxue
    Aresxue
    Mar 19, 2020
    18
    担心机器性能利用不充分就上虚拟化比如 docker, 就不用过度关注于资源调度的问题了
    daimaosix
    daimaosix
    Mar 20, 2020
    19
    我们用的 docker
    d0m2o08
    d0m2o08
    Mar 20, 2020
    20
    一切纠结资源调度的问题,都可以用 k8s 解决
    ---- 周树人
    xuzhzzz
    xuzhzzz
    Mar 20, 2020
    21
    最近也在研究 redis 集群,没太懂你说的 redis-cluster 结合 setinel 是啥意思。。。类似于你开车出门怕车抛锚,你就让你朋友骑电动车跟在你后面,抛锚了就坐他电动车吗
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5346 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 96ms · UTC 01:28 · PVG 09:28 · LAX 17:28 · JFK 20:28
    ♥ Do have faith in what you're doing.