Аутентификация и авторизация узлов баз данных

Важно

Данная статья описывает работу с кластерами YDB, использующими конфигурацию V1. Конфигурация V1 является основным способом конфигурирования кластеров под управлением YDB версии ниже v25.1. Начиная с версии v25.1, YDB поддерживает конфигурацию V2, которая является рекомендуемым способом конфигурирования для кластеров YDB версии v25.1 и выше. Для кластеров, использующих конфигурацию V2, данная инструкция не применима.

Если ваш кластер уже обновлён до версии v25.1 или выше, но ещё использует конфигурацию V1, рекомендуется запланировать миграцию на конфигурацию V2, так как поддержка конфигурации V1 будет прекращена в будущих версиях YDB.

Иногда возникает ситуация, когда меняется FQDN узла, при этом сам узел в системе остаётся, но под другим именем. Простая замена имени узла в разделе hosts не сработает, так как BS_CONTROLLER внутри хранит привязку ресурсов к парам FQDN:IcPort, где IcPort — номер порта Interconnect, на котором работает узел.

Процедура замены

  1. Для заменяемого узла определить его NodeId.
  2. Подготовить команду DefineBox, которая описывает ресурсы кластера, в которой для ресурсов заменяемого узла будет добавлен элемент EnforcedNodeId: <NodeId>.
  3. Выполнить эту команду.
  4. Заменить FQDN в списке hosts в cluster.yaml.
  5. Выполнить rolling restart.
  6. Убрать из DefineBox поле EnforcedNodeId и заменить Fqdn на новое название узла.
  7. Выполнить DefineBox с новыми значениями.

Пример

Предположим кластер, состоящий из трёх узлов:

config.yaml:

- host: host1.my.sub.net
  node_id: 1
  location: {unit: 12345, data_center: MYDC, rack: r1}
- host: host2.my.sub.net
  node_id: 2
  location: {unit: 23456, data_center: MYDC, rack: r2}
- host: host3.my.sub.net
  node_id: 3
  location: {unit: 34567, data_center: MYDC, rack: r3}

DefineBox выглядит так:

DefineBox {
    BoxId: 1
    Host { Key { Fqdn: "host1.my.sub.net" IcPort: 19001 } HostConfigId: 1 }
    Host { Key { Fqdn: "host2.my.sub.net" IcPort: 19001 } HostConfigId: 1 }
    Host { Key { Fqdn: "host3.my.sub.net" IcPort: 19001 } HostConfigId: 1 }
}

Предположим, что мы хотим переименовать host1.my.sub.net в host4.my.sub.net. Для этого сначала делаем DefineBox следующего вида:

DefineBox {
    BoxId: 1
    Host { Key { Fqdn: "host1.my.sub.net" IcPort: 19001 } HostConfigId: 1 EnforcedNodeId: 1 }
    Host { Key { Fqdn: "host2.my.sub.net" IcPort: 19001 } HostConfigId: 1 }
    Host { Key { Fqdn: "host3.my.sub.net" IcPort: 19001 } HostConfigId: 1 }
}

Затем изменяем config.yaml:

- host: host4.my.sub.net
  node_id: 1
  location: {unit: 12345, data_center: MYDC, rack: r1}
- host: host2.my.sub.net
  node_id: 2
  location: {unit: 23456, data_center: MYDC, rack: r2}
- host: host3.my.sub.net
  node_id: 3
  location: {unit: 34567, data_center: MYDC, rack: r3}

Затем делаем rolling restart кластера.

И затем делаем второй раз скорректированный DefineBox:

DefineBox {
    BoxId: 1
    Host { Key { Fqdn: "host4.my.sub.net" IcPort: 19001 } HostConfigId: 1 }
    Host { Key { Fqdn: "host2.my.sub.net" IcPort: 19001 } HostConfigId: 1 }
    Host { Key { Fqdn: "host3.my.sub.net" IcPort: 19001 } HostConfigId: 1 }
}