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

Redis是一个内存中的NoSQL,键 - 值缓存和商店,也可以保存在磁盘上。对于任何数目的原因,像转换到更强大的服务器,有时有必要从一个服务器迁移到另一个数据。本文将介绍如何从一个Ubuntu 14.04服务器采用主从复制的Redis迁移数据到类似的服务器。

介绍

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

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

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

先决条件

要遵循本文,您将需要一个Redis主服务器,其中包含要导出或迁移的数据,以及另一个将作为从服务器的Redis服务器。

具体来说,这些是Redis主机的先决条件。

这些是Redis slave的先决条件。

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

第1步 - 更新Redis主防火墙

安装和配置Redis从站后,您有两个独立的服务器,由于防火墙规则不通信。 在这一步,我们将解决这个问题

修复涉及向主机上的TCP规则添加异常以允许端口6379上的Redis流量。因此,在主机上,打开IPv4规则的IPTables配置文件。

sudo nano /etc/iptables/rules.v4

正下方,允许SSH通信的规则,增加对Redis的一个规则,允许Redis的端口上的流量只能从站的IP地址。 请务必更新your_slave_ip_address到从服务器的IP地址。

/etc/iptables/rules.v4
. . .
# 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流量,我们可以验证这两个服务器是否可以通信。 它可以与第4步的指示来完成这个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
db0:keys=26378,expires=0,avg_ttl=0

扫描键

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

来自用于本文的测试服务器的示例输出如下所示。 注意参数的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步 - 将Minion升级为主人

一旦你确认从站有所有的数据,你可以提升它来掌握。 这也包括在Redis的簇教程的第5步 ,但为了简单起见,所述指令在这里,也。

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

redis-cli

验证后,发出slaveof no one指挥,以促进它掌握。

auth your_redis_password
slaveof no one

您应该得到这个输出:

输出
OK

然后使用info命令来验证。

info

复制部分的相关输出应该是这样的。 特别是角色:主线显示,从现在的主人。

输出
# 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

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

/var/log/redis/redis-server.log

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

在新的主人(以前的Minion),你应该看到:

/var/log/redis/redis-server.log
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流量。

您可以通过浏览学习如何使用Redis的做更多更Redis的教程