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

文章目录

    • 一、概述
    • 二、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.confport 6381
dir /var/lib/redis/6381
pidfile /var/run/redis_6381.pidsupervised no
daemonize no
logfile ""
appendonly no
  • redis_6382.conf
include redis.confport 6382
dir /var/lib/redis/6382
pidfile /var/run/redis_6382.pidsupervised 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
makemkdir /etc/nutcracker
cp conf/* /etc/nutcracker/
cp /etc/nutcracker/nutcracker.yml  /etc/nutcracker/nutcracker.yml.bkcp 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:22121hash: fnv1a_64distribution: ketamaauto_eject_hosts: trueredis: trueserver_retry_timeout: 2000server_failure_limit: 1servers:- 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.mzph.cn/news/129007.shtml

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

相关文章

如何使用 NFTScan NFT API 在 Polygon 网络上开发 Web3 应用

Polygon 以前被称为 Matic Network,是一种扩展的解决方案,它提供多种工具来加快并降低区块链网络上交易的成本和复杂性。然而,其区块链上的大量活动使以太坊因增长的传输成本和拥挤的流量几乎瘫痪。Polygon 诞生的主要目的是帮助以太坊解决链…

Docker学习——①

文章目录 1、什么是虚拟化、容器化?2、为什么要虚拟化、容器化?3、虚拟化实现方式3.1 应用程序执行环境分层3.2 虚拟化常见类别3.3 常见虚拟化实现3.3.1 主机虚拟化(虚拟机)实现3.3.2 容器虚拟化实现3.3.3 空间隔离实战--基础知识3.3.4 PID 隔离3.3.5 Mo…

批量导出 PPT的备注到一个txt文本中

使用宏(Macro)功能(适用于 Windows 平台) 打开 PowerPoint 幻灯片,并确保每个幻灯片上都添加了备注。 启用"开发人员"选项卡: 如果您已经看到 PowerPoint 的"开发人员"选项卡&#x…

springboot+vue基于Hadoop短视频流量数据分析与可视化系统的设计与实现【内含源码+文档+部署教程】

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅由于篇幅限制,想要获取完整文章或者源码,或者代做&am…

HarmonyOS(二)—— 初识ArkTS开发语言(中)之ArkTS的由来和演进

前言 在上一篇文章HarmonyOS(二)—— 初识ArkTS开发语言(上)之TypeScript入门,我初识了TypeScript相关知识点,也知道ArkTS是华为基于TypeScript发展演化而来。 从最初的基础的逻辑交互能力,到…

C++类和对象万字详解(典藏版)

文章目录 前言认识类和对象使用 struct 定义类class 定义类类的声明和定义分离类大小的计算this指针this指针的常见的面试题 构造函数与构析函数构造函数初始化列表 构析函数默认生成的构造函数和构析函数 拷贝构造函数默认类型转化与 explicit 关键字 static 成员变量运算符重…

论文辅助笔记:t2vec 模型部分

1 t2vec.py 函数 命令行参数 data训练、测试数据路径checkpoint保存的检查点路径prefixtrjfile的前缀pretrained_embedding预训练的词(或称为单元)嵌入的路径 。默认值是None。num_layersRNN单元中的层数。默认值是3bidirectional在编码器中是否使用双向rnn。默认值是True。h…

【云原生基础】了解云原生,什么是云原生?

📑前言 本文主要讲了云原生的基本概念和原则的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风讲故事 🌄每日一句&#x…

测试工具:hurl

文章目录 Hurlinstallstartdemo 功能变量RequestResponseCapturing values 捕获值Asserts 断言Implicit asserts 隐式断言Explicit asserts 显式断言 Filerts 过滤器 CI/CD Hurl 官网:https://hurl.dev/ Hurl 是一个命令行工具,它运行以简单的纯文本格…

软考 系统架构设计师系列知识点之净室软件工程(3)

接前一篇文章:软考 系统架构设计师系列知识点之净室软件工程(2) 所属章节: 第5章. 软件工程基础知识 第5节. 净室软件工程 相关试题 1. 以下关于软件开发方法的叙述,错误的是()。 A. 对于较为…

分享一个抖音视频解析神器~

怎么样下载抖音视频?相信很多人都有过这样的困惑。作为一个资深短视频剪辑工作者,常常需要用到各种视频素材,其中不乏需要从抖音上下载的,因此我也尝试过许多下载工具,但是效果都不大满意,直到有一次朋友给…

SpringBoot可以同时处理多少请求?

前言 前两天面试的时候,面试官问我:一个ip发请求过来,是一个ip对应一个线程吗?我突然愣住了,对于SpringBoot如何处理请求好像从来没仔细思考过,所以面试结束后就仔细研究了一番,现在就来探讨一…

C++——list

目录 list介绍 list的函数接口 构造函数 push_front和pop_front push_back和pop_back insert erase 迭代器 front和back size resize empty clear list::sort unique reverse 迭代器的实现 list介绍 list是一种可以在常数范围内在任意位置进行插入和删除的序列…

“AI换脸诈骗”来势汹汹,三个层面科学应对……

当前,AI技术的广泛应用为社会公众提供了个性化智能化的信息服务,也给网络诈骗带来可乘之机,如不法分子通过面部替换语音合成等方式制作虚假图像、音频、视频仿冒他人身份实施诈骗、侵害消费者合法权益。你认为AI诈骗到底应该如何防范&#xf…

Selenium3-获取元素的css属性

来个元素CSS值 代码1: 通过javaScript执行脚本获取css值 String jsStr "return document.getElementById(\"buyers\").style.getPropertyValue(width)"; Object o ((JavascriptExecutor) driver).executeScript(jsStr); System.out.println(o.toString(…

短视频平台Roposo入驻印尼,会成为下一个Tiktok吗

Roposo是一个印度本土的短视频平台,功能和风格都和Tiktok很相似。 早在2020年7月,印度下令封禁了多个app,其中就包括了TikTok。在那之前,TikTok已经在印度累计了约2亿的用户,基数已经非常的大,那么被封禁之…

北京君正X2600处理器亮相ELEXCON 2023,打造多核异构跨界新价值

伴随下游应用持续丰富,细节需求不断增多,标准化产品已越来越难以满足市场需求,芯片方案提供商需要不断深入行业,根据市场需求推出适配的产品。在这样的背景下,北京君正迅速推出X2600系列多核异构跨界处理器&#xff0c…

ONNX的结构与转换

ONNX的结构与转换 1. 背景2. ONNX结构分析与修改工具2.1. ONNX结构分析2.2. ONNX的兼容性问题2.3. 修改ONNX模型 3. 各大深度学习框架如何转换到ONNX?3.1. MXNet转换ONNX3.2. TensorFlow模型转ONNX3.3. PyTorch模型转ONNX3.4. PaddlePaddle模型转ONNX3.4.1. 简介3.4…

python冒泡排序算法

冒泡排序(Bubble Sort),依次比较两个相邻的元素,如果顺序错误就把他们交换过来。直到没有相邻元素需要交换,也就是说该元素列已经排序完成。 操作步骤 1)比较相邻的元素。如果第一个比第二个大&#xff0…

高阶数据结构学习——LRU Cache

文章目录 1、了解LRU Cache(Least Recently Used缩写)2、代码实现 1、了解LRU Cache(Least Recently Used缩写) Cache是缓存,在磁盘和内存之间,内存和寄存器之间都存在,CPU和内存之间存在三级缓…