Аутентификация и авторизация узлов баз данных
Важно
Данная статья описывает работу с кластерами 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, на котором работает узел.
Процедура замены
- Для заменяемого узла определить его
NodeId
. - Подготовить команду
DefineBox
, которая описывает ресурсы кластера, в которой для ресурсов заменяемого узла будет добавлен элементEnforcedNodeId: <NodeId>
. - Выполнить эту команду.
- Заменить FQDN в списке
hosts
вcluster.yaml
. - Выполнить rolling restart.
- Убрать из
DefineBox
полеEnforcedNodeId
и заменитьFqdn
на новое название узла. - Выполнить
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 }
}