• Redis Twemproxy 集群,水平扩展 ,扩容方案


    如果您对Redis的了解不够深入请关注本栏目,本栏目包括Redis安装Redis配置文件说明Redis命令和数据类型说明Redis持久化配置Redis主从复制和哨兵机制Redis Cluster(集群)配置Redis Predixy 集群

    一、概述

    • Twemproxy(也称为nutcracker)是一个开源的代理软件,用于提供 Redis 或 Memcached 数据存储的负载均衡和高可用性。它是一种代理层,允许客户端将请求发送到多个 Redis 或 Memcached 后端服务器,并在多个节点之间进行负载均衡。它也是 Twitter 公司开发的,并且已经成为 Redis 和 Memcached 社区中常见的工具之一。

    • 我在前面讲过Redis Cluster 集群配置,那么即然官方自带了 Redis Cluster 为什么还要使用 Twemproxy 呢?因为 Twemproxy 还有 Redis Cluster 没有的功能,如下:

      • 多种部署:Redis Cluster 只支持一种特定的哈希分片架构,而 Twemproxy 可以适用于多种部署拓扑。而且增加Redis群集后应用程序代码无需修改,就连配置都不修改。
      • 动态的负载均衡:根据实时的节点状态和负载情况,Twemproxy 智能地将请求路由到最佳的 Redis 节点,以实现负载均衡。
      • 读写分离:Twemproxy 支持读写分离的配置。它可以将读操作路由到从节点,以分担主节点的负载,并提高读取性能。同时,写操作仍然会路由到主节点,以确保数据的一致性。
    • Twemproxy 与 Predixy 相比优点是更轻量级,效率更高。但是社区活跃底较低,文档相对较少。

    • 开源地址:https://github.com/twitter/twemproxy

    二、Twemproxy 分布模式

    • Twemproxy 将请求路由到哪个后端服务器支持的分布模式有以下3种:

      1. ketama(一致性哈希): 这是默认和推荐的分布模式。它是一种基于一致性哈希算法的分布方式,确保当增加或删除后端服务器时,大部分请求仍能映射到正确的后端服务器。这有助于保持负载均衡并最小化数据的迁移。

      2. modula(模哈希): 这是另一种分布模式,它使用哈希运算中的模(取余)运算来选择后端服务器。它通常需要事先知道服务器的数量,并根据此数量来计算哈希值。这种模式可能会导致负载分布不均匀,特别是在添加或删除服务器时。

      3. random(随机选择): 这个分布模式是基于随机选择后端服务器的方式。对于每个请求的每个键,它将随机选择一个后端服务器。这可能导致负载分布不均匀,不适合需要一定程度的负载均衡的情况。

    • 一致性哈希(ketama)是最常用的分布模式,因为它在添加或删除服务器时能够提供相对稳定的分布,从而维持系统的可用性和负载均衡。其他模式可能适用于特定的使用案例,但需要更仔细的配置和监控,以确保负载均衡和性能。选择哪种分布模式通常会根据特定的应用程序需求和环境来决定。

    三、测试规划

    • 我这里在同一主机上开启2个Redis服务实例,然后使用 Twemproxy 集群来测试,示意图如下: 在这里插入图片描述

    四、Redis 服务实例准备

    4.1 配置Redis实例

    • 新建2个Redis配置文件,用于配置2个Redis服务实例节点。分别为:redis_6381.conf、redis_6382.conf。

    • redis_6381.conf

    include redis.conf
    
    port 6381
    dir /var/lib/redis/6381
    pidfile /var/run/redis_6381.pid
    
    supervised no
    daemonize no
    logfile ""
    appendonly no
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • redis_6382.conf
    include redis.conf
    
    port 6382
    dir /var/lib/redis/6382
    pidfile /var/run/redis_6382.pid
    
    supervised no
    daemonize no
    logfile ""
    appendonly no
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    4.2 创建关资源

    mkdir -p /var/lib/redis/6381
    mkdir -p /var/lib/redis/6382
    
    • 1
    • 2

    4.3 启动Redis服务实例

    • 启动2个Redis服务实例
    redis-server redis_6381.conf
    redis-server redis_6382.conf
    
    • 1
    • 2

    五、Twemproxy 安装准备

    • 安装Epel软件仓库

      • 官方地址:https://developer.aliyun.com/mirror/
      wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
      yum clean all
      
      • 1
      • 2
    • 准备编译工具

      yum install automake libtool -y
      
      • 1
    • 升级autoreconf

      yum search autoconf
      yum install autoconf268
      
      • 1
      • 2

    六、Twemproxy 安装及集群配置

    6.1 安装 Twemproxy

    • 在CentOS7及以上系统按顺序执行以下命令安装。安装过程如果使用 git 无法下载,你可以先手动下载后拷贝到目标机器上。安装完成后生成的目标程序叫“nutcracker”,后面配置都是使用“nutcracker”,而不是“twemproxy”。
    git clone https://github.com/twitter/twemproxy.git
    cd twemproxy/
    autoreconf -fvi	
    
    # 如果使用autoreconf -fvi 报错,则使用下面这个命令
    #autoreconf268 -fvi 
    
    ./configure --enable-debug=full
    make
    
    mkdir /etc/nutcracker
    cp conf/* /etc/nutcracker/
    cp /etc/nutcracker/nutcracker.yml  /etc/nutcracker/nutcracker.yml.bk
    
    cp src/nutcracker  /usr/bin/
    
    # cp scripts/nutcracker.init  /etc/init.d/nutcracker
    # chmod a+x /etc/init.d/nutcracker
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    6.2 配置 Twemproxy

    • 修改配置文件 nutcracker.yml
    vi /etc/nutcracker/nutcracker.yml 
    
    • 1
    • 内容如下
    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:6381:1
       - 127.0.0.1:6382:1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    6.3 启动 twemproxy

    nutcracker -d -c /etc/nutcracker/nutcracker.yml
    
    • 1

    6.4 测试 twemproxy 集群

    redis-cli -p 22121
    
    • 1

    [root@yiqifu-centos conf]# redis-cli -p 22121
    127.0.0.1:22121> set aaa 111
    OK
    127.0.0.1:22121> set bbb 222
    OK
    127.0.0.1:22121>

  • 相关阅读:
    在 Vue & react 中,哪些地方用到闭包?
    Activity、Fragment之间的传值
    【Ts】tsconfig.json、package.json、强制编译ts工程
    《MongoDB入门教程》第18篇 文档更新之$unset操作符
    ​如何使用ArcGIS Pro制作一张地形图
    数据库系统原理与应用教程(001)—— MySQL 安装与配置:MySQL 软件的安装(windows 环境)
    基于JSP的图书销售管理系统
    vite3+Ts+Prettier+ESLint
    OpenAI一朝领导者山姆·奥尔特曼被解除职务,领导能力不再被认可?
    VSCode在linux服务器下launch.json和tasks.json等文件配置
  • 原文地址:https://blog.csdn.net/qifu123/article/details/134187444