Обновление etcd с 3.0 до 3.1
В общем случае обновление etcd с 3.0 до 3.1 можно выполнить поэтапно без простоя:
- по очереди останавливать процессы etcd v3.0 и заменять их процессами etcd v3.1;
- после запуска всех процессов v3.1 кластеру станут доступны новые возможности v3.1.
Перед началом обновления прочитайте остальную часть руководства и подготовьтесь.
Контрольные списки обновления
При миграции с v2 без данных v3
сервер etcd v3.2+ аварийно завершается при восстановлении из существующих снимков, если отсутствует файл v3 ETCD_DATA_DIR/member/snap/db. Это происходит, когда сервер мигрировал с v2 и ранее не содержал данных v3. Такое поведение также предотвращает случайную потерю данных v3, например при перемещении файла db. После миграции на v3 etcd может работать только с данными v3. Не обновляйтесь до более новых версий v3, пока сервер v3.0 не содержит данных v3.
Мониторинг
Следующие метрики v3.0.x устарели в пользу go-grpc-prometheus :
etcd_grpc_requests_totaletcd_grpc_requests_failed_totaletcd_grpc_active_streamsetcd_grpc_unary_requests_duration_seconds
Требования к обновлению
Для обновления существующего развёртывания etcd до 3.1 работающий кластер должен иметь версию 3.0 или новее. Версию ниже 3.0 сначала обновите до 3.0 , а затем до 3.1.
Для плавного поэтапного обновления работающий кластер также должен быть исправен.
Перед продолжением проверьте его командой etcdctl endpoint health.
Подготовка
Перед обновлением etcd обязательно протестируйте зависящие от него службы в промежуточной среде до развёртывания обновления в производственной.
До начала создайте резервную копию данных etcd
.
Если обновление завершится неудачно, копия позволит вернуться к предыдущей
версии
. Обратите внимание: команда snapshot копирует только
данные v3. Для данных v2 см. резервное копирование хранилища v2
.
Смешанные версии
Во время обновления кластер etcd поддерживает участников разных версий и работает по протоколу наименьшей общей версии. Кластер считается обновлённым только после обновления всех участников до 3.1. Участники etcd согласуют общую версию кластера, которая определяет сообщаемую версию и поддерживаемые возможности.
Ограничения
Примечание: ограничение не относится к кластеру, содержащему только данные v3 без данных v2.
Если кластер обслуживает набор данных v2 больше 50MB, новому обновлённому участнику может потребоваться до двух минут, чтобы догнать кластер. Оцените объём по размеру последнего снимка. Безопаснее всего ждать 2 минуты между обновлениями участников.
При значительно большем объёме, 100MB или более, этот однократный процесс может занять ещё больше времени. Администраторы настолько крупных кластеров etcd могут до обновления обратиться к команде etcd за рекомендациями.
Понижение версии
После обновления всех участников до v3.1 кластер становится кластером v3.1, и понизить версию из этого завершённого состояния невозможно. Пока хотя бы один участник остаётся на v3.0, кластер и его операции сохраняют версию “v3.0”, и из такого смешанного состояния можно вернуть двоичный файл etcd v3.0 на всех участниках.
Создайте резервную копию каталога данных всех участников etcd, чтобы понижение версии оставалось возможным даже после полного обновления кластера.
Процедура обновления
В примере показано обновление локального кластера etcd v3.0 из 3 участников.
1. Проверьте требования к обновлению
Кластер исправен и работает под управлением v3.0.x?
2. Остановите существующий процесс etcd
При остановке каждого процесса etcd другие участники записывают ожидаемые ошибки. Это нормально, поскольку соединение с участником временно разорвано:
На этом этапе рекомендуется создать резервную копию данных etcd , чтобы при проблемах сохранить путь понижения версии:
3. Установите двоичный файл etcd v3.1 и запустите новый процесс etcd
Новый etcd v3.1 опубликует свои сведения в кластере:
Убедитесь, что с новым двоичным файлом etcd v3.1 каждый участник, а затем весь кластер становятся исправными:
До обновления всего кластера обновлённые участники будут записывать следующие предупреждения. Это ожидаемо и прекратится после обновления всех участников до v3.1:
4. Повторите шаги 2–3 для остальных участников
5. Завершите обновление
После обновления всех участников кластер сообщит об успешном переходе на 3.1: