目前,我在具有60G RAM且没有任何从设备的EC2计算机上使用Redis,但是随着数据的增长,我将需要更多的内存。
我当时想迁移到2 x 60G机器上,并在这两个机器之间拆分现有数据。
是否有用于拆分RDB文件的工具?我还没有找到专门为此设计的东西。
最佳答案
如果要拆分数据,则需要有一种分片密钥的方法,以便从服务器A写入/读取某些密钥,从服务器B写入其他密钥。
无法拆分RDB文件,但是可以执行一些操作来实现所需的功能。
首先,您可以做的是在第二台服务器上启动Redis实例,并说它是当前服务器的从属实例,但是将param从属只读参数设置为false。这将导致从服务器同步并从主服务器读取所有Redis数据。到目前为止,您只有一个拥有所有数据的从站,但是现在我们将做一些有趣的事情。
然后,您需要确定分片策略。一些redis客户为您执行此操作。例如,正式的Ruby客户端知道如何配置(如果您配置它)。您将需要配置客户端,以便将密钥分片为A和B(或替代使用twemproxy,这样客户端将不会知道其他服务器,并且twemproxy会处理)
一旦配置好客户端,就需要将新客户端部署到生产环境中,并立即将从服务器配置为不再是从服务器。您可以使用从属服务器上的CONFIG命令直接执行此操作(不要忘记使用CONFIG REWRITE保留配置),也可以更改从属服务器的配置文件并重新启动,这对您来说更方便。由于从属设备被配置为从属只读false,因此即使在从属模式下,它也将接受写操作。这意味着,如果您直接从redis-cli更改配置,则可以从slave更改为分片的独立redis,而无需重新启动,我认为这很酷。
分片后请注意,使用MULTI命令或使用LUA脚本时必须格外小心。如果使用的是twemproxy,则将无法使用这些命令,但如果在客户端进行分片,则仍然可以使用MULTI或LUA。只要小心使用分片机制,所有相关密钥都将保留在同一服务器上。