Version v3.8-DRAFT of документація перебуває у статусі ЧЕРНЕТКИ. For the latest stable documentation, see v3.7.
Протокол служби виявлення
Протокол служби виявлення допомагає новому учаснику etcd виявити всіх інших учасників у фазі завантаження кластера за допомогою спільного токена виявлення та списку точок доступу.
Протокол служби виявлення використовується лише на етапі запуску кластера і не може застосовуватися для переналаштування під час роботи або моніторингу кластера.
Протокол використовує новий токен виявлення для завантаження одного унікального кластера etcd. Памʼятайте, що один токен виявлення може представляти лише один кластер etcd. Як тільки протокол виявлення на цьому токені починається, навіть якщо він переривається на півдорозі, його не можна використовувати для завантаження іншого кластера etcd.
У решті статті ми розглянемо процес виявлення на прикладах, які відповідають кластеру виявлення, що розміщується на власному хостингу.
Зверніть увагу, що цей документ стосується лише виявлення v3. Перегляньте попередній документ для отримання додаткової інформації про виявлення v2.
Робочий процес протоколу
Ідея протоколу виявлення полягає в тому, щоб використовувати внутрішній кластер etcd для координації завантаження нового кластера. Спочатку всі нові учасники взаємодіють зі службою виявлення і допомагають створити очікуваний список учасників. Потім кожен новий учасник завантажує свій сервер, використовуючи цей список, що виконує ту ж функцію, що і прапорець -initial-cluster.
У наступному прикладі робочого процесу ми перераховуємо кожен крок протоколу за допомогою команди etcdctl для зручності розуміння, і ми припускаємо, що http://example.com:2379 розміщує кластер etcd для служби виявлення.
За звичаєм протокол виявлення etcd використовує префікс ключа /_etcd/registry.
Створення нового токена виявлення
Згенеруйте унікальний токен, який буде ідентифікувати новий кластер. Він буде використано як унікальний префікс у просторі ключів виявлення у наступних кроках. Легкий спосіб зробити це — використовувати uuidgen:
UUID=$(uuidgen)
Вказання очікуваного розміру кластера
Токен виявлення очікує розмір кластера, який повинен бути вказаний. Розмір використовується службою виявлення для визначення, коли вона знайшла всіх учасників, які спочатку сформують кластер.
etcdctl --endpoints=http://example.com:2379 put /_etcd/registry/${UUID}/_config/size ${cluster_size}
Зазвичай розмір кластера становить 3, 5 або 7. Перевірте оптимальний розмір кластера для отримання додаткової інформації.
Запуск процесів etcd
Встановіть токен виявлення ${UUID} у прапорець --discovery-token, а точки доступу кластера etcd, що підтримує службу виявлення, у прапорець --discovery-endpoints. Це увімкне виявлення v3 для завантаження кластера etcd.
Кожен процес etcd буде виконувати наступні кілька кроків внутрішньо, якщо вказано прапорці --discovery-token та --discovery-endpoints.
Якщо служба виявлення вмикає автентифікацію клієнтських сертифікатів, налаштуйте наступні прапорці. Вони використовуються точно так само, як і etcdctl для звʼязку з кластером etcd.
--discovery-insecure-transport
--discovery-insecure-skip-tls-verify
--discovery-cert
--discovery-key
--discovery-cacert
Якщо служба виявлення вмикає автентифікацію на основі ролей, налаштуйте наступні прапорці. Вони використовуються точно так само, як і etcdctl для звʼязку з кластером etcd.
--discovery-user
--discovery-password
Значення часу або тайм-ауту за замовчуванням також можна змінити за допомогою наступних прапорців, які використовуються точно так само, як і etcdctl для звʼязку з кластером etcd.
--discovery-dial-timeout
--discovery-request-timeout
--discovery-keepalive-time
--discovery-keepalive-timeout
Реєстрація себе
Перше, що робить кожен процес etcd, це реєструє себе у вказаному новому кластері як учасника. Це робиться шляхом створення ідентифікатора учасника як ключа у повному ключі реєстрації.
etcdctl --endpoints=http://example.com:2379 put /_etcd/registry/${UUID}/members/${member_id} ${member_name}=${member_peer_url_1}&${member_name}=${member_peer_url_2}
Перевірка статусу
Перевіряється очікуваний розмір кластера і статус реєстрації, та вирішується, що робити далі.
etcdctl --endpoints=http://example.com:2379 get /_etcd/registry/${UUID}/_config/size
etcdctl --endpoints=http://example.com:2379 get /_etcd/registry/${UUID}/members
Якщо зареєстрованих учасників ще недостатньо, відбуватиметься очікування, поки зʼявляться інші учасники.
Якщо кількість зареєстрованих учасників перевищує очікуваний розмір N, буде розглянуто перших N зареєстрованих учасників як список учасників кластера. Якщо учасник сам знаходиться у списку учасників, процедура виявлення успішно завершується, і учасник отримує всіх колег через отримання списку учасників. Якщо він не знаходиться у списку учасників, процедура виявлення завершується з помилкою, що кластер заповнений.
Учасник може перевірити статус кластера навіть перед реєстрацією себе. Таким чином, він може швидко зазнати невдачі, якщо кластер заповнений.
Очікування всіх учасників
Процес очікування продовжує спостерігати за префіксом ключа /_etcd/registry/${UUID}/members, поки не знайде всіх учасників.
etcdctl --endpoints=http://example.com:2379 watch /_etcd/registry/${UUID}/members --prefix
Зворотний зв’язок
Чи була ця сторінка корисною?
Раді чути! Будь ласка, повідомте нам, як ми можемо зробити краще.
Дуже шкода це чути. Будь ласка, повідомте нам, як ми можемо зробити краще.