Redis 如何使用 Twemproxy 和 Sentinel 构建高可用集群架构?

news2024/11/17 11:22:38

文章目录

  • Redis 如何使用 Twemproxy 和 Sentinel 构建高可用集群架构?
    • 配置环境
    • 构建 RedisSharding1
      • 安装 Redis
      • 配置 RedisSharding1
    • 构建 RedisSharding2
      • 安装 Redis
      • 配置 RedisSharding2
    • 构建 Sentinel Cluster
      • 配置 Sentinel
      • 启动 Sentinel
    • 构建 Twemproxy Cluster
      • 安装 Twemproxy
      • 配置 Twemproxy
      • 启动 Twemproxy
      • 测试 Twemproxy
    • 构建 Keepalived Cluster
      • 安装 Keepalived
      • 配置 Keepalived
        • 配置 Twemproxy 检测脚本
        • 配置 Keepalived Master 节点
        • 配置 Keepalived Backup 节点
      • 启动 Keepalived
      • 观察虚拟 IP
      • 测试 Redis 的连接
      • 测试虚拟 IP 的漂移
      • 再次测试 Redis 的连接
    • Twemproxy + Sentinel 组合架构的优点
    • Twemproxy + Sentinel 组合架构的缺点

Redis 如何使用 Twemproxy 和 Sentinel 构建高可用集群架构?

使用 Sentinel 构建的主从复制架构,能够实现高可用,但是不能解决单个 Redis 节点的数据量过大的问题,如果单个 Redis 节点的数据量过大,主机内存过载,那么就需要使用 Redis 的集群架构来将数据进行分片处理,使其分布在不同的物理机上面,使其能够做到容量的扩展。

可以使用 Twemproxy + Sentinel 组合的架构方式,对 Redis 构建高可用的集群。以下图为例,开始一步一步的构建一种 Redis 的高可用集群。

在这里插入图片描述

配置环境

以下配置,仅仅表示我的配置环境,读者可以根据自己的环境进行配置。

注意:需要把主机的防火墙关闭。

  • 四台 Linux 主机(CentOS 7 版本),ip 分别为 10.211.55.5,10.211.55.6,10.211.55.7,10.211.55.8。
  • 在每台主机上安装 Redis(3.2.12 版本),可以使用 yum 进行安装。
  • 在 10.211.55.6 和 10.211.55.7 主机上安装 Twemproxy(0.5.0 版本)。
  • 在 10.211.55.6 和 10.211.55.7 主机上安装 Keepalved (1.3.5 版本)。

构建 RedisSharding1

在主机 10.211.55.5 和 10.211.55.6 节点上安装并配置 Redis 主从节点。

安装 Redis

请参考 Redis 如何配置读写分离架构(主从复制)?篇中的安装 Redis 步骤。

配置 RedisSharding1

# 在 10.211.55.5 主机上登陆 Redis 控制台,执行 slaveof 命令
slaveof 10.211.55.6 6379

# 或者编辑 10.211.55.5 的 /etc/redis.conf 配置文件添加如下配置
vim /etc/redis.conf
slaveof 10.211.55.6 6379

# 重启从节点 Redis 服务
systemctl restart redis

构建 RedisSharding2

在主机 10.211.55.7 和 10.211.55.8 节点上安装并配置 Redis 主从节点。

安装 Redis

请参考 Redis 如何配置读写分离架构(主从复制)?篇中的安装 Redis 步骤。

配置 RedisSharding2

# 在 10.211.55.8 主机上登陆 Redis 控制台,执行 slaveof 命令
slaveof 10.211.55.7 6379

# 或者编辑 10.211.55.5 的 /etc/redis.conf 配置文件添加如下配置
vim /etc/redis.conf
slaveof 10.211.55.7 6379

# 重启从节点 Redis 服务
systemctl restart redis

构建 Sentinel Cluster

分别在主机 10.211.55.5,10.211.55.6,10.211.55.7 上进行 Sentinel 的配置,配置步骤如下:

配置 Sentinel

# 新建配置文件,并写入下列配置
vim /etc/redis-sentinel-26379.conf

port 26379

sentinel monitor redis-sharding1 10.211.55.6 6379 2
sentinel down-after-milliseconds redis-sharding1 5000
sentinel failover-timeout redis-sharding1 60000
sentinel parallel-syncs redis-sharding1 1

sentinel monitor redis-sharding2 10.211.55.7 6379 2
sentinel down-after-milliseconds redis-sharding2 5000
sentinel failover-timeout redis-sharding2 60000
sentinel parallel-syncs redis-sharding2 1

# 保存配置并退出编辑

在上述配置文件中,sentinel 监控两个 Redis 主从节点,命名为 redis-sharding1 和 redis-sharding2。

启动 Sentinel

# 调用 Sentinel 启动命令
nohup redis-sentinel /etc/redis-sentinel-26379.conf > /dev/null 2>&1 &

构建 Twemproxy Cluster

分别在主机 10.211.55.6 和 10.211.55.7 节点安装并配置 Twemproxy Cluster。这里说 Cluster 并不妥当,实际上为主备架构。

安装 Twemproxy

# 这里将安装包下载 /opt 目录中,并进行编译安装
cd /opt
wget https://github.com/twitter/twemproxy/releases/download/0.5.0/twemproxy-0.5.0.tar.gz
tar -xvf twemproxy-0.5.0.tar.gz
cd /opt/twemproxy-0.5.0
./configure
make && make install

配置 Twemproxy

# 进入安装目录
cd /opt/twemproxy-0.5.0

# 创建配置文件,并添加如下配置
vim conf/nutcracker-redis-cluster.yml

redis-cluster:
  listen: 0.0.0.0:22121
  hash: fnv1a_64
  distribution: ketama
  auto_eject_hosts: true
  redis: true
  server_retry_timeout: 2000
  server_failure_limit: 1
  servers:
   - 10.211.55.6:6379:1
   - 10.211.55.7:6379:1

启动 Twemproxy

# 启动 Twemproxy 实例
nutcracker -d -c /opt/twemproxy-0.5.0/conf/nutcracker-redis-cluster.yml

测试 Twemproxy

# 测试 10.211.55.6 主机的 Twemproxy
redis-cli -h 10.211.55.6 -p 22121

# 测试 10.211.55.7 主机的 Twemproxy
redis-cli -h 10.211.55.7 -p 22121

构建 Keepalived Cluster

分别在主机 10.211.55.6 和 10.211.55.7 节点安装并配置 Keepalived Cluster,并以 10.211.55.10 为虚拟的 ip 对外提供服务。

安装 Keepalived

yum -y install keepalived

配置 Keepalived

配置 Twemproxy 检测脚本

分别在主机 10.211.66.6,10.211.66.7 节点上配置如下 Twemproxy 的检测脚本。

# 创建 check_nutcracker.sh 脚本
mkdir /usr/local/etc/twemproxy

# 编辑 check_nutcracker.sh 文件
vim /usr/local/etc/twemproxy/check_nutcracker.sh

# 添加如下内容
#!/bin/bash

ps -C nutcracker
if [[ $? -eq 0 ]];then
     exit 0
else
     exit 1
fi

# 保存退出,并给该文件可执行的权限
chmod +x /usr/local/etc/twemproxy/check_nutcracker.sh

配置 Keepalived Master 节点

在主机 10.211.66.6 节点上按照如下要求配置 Master 节点

# 在 /etc/keepalived 目录中创建 keepalived-twemproxy.conf 配置文件
vim /etc/keepalived/keepalived-twemproxy.conf

# 写入如下配置
global_defs {
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   script_user root
   enable_script_security
}

vrrp_script check_nutcracker {
  script "/usr/local/etc/twemproxy/check_nutcracker.sh"
  interval 10
  weight -20
}

vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 47
  priority 100
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 1111
  }

  virtual_ipaddress {
  	10.211.55.10
  }

  track_script {
  	check_nutcracker
  }
}

配置 Keepalived Backup 节点

在主机 10.211.66.7 节点上按照如下要求配置 Backup 节点

# 在 /etc/keepalived 目录中创建 keepalived-twemproxy.conf 配置文件
vim /etc/keepalived/keepalived-twemproxy.conf

# 写入如下配置
global_defs {
  vrrp_garp_interval 0
  vrrp_gna_interval 0
     script_user root
   enable_script_security
}

vrrp_script check_nutcracker {
  script "/usr/local/etc/twemproxy/check_nutcracker.sh"
  interval 10
  weight -10
}

vrrp_instance VI_1 {
  state BACKUP
  interface eth0
  virtual_router_id 47
  priority 90
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 1111
  }

  virtual_ipaddress {
  	10.211.55.10
  }

  track_script {
  	check_nutcracker
  }
}

注意:在配置 Keepalived 节点时,需要关注网卡接口名,也就是上述配置的 interface 后面的值,可以使用 ifconfig 自行查看。

启动 Keepalived

分别在主机 10.211.66.6,10.211.66.7 节点上执行如下命令启动 Keepalived。

keepalived -f /etc/keepalived/keepalived-twemproxy.conf

# 可以通过 tail -f /var/log/messages 观察 Keepalived 日志

观察虚拟 IP

# 在 10.211.66.6 执行如下命令
ip a

# 可以看到虚拟 ip(10.211.55.10) 在 10.211.66.6 节点上面
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
		...
    inet 10.211.55.6/24 brd 10.211.55.255 scope global noprefixroute dynamic eth0
       valid_lft 1302sec preferred_lft 1302sec
    inet 10.211.55.10/32 scope global eth0
       valid_lft forever preferred_lft forever
		...

# 在 10.211.66.6 执行如下命令,发现没有虚拟 ip
ip a

eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    ...
    inet 10.211.55.7/24 brd 10.211.55.255 scope global noprefixroute dynamic eth0
       valid_lft 1249sec preferred_lft 1249sec
		...

测试 Redis 的连接

redis-cli -h 10.211.55.10 -p 22121

测试虚拟 IP 的漂移

通过虚拟 ip 地址的漂移,来达到 Twemproxy 的高可用。可以通过如下命令来进行模拟

# 在 10.211.66.6 节点执行如下命令:
pkill -9 -f nutcracker

# 在 10.211.66.6 执行 ip a,可以观察到 10.211.66.10 地址已经漂移走了
ip a

eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
		...
    inet 10.211.55.6/24 brd 10.211.55.255 scope global noprefixroute dynamic eth0
       valid_lft 1458sec preferred_lft 1458sec
    ...
    
    
# 在 10.211.66.7 执行 ip a,可以观察到 10.211.66.10 地址已经漂移过来
ip a

eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    ...
    inet 10.211.55.7/24 brd 10.211.55.255 scope global noprefixroute dynamic eth0
       valid_lft 1733sec preferred_lft 1733sec
    inet 10.211.55.10/32 scope global eth0
       valid_lft forever preferred_lft forever
    ...

再次测试 Redis 的连接

# 执行如下命令,发现 Redis 的连接依然可用
redis-cli -h 10.211.55.10 -p 22121

Twemproxy + Sentinel 组合架构的优点

  • 通过 Sentinel 能够做到 Redis 节点的失效救援。
  • 配置简单且 Twemproxy 具有高并发的能力。
  • 能够均衡 Redis 的负载,提高 Redis 的吞吐能力。
  • 通过 Twemproxy 配置多个 Redis 节点,能够显著提高单节点容量的限制。

Twemproxy + Sentinel 组合架构的缺点

  • Twemproxy 实际上会给 Redis 带来一定的性能损耗。
  • Twemproxy 无法很好解决 Redis 扩容的问题,添加或者减少 Redis 节点时,不能够自动进行节点数据的再分配。
  • 需要使用 Keepalived 来解决 Twemproxy 单点的问题,给系统增加了复杂度。

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

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

相关文章

AI 腾讯云人脸核身之独立H5接入

一、概述 人脸识别&#xff0c;使用官方API&#xff1a;腾讯云人脸核身之独立H5接入。接口官方返回code 0 表示成功,其他code码值均为对应码值信息&#xff0c;详见错误码。 注意&#xff1a; 1.合作方上送身份信息的计算签名参数与启动人脸核身计算签名参数不一致&#xff0…

Python-DQN代码阅读(13)

目录 1.代码 1.1 代码阅读 1.2 代码分解 1.2.1 导入库 1.2.2 data np.loadtxt(performance.txt) 1.2.3 mva np.zeros((data.shape[0]), dtypenp.float) 1.2.4 mva[i] data[i,1]&#xff0c;mva[i] alpha * data[i,1] (1.0 - alpha) * mva[i-1] 1.2.5 plt.plot(data…

【C++项目】高并发内存池

前言&#xff1a; 本篇博客大致记录基于tcmalloc实现高并发内存池的思想与实现方案。 使用语言&#xff1a;C&#xff0c;编译器&#xff1a;vs2022&#xff0c;开始时间&#xff1a;2023/4/3&#xff0c;结束时间&#xff1a;2023/4/12。 项目源码地址&#xff1a;Cproject: 我…

第八天并发编程篇

一、简述线程、进程、程序的基本概念&#xff1f; 1.进程&#xff1a; 我们把运行中的程序叫做进程,每个进程都会占用内存与CPU资源,进程与进程之间互相独立. 2.线程&#xff1a; 线程就是进程中的一个执行单元&#xff0c;负责当前进程中程序的执行。一个进程可以包含多个线程…

【电子秤方案】LCD口袋秤芯片方案

LCD高精度口袋电子秤方案&#xff0c;即便携式称重仪&#xff0c;是一种应用于生活中的称重设备。便珠宝秤具有体积小、重量轻、功耗低、结构紧凑等特点。 LCD高精度口袋电子秤方案产品简介 口袋电子秤是一种体积小、重量轻、功耗低&#xff0c;可用于多种场合的电子秤。它通常…

如何检查 Linux 内存使用量是否耗尽?这5个命令堪称绝了!

在 Linux 操作系统中&#xff0c;内存是一个关键资源&#xff0c;用于存储正在运行的程序和操作系统本身的数据。如果系统的内存使用量过高&#xff0c;可能会导致性能下降、应用程序崩溃或者系统崩溃。因此&#xff0c;了解如何检查 Linux 内存使用量是否耗尽是非常重要的。下…

【网络安全】文件上传绕过思路

引言 分享一些文件上传绕过的思路&#xff0c;下文内容多包含实战图片&#xff0c;所以打码会非常严重&#xff0c;可多看文字表达&#xff1b;本文仅用于交流学习&#xff0c; 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人…

什么是划分子网?网络工程师划分子网有啥技巧?

随着互联网的快速发展&#xff0c;越来越多的组织和企业在其内部建立了复杂的网络系统来满足日常的信息传输和资源共享需求。而在这些网络系统中&#xff0c;划分子网&#xff08;也称为子网划分&#xff09;作为一种常见的网络管理方法&#xff0c;为组织和企业提供了更加灵活…

【面试】记一次安恒面试及总结

文章目录SQL 注入sql注入的原理&#xff1f;如何通过SQL注入判断对方数据库类型&#xff1f;补充一下其他方法判断数据库类型时间盲注的函数XPath注入抓不到http/https包&#xff0c;怎么办&#xff1f;app无自己的ssl证书app有自己的ssl证书-证书绑定(SSL pinning)逻辑漏洞有哪…

【学习笔记】滑动窗口

acwing.滑动窗口https://www.acwing.com/problem/content/156/ 给定一个大小为 n≤106≤106 的数组。 有一个大小为 k 的滑动窗口&#xff0c;它从数组的最左边移动到最右边。 你只能在窗口中看到 k 个数字。 每次滑动窗口向右移动一个位置。 以下是一个例子&#xff1a; …

Python使用Opencv进行图像人脸、眼睛识别实例演示

效果展示 下面使用 haarcasecade_eye.xml 进行人眼识别的效果图&#xff1a; 人脸识别是一种可以自动检测图像或视频中存在的人脸的技术。它可以用于各种应用&#xff0c;例如安全控制&#xff0c;自动标记照片和视频&#xff0c;以及人脸识别解锁设备等。在这篇博客中&#…

水声功率放大器模块基于通道接收和发射的水声通信机的应用

实验名称&#xff1a;基于多通道接收和发射的水声通信机 研究方向&#xff1a;水声通信 测试设备&#xff1a;数模转化器、ATA-ML180水声功率放大器模块、示波器、接收换能器、发射换能器等。 图&#xff1a;实验原理 一、发射机的双通道发送实验&#xff1a; 实验过程&#xf…

Redis与本地缓存组合使用(IT枫斗者)

Redis与本地缓存组合使用 前言 我们开发中经常用到Redis作为缓存&#xff0c;将高频数据放在Redis中能够提高业务性能&#xff0c;降低MySQL等关系型数据库压力&#xff0c;甚至一些系统使用Redis进行数据持久化&#xff0c;Redis松散的文档结构非常适合业务系统开发&#xf…

探索六西格玛在医疗行业的应用,提升医疗企业的市场竞争力

六西格玛是一种基于数据的管理方法&#xff0c;旨在通过对医疗流程和服务进行量化分析和改进&#xff0c;以优化医疗企业的运营和管理。它能够有效地解决医疗企业面临的各种问题和挑战&#xff0c;提高医疗服务的质量和效率&#xff0c;降低医疗成本和风险&#xff0c;增强医疗…

Linux: 性能分析之内存增长和泄漏

文章目录1. 前言2. 背景3. 内存增长和泄漏分析方法3.1 跟踪 malloc(), free() 等接口3.1.1 用 perf 采样3.1.2 用 ebpf 来跟踪3.2 跟踪 brk() 调用3.2.1 使用 perf 跟踪 brk()3.2.2 使用 ebpf 跟踪 brk()3.3 跟踪 mmap() 调用3.3.1 使用 perf 跟踪 mmap()3.3.2 使用 ebpf 跟踪 …

【FPGA】多功能ALU

目录 实验要求 源代码 顶层模块 数据输入模块 ALU运算模块 结果处理模块 扫描数码管模块 扫描数码管顶层 分频器 数码管显示 仿真代码 结构层图 管脚配置 实验板卡&#xff1a;xc7a100tlc sg324-2L&#xff0c;共20个开关 实验要求 通过高低位控制&#xff0c;实现32位数…

74-快速排序——一路快排

快速排序是影响二十世纪最伟大的排序算法之一。 JDK的双轴快速排序就是对快排的优化&#xff0c;本质还是快排。 从待排序区间选择一个数&#xff0c;作为基准值/分区点&#xff08;pivot&#xff09;&#xff0c;此时默认选择数组的第一个元素作为比较的基准值。partition&a…

【 SpringBoot 配置⽂件 】

文章目录一、配置⽂件作⽤二、配置文件格式2.1 特殊说明2.2 为配置⽂件安装提示插件三、properties 配置⽂件说明3.1 properties 基本语法3.2 读取配置⽂件3.3 解决 properties 中文乱码3.4 properties 缺点分析四、yml 配置⽂件说明4.1 yml 基本语法4.2 yml 配置读取4.3 yml 使…

前后端分离——SpringBoot+Vue——3天速成企业级项目

前后端分离——SpringBootVue使用到的技术&#xff1a;vue3&#xff08;区别vue2&#xff09;前言vue2 vs vue3双向绑定更新实例化生命周期获取props数据和方法的定义watchEffect那么什么是 watchEffect &#xff1f;组件通信注意attrs和listeners路由vue3路由写法&#xff1a;…

ROS学习——艰辛的环境安装之路一VMware

文章目录VMware 安装下载安装VMware 安装 一些没用的介绍&#xff1a; VMware Workstation中文版是一个“虚拟 PC”软件。它使你可以在一台机器上同时运行二个或更多 Windows、DOS、LINUX 系统。与“多启动”系统相比&#xff0c;VMWare 采用了完全不同的概念。多启动系统在一…