Ручное развёртывание кластера с разделением хранения и вычислений
Развёртывание кластера с разделением хранения и вычислений включает восемь шагов:
-
Подготовьте кластер FoundationDB: используйте существующий кластер FoundationDB или создайте новый.
-
Разверните сервис S3 или HDFS: используйте существующее общее хранилище или настройте новое.
-
Разверните Meta Service: разверните Meta Service для кластера Doris.
-
Разверните процесс очистки данных: разверните отдельный процесс очистки данных для кластера Doris. Этот шаг необязателен.
-
Запустите узел FE Master: запустите первый узел FE в качестве узла Master FE.
-
Сформируйте кластер FE Master: добавьте узлы FE Follower/Observer, чтобы сформировать кластер FE.
-
Добавьте узлы BE: добавьте узлы BE и зарегистрируйте их в кластере.
-
Добавьте Storage Vault: создайте одно или несколько хранилищ Storage Vault на основе общего хранилища.
Перед началом развёртывания можно скачать подходящую версию Doris.
Предварительные требования
| Тип | Требование |
|---|---|
| Операционная система | Linux (CentOS 7+, Ubuntu 20.04+) |
| JDK | OpenJDK 17 (необходимо задать JAVA_HOME) |
| FoundationDB | Версия из серии 7.1.x |
| Сеть | Порты должны быть доступны между узлами (по умолчанию: FE 8030, BE 9050, Meta Service 5000) |
| Диск | Рекомендуется SSD (особенно для каталога данных FDB) |
Шаг 1: Подготовка FoundationDB
В этом разделе приведено пошаговое руководство по настройке, развёртыванию и запуску сервиса FDB (FoundationDB) с помощью скриптов fdb_vars.sh и fdb_ctl.sh. Вы можете скачать инструменты Doris и найти fdb_vars.sh и fdb_ctl.sh в каталоге fdb.
По умолчанию для Doris требуется FDB серии 7.1.x. Если FDB уже установлен, убедитесь, что его версия относится к серии 7.1.x; иначе Meta Service не запустится.
Требования к машинам
Как правило, для создания кластера FoundationDB с двумя репликами и устойчивостью к отказу одной машины требуются как минимум три машины с SSD. Для тестовой среды или среды разработки достаточно одной машины.
Настройка скрипта fdb_vars.sh
При настройке скрипта fdb_vars.sh необходимо указать следующие параметры:
| Параметр | Описание | Тип | Пример | Примечания |
|---|---|---|---|---|
| DATA_DIRS | Каталоги данных, используемые FoundationDB | Список абсолютных путей через запятую | /mnt/foundationdb/data1,/mnt/foundationdb/data2,/mnt/foundationdb/data3 | Перед запуском скрипта убедитесь, что каталоги существуют. Для производственной среды рекомендуются SSD и отдельные каталоги. |
| FDB_CLUSTER_IPS | IP-адреса кластера | Строка с IP-адресами через запятую | 172.200.0.2,172.200.0.3,172.200.0.4 | В производственном кластере должно быть не менее 3 IP-адресов. Первый IP-адрес используется для координатора. Для высокой доступности разместите машины в разных стойках. |
| FDB_HOME | Домашний каталог FoundationDB | Абсолютный путь | /fdbhome | Путь по умолчанию: /fdbhome. Убедитесь, что путь абсолютный. |
| FDB_CLUSTER_ID | Идентификатор кластера | Строка | SAQESzbh | Идентификатор каждого кластера должен быть уникальным. Для его генерации можно использовать mktemp -u XXXXXXXX. |
| FDB_CLUSTER_DESC | Описание кластера FDB | Строка | dorisfdb | Рекомендуется заменить это значение на описание, отражающее назначение вашего развёртывания. |
При необходимости можно указать следующие дополнительные параметры:
| Параметр | Описание | Тип | Пример | Примечания |
|---|---|---|---|---|
| MEMORY_LIMIT_GB | Ограничение памяти для процесса FDB, в ГБ | Целое число | MEMORY_LIMIT_GB=16 | Настройте это значение с учётом доступной памяти и требований процесса FDB. |
| CPU_CORES_LIMIT | Ограничение числа ядер CPU для процесса FDB | Целое число | CPU_CORES_LIMIT=8 | Задайте это значение с учётом числа доступных ядер CPU и требований процесса FDB. |
Развёртывание кластера FDB
После настройки окружения с помощью fdb_vars.sh используйте скрипт fdb_ctl.sh на каждом узле для развёртывания кластера FDB.
./fdb_ctl.sh deploy
Запуск сервиса FDB
После развёртывания кластера FDB используйте скрипт fdb_ctl.sh для запуска сервиса FDB.
./fdb_ctl.sh start
Эта команда запускает сервис FDB, переводит кластер в рабочее состояние и получает строку подключения к кластеру FDB, которую затем можно использовать для настройки MetaService.
Команда clean в скрипте fdb_ctl.sh удаляет все метаданные FDB, что может привести к потере данных. Никогда не используйте её в производственной среде.
Шаг 2: Установка сервиса S3 или HDFS (необязательно)
Режим разделения хранения и вычислений в Doris использует сервис S3 или HDFS для хранения данных. Если у вас уже есть такой сервис, его можно использовать напрямую. Если такого сервиса нет, ниже приведена простая инструкция по развёртыванию MinIO:
-
На странице загрузки MinIO выберите подходящую версию и операционную систему, затем скачайте соответствующие исполняемые файлы или установочные пакеты Server и Client.
-
Запустите MinIO Server.
export MINIO_REGION_NAME=us-east-1
export MINIO_ROOT_USER=minio # In older versions, this setting is MINIO_ACCESS_KEY=minio
export MINIO_ROOT_PASSWORD=minioadmin # In older versions, this setting is MINIO_SECRET_KEY=minioadmin
nohup ./minio server /mnt/data 2>&1 & -
Настройте MinIO Client.
# If you installed the client from an installation package, the client is named mcli. If you downloaded the client binary directly, it is named mc.
./mc config host add myminio http://127.0.0.1:9000 minio minioadmin -
Создайте бакет.
./mc mb myminio/doris -
Проверьте работоспособность.
# Upload a file
./mc mv test_file myminio/doris
# View the file
./mc ls myminio/doris
Шаг 3: Развёртывание Meta Service
-
Настройка
В файле
./conf/doris_cloud.confнеобходимо изменить прежде всего следующие два параметра:brpc_listen_port: порт, который прослушивает Meta Service. По умолчанию: 5000.fdb_cluster: информация для подключения к кластеру FoundationDB, полученная при развёртывании FoundationDB. (Если вы развернули FDB с помощью скриптаfdb_ctl.sh, предоставляемого Doris, это значение можно найти в файле$FDB_HOME/conf/fdb.cluster.)
Пример конфигурации:
brpc_listen_port = 5000
fdb_cluster = xxx:yyy@127.0.0.1:4500Примечание: значение
fdb_clusterдолжно совпадать с содержимым файла/etc/foundationdb/fdb.clusterна машине с FoundationDB. (Если вы развернули FDB с помощью скриптаfdb_ctl.sh, предоставляемого Doris, это значение можно найти в файле$FDB_HOME/conf/fdb.cluster.)В следующем примере последняя строка файла содержит значение, которое нужно указать в поле
fdb_clusterфайлаdoris_cloud.conf:cat /etc/foundationdb/fdb.cluster
DO NOT EDIT!
This file is auto-generated, it is not to be edited by hand.
cloud_ssb:A83c8Y1S3ZbqHLL4P4HHNTTw0A83CuHj@127.0.0.1:4500 -
Запуск и остановка
Перед запуском убедитесь, что переменная окружения
JAVA_HOMEзадана правильно и указывает на OpenJDK 17. Затем перейдите в каталогms.Команда запуска:
export JAVA_HOME=${path_to_jdk_17}
bin/start.sh --daemonКод возврата 0 у скрипта запуска означает успешный запуск; любое другое значение означает ошибку запуска. При успешном запуске последняя строка стандартного вывода содержит "doris_cloud start successfully".
Команда остановки:
bin/stop.shВ производственной среде должно быть не менее 3 узлов Meta Service.
-
Использование нескольких конфигурационных файлов (необязательно, 4.0.8+)
Начиная с версии 4.0.8,
bin/start.shпринимает несколько конфигурационных файлов через переменную окруженияCONF_FILES. Это позволяет удобнее отделять общую конфигурацию от настроек отдельных узлов:export CONF_FILES="common.conf,doris_cloud.conf"
bin/start.sh --daemonПравила:
- Разделяйте имена файлов запятыми. Файлы загружаются слева направо.
- Относительные пути отсчитываются от
${DORIS_HOME}/conf/; абсолютные пути также поддерживаются. Можно использовать шаблоны с подстановочными символами (например,conf.d/*.conf). - Если переменная определена несколько раз, используется первое определение; последующие файлы его не переопределяют.
- Переменные окружения, уже экспортированные в оболочке, имеют наивысший приоритет и никогда не переопределяются конфигурационным файлом.
- Отсутствующие файлы пропускаются и не приводят к ошибке запуска.
- Если
CONF_FILESне задана, поведение соответствует предыдущим версиям: читается толькоdoris_cloud.conf.
ПримечаниеЭтот механизм обрабатывает только переменные окружения с именами в верхнем регистре, записанные в конфигурационных файлах в виде
KEY=VALUE(например,JAVA_HOME). Собственные параметры Meta Service по-прежнему читаются изdoris_cloud.conf.
Шаг 4: Отдельное развёртывание процесса очистки данных (необязательно)
Сам Meta Service предоставляет функции управления метаданными и очистки данных. Эти функции можно развернуть отдельно друг от друга. Если вам нужно отдельно развернуть процесс очистки данных, выполните следующие шаги.
-
Создайте новый рабочий каталог (например,
recycler) и скопируйте в него содержимое каталогаms:cp -r ms recycler -
В конфигурационном файле нового каталога измените порт прослушивания BRPC
brpc_listen_portи значениеfdb_cluster.Запустите процесс очистки данных:
export JAVA_HOME=${path_to_jdk_17}
bin/start.sh --recycler --daemonЗапустите только компонент для работы с метаданными:
export JAVA_HOME=${path_to_jdk_17}
bin/start.sh --meta-service --daemon
Шаг 5: Запуск узла FE Master
-
Настройте файл fe.conf
В файле
fe.confнеобходимо настроить следующие ключевые параметры:deploy_mode- Описание: задаёт режим запуска Doris.
- Формат:
cloudозначает режим с разделением хранения и вычислений; любое другое значение означает режим с совмещением хранения и вычислений. - Пример:
cloud
cluster_id- Описание: уникальный идентификатор кластера в архитектуре с разделением хранения и вычислений. Разные кластеры должны использовать разные значения
cluster_id. - Формат: int
- Пример: для генерации случайного идентификатора можно использовать следующий скрипт оболочки:
echo $(($((RANDOM << 15)) | $RANDOM)). - Примечание: разные кластеры должны использовать разные значения
cluster_id.
- Описание: уникальный идентификатор кластера в архитектуре с разделением хранения и вычислений. Разные кластеры должны использовать разные значения
meta_service_endpoint- Описание: адрес и порт Meta Service.
- Формат:
IP:Port - Пример:
127.0.0.1:5000. Можно указать несколько адресов Meta Service через запятую.
-
Запустите узел FE Master
Команда запуска:
bin/start_fe.sh --daemonПервый процесс FE инициализирует кластер и работает в роли FOLLOWER. Подключитесь к FE с помощью клиента MySQL и выполните
show frontends, чтобы убедиться, что только что запущенный FE является master.
Шаг 6: Регистрация узлов FE Follower/Observer
Для остальных узлов измените конфигурационные файлы и запустите их, выполнив те же шаги. Затем подключитесь с помощью клиента MySQL к FE в роли Master и выполните следующую команду SQL, чтобы добавить дополнительные узлы FE:
ALTER SYSTEM ADD FOLLOWER "host:port";
Замените host:port фактическим адресом и портом edit-log узла FE. Подробнее см. ADD FOLLOWER и ADD OBSERVER.
В производственной среде общее число узлов FE в роли FOLLOWER, включая первый FE, должно оставаться нечётным. Как правило, достаточно трёх узлов FOLLOWER. Число узлов FE в роли Observer может быть любым.
Шаг 7: Добавление узлов BE
Чтобы добавить узлы Backend в кластер, выполните следующие шаги для каждого Backend:
-
Настройте be.conf
В файле
be.confнеобходимо настроить следующие ключевые параметры:- deploy_mode
- Описание: задаёт режим запуска Doris.
- Формат:
cloudозначает режим с разделением хранения и вычислений; любое другое значение означает режим с совмещением хранения и вычислений. - Пример: cloud
- file_cache_path
- Описание: пути к дискам и другие параметры файлового кеша, представленные в виде массива с одной записью на диск.
pathзадаёт путь к диску, аtotal_sizeограничивает размер кеша; -1 или 0 означает использование всего дискового пространства. - Формат: [{"path":"/path/to/file_cache","total_size":21474836480},{"path":"/path/to/file_cache2","total_size":21474836480}]
- Пример: [{"path":"/path/to/file_cache","total_size":21474836480},{"path":"/path/to/file_cache2","total_size":21474836480}]
- По умолчанию: [{"path":"${DORIS_HOME}/file_cache"}]
- Описание: пути к дискам и другие параметры файлового кеша, представленные в виде массива с одной записью на диск.
- deploy_mode
-
Запустите процесс BE
Для запуска Backend используйте следующую команду:
bin/start_be.sh --daemon -
Добавьте BE в кластер
С помощью клиента MySQL подключитесь к любому узлу FE:
ALTER SYSTEM ADD BACKEND "<ip>:<heartbeat_service_port>" [PROPERTIES properties];Замените
<ip>IP-адресом нового Backend, а<heartbeat_service_port>настроенным портом службы heartbeat (по умолчанию: 9050).С помощью PROPERTIES можно задать вычислительную группу, к которой относится BE.
Подробнее об использовании см. ADD BACKEND и REMOVE BACKEND.
-
Проверьте состояние BE
Проверьте файл журнала Backend (
be.log), чтобы убедиться, что он успешно запустился и присоединился к кластеру.Для проверки состояния Backend также можно выполнить следующую команду SQL:
SHOW BACKENDS;Она показывает все узлы Backend в кластере и их текущее состояние.
Шаг 8: Добавление Storage Vault
Хранилища Storage Vault являются важным компонентом архитектуры Doris с разделением хранения и вычислений. Они представляют общий слой хранения, в котором размещаются данные. Можно создать одно или несколько хранилищ Storage Vault на основе HDFS или объектного хранилища, совместимого с S3. Одно из хранилищ Storage Vault можно назначить хранилищем по умолчанию. В этом Storage Vault хранятся системные таблицы и таблицы, для которых Storage Vault явно не указан. Storage Vault по умолчанию нельзя удалить. Ниже описано, как создать Storage Vault для кластера Doris:
-
Создайте Storage Vault на основе HDFS
Чтобы создать Storage Vault с помощью SQL, подключитесь к кластеру Doris через клиент MySQL.
CREATE STORAGE VAULT IF NOT EXISTS hdfs_vault
PROPERTIES (
"type"="hdfs",
"fs.defaultFS"="hdfs://127.0.0.1:8020"
); -
Создайте Storage Vault на основе S3
Чтобы создать Storage Vault на основе объектного хранилища, совместимого с S3, выполните следующие шаги:
- Подключитесь к кластеру Doris через клиент MySQL.
- Выполните следующую команду SQL, чтобы создать Storage Vault на основе S3:
CREATE STORAGE VAULT IF NOT EXISTS s3_vault
PROPERTIES (
"type"="S3",
"s3.endpoint"="https://s3.us-east-1.amazonaws.com",
"s3.access_key" = "ak",
"s3.secret_key" = "sk",
"s3.region" = "us-east-1",
"s3.root.path" = "ssb_sf1_p2_s3",
"s3.bucket" = "doris-build-1308700295",
"provider" = "S3"
);О создании Storage Vault в других сервисах объектного хранения см. Создание Storage Vault.
-
Назначьте Storage Vault по умолчанию
Чтобы назначить Storage Vault по умолчанию, выполните следующий оператор SQL.
SET <storage_vault_name> AS DEFAULT STORAGE VAULT
Часто задаваемые вопросы
Вопрос: Meta Service не запускается с ошибкой "FDB version mismatch"?
По умолчанию для Doris требуется FDB серии 7.1.x. Выполните fdbserver --version, чтобы проверить установленную версию FoundationDB. Если версия не соответствует требуемой, переустановите FDB, выбрав правильную версию.
Вопрос: Как убедиться, что узел FE успешно запустился и стал Master?
Для проверки выполните следующую команду:
mysql -h <fe_host> -P 9030 -u root -e "SHOW FRONTENDS;"
Проверьте, что в выводе столбец Role для соответствующего FE содержит значение MASTER.
Вопрос: Как устранить неполадку, если узел BE после запуска остаётся в состоянии "Starting"?
Выполните следующие действия:
- Проверьте журнал BE
be.logна наличие сообщений об ошибках. - Убедитесь, что
meta_service_endpointнастроен правильно и Meta Service доступен. - Убедитесь, что для
deploy_modeзадано значениеcloud. - Выполните
SHOW BACKENDS;, чтобы просмотреть подробное описание ошибки.
Вопрос: Как убедиться, что Storage Vault успешно создан?
Для проверки выполните следующую команду SQL:
SHOW STORAGE VAULT;
Убедитесь, что созданное хранилище имеет состояние OK.
Вопрос: При добавлении узла BE возвращается ошибка "backend already exists"?
Возможно, узел BE уже существует или предыдущая запись не была полностью удалена. Выполните следующую команду, чтобы удалить старую запись, и повторите попытку:
ALTER SYSTEM DROP BACKEND "<ip>:<port>";
Устранение неполадок
FE не удаётся подключиться к Meta Service
- Признак: в журнале FE отображается "connect to meta service failed".
- Действия по устранению неполадок:
- Убедитесь, что процесс Meta Service работает:
ps aux | grep doris_cloud. - Проверьте формат
meta_service_endpoint(он должен бытьIP:Port). - Убедитесь, что узлы доступны друг другу по сети (порт по умолчанию: 5000).
- Убедитесь, что процесс Meta Service работает:
BE не запускается с ошибкой "Too many open files"
- Действия по устранению неполадок:
- Выполните
ulimit -n, чтобы проверить текущее ограничение. - Добавьте
max_open_files = 65535вbe.conf. - Либо выполните
ulimit -n 65535, а затем перезапустите BE.
- Выполните
Кластер FDB не запускается
- Действия по устранению неполадок:
- Проверьте, что каталоги, заданные параметром
DATA_DIRSвfdb_vars.sh, существуют и имеют необходимые права доступа. - Убедитесь, что
FDB_CLUSTER_IPSнастроен одинаково на всех узлах. - Проверьте журнал FDB по пути
/var/log/foundationdb/fdbserver.log.
- Проверьте, что каталоги, заданные параметром
Примечания
- В качестве адресата в настройке
meta_service_endpointдля FE и BE следует указывать только процесс Meta Service, отвечающий за операции с метаданными. - Процесс очистки данных не следует указывать в качестве адресата в настройке
meta_service_endpoint.