前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Ubuntu 14.04上使用主从复制迁移Redis数据

如何在Ubuntu 14.04上使用主从复制迁移Redis数据

原创
作者头像
藕丝空间
修改2018-10-22 12:01:36
8020
修改2018-10-22 12:01:36
举报

介绍

Redis是一个内存中的NoSQL,键值缓存和存储,也可以保存到磁盘。它越来越受欢迎,并且在大型和小型项目中被用作数据存储区。出于多种原因,例如转换到功能更强大的服务器,有时需要将数据从一台服务器迁移到另一台服务器。

虽然可以将数据库文件从当前服务器复制到新服务器,但迁移Redis数据库的推荐方法是以主从方式使用复制设置。这样的设置比复制文件快得多,并且很少或根本没有停机时间。

本文将介绍如何使用主从复制将Redis数据从Ubuntu 14.04服务器迁移到类似的服务器。这涉及设置新的Redis服务器,将其配置为当前服务器(即主服务器)的从属服务器,然后在迁移完成后将从服务器升级为主服务器。

准备

要阅读本文,您需要一台具有要导出或迁移的数据的Redis主服务器,以及另一台将成为从属服务器的新Redis服务器。

具体来说,这些是Redis master的准备条件。

  • 一台已经设置好可以使用sudo命令的非root账号的Ubuntu 14.04服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。-
  • Redis已安装并设置为主服务器
  • 要迁移的某些数据

这些是Redis slave的准备条件。

  • 第二台已经设置好可以使用sudo命令的非root账号的Ubuntu 14.04服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器
  • Redis已安装并设置为从属

确保遵循两个服务器上IPTables教程中的nameserver配置部分; 没有它,apt将无法工作。

步骤1 - 更新Redis主防火墙

安装和配置Redis从站后,您所拥有的是两台因防火墙规则而无法通信的独立服务器。在这一步中,我们将解决这个问题

此修复涉及在主服务器上添加TCP规则的例外以允许端口6379上的Redis流量。因此,在主服务器上,打开IPv4规则的IPTables配置文件。

代码语言:javascript
复制
sudo nano /etc/iptables/rules.v4

在允许SSH流量的规则正下方,为Redis添加规则,该规则允许来自从属IP地址的Redis端口上的流量。确保更新your_slave_ip_address到从属服务器的IP地址。

代码语言:javascript
复制
. . .
# Acceptable TCP traffic
-A TCP -p tcp --dport 22 -j ACCEPT
-A TCP -p tcp -s your_slave_ip_address --dport 6379 -j ACCEPT
. . .

这是非常严格和更安全的。否则,服务器将接受来自Redis端口上任何主机的流量。

重新启动IPTables以应用新规则。

代码语言:javascript
复制
sudo service iptables-persistent restart

既然复制系统已启动且主服务器上的防火墙已配置为允许Redis流量,我们可以验证两个服务器是否可以通信。

第2步 - 验证数据导入

如果两个服务器都已建立联系,则应自动从服务器向从属设备导入数据。您现在只需要验证它已成功完成。有多种方法可以验证。

Redis数据目录

验证数据导入成功的一种方法是查看Redis数据目录。现在,主服务器上的相同文件应该位于从服务器上。如果使用此命令在从属服务器的Redis数据目录中执行长文件列表:

代码语言:javascript
复制
ls -lh /var/lib/redis

你应该得到这种输出:

代码语言:javascript
复制
total 32M
-rw-r----- 1 redis redis 19M Oct  6 22:53 appendonly.aof
-rw-rw---- 1 redis redis 13M Oct  6 22:53 dump.rdb

Redis命令行

另一种验证数据导入的方法是从Redis命令行。在从属服务器上输入命令行。

代码语言:javascript
复制
redis-cli

然后验证并发出info命令

代码语言:javascript
复制
auth insert-redis-password-here
​
info

在输出中,两个服务器上#Keyspace中的键数应该相同。下面的输出取自从服务器,与主服务器上的输出完全相同。

代码语言:javascript
复制
# Keyspace
db0:keys=26378,expires=0,avg_ttl=0

扫描密钥

另一种验证从站现在具有与主站上相同数据的方法是使用Redis命令行中的scan命令。虽然该命令的输出在两个服务器上并不总是相同,但是当在从机上发出时,它至少会让您确认从机是否具有您希望在其上找到的数据。

本文中使用的测试服务器的示例输出如下所示。请注意,该scan命令的参数只是任何数字,并充当游标:

代码语言:javascript
复制
scan 0

输出应该类似于:

代码语言:javascript
复制
1) "17408"
2)  1) "uid:5358:ip"
    2) "nodebbpostsearch:object:422"
    3) "uid:4163:ip"
    4) "user:15682"
    5) "user:1635"
    6) "nodebbpostsearch:word:HRT"
    7) "uid:6970:ip"
    8) "user:15641"
    9) "tid:10:posts"
   10) "nodebbpostsearch:word:AKL"
   11) "user:4648"
127.0.0.1:6379>

第3步 - 将Slave提升为Master

一旦确认从站具有所有数据,您就可以将其提升为主站。

首先,在从站上输入Redis命令行。

代码语言:javascript
复制
redis-cli

进行身份验证后,发出slaveof no one命令将其提升为master。

代码语言:javascript
复制
auth your_redis_password
slaveof no one

你应该得到这个输出:

代码语言:javascript
复制
OK

然后使用该info命令进行验证。

代码语言:javascript
复制
info

复制”部分中的相关输出应如下所示。特别是,角色:主线显示Slave现在是Master。

代码语言:javascript
复制
# Replication
role:master
connected_slaves:0
master_repl_offset:11705
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

之后,前主日志文件中的单个条目也应该确认。

代码语言:javascript
复制
14613:M 07 Oct 14:03:44.159 # Connection with slave 192.168.1.8:6379 lost.

在新的Master(以前的Slave),你应该看到:

代码语言:javascript
复制
14573:M 07 Oct 14:03:44.150 # Connection with master lost.
14573:M 07 Oct 14:03:44.150 * Caching the disconnected master state.
14573:M 07 Oct 14:03:44.151 * Discarding previously cached master state.
14573:M 07 Oct 14:03:44.151 * MASTER MODE enabled (user request from 'id=4 addr=127.0.0.1:52055 fd=6 name= age=2225 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=slaveof')

此时,您现在可以将应用程序连接到数据库,并且可以删除或销毁原始主服务器。

结论

正确完成后,以这种方式迁移Redis数据是一项简单的任务。错误的主要来源通常是忘记修改主服务器的防火墙以允许Redis流量。

更多Ubuntu教程请前往腾讯云+社区学习更多知识。

参考文献:《How to Migrate Redis Data with Master-Slave Replication on Ubuntu 14.04》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
    • 准备
      • 步骤1 - 更新Redis主防火墙
        • 第2步 - 验证数据导入
          • Redis数据目录
          • Redis命令行
          • 扫描密钥
        • 第3步 - 将Slave提升为Master
          • 结论
          相关产品与服务
          云数据库 Redis
          腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档