当前位置: 首页 > article >正文

云上 Redis 迁移至本地机房

文章目录

    • 摘要
    • 在 IDC 搭建读写分离 redis 集群
      • 一、环境准备
      • 二、部署主从架构
        • 1. 安装Redis
        • 2. 配置主节点
        • 3. 配置从节点
        • 4. 所有 Redis 节点设置开机自启动
      • 三、部署代理层(读写分离)
        • 1. 安装Twemproxy
        • 2. 配置Twemproxy
        • 3. 配置开机自启动
      • 四、高可用配置(哨兵模式)
        • 1. 配置哨兵节点
        • 2. 故障转移验证
        • 3. 配置开机自启动
    • 数据存量和增量同步至 IDC redis Master 节点
    • 可能遇到的问题
      • 1. redis-server: command not found
      • 2. redis slave 节点启动时报了 Error condition on socket for SYNC: No route to host

摘要

为了降本,将云上非核心业务迁移至 IDC

云上 Redis 配置
在这里插入图片描述
Redis版本5.0,架构读写分离版本
操作流程:

  1. 在 IDC 搭建读写分离 redis 集群
  2. 数据存量和增量同步至 IDC redis 集群
  3. 业务切换 redis 源,暂停第二步
    4.(可选)切完源后反向同步至云上,业务正常后再去掉反向同步,退掉云上资源;

在 IDC 搭建读写分离 redis 集群


一、环境准备

  1. 服务器规划

    • 主节点(Master):1台,负责处理写请求(如10.16.24.97)
    • 从节点(Slave):至少2台,负责处理读请求(如10.16.24.98, 10.16.24.99)
    • 代理层(Proxy):1台,实现读写分离路由(如10.16.24.96)
    • 哨兵节点(Sentinel):3台,实现高可用(可与主从节点共用)
  2. 软件版本

    • Redis建议使用与阿里云相同的版本(如5.0+)
    • 代理工具:Twemproxy(Nutcracker)或HAProxy,本次选用 Twemproxy
    • 哨兵机制:Redis Sentinel

二、部署主从架构

1. 安装Redis

所有节点执行:

wget https://download.redis.io/redis-5.0.4.tar.gz
tar -xzvf redis-5.0.4.tar.gz
cd redis-5.0.4
make && make install

所有节点需要开放 6379 端口:

firewall-cmd --add-port=6379/tcp --permanent
firewall-cmd --reload
2. 配置主节点

修改主节点配置文件(redis.conf):

bind 0.0.0.0
port 6379
requirepass your_password
masterauth your_password
appendonly yes
daemonize no# 持久化配置
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec# 性能优化
protected-mode no
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""

启动主节点:

redis-server /path/to/redis.conf
3. 配置从节点

从节点配置文件(redis.conf)添加:

bind 0.0.0.0
port 6379
requirepass your_password
masterauth your_password
replicaof 10.16.24.97 6379  # 指向主节点# 持久化配置
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec# 性能优化
protected-mode no
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""

启动从节点:

redis-server /path/to/redis.conf

验证主从状态:

redis-cli -h 10.16.24.97 -a your_password info replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
role:master
connected_slaves:2
slave0:ip=10.16.24.98,port=6379,state=online,offset=9898,lag=0
slave1:ip=10.16.24.99,port=6379,state=online,offset=9898,lag=1
master_replid:90147807e0eec59a6de3a41a11f264d259b43b08
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:9898
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:9898

4. 所有 Redis 节点设置开机自启动

创建 service 文件 /etc/systemd/system/redis.service

[Unit]
Description=Redis In-Memory Data Store
After=network.target[Service]
ExecStart=/root/redis-5.0.4/src/redis-server /root/redis-5.0.4/redis.conf
Restart=always[Install]
WantedBy=multi-user.target

保存后执行

systemctl daemon-reload
systemctl enable redis

三、部署代理层(读写分离)

1. 安装Twemproxy
# 安装 git
yum install -y git
# 安装 autoconf automake libtool
yum install autoconf automake libtool
# 安装Twemproxy
git clone https://github.com/twitter/twemproxy
cd twemproxy
autoreconf -fvi
./configure --enable-debug=log
make
src/nutcracker --version  # 验证安装
2. 配置Twemproxy

创建配置文件(nutcracker.yml):

alpha:listen: 0.0.0.0:22121hash: crc32distribution: modularedis: trueredis_auth: your_passwordservers:- 10.16.24.97:6379:1 master_node- 10.16.24.98:6379:2 slave_node_1- 10.16.24.99:6379:2 slave_node_2

启动Twemproxy:

src/nutcracker -c /path/to/nutcracker.yml -d

应用通过连接代理IP(192.168.1.103:22121)实现自动读写分离。


3. 配置开机自启动

创建 service 文件 /etc/systemd/system/twemproxy.service

[Unit]
Description=Redis Proxy
After=network.target[Service]
ExecStart=/root/twemproxy/src/nutcracker -c /root/nutcracker.yml -o /var/log/twemproxy.log
Restart=always[Install]
WantedBy=multi-user.target

保存后执行

systemctl daemon-reload
systemctl enable twemproxy

四、高可用配置(哨兵模式)

1. 配置哨兵节点

每个哨兵节点创建sentinel.conf

sentinel monitor mymaster 10.16.24.97 6379 2
sentinel auth-pass mymaster your_password
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
logfile "/var/log/redis/sentinel.log"

设置日志文件权限

mkdir -p /var/log/redis
chmod 755 /var/log/redis

开放端口,让哨兵节点之间可通讯

firewall-cmd --add-port=26379/tcp --permanent
firewall-cmd --reload

启动哨兵:

redis-sentinel /path/to/sentinel.conf
2. 故障转移验证

手动停止主节点,观察哨兵日志是否选举新主节点。
使用 tail 命令动态跟踪日志:
```bash
tail -f /var/log/redis/sentinel.log

**故障转移日志特征**
在日志中搜索以下关键事件以验证故障转移:
1. **主节点下线检测**:  
```log
+sdown master mymaster 10.16.24.97 6379  # Sentinel标记主节点主观下线
  1. 故障转移触发
    Start of election for master mymaster  # 开始选举新主节点
    
  2. 新主节点选举
    +elected-leader master mymaster 10.16.24.97 6379  # 新主节点被选举
    
  3. 从节点重新配置
    Reconfiguring the slave to replicate new master  # 从节点切换到新主节点
    

验证步骤

  1. 手动触发故障转移
    关闭原主节点 10.16.24.97 Redis 服务,观察 Sentinel 日志是否触发选举和切换[[7]][[8]]。
  2. 检查最终状态
    日志中应显示新主节点的 IP 和端口,例如:
    2527:X 19 Mar 2025 17:29:54.080 # oO0OoO0OoO0Oo Red

相关文章:

云上 Redis 迁移至本地机房

文章目录 摘要在 IDC 搭建读写分离 redis 集群一、环境准备二、部署主从架构1. 安装Redis2. 配置主节点3. 配置从节点4. 所有 Redis 节点设置开机自启动三、部署代理层(读写分离)1. 安装Twemproxy2. 配置Twemproxy3. 配置开机自启动四、高可用配置(哨兵模式)1. 配置哨兵节点…...

zabbix数据库溯源

0x00 背景 zabbix数据库如果密码泄露被登录并新增管理员如何快速发现?并进行溯源? 本文介绍数据库本身未开启access log的情况。 0x01 实践 Mysql 数据库查insert SELECT * FROM sys.host_summary_by_statement_type where statement like %insert% 查…...

ZYNQ的cache原理与一致性操作

在Xilinx Zynq SoC中,Cache管理是确保处理器与外部设备(如FPGA逻辑、DMA控制器)之间数据一致性的关键。Zynq的ARM Cortex-A9处理器包含L1 Cache(指令/数据)和L2 Cache,其刷新(Flush/Invalidate&…...

React 中useMemo和useCallback Hook 的作用,在什么场景下使用它们?

大白话React 中useMemo和useCallback Hook 的作用,在什么场景下使用它们? 在 React 里,useMemo 和 useCallback 这两个 Hook 可有用啦,能帮咱优化组件性能,避免不必要的计算和渲染。下面咱就来详细聊聊它们的作用和使…...

Android笔记之项目引用第三方库(如:Github等)

前言:原生Android开发时引用github上的仓库内容,故出此文。 方式一:使用 JitPack(推荐) 步骤 1:在项目的 build.gradle 文件中添加 JitPack 仓库 打开项目根目录下的 build.gradle 文件,在 a…...

Linux 系统性能优化高级全流程指南

Linux 系统性能优化高级全流程指南 一、系统基础状态捕获 1. 系统信息建档 除了原有的硬件、内核和存储拓扑信息收集,还增加 CPU 缓存、网络设备详细信息等。 # 硬件信息 lscpu > /opt/tuning/lscpu.origin dmidecode -t memory > /opt/tuning/meminfo.or…...

SQL Server——表数据的插入、修改和删除

目录 一、引言 二、表数据的插入、修改和删除 (一)方法一:在SSMS控制台上进行操作 1.向表中添加数据 2.对表中的数据进行修改 3.对表中的数据进行删除 (二)方法二:使用 SQL 代码进行操作 1.向表中添…...

WPF 布局中的共性尺寸组(Shared Size Group)

1. 什么是共性尺寸组? 在 WPF 的 Grid 布局中,SharedSizeGroup 允许多个 Grid 共享同一列或行的尺寸,即使它们属于不同的 Grid 也能保持大小一致。这样可以保证界面元素的对齐性,提高布局的一致性。 SharedSizeGroup 主要用于需…...

deepSeek-SSE流式推送数据

1、背景 DeepSeek作为当前最火的AI大模型, 使用的时候用户在输入框输入问题,大模型进行思考回答你,然后会有一个逐步显示的过程效果,而不是一次性返回整个答案给前端页面进行展示,为了搞清楚其中的原理,我们…...

【北京迅为】iTOP-RK3568开发板OpenHarmony系统南向驱动开发UART接口运作机制

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…...

Leetcode 3495. Minimum Operations to Make Array Elements Zero

Leetcode 3495. Minimum Operations to Make Array Elements Zero 1. 解题思路2. 代码实现 题目链接:3495. Minimum Operations to Make Array Elements Zero 1. 解题思路 这一题的话核心就是统计对任意自然数 n n n,从 1 1 1到 n n n当中所有的数字对…...

C#实现自己的Json解析器(LALR(1)+miniDFA)

C#实现自己的Json解析器(LALR(1)miniDFA) Json是一个用处广泛、文法简单的数据格式。本文介绍如何用bitParser(拥有自己的解析器(C#实现LALR(1)语法解析器和miniDFA词法分析器的生成器)迅速实现一个简单高效的Json解析器。 读者可在&#xf…...

机器学习——KNN数据均一化

在KNN(K-近邻)算法中,数据均一化(归一化)是预处理的关键步骤,用于消除不同特征量纲差异对距离计算的影响。以下是两种常用的归一化操作及其核心要点: 质押 一 、主要思想 1. 最值归一化&#…...

异步编程与流水线架构:从理论到高并发

目录 一、异步编程核心机制解析 1.1 同步与异步的本质区别 1.1.1 控制流模型 1.1.2 资源利用对比 1.2 阻塞与非阻塞的技术实现 1.2.1 阻塞I/O模型 1.2.2 非阻塞I/O模型 1.3 异步编程关键技术 1.3.1 事件循环机制 1.3.2 Future/Promise模式 1.3.3 协程(Cor…...

哈尔滨工业大学DeepSeek公开课人工智能:大模型原理 技术与应用-从GPT到DeepSeek|附视频下载方法

导 读INTRODUCTION 今天继续哈尔滨工业大学车万翔教授带来了一场主题为“DeepSeek 技术前沿与应用”的报告。 本报告深入探讨了大语言模型在自然语言处理(NLP)领域的核心地位及其发展历程,从基础概念出发,延伸至语言模型在机器翻…...

制作Oracle11g Docker 镜像

基于Linux系统&#xff0c;宿主主机要设置如下环境变量&#xff0c;oracle为64位版本 dockerfile中需要的数据库安装包可从csdn下载内找到 #!/bin/bash # 在宿主机上运行以设置Oracle所需的内核参数 # 这些命令需要root权限cat > /etc/sysctl.d/99-oracle.conf << EO…...

Excel处理控件Spire.XLS系列教程:C# 在 Excel 中添加或删除单元格边框

单元格边框是指在单元格或单元格区域周围添加的线条。它们可用于不同的目的&#xff0c;如分隔工作表中的部分、吸引读者注意重要的单元格或使工作表看起来更美观。本文将介绍如何使用 Spire.XLS for .NET 在 C# 中添加或删除 Excel 单元格边框。 安装 Spire.XLS for .NET E-…...

MAC-在使用@Async注解的方法时,分布式锁管理和释放

在使用 @Async 注解的异步方法中管理分布式锁时,需要特别注意 ​锁的获取、释放与异步执行的生命周期匹配。以下是结合 Spring Boot 和 Redis 分布式锁的实践方案: 1. 为什么需要分布式锁? 异步方法可能被多个线程/服务实例并发执行,若访问共享资源(如数据库、缓存),需…...

Flink启动任务

Flink 以本地运行作为解读&#xff0c;版本1.16.0 文章目录 Flink前言StreamExecutionEnvironmentLocalExecutorMiniCluster启动MiniCluster TaskManagerTaskExecutor提交Task(submitTask) StreamGraph二、使用步骤1.引入库2.读入数据 总结 前言 提示&#xff1a;这里可以添加…...

「低延迟+快速集成:Amazon IVS如何重塑实时互动视频体验?」

引言&#xff1a;实时视频的爆发与开发痛点 随着直播电商、在线教育、云游戏的兴起&#xff0c;实时视频互动成为用户体验的核心。但自建视频服务面临高成本、高延迟、运维复杂等挑战。Amazon IVS&#xff08;Interactive Video Service&#xff09;作为亚马逊云科技推出的全托…...

Web开发-JS应用NodeJS原型链污染文件系统Express模块数据库通讯

知识点&#xff1a; 1、安全开发-NodeJS-开发环境&功能实现 2、安全开发-NodeJS-安全漏洞&案例分析 3、安全开发-NodeJS-特有漏洞 node.js就是专门运行javascript的一个应用程序&#xff0c;区别于以往用浏览器解析原生js代码&#xff0c;node.js本身就可以解析执行js代…...

描述@keyframes规则在 CSS 动画中的原理及作用,如何创建一个简单的动画

大白话描述keyframes规则在 CSS 动画中的原理及作用&#xff0c;如何创建一个简单的动画&#xff1f; 嘿&#xff0c;朋友&#xff01;咱来聊聊 CSS 里超酷的 keyframes 规则。这玩意儿就像是动画的剧本&#xff0c;能让网页元素动起来&#xff0c;就像给它们施了魔法一样&…...

国产达梦(DM)数据库的安装(Linux系统)

目录 一、安装前的准备工作 1.1 导包 1.2 创建用户和组 1.3 修改文件打开最大数 1.4 目录规划 1.5 修改目录权限 二、安装DM8 2.1 挂载镜像 2.2 命令行安装 2.3 配置环境变量 2.4 启动图形化界面 三、配置实例 四、注册服务 五、启动 停止 查看状态 六、数据库客…...

AI日报 - 2025年3月24日

&#x1f31f; 今日概览&#xff08;60秒速览&#xff09; ▎&#x1f916; AGI突破 | Lyra生物序列建模架构效率惊人 在100生物任务中达最优&#xff0c;推理速度提升高达12万倍 ▎&#x1f4bc; 商业动向 | OpenAI用户破4亿&#xff0c;Meta与Reliance探讨AI合作 生态扩展与全…...

git的底层原理

git的底层原理 三段话总结git&#xff0c; 1. 工作原理&#xff1a;git管理是一个DAG有向无环图&#xff0c;HEAD指针指向branch或直接指向commit&#xff0c;branch指向commit&#xff0c;commit指向tree&#xff0c;tree指向别的tree或直接指向blob。 2. git所管理的一个目录…...

【Spring】Spring框架介绍

在 Java 企业级应用开发领域&#xff0c;Spring 框架凭借强大功能、高度灵活性与卓越扩展性&#xff0c;成为众多开发者构建大型应用系统的首选。接下来为大家深入剖析 Spring 框架的核心特性、架构设计及实际项目应用。​ 一、Spring 框架简介​ Spring 框架由 Rod Johnson …...

MATLAB+Arduino利用板上的按键控制板上Led灯

几年不使用&#xff0c;之前的知识都忘掉了。需要逐步捡起来。 1 熟悉按键的使用 2熟悉灯的控制 1 电路 我们将通过 MATLAB 的 Arduino 支持包与 Arduino 板通信&#xff0c;读取按键状态并控制 LED 灯的亮灭。 按键&#xff1a;连接到 Arduino 的数字引脚&#xff08;例如…...

AI比人脑更强,因为被植入思维模型【21】冯诺依曼思维模型

定义 冯诺依曼思维模型是一种基于数理逻辑和系统分析的思维方式&#xff0c;它将复杂的问题或系统分解为若干个基本的组成部分&#xff0c;通过建立数学模型和逻辑规则来描述和分析这些部分之间的关系&#xff0c;进而实现对整个系统的理解和优化。该模型强调从整体到局部、再…...

【QA】Qt中有哪些命令模式的运用?

在 C/Qt 中&#xff0c;命令模式&#xff08;Command Pattern&#xff09;的实现通常用于封装操作请求、支持撤销/重做&#xff08;Undo/Redo&#xff09;或解耦调用者与接收者。以下是几种常见的实现方式及示例&#xff1a; 1. Qt 的 QUndoCommand 和 QUndoStack&#xff08;内…...

【连续自然数的和,双指针找区间】

对一个给定的正整数 MM&#xff0c;求出所有的连续的正整数段&#xff08;每一段至少有两个数&#xff09;&#xff0c;这些连续的自然数段中的全部数之和为 MM。 例子&#xff1a;19981999200020012002100001998199920002001200210000&#xff0c;所以从 19981998 到 2002200…...