2013-11-27 2 views
1

Вкратце я использую redis на машине EC2 с 60G RAM без каких-либо ведомых устройств, но по мере роста моих данных мне потребуется больше памяти.Сплит файл Redis RDB

Я думал перейти на 2 x 60G машины и разделить уже существующие данные между ними.

Есть ли инструмент для разделения файла RDB? Я не нашел ничего специально предназначенного для этого.

Спасибо!

ответ

1

Если вы хотите разделить ваши данные, вы должны будете иметь возможность осколок ключи, поэтому некоторые клавиши будут записаны/чтения с сервера A и других от сервера B

Там нет никакого способа разделить файл RDB, но есть что-то, что вы можете сделать для достижения того, чего хотите.

Первое, что вы можете сделать, это запустить экземпляр redis на вашем втором сервере и сказать, что он является подчиненным сервером вашего текущего сервера, но установите для параметра slave-read-only значение false. Это приведет к тому, что ведомое устройство будет синхронизировать и читать все ваши данные redis от master. Пока у вас есть только раб со всеми данными, но теперь мы сделаем интересный бит.

Тогда вам нужно решить стратегию осколки. Некоторые клиенты redis делают это за вас. Например, официальный клиент Ruby знает, как его обрабатывать, если вы его настроите. Вам нужно будет сконфигурировать своего клиента, чтобы ключи были привязаны к A и B (или альтернативному использованию twemproxy, чтобы клиенты не знали о разных серверах, и twemproxy позаботится об этом)

Как только вы настроите клиентов , вам нужно развернуть новые клиенты для производства и сразу настроить подчиненное устройство как не подчиненное. Вы можете сделать это напрямую, используя команду CONFIG на подчиненном сервере (не забудьте сохранить конфигурацию с помощью CONFIG REWRITE), или вы можете изменить конфигурационный файл подчиненного устройства и перезагрузить, что более удобно для вас. Поскольку ведомое устройство настроено как ложное считывание только false, оно будет принимать записи даже в режиме ведомого. Это означает, что если вы измените конфигурацию непосредственно из redis-cli, вы можете перейти от ведомого к просто отложенному автономному redis без перезапуска, что, я думаю, довольно круто.

Знайте, как только вы окунетесь, вам придется быть осторожным с командами MULTI или при использовании сценариев LUA. Если вы используете twemproxy, вы не сможете использовать эти команды, но если вы оштукатуете на стороне клиента, вы все равно сможете использовать MULTI или LUA. Просто будьте осторожны, чтобы использовать механизм осколков, в котором все связанные ключи останутся на одном сервере.