Настройка выделенной сети для распределенного хранилища с LINSTOR
Введение
В этом руководстве описано, как повысить надежность и производительность хранилища в распределенных кластерах Cozystack.
В гиперконвергентных кластерах для трафика хранилища обычно выделяют отдельную сеть. Однако не всегда возможно выделить отдельные storage-каналы между дата-центрами.
Если для хранилища нет выделенных междатацентровых каналов, есть два варианта:
- изолировать storage-узлы в каждом дата-центре;
- передавать storage-трафик через существующие uplink вместе с другими workloads.
В этом руководстве показано, как настроить LINSTOR на использование выделенной сети для storage-трафика внутри каждого дата-центра и при необходимости переключаться на общие каналы между дата-центрами.
Предварительные требования
Это руководство опирается на руководство Выделенная сеть для LINSTOR и добавляет методы и шаблоны конфигурации, характерные для окружений с несколькими дата-центрами. Чтобы применять описанные здесь шаблоны, важно понимать, как работают интерфейсы узлов и пути соединений. Сначала ознакомьтесь с предыдущим руководством: в нем эти концепции описаны подробно.
Чтобы применять разные настройки соединений в зависимости от расположения узла, добавьте на узлы соответствующие метки.
Инструкции см. в руководстве
Топологические метки узлов.
В этом руководстве для различения дата-центров используется метка topology.kubernetes.io/zone.
Конфигурация соединений
В этом примере есть три дата-центра: dc1, dc2 и dc3. Дата-центры соединены прямыми оптическими линиями, а интерфейс называется region10g. Узлы в дата-центрах dc1 и dc2 имеют отдельный сетевой коммутатор и сетевые интерфейсы san только для storage-трафика. В дата-центре dc3 нет выделенного сетевого коммутатора для хранилища, и весь трафик между узлами в dc3 маршрутизируется через сеть по умолчанию. Для подключения к другим дата-центрам используется VPN-сервер, подключенный к оптическим линиям. На узлах в dc3 есть VLAN-интерфейс с IP из подсети region10g.
Рассмотрим сценарий с тремя дата-центрами: dc1, dc2 и dc3.
- Дата-центры соединены прямыми оптическими линиями, которые доступны узлам как интерфейс
region10g. - Узлы в
dc1иdc2подключены к выделенному сетевому коммутатору для хранилища и используют отдельный интерфейсsanтолько для storage-трафика. - В дата-центре
dc3нет выделенной storage-сети. Весь трафик внутриdc3идет через сеть по умолчанию.
Для такой схемы оптимальная маршрутизация storage-трафика выглядит так:
- Узлы в
dc1иdc2используют интерфейсsanдля локальной репликации хранилища. - Узлы в
dc3используют сетевой интерфейс по умолчанию для локальной репликации хранилища, избегая лишних переходов через VPN-сервер. - Междатацентровый storage-трафик идет через интерфейс
region10g.
Ниже custom resource definition (CRD) LINSTOR, который реализует эту логику:
---
apiVersion: piraeus.io/v1
kind: LinstorNodeConnection
metadata:
name: intra-datacenter
spec:
selector:
- matchLabels:
- key: topology.kubernetes.io/zone
op: Same
- key: topology.kubernetes.io/zone
op: In
values:
# Только в этих дата-центрах есть интерфейс `san`
- dc1
- dc2
paths:
- name: intra-datacenter
interface: san
# Узлы в `dc3` используют сеть по умолчанию.
# Для репликации внутри этого дата-центра отдельное соединение не требуется.
---
apiVersion: piraeus.io/v1
kind: LinstorNodeConnection
metadata:
name: cross-datacenter
spec:
selector:
- matchLabels:
- key: topology.kubernetes.io/zone
op: NotSame
paths:
- name: cross-datacenter
interface: region10g
После применения этой конфигурации можно проверить получившиеся пути соединений:
LINSTOR ==> node-connection list
╭─────────────────────────────────────────────────────╮
┊ Node A ┊ Node B ┊ Properties ┊
╞═════════════════════════════════════════════════════╡
┊ node01 ┊ node02 ┊ last-applied=["Paths/intra-dat... ┊
┊ node01 ┊ node03 ┊ last-applied=["Paths/cross-dat... ┊
┊ node01 ┊ node04 ┊ last-applied=["Paths/cross-dat... ┊
....
Пары узлов внутри дата-центра dc3 не будут иметь настроенного custom node connection и будут использовать интерфейс по умолчанию.