Перейти к содержимому
Последнее обновление

Развертывание полноценного кластера Doris с разделением вычислений и хранения

Этот документ предназначен для пользователей, которые впервые настраивают кластер Doris с разделением вычислений и хранения в Kubernetes. Он охватывает весь процесс: от развертывания с нуля до возможности записывать данные. Изучив этот документ, вы сможете:

  • Развернуть FoundationDB (хранилище метаданных) или подключиться к существующему кластеру
  • Развернуть Doris Operator в Kubernetes
  • Развернуть полноценный кластер с разделением вычислений и хранения с помощью Doris Operator
  • Создать объектное хранилище для долговременного хранения данных (Storage Vault) с помощью SQL

Результат развертывания​

После выполнения этого руководства вы получите кластер Doris с разделением вычислений и хранения, состоящий из следующих компонентов:

КомпонентОписаниеКоличество реплик по умолчанию
FEРазбор SQL и координация1
MS (MetaService)Управление метаданными1
Compute Group (CG)Прием и кэширование данных2
FoundationDBХранение метаданных-
Storage VaultОбъектное хранилище, совместимое с S3-

Обзор процесса развертывания​

Весь процесс состоит из 5 последовательных шагов. Необходимые исходные данные и результат каждого шага приведены ниже:

ШагЦель этапаИсходные данныеРезультат
Шаг 1Развернуть FoundationDBКластер K8s / доступные машиныРаботающий кластер FDB и сведения для доступа
Шаг 2Развернуть Doris OperatorДоступ к кластеру K8sРаботающий Operator и CRD
Шаг 3Развернуть кластер Doris с разделением вычислений и храненияddc-sample.yaml и сведения для доступа к FDBРаботающий кластер с разделением вычислений и хранения
Шаг 4Создать удаленное хранилищеРаботающий кластер и учетные данные объектного хранилища, совместимого с S3Storage Vault, доступное для долговременного хранения данных
Шаг 5Подключиться к кластеру и выполнить сквозную проверкуСоединение MySQL, установленное на шаге 4Работающий кластер, проверенный чтением и записью

После шага 4 кластер готов принимать данные для записи. На шаге 5 выполняется сквозная проверка с помощью SQL. Дополнительные настройки FE / MS / Compute Group описаны в разделе Расширенная настройка в конце этого документа.

Шаг 1: разверните FoundationDB​

Кластер с разделением вычислений и хранения использует FoundationDB (FDB) для хранения метаданных. Перед развертыванием необходимо подготовить работающий кластер FDB. Выберите способ развертывания с учетом имеющейся инфраструктуры:

Способ развертыванияКогда подходитДальнейшие действия
Развертывание непосредственно на машинах (рекомендуется)Есть доступные физические или виртуальные машиныВыполните развертывание по инструкции Разделение вычислений и хранения: подготовка к развертыванию. Убедитесь, что машины для развертывания и кластер K8s находятся в одной локальной сети
Развертывание в KubernetesТребуется централизованно управлять FDB в K8sВыполните инструкции из раздела «Быстрое развертывание в K8s» ниже

Быстрое развертывание в K8s (самый простой способ)​

Последовательно выполните следующие 4 шага, чтобы запустить минимальный кластер FDB (с одной репликой) в K8s:

1. Примените CRD FoundationDB:

kubectl apply -f https://raw.githubusercontent.com/FoundationDB/fdb-kubernetes-operator/main/config/crd/bases/apps.foundationdb.org_foundationdbclusters.yaml
kubectl apply -f https://raw.githubusercontent.com/FoundationDB/fdb-kubernetes-operator/main/config/crd/bases/apps.foundationdb.org_foundationdbbackups.yaml
kubectl apply -f https://raw.githubusercontent.com/FoundationDB/fdb-kubernetes-operator/main/config/crd/bases/apps.foundationdb.org_foundationdbrestores.yaml

2. Разверните fdb-kubernetes-operator:

kubectl apply -f https://raw.githubusercontent.com/apache/doris-operator/master/config/operator/fdb-operator.yaml

3. Разверните кластер FoundationDB (в минимальной конфигурации с одной репликой):

kubectl apply -f https://raw.githubusercontent.com/apache/doris-operator/refs/heads/master/doc/examples/disaggregated/fdb/cluster-single.yaml

4. Проверьте состояние FDB:

kubectl get fdb

Если значение в столбце AVAILABLE в выводе команды kubectl get fdb равно true, кластер FDB готов к работе.

Дополнительные варианты

Режим с одной репликой подходит только для разработки и тестирования. Для промышленной эксплуатации рекомендуется режим с двумя репликами, при этом кластер Kubernetes должен включать как минимум три хост-машины. Другие варианты развертывания (с двумя репликами, для промышленной эксплуатации, с образами из частного репозитория, в режиме FQDN и т. д.) описаны в разделе Развертывание FoundationDB.

Шаг 2: разверните Doris Operator​

Исходные данные: доступ к кластеру Kubernetes Действие: примените определения ресурсов CRD, разверните Operator и правила RBAC Результат: Doris Operator, работающий в пространстве имен doris

1. Примените определения ресурсов CRD​

Выберите команду в зависимости от текущего состояния кластера:

  • Сценарий A: первое развертывание (или развертывание только кластера с разделением вычислений и хранения): примените все CRD:

    kubectl create -f https://raw.githubusercontent.com/apache/doris-operator/master/config/crd/bases/crds.yaml
  • Сценарий B: кластер без разделения вычислений и хранения уже развернут: добавьте только CRD, относящиеся к разделению вычислений и хранения:

    kubectl create -f https://raw.githubusercontent.com/apache/doris-operator/master/config/crd/bases/disaggregated.cluster.doris.com_dorisdisaggregatedclusters.yaml

2. Разверните Operator и правила RBAC​

Выполните следующую команду, чтобы развернуть Doris Operator и необходимые ему правила RBAC:

kubectl apply -f https://raw.githubusercontent.com/apache/doris-operator/master/config/operator/disaggregated-operator.yaml

После развертывания проверьте состояние Pod оператора:

kubectl -n doris get pods
NAME READY STATUS RESTARTS AGE
doris-operator-6b97df65c4-xwvw8 1/1 Running 0 19s

Значение STATUS, равное Running, означает, что Operator готов к работе.

Шаг 3: разверните кластер с разделением вычислений и хранения​

Исходные данные: пример развертывания ddc-sample.yaml и сведения для доступа к FoundationDB Действие: скачайте пример, измените необходимые ключевые поля и разверните кластер Результат: работающий кластер Doris с разделением вычислений и хранения

1. Скачайте пример развертывания​

Скачайте стандартный пример развертывания из репозитория Doris Operator:

curl -O https://raw.githubusercontent.com/apache/doris-operator/master/doc/examples/disaggregated/cluster/ddc-sample.yaml

2. Измените ключевые параметры​

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

ПолеОбязательностьОписание
spec.metaService.fdbОбязательноСведения для доступа к FDB, развернутому на шаге 1 (выберите адрес или ConfigMap)
spec.computeGroups[].imageОбязательноВерсия образа BE. Должна соответствовать требуемой версии Doris
spec.metaService.imageНеобязательноВерсия образа MetaService. По умолчанию используется версия из примера
spec.feSpec.electionNumberНеобязательноКоличество FE в роли Follower. По умолчанию 1; после развертывания изменить нельзя
spec.computeGroups[].replicasНеобязательноКоличество реплик в Compute Group. По умолчанию используется значение из примера
spec.feSpec.requests / limitsНеобязательноОграничения вычислительных ресурсов FE (рекомендуются для промышленных сред)

После изменений раздел spec будет выглядеть примерно так (способ A: FDB развернут на машинах):

spec:
metaService:
fdb:
address: ${fdbEndpoint} # Required: FDB client access address (machine deployment)
feSpec:
electionNumber: 1
requests:
cpu: 8
memory: 8Gi
limits:
cpu: 8
memory: 8Gi
computeGroups:
- uniqueId: cg1
image: ${beImage} # Required: BE image
replicas: 2
requests:
cpu: 8
memory: 8Gi
limits:
cpu: 8
memory: 8Gi

Способ B: FDB развернут в K8s: замените раздел metaService.fdb следующим содержимым:

spec:
metaService:
fdb:
configMapNamespaceName:
name: ${foundationdbConfigMapName} # Required: ConfigMap name generated by fdb-kubernetes-operator (default is ${FDB resource name}-config)
namespace: ${namespace} # Required: Namespace where the ConfigMap resides

Чтобы получить ConfigMap, выполните kubectl get configmap (подробнее см. Развертывание FoundationDB: получение ConfigMap со сведениями для доступа).

Описание параметров:

ПараметрОписание
${fdbEndpoint}Адрес для клиентского доступа к FoundationDB. При стандартном развертывании на виртуальной машине Linux он хранится в /etc/foundationdb/fdb.cluster. Подробнее см. документацию по файлу кластера FoundationDB
${beImage}Образ BE. Используйте образы из официального репозитория образов Apache Doris
${foundationdbConfigMapName}Имя ConfigMap, созданного fdb-kubernetes-operator
${namespace}Пространство имен, в котором находится ConfigMap

3. Разверните и проверьте кластер​

kubectl apply -f ddc-sample.yaml

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

kubectl get ddc
NAME CLUSTERHEALTH FEPHASE CGCOUNT CGAVAILABLECOUNT CGFULLAVAILABLECOUNT
test-disaggregated-cluster green Ready 2 2 2

Критерии готовности: значение CLUSTERHEALTH равно green, а CGAVAILABLECOUNT равно CGCOUNT.

Шаг 4: создайте удаленное хранилище​

Исходные данные: работающий кластер Doris и учетные данные объектного хранилища, совместимого с S3 Действие: выполните SQL через клиент MySQL, чтобы создать и включить Vault Результат: настроенное хранилище, которое можно использовать для долговременного хранения данных

После успешного запуска кластера необходимо с помощью SQL зарегистрировать объектное хранилище для долговременного хранения данных (в Doris оно называется Vault) и назначить его Vault по умолчанию. Это позволит сохранять записываемые данные.

1. Получите адрес для доступа к Service FE​

Выполните следующую команду, чтобы найти Service, через который можно получить доступ к FE:

kubectl get svc

Пример вывода:

NAME                                     TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                               AGE
test-disaggregated-cluster-fe ClusterIP 10.96.147.97 <none> 8030/TCP,9020/TCP,9030/TCP,9010/TCP 15m
test-disaggregated-cluster-fe-internal ClusterIP None <none> 9030/TCP 15m
test-disaggregated-cluster-ms ClusterIP 10.96.169.8 <none> 5000/TCP 15m
test-disaggregated-cluster-cg1 ClusterIP 10.96.47.90 <none> 9060/TCP,8040/TCP,9050/TCP,8060/TCP 14m
test-disaggregated-cluster-cg2 ClusterIP 10.96.50.199 <none> 9060/TCP,8040/TCP,9050/TCP,8060/TCP 14m

Для внешнего доступа используются Service без суффикса -internal.

2. Подключитесь через клиент MySQL​

Запустите в кластере Kubernetes временный Pod с клиентом MySQL и войдите в него:

kubectl run mysql-client --image=mysql:5.7 -it --rm --restart=Never -- /bin/bash

Внутри Pod подключитесь к кластеру Doris, используя имя Service FE:

mysql -uroot -P9030 -h test-disaggregated-cluster-fe

3. Создайте Storage Vault​

С помощью SQL создайте Vault на основе объектного хранилища, поддерживающего протокол S3. В следующем примере используется Alibaba Cloud OSS:

CREATE STORAGE VAULT IF NOT EXISTS s3_vault
PROPERTIES (
"type"="S3",
"s3.endpoint" = "oss-cn-beijing.aliyuncs.com",
"s3.region" = "bj",
"s3.bucket" = "bucket",
"s3.root.path" = "big/data/prefix",
"s3.access_key" = "your-ak",
"s3.secret_key" = "your-sk",
"provider" = "OSS"
);

Способы создания других хранилищ и подробное описание каждого поля приведены в разделе Управление Storage Vault документации по разделению вычислений и хранения.

4. Назначьте Storage Vault по умолчанию​

SET ${vaultName} AS DEFAULT STORAGE VAULT;

Здесь ${vaultName} обозначает имя Vault, которое вы хотите использовать (например, s3_vault из предыдущего шага).

Теперь кластер готов принимать данные для записи. Следующий шаг — сквозная проверка с помощью SQL.

Шаг 5: подключитесь к кластеру и выполните сквозную проверку​

Исходные данные: соединение MySQL, установленное на шаге 4 Действие: выполните проверочные SQL-команды, чтобы убедиться, что кластер готов к работе и корректно выполняет чтение и запись Результат: работающий кластер, прошедший сквозную проверку

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

1. Убедитесь, что узлы BE работают​

SHOW BACKENDS;

Значение в столбце Alive для каждого узла BE в выводе равно true. Это означает, что узлы BE в Compute Group готовы к работе и распознаны FE.

2. Убедитесь, что Storage Vault используется​

SHOW STORAGE VAULTS;

В выводе должно отображаться Vault, созданное на шаге 4 (например, s3_vault), со значением IsDefault, равным true. Это означает, что хранилище готово к работе.

3. Запишите тестовые данные и выполните запрос​

Последовательно выполните следующие SQL-команды, чтобы пройти весь путь: «создание базы данных, создание таблицы, запись, запрос»:

CREATE DATABASE IF NOT EXISTS demo;
USE demo;

CREATE TABLE IF NOT EXISTS hello (
id INT,
msg VARCHAR(64)
)
DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 1;

INSERT INTO hello VALUES (1, 'hello doris');
SELECT * FROM hello;

Если SELECT возвращает записанные данные, вся цепочка от FE через MetaService и Compute Group до Storage Vault работает, и кластер готов к использованию.

Расширенная настройка​

После выполнения 5 шагов выше кластер готов к использованию. Для промышленной эксплуатации обычно требуются дополнительные настройки. Нужную документацию можно найти в следующей таблице:

ТемаДокументацияОсновное содержание
Подробности развертывания FoundationDB, режим с двумя репликами / режим для промышленной эксплуатации, развертывание с FQDN, частный репозиторий образовРазвертывание FoundationDBПринципы работы и все варианты развертывания FDB
Смена образа MetaService, настройка ресурсов и параметров запуска, изменение тайм-аута liveness probeНастройка MetaServiceВсе поля в spec.metaService.*
Настройка ресурсов FE, изменение количества узлов Follower, настройка параметров запуска, режима доступа (NodePort / LoadBalancer) и постоянного хранилищаНастройка FEВсе поля в spec.feSpec.*
Одна или несколько Compute Group, ограничения ресурсов, настройка режима доступа, постоянное хранение кэша и журналовНастройка Compute GroupВсе поля в spec.computeGroups[*]
Настройка паролей root и других пользователей с правами администратора, учетные данные в Secret, монтирование файлов аутентификации KerberosНастройка аутентификацииУчетные данные уровня кластера и Kerberos