Обновление:
Сегодня я бы порекомендовал проверить redis-sentinel , инструмент от автора Redis Antirez для мониторинга и автоматического перехода на другой ресурс.
Оригинальный ответ:
Проверьте команду SLAVEOF
: http://redis.io/commands/slaveof
Когда вы обнаружите, что ваш хозяин терпит неудачу, введите SLAVEOF NO ONE
на одном из ваших рабов, чтобы повысить его до уровня мастера. Затем наведите своего другого раба на его нового хозяина. См. Также «Обновление или перезапуск экземпляра Redis без простоя»: http://redis.io/topics/admin
Для управления файлами конфигурации вы можете сделать что-то в этом духе (осторожно: не проверено, в качестве примера). В приведенном ниже примере предполагается наличие двух файлов конфигурации для каждого сервера (/etc/redis/server1.master.conf
, /etc/redis/server1.slave.conf
и т. Д.), Один из которых имеет этот сервер в качестве ведомого устройства некоторого предварительно определенного главного устройства:
#!/bin/sh
master()
{
server_name=$1
redis-cli slaveof no one
ln -sf /etc/redis/$server_name.master.conf /etc/redis/$server_name.conf
}
# Usage: slave(server1 server2 6379)
slave()
{
server_name=$1
master=$2
master_port=$3
redis-cli slaveof $master $master_port
ln -sf /etc/redis/$server_name.slave.conf /etc/redis/$server_name.conf
}
Вместо предопределенных файлов конфигурации вы можете редактировать их на лету, например, sed
. По сути, вы всегда должны иметь в строках конфигурации раздел slaveof
, указывающий либо на мастер, либо на slaveof no one
. Затем перепишите конфигурацию, используя sed
(опять же, не проверено, просто подразумевается как пища для размышлений):
#!/bin/sh
master()
{
server_name=$1
config=$server_name.conf
redis-cli slaveof no one
sed -i "s/^slaveof.*/slaveof no one/" $config
}
# Usage: slave(server1 server2 6379)
slave()
{
server_name=$1
config=$server_name.conf
master=$2
master_port=$3
redis-cli slaveof $master $master_port
sed -i "s/^slaveof.*/slaveof $master $master_port/" $config
}