介绍
Redis是一个内存中,NoSQL,键值缓存和存储,也可以持久保存到磁盘。 它越来越受欢迎,它被用作大型和小型项目中的数据存储。 由于许多原因,例如转换到更强大的服务器,有时需要将数据从一个服务器迁移到另一个服务器。
虽然可以将数据库文件从当前服务器复制到新的服务器,推荐的迁移Redis数据库的方法是以主从方式使用复制设置。 这样的设置比复制文件快得多,并且涉及很少或没有停机时间。
本文将介绍如何使用主从复制将Redis数据从Ubuntu 14.04服务器迁移到类似的服务器。 这涉及设置一个新的Redis服务器,将其配置为当前服务器(即主服务器)的从服务器,然后在迁移完成后将从服务器升级为主服务器。
先决条件
要遵循本文,您将需要一个Redis主服务器,其中包含要导出或迁移的数据,以及另一个将作为从服务器的Redis服务器。
具体来说,这些是Redis主机的先决条件。
一个Ubuntu 14.04服务器具有:
- sudo的一个非root用户,通过设置初始服务器安装指南
- 通过配置防火墙这架Iptables教程通过(可选)更新域名服务器的步骤,同比增长
- Redis的按照第1步和2安装和设置作为主本的Redis集群教程
- 一些数据迁移,您可以通过以下第1步和2设置这个Redis的恢复文章
这些是Redis slave的先决条件。
第二个Ubuntu 14.04服务器具有:
- sudo的一个非root用户,通过设置初始服务器安装指南
- 通过配置防火墙这架Iptables教程通过(可选)更新域名服务器的步骤,同比增长
- Redis的按照第1步和3的安装和设置为从本Redis的集群教程
确保遵循两个服务器上的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地址。
. . .
# 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
之后,前主管日志文件中的单个条目也应确认。
14613:M 07 Oct 14:03:44.159 # Connection with slave 192.168.1.8:6379 lost.
在新的主人(以前的Minion),你应该看到:
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的教程 。