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

介绍

Redis是一个内存,NoSQL,关键值缓存和存储,也可以坚持到磁盘上。它越来越受欢迎,并且在大型和小型项目中都被用作数据库。

虽然可以简单地将数据库文件从当前的服务器复制到新服务器,但迁移 Redis 数据库的建议方法是以主奴隶方式使用复制设置。

本文将展示如何将Redis数据从Ubuntu 14.04服务器迁移到类似的服务器中,使用主奴隶复制。

前提条件

要遵循本文,您将需要一个 Redis 主服务器,其中包含您想要导出或迁移的数据,以及第二个新的 Redis 服务器,该服务器将是奴隶。

具体来说,这些是Redis大师的先决条件。

  • 一个 Ubuntu 14.04 服务器:

这些是雷迪斯奴隶的先决条件。

  • 使用第二個 Ubuntu 14.04 伺服器:

请确保在两个服务器上遵循 IPTables 教程中的名称服务器配置部分;如果没有它,‘apt’将无法工作。

步骤 1 – 更新 Redis Master 防火墙

安装和配置 Redis 奴隶后,您有两个独立的服务器,由于防火墙规则而无法通信。

解决方案包括在主机上添加 TCP 规则的例外,以便在端口 6379 上允许 Redis 流量,因此,在主机上打开 IPv4 规则的 IPTables 配置文件。

1sudo nano /etc/iptables/rules.v4

在允许 SSH 流量的规则下面,为 Redis 添加一个规则,允许在 Redis 端口上的流量 only 从奴隶的 IP 地址. 确保更新 your_slave_ip_address 到奴隶服务器的 IP 地址。

1[label /etc/iptables/rules.v4]
2. . .
3# Acceptable TCP traffic
4-A TCP -p tcp --dport 22 -j ACCEPT
5-A TCP -p tcp -s your_slave_ip_address --dport 6379 -j ACCEPT
6. . .

這是非常限制和更安全的,否則,伺服器會接受REDIS端口上的任何主機的流量。

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

1sudo service iptables-persistent restart

现在复制系统已启动,主机上的防火墙已配置为允许 Redis 流量,我们可以验证这两个服务器可以进行通信。

步骤 2 – 验证数据导入

如果两台服务器都建立了联系,则从服务器到奴隶的数据导入应该自动启动. 现在您只需要验证它有,并且已经成功完成。

Redis 数据目录

验证成功的数据导入的一种方法是查看 Redis 数据目录. 现在在主机上的相同文件应该在奴隶上。

1ls -lh /var/lib/redis

你应该得到这样的输出:

1[label Output]
2
3total 32M
4-rw-r----- 1 redis redis 19M Oct 6 22:53 appendonly.aof
5-rw-rw---- 1 redis redis 13M Oct 6 22:53 dump.rdb

Redis 指挥线

验证数据导入的另一种方法是从 Redis 命令行。

1redis-cli

然后验证并发出info命令

1auth insert-redis-password-here
2
3info

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

1[label Output]
2# Keyspace
3db0:keys=26378,expires=0,avg_ttl=0

扫描钥匙

然而,另一种方法来验证奴隶现在有与主人相同的数据是使用从Redis命令行的扫描命令.虽然该命令的输出不会总是在两个服务器上相同,当它发行在奴隶上时,它至少会让你确认奴隶有你期望找到的数据。

下面显示了本文中使用的测试服务器的示例输出。 请注意,对扫描命令的参数只是任何数字,并作为标志符作用:

1scan 0

结果应该是这样的:

 1[label Output]
 21) "17408"
 32)  1) "uid:5358:ip"
 4    2) "nodebbpostsearch:object:422"
 5    3) "uid:4163:ip"
 6    4) "user:15682"
 7    5) "user:1635"
 8    6) "nodebbpostsearch:word:HRT"
 9    7) "uid:6970:ip"
10    8) "user:15641"
11    9) "tid:10:posts"
12   10) "nodebbpostsearch:word:AKL"
13   11) "user:4648"
14127.0.0.1:6379>

第三步:提升奴隶为主人

一旦你确认奴隶拥有所有数据,你可以将其推广到主宰,这也包括在 Redis集群教程的第5步,但为了简单,说明书也在这里。

首先,在奴隶上输入 Redis 命令行。

1redis-cli

身份验证后,发出无人奴隶命令以促进它成为主人。

1auth your_redis_password
2slaveof no one

你应该得到这个输出:

1[label Output]
2OK

然后使用info命令来验证。

1info

在 ** Replication** 部分中的相关输出应该是这样的,特别是 role:master 行显示了奴隶现在是主人。

1[label Output]
2# Replication
3role:master
4connected_slaves:0
5master_repl_offset:11705
6repl_backlog_active:0
7repl_backlog_size:1048576
8repl_backlog_first_byte_offset:0
9repl_backlog_histlen:0

之后,前主日志文件中的单个条目也应该证实这一点。

1[label /var/log/redis/redis-server.log]
2
314613:M 07 Oct 14:03:44.159 # Connection with slave 192.168.1.8:6379 lost.

对于新主人(以前是奴隶),你应该看到:

1[label /var/log/redis/redis-server.log]
214573:M 07 Oct 14:03:44.150 # Connection with master lost.
314573:M 07 Oct 14:03:44.150 * Caching the disconnected master state.
414573:M 07 Oct 14:03:44.151 * Discarding previously cached master state.
514573: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 做更多事情。

Published At
Categories with 技术
comments powered by Disqus