Онлайн-переключатель Redis master-slave

Redis

Духовный парень берет на себя вину онлайн

Запись онлайн-переключения Redis master-slave

задний план

Хост экземпляра, на котором находится главный сервер Redis, должен быть отключен для обслуживания. Текущая архитектура выглядит следующим образом

切换前

Технические решения

план 1

Представьте Redis Sentinel.

шаг:

  1. Развернуть Redis Sentinel
  2. Измените бизнес-конфигурацию, измените бизнес-код.
  3. kill master.
  4. check
  5. Создайте новую логику master-slave

преимущество:

  1. Переключение простое, просто уничтожьте основную библиотеку, и часовой автоматически продвинет ведомое устройство -> ведущее.

недостаток:

  1. Необходимо развернуть redis sentinel, новое промежуточное ПО.
  2. Необходимо изменить бизнес-код.

Сценарий 2

переключаться напрямую

шаг:

  1. сделать подчиненную библиотеку доступной для записи,redis-cli -h redis-slave -p 6379 CONFIG set slave-read-only no
  2. Измените конфигурацию бизнес-стороны, адрес Redis указывает на доступный для записи подчиненный экземпляр и перезапустите бизнес-приложение.
  3. Убедитесь, что синхронизация master-slave завершена, остановите синхронизацию master-slave.redis-cli -h redis-slave -p 6379 slaveof no one
  4. Создайте новую логику ведущий-ведомый.

преимущество:

  1. Интуитивно понятный
  2. никаких изменений кода

недостаток:

  1. Если есть проблема в процессе переключения, необходимо откатить конфигурацию и вовремя выпустить бизнес-проект, это занимает много времени и приведет к потере данных.

Сценарий 3

Введен прокси уровня 4, haproxy

шаг:

  1. Разверните haproxy в качестве прокси для текущего мастера.
  2. Измените конфигурацию бизнес-стороны, адрес redis указывает на адрес прокси-сервера haproxy и перезапустите бизнес-приложение.
  3. сделать подчиненную библиотеку доступной для записи
  4. Измените конфигурацию haproxy, укажите доступную для записи подчиненную библиотеку и перезагрузите конфигурацию.
  5. Убедитесь, что синхронизация master-slave завершена, остановите синхронизацию master-slave.
  6. Создайте новую логику ведущий-ведомый.

преимущество

  1. Представлен haproxy среднего уровня, потому что haproxy поддерживает конфигурацию динамической перезагрузки и гарантирует корректное закрытие предыдущего соединения, а бизнес-сторона может не знать о переключении master-slave redis.
  2. Короткое время переключения ведущий-ведомый

недостаток

  1. Представлено новое промежуточное ПО

установить стратегию

Чтобы быть в безопасности, используйте вариант 3.

воплощать в жизнь

  1. Архитектура после введения haproxy

    haproxy

  2. Выполнить переключение ведущий-ведомый


export redis-slave=REDIS_SLAVE_IP
export redis-master=REDIS_MASTER_IP

# 从库可写
redis-cli -h redis-slave -p 6379 CONFIG set slave-read-only no

# 修改 haproxy 配置
sed -i 's/redis-master/redis-slave/g' haproxy.cfg

# reload haproxy
haproxy -f haproxy.cfg -p /tmp/haproxy.pid -sf `cat /tmp/haproxy.pid`

# 确定主从同步结束
redis-cli -h redis-slave -p 6379 info | grep master_sync_in_progress
# 值需为0

# 停止主从同步
redis-cli -h redis-slave -p 6379 slaveof no one

# 建立新主从
redis-cli -h redis-master -p 6379 slaveof redis-slave 6379

# 确定新主从同步结束
redis-cli -h redis-master -p 6379 info | grep master_sync_in_progress
# 值需为0

# 结束
  1. Архитектура после переключения
    end

резюме

Он просто записывает компромиссы и операции переключения Redis master-slave.