1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/vipshop-vdl

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
member_ship_change.md 12 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 01.12.2024 08:47 1556aaf

Членство в VDL: руководство по операциям

1. Обзор

VDL позволяет управлять членством с помощью команды VDLCTL. Существует четыре типа операций:

  • просмотр списка участников;
  • добавление участника;
  • удаление участника;
  • обновление участника.

Для работы с VDLCTL необходимо указать endpoint-адрес, который можно найти в файле конфигурации VDL. Для просмотра списка участников можно использовать любой узел в кластере VDL, но для добавления, удаления или обновления участников требуется доступ к лидеру.

Изменения в составе участников не используют алгоритм консенсуса, а выполняются последовательно: после успешного изменения одного участника можно перейти к следующему.

С помощью команды –help можно получить информацию о конкретных командах и их использовании. Например:

# Просмотр всех команд
./vdlctl --help

# Просмотр информации о команде member
./vdlctl member --help

# Просмотр использования подкоманды list команды member
./vdlctl member list --help

2. Просмотр списка участников

./vdlctl member list <имя потока журнала> --endpoints <endpoint>

Пример:
./vdlctl member list logstream1 --endpoints=http://127.0.0.1:9001

Результат:
ID: 4eff15a7b59548ca, Name: vdl1, PeerAddrs: http://127.0.0.1:2381, IsLeader: false
ID: e8a2d2fe302cd27b, Name: vdl0, PeerAddrs: http://127.0.0.1:2380, IsLeader: true

Здесь:

  • ID — идентификатор группы узлов Raft;
  • Name — имя узла Raft;
  • PeerAddrs — IP-адреса и порты группы узлов Raft;
  • IsLeader — указывает, является ли узел лидером.

3. Добавление участника

Добавление нового узла в существующий кластер может быть выполнено двумя способами:

  1. прямое добавление — подходит для небольших кластеров с небольшим объёмом данных;
  2. добавление из снимка — подходит для больших кластеров с большим объёмом данных.

Прямое добавление включает три шага:

  • подготовка нового узла;
  • выполнение операции добавления с помощью VDLCTL;
  • запуск нового узла.

Рассмотрим пример добавления нового узла VDL2 в существующий кластер с узлами VDL0 и VDL1.

Исходный кластер:

  • VDL0, имя потока журнала: logstream1, IP-адреса и порты: http://127.0.0.1:2380;
  • VDL1, имя потока журнала: logstream1, IP-адреса и порты: http://127.0.0.1:2381.

Новый узел:

  • VDL2, имя потока журнала: logstream1, IP-адреса и порты: http://127.0.0.1:2382.

Подготовка нового узла включает следующие шаги: A. Подготовка нового узла:

  • обеспечение необходимых ресурсов и установка VDL;
  • настройка параметров в соответствии с инструкциями. Особое внимание следует уделить следующим параметрам:
    • initial-cluster-state должен быть установлен в значение existing (существующее);
    • existing-admin-urls должен содержать URL-адрес одного из существующих узлов;
    • initial-cluster должен включать IP-адреса и порты существующего кластера и нового узла. B. Выполнение операции добавления с помощью VDLCTL:
# Выполнение операции добавления
./vdlctl member add logstream1 vdl2 --peer-urls=http://127.0.0.1:2382 --endpoints=http://127.0.0.1:9001

# Результат:
Member 6dfedeb1b19d5bc3 added to logstream logstream1 in cluster [460d709c038402fe]

# Проверка списка участников
./vdlctl member list logstream1 --endpoints=http://127.0.0.1:9001

# Результат:
ID: 4eff15a7b59548ca, Name: vdl1, PeerAddrs: http://127.0.0.1:2381, IsLeader: false
ID: 6dfedeb1b19d5bc3, Name: vdl2, PeerAddrs: http://127.0.0.1:2382, IsLeader: false
ID: e8a2d2fe302cd27b, Name: vdl0, PeerAddrs: http://127.0.0.1:2380, IsLeader: true

C. Запуск нового узла:

  • использование конфигурации vdl2 для запуска нового узла.

Добавление из снимка включает обращение к документации VDL для получения подробной информации.

4. Удаление участника

Удаление участника обычно выполняется в следующих случаях:

  • постоянный сбой узла — рекомендуется удалить узел и создать новый;
  • временный сбой узла, требующий длительного времени на восстановление — рекомендуется удалить узел и создать новый из снимка;
  • другие потребности в развёртывании или управлении.

Удаление узла выполняется с помощью VDLCTL:

На примере исходного кластера:
ID: 4eff15a7b59548ca, Name: vdl1, PeerAddrs: http://127.0.0.1:2381, IsLeader: false
ID: 6dfedeb1b19d5bc3, Name: vdl2, PeerAddrs: http://127.0.0.1:2382, IsLeader: false
ID: e8a2d2fe302cd27b, Name: vdl0, PeerAddrs: http://127.0.0.1:2380, IsLeader: true
Необходимо удалить VDL2:
./vdlctl member remove logstream1 6dfedeb1b19d5bc3 --endpoints=http://127.0.0.1:9001

После выполнения операции в VDL2 соответствующий поток журнала автоматически останавливается.

5. Обновление участника

Обновление участника используется для изменения IP-адресов и портов связи группы узлов Raft. Процесс обновления включает:

  • остановку обновляемого узла и изменение соответствующего файла конфигурации;
  • использование VDLCTL для обновления информации об узле;
  • запуск обновлённого узла. Ниже будет изменён порт vdl2 (49bc1e27d0ae19a6) с 2382 на 2383.
./vdlctl member update logstream1 49bc1e27d0ae19a6 --peer-urls=http://127.0.0.1:2383 --endpoints=http://127.0.0.1:9001

Член 49bc1e27d0ae19a6 обновлён в потоке журнала logstream logstream1 в кластере [460d709c038402fe].

После обновления запустите vdl2.

6. FAQ

1. Что произойдёт, если использовать команду обновления для изменения порта узла, но забыть настроить или перезапустить?

С технической точки зрения:

Например, есть узлы A и B, где A является лидером, а B — последователем. Если изменить порт B с 1023 на 1024, и он продолжит работать на порту 1023, то:

  1. Если B остаётся последователем, то синхронизация данных между A и B будет осуществляться через поток, а ответные пакеты от B будут отправляться через HTTP POST. Синхронизация журналов будет работать нормально, но функция моментальных снимков будет недоступна, и A будет постоянно получать предупреждения о проверке состояния B.

  2. Если B становится лидером, то данные будут передаваться от A к B через HTTP POST, что замедлит синхронизацию.

2. Почему при добавлении нового узла появляется сообщение «текущий кластер имеет x узлов, но только x узлов здоровы, кластер не может работать при добавлении нового узла, сначала восстановите плохой узел»?

В конфигурации VDL каждый поток журнала можно настроить с помощью параметра strict-member-changes-check, который по умолчанию установлен в значение true. Этот параметр определяет, требуется ли строгая проверка при изменении членов. Принцип проверки заключается в том, что если добавление нового узла приведёт к тому, что существующий кластер перестанет нормально функционировать, то новый узел не будет добавлен. Например, если в исходном кластере было три узла, и добавляется четвёртый, новое число кворума становится равным трём. Если в исходном кластере только два узла здоровы, после добавления нового узла кластер перестаёт нормально работать, поэтому новый узел добавить нельзя.

3. Почему при удалении узла появляется сообщение «текущий кластер имеет x узлов, кроме удаления члена, имеет x здоровых узлов, кластер не может работать при удалении этого узла, сначала восстановите плохой узел»?

Принцип проверки аналогичен добавлению нового узла. Здесь проверка заключается в том, что удаление узла приводит к невозможности нормального функционирования кластера, поэтому узел удалить нельзя. Например, в исходном кластере из трёх узлов только два являются здоровыми. Если удаляемый узел является одним из здоровых, его удалить нельзя, так как после удаления останется только один здоровый узел, а кластеру для нормальной работы требуется два узла.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/vipshop-vdl.git
git@api.gitlife.ru:oschina-mirror/vipshop-vdl.git
oschina-mirror
vipshop-vdl
vipshop-vdl
master