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

介绍

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配置文件。

sudo nano /etc/iptables/rules.v4

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

. . .
# 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以应用新规则。

sudo service iptables-persistent restart

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

第2步 - 验证数据导入

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

Redis数据目录

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

ls -lh /var/lib/redis

你应该得到这种输出:

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命令行。在从属服务器上输入命令行。

redis-cli

然后验证并发出info命令

auth insert-redis-password-here
​
info

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

# Keyspace
db0:keys=26378,expires=0,avg_ttl=0

扫描密钥

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

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

scan 0

输出应该类似于:

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命令行。

redis-cli

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

auth your_redis_password
slaveof no one

你应该得到这个输出:

OK

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

info

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

# 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

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

14613:M 07 Oct 14:03:44.159 # Connection with slave 192.168.1.8:6379 lost.

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

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》

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

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏L宝宝聊IT

KVM文件管理

46130
来自专栏BeJavaGod

tomcat7 - 烫手山芋之热部署

tomcat7部署,项目发布有很多种方式 1. 增量发布,把修改过得那些文件手动上传至tomcat,*.class *.xml 等等,这样的缺点非常大,需要断开...

25930
来自专栏云计算教程系列

如何将Ubuntu升级到18.04最新版

Ubuntu操作系统的最新长期支持(LTS)版本Ubuntu 18.04(Bionic Beaver)于2018年4月26日发布。本教程将讲解如何将16.04或...

2.7K70
来自专栏Java帮帮-微信公众号-技术文章全总结

redis 的安装和部署

安装 1.首先下载Redis压缩包 wget : http://download.redis.io/releases/redis-3.2.6.tar.gz 2...

46370
来自专栏IT笔记

rsync+inotify实现分布式集群部署

上一篇:Linux下使用ssh密钥实现无交互备份 上二篇:Linux下使用rsync实现文件备份 缘起 由于公司要对支付做压测,于是使用了公司的服务器搭建了一个...

46150
来自专栏一个会写诗的程序员的博客

adb命令 - adb forward交互流程adb命令 - adb forward交互流程

命令: adb forward tcp:6100 tcp:7100 // PC上所有6100端口通信数据将被重定向到手机端7100端口server上

26530
来自专栏LanceToBigData

KVM+Qemu+Libvirt实战

上一篇的文章是为了给这一篇文件提供理论的基础,在这篇文章中我将带大家一起来实现在linux中虚拟出ubuntu的server版来 我们需要用KVM+Qemu+L...

49170
来自专栏吴柯的运维笔记

memcached数据库环境部署及应用

前言: 三大传统数据库:mysql,sqlserver,oracle 【sql数据库-存硬盘-慢】 新兴数据库:mogodb,memcached,redis ...

28250
来自专栏LhWorld哥陪你聊算法

Anaconda使用

Python易用,但用好却不易,其中比较头疼的就是包管理和Python不同版本的问题,特别是当你使用Windows的时候。为了解决这些问题,有不少发行版的Pyt...

94930
来自专栏腾讯云容器服务团队的专栏

使用腾讯云容器服务搭建 ELK 日志系统

目前主流的分布式日志系统有ELK,flume,fluentd,splunk等,本文利用腾讯云容器服务搭建ELK系统收集nginx的访问日志 ,搭建过程中共搭建4...

2.4K30

扫码关注云+社区

领取腾讯云代金券