云上 Redis 迁移至本地机房

news2025/3/26 0:07:22

文章目录

    • 摘要
    • 在 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:22121
  hash: crc32
  distribution: modula
  redis: true
  redis_auth: your_password
  servers:
    - 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

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

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

相关文章

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

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

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,可用于轻量级人工…

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)领域的核心地位及其发展历程,从基础概念出发,延伸至语言模型在机器翻…

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

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

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

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

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

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

git的底层原理

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

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

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

Cocos Creator Shader入门实战(五):材质的了解、使用和动态构建

引擎:3.8.5 您好,我是鹤九日! 回顾 前面的几篇文章,讲述的主要是Cocos引擎对Shader使用的一些固定规则,这里汇总下: 一、Shader实现基础是OpenGL ES可编程渲染管线,开发者只需关注顶点着色器和…

vue设置自定义logo跟标题

准备 Logo 图片 将自定义的 Logo 图片(如 logo.png)放置在项目的 public文件夹下。 使用环境变量设置 Logo 和标题(可选) 创建或修改 .env 文件 在项目根目录下创建或修改 .env 文件,添加以下内容: VITE_A…

尝试在软考65天前开始成为软件设计师-计算机网络

OSI/RM 七层模型 层次名功能主要协议7应用层实现具体应用功能 FTP(文件传输)、HTTP、Telnet、 POP3(邮件)SMTP(邮件) ------- DHCP、TFTP(小文件)、 SNMP、 DNS(域名) 6表示层数据格式,加密,压缩.....5会话层建立,管理&终止对话4传输层端到端连接TCP,UDP3网络层分组传输&a…

VMware主机换到高配电脑,高版本系统的问题

原来主机是i3 ,windows7系统,vmware 14.0,虚机系统是ubuntu 14.04。目标新机是i7 14700KF,windows11系统。原以为安装虚拟机,将磁盘文件,虚拟机配置文件拷贝过去可以直接用。 新目标主机先安装了vmware 15,运行原理虚机&#xff0…

【Linux内核系列】:动静态库详解

🔥 本文专栏:Linux 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录: 有些鸟儿是注定是关不住的,因为它们的每一片羽翼都沾满了自由的光辉 ★★★ 本文前置知识: 编译与链接的过程…

windows环境下NER Python项目环境配置(内含真的从头安的perl配置)

注意 本文是基于完整项目的环境配置,即本身可运行项目你拿来用 其中有一些其他问题,知道的忽略即可 导入pycharm基本包怎么下就不说了(这个都问?给你一拳o(`ω*)o) 看perl跳转第5条 1.predict报错多个设备…

IDEA批量替换项目下所有文件中的特定内容

文章目录 1. 问题引入2. 批量替换项目下所有文件中的特定内容2.1 右键项目的根目录,点击在文件中替换2.2 输入要替换的内容 3. 解决替换一整行文本后出现空行的问题4. 增加筛选条件提高匹配的精确度 更多 IDEA 的使用技巧可以查看 IDEA 专栏: IDEA 1. 问…

【蓝桥杯】4535勇闯魔堡(多源BFS + 二分)

思路 k有一个范围(0到怪物攻击的最大值),求满足要求的k的最小值。很明显的二分套路。 关键是check函数怎么写,我们需要找到一条从第一行到最后一行的路径,每一次可以从上下左右四个方向前进,那么我么可以用…