介绍
Redis是一个内存,NoSQL,关键值缓存和存储,也可以坚持到磁盘上。它越来越受欢迎,并且在大型和小型项目中都被用作数据库。
虽然可以简单地将数据库文件从当前的服务器复制到新服务器,但迁移 Redis 数据库的建议方法是以主奴隶方式使用复制设置。
本文将展示如何将Redis数据从Ubuntu 14.04服务器迁移到类似的服务器中,使用主奴隶复制。
前提条件
要遵循本文,您将需要一个 Redis 主服务器,其中包含您想要导出或迁移的数据,以及第二个新的 Redis 服务器,该服务器将是奴隶。
具体来说,这些是Redis大师的先决条件。
- 一个 Ubuntu 14.04 服务器:
- 一个 sudo 非根用户,通过 [初始服务器设置指南]设置(https://andsky.com/tech/tutorials/initial-server-setup-with-ubuntu-14-04)
- 通过 [本 IPTables 教程]配置的防火墙(https://andsky.com/tech/tutorials/how-to-implement-a-basic-firewall-template-with-iptables-on-ubuntu-14-04),通过 (可选)更新名称服务器步骤
- Redis 安装并根据 [本 Redis 集群教程]的步骤 1 和 2 设置为主(https://andsky.com/tech/tutorials/how-to-configure-a-redis-cluster-on-ubuntu-14-04)
- 一些数据要迁移,您可以根据 [本 Redis 恢复文章]的步骤 1 和 2 设置(https://andsky.com/tech/tutorials/how-to-back-up-and-restore-your-redis-data-on-ubuntu-14-04)
这些是雷迪斯奴隶的先决条件。
- 使用第二個 Ubuntu 14.04 伺服器:
- 透過 [初始伺服器安裝指南]設定的 sudo 非根用戶(https://andsky.com/tech/tutorials/initial-server-setup-with-ubuntu-14-04)
- 透過 [本 IPTables 教程]配置的防火牆(https://andsky.com/tech/tutorials/how-to-implement-a-basic-firewall-template-with-iptables-on-ubuntu-14-04),通過 (可選)更新名稱伺服器步驟
- Redis 安裝並按 [本 Redis 集群教程]的步驟 1 和 3 設定為奴隸(https://andsky.com/tech/tutorials/how-to-configure-a-redis-cluster-on-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 做更多事情。