Духовный парень берет на себя вину онлайн
Запись онлайн-переключения Redis master-slave
задний план
Хост экземпляра, на котором находится главный сервер Redis, должен быть отключен для обслуживания. Текущая архитектура выглядит следующим образом
Технические решения
план 1
Представьте Redis Sentinel.
шаг:
- Развернуть Redis Sentinel
- Измените бизнес-конфигурацию, измените бизнес-код.
- kill master.
- check
- Создайте новую логику master-slave
преимущество:
- Переключение простое, просто уничтожьте основную библиотеку, и часовой автоматически продвинет ведомое устройство -> ведущее.
недостаток:
- Необходимо развернуть redis sentinel, новое промежуточное ПО.
- Необходимо изменить бизнес-код.
Сценарий 2
переключаться напрямую
шаг:
- сделать подчиненную библиотеку доступной для записи,
redis-cli -h redis-slave -p 6379 CONFIG set slave-read-only no
- Измените конфигурацию бизнес-стороны, адрес Redis указывает на доступный для записи подчиненный экземпляр и перезапустите бизнес-приложение.
- Убедитесь, что синхронизация master-slave завершена, остановите синхронизацию master-slave.
redis-cli -h redis-slave -p 6379 slaveof no one
- Создайте новую логику ведущий-ведомый.
преимущество:
- Интуитивно понятный
- никаких изменений кода
недостаток:
- Если есть проблема в процессе переключения, необходимо откатить конфигурацию и вовремя выпустить бизнес-проект, это занимает много времени и приведет к потере данных.
Сценарий 3
Введен прокси уровня 4, haproxy
шаг:
- Разверните haproxy в качестве прокси для текущего мастера.
- Измените конфигурацию бизнес-стороны, адрес redis указывает на адрес прокси-сервера haproxy и перезапустите бизнес-приложение.
- сделать подчиненную библиотеку доступной для записи
- Измените конфигурацию haproxy, укажите доступную для записи подчиненную библиотеку и перезагрузите конфигурацию.
- Убедитесь, что синхронизация master-slave завершена, остановите синхронизацию master-slave.
- Создайте новую логику ведущий-ведомый.
преимущество
- Представлен haproxy среднего уровня, потому что haproxy поддерживает конфигурацию динамической перезагрузки и гарантирует корректное закрытие предыдущего соединения, а бизнес-сторона может не знать о переключении master-slave redis.
- Короткое время переключения ведущий-ведомый
недостаток
- Представлено новое промежуточное ПО
установить стратегию
Чтобы быть в безопасности, используйте вариант 3.
воплощать в жизнь
-
Архитектура после введения haproxy
-
Выполнить переключение ведущий-ведомый
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
# 结束
- Архитектура после переключения
резюме
Он просто записывает компромиссы и операции переключения Redis master-slave.