Обновление etcd от 3.1 до 3.2
В общем случае, обновление от etcd 3.1 до 3.2 может быть обновлением с нулевым временем простоя:
- по одному, останавливайте процессы etcd v3.1 и заменяйте их процессами etcd v3.2
- после запуска всех процессов v3.2, новые функции в v3.2 становятся доступны для кластера
Перед обновлением внимательно прочитайте оставшуюся часть этого руководства для подготовки.
Обновление списков проверки
При миграции с v2 без данных v3
сервер etcd v3.2+ аварийно завершается при восстановлении из снимка без файла v3 ETCD_DATA_DIR/member/snap/db. Это происходит после миграции с v2 без прежних данных v3 и предотвращает случайную потерю v3, например при перемещении db. После миграции на v3 etcd требует данные v3. Не обновляйтесь до более новых версий v3, пока сервер v3.0 не содержит данные v3.
Изменения, требующие пересборки, в 3.2.
Изменено стандартное значение snapshot-count
Большее значение --snapshot-count удерживает до снимка больше записей Raft
в памяти, вызывая периодически повышенное потребление памяти
.
Лидер дольше хранит последние записи, и медленный последователь получает больше
времени догнать его до снимка. --snapshot-count — компромисс между памятью и
доступностью медленных последователей.
Начиная с v3.2 значение --snapshot-count по умолчанию изменено с 10,000 на 100,000
.
Изменена зависимость gRPC (>=3.2.10)
Выпуск 3.2.10 или более поздний теперь требует grpc/grpc-go
v1.7.5 (<=3.2.9 требует v1.2.1).
Устаревшая grpclog.Logger
grpclog.Logger был устаревшим в пользу grpclog.LoggerV2
. clientv3.Logger теперь grpclog.LoggerV2.
Перед
После
Устаревшая grpc.ErrClientConnTimeout
Ранее, grpc.ErrClientConnTimeout ошибка возвращалась при таймаутах на подключении клиента. 3.2 теперь возвращает context.DeadlineExceeded (см. #8504
).
Перед
После
Изменены максимальные ограничения размера запроса (>=3.2.10)
Версии 3.2.10 и 3.2.11 позволяют настраивать ограничение размера запроса на сервере. >=3.2.12 позволяет задавать его и на сервере, и на клиенте. В предыдущих версиях (v3.2.10, v3.2.11) ответ клиенту был ограничен 4 MiB.
Серверные ограничения на запросы можно настроить с помощью флага --max-request-bytes:
Или настройте поле embed.Config.MaxRequestBytes:
Если значение не задано, серверное ограничение по умолчанию равно 1.5 MiB.
Клиентские ограничения на запросы должны быть настроены в соответствии с серверными ограничениями.
Если значения не заданы, клиентское ограничение отправки по умолчанию равно
2 MiB (1.5 MiB + накладные байты gRPC), а получения — math.MaxInt32.
Подробнее см. godoc clientv3
.
Изменены.raw оболочки клиентов gRPC
3.2.12 или более поздняя версия изменяет сигнатуры функций оболочки gRPC клиентского clientv3. Этот изменения были необходимы для поддержки пользовательских ограничений размера сообщений grpc.CallOption.
До и после
Изменена clientv3.Lease.TimeToLive API
Прежде, clientv3.Lease.TimeToLive API возвращал lease.ErrLeaseNotFound при несуществующем идентификаторе арены. 3.2 вместо этого возвращает TTL=-1 в ответе и не выдает ошибку (см. #7305
).
Перед
После
Перемещен clientv3.NewFromConfigFile в clientv3.yaml.NewConfig
clientv3.NewFromConfigFile перенесен в yaml.NewConfig.
Перед
После
Изменение в --listen-peer-urls и --listen-client-urls
3.2 теперь отвергает доменные имена для --listen-peer-urls и --listen-client-urls (3.1 только выводит предупреждения), так как доменное имя недопустимо для привязки к сетевому интерфейсу. Убедитесь, что эти URL правильно форматированы как scheme://IP:port.
См. issue #6336 для более подробной информации.
Проверки для обновления сервера
Требования к обновлению
Для обновления существующего развёртывания etcd до 3.2 кластер должен быть версии 3.1 или выше. Если это раньше 3.1, рекомендуется обновить до 3.1 перед обновлением до 3.2.
Также, для обеспечения плавного обновления кластер должен быть здоровым. Проверьте состояние кластера с помощью команды etcdctl endpoint health перед продолжением.
Подготовка
Перед обновлением etcd всегда протестируйте сервисы, зависящие от etcd, в стендовой среде перед развертыванием обновления в производственную среду.
Перед началом сделайте резервную копию данных etcd
. Если что-то пойдет не так с обновлением, можно использовать эту резервную копию для понижения версии
обратно к существующей версии etcd. Пожалуйста, примечание: команда snapshot выполняет только резервное копирование v3 данных. Для v2 данных см. резервное копирование v2 хранилища данных
.
Смешанные версии
При обновлении кластер etcd поддерживает смешанные версии участников etcd и работает с протоколом самой низкой общей версии. Кластер считается обновленным только после того, как все его участники будут обновлены до версии 3.2. Внутри кластерные участники переговариваются между собой, чтобы определить общую версию кластера, которая контролирует отчетываемую версию и поддерживаемые функции.
Ограничения
Примечание: если кластер содержит только данные версии 3 и нет данных версии 2, то он не подлежит этому ограничению.
Если кластер обслуживает набор данных версии v2 размером более 50MB, каждый новый обновленный участник может потребовать до двух минут для того, чтобы синхронизироваться с существующим кластером. Проверьте размер последнего снимка, чтобы оценить общий размер данных. Иными словами, наиболее безопасно ждать 2 минут между обновлением каждого участника.
Для гораздо большего объема данных, превышающего 100MB, этот одноразовый процесс может занять еще больше времени. Администраторы очень больших кластеров etcd такого масштаба могут обратиться к команде etcd перед обновлением, и мы с удовольствием предоставим рекомендации по процедуре.
Понижение версии
Если все участники были обновлены до v3.2, кластер будет обновлен до v3.2, и понижение версии из этого завершенного состояния невозможно. Если хотя бы один участник остается v3.1, кластер и его операции остаются “v3.1”, и из этого смешанного состояния кластера возможно вернуться к использованию etcd-бинарного файла версии v3.1 на всех участниках.
Создайте резервную копию каталога данных всех участников, чтобы понижение версии оставалось возможным после полного обновления.
Процедура обновления
Этот пример показывает, как обновить кластер etcd, работающий локально, состоящий из участника 3-члена v3.1.
1. Проверьте требования к обновлению
Я здоров и работает ли кластер v3.1.x?
2. Остановите существующий процесс etcd
Когда процесс etcd останавливается, ожидаемые ошибки будут записаны другими участниками кластера. Это нормально, так как соединение участника было (временно) прервано:
Это хорошая идея на данном этапе создать резервную копию данных etcd , чтобы обеспечить возможность понижения версии в случае возникновения любых проблем:
3. Замените встраиваемую версию etcd v3.2 и запустите новый процесс etcd
The новое v3.2 etcd будет публиковать свои данные в кластер:
Убедитесь, что с новым двоичным файлом etcd v3.2 каждый участник, а затем весь кластер становятся исправными:
Обновленные участники будут регистрировать предупреждения вида следующий до тех пор, пока весь кластер не будет обновлен. Это ожидаемо и прекратится после того, как все участники кластера etcd будут обновлены до v3.2:
4. Повторите шаг 2 до шага 3 для всех других участников
5. Завершить
Когда все участники будут обновлены, кластер будет сообщать о успешном переходе к 3.2: