Развертывание MySQL-MGR без TopoLVM
Это руководство содержит инструкции по развертыванию экземпляров MySQL Group Replication (MGR) в кластерах, где TopoLVM недоступен, например в кластерах под управлением MicroOS (SUSE Linux Enterprise Micro) или в других средах, использующих альтернативные провиженеры хранилища.
Содержание
Общая информацияПроблемаРешениеПредварительные требованияТребуемые operatorsТребования к кластеруШаг 1: Создайте локальный StorageClassШаг 2: Подготовьте локальные PersistentVolumesСоздайте каталоги на узлахСоздайте ресурсы PVШаг 3 (опционально): Настройте путь хранения ClickHouse в файловых системах только для чтенияНастройте hostPath перед установкой query-analytics-operatorИсправление существующего развертывания с неверным hostPathШаг 4: Создайте экземпляр MySQL-MGRУстранение неполадокPVC застряли в состоянии PendingPod'ы MySQL застряли в CrashLoopBackOffPod'ы MySQL завершаются с ошибкой "data directory has files in it"PV застряли в состоянии ReleasedЭкземпляр застрял в состоянии ErrorReconcilePod'ы ClickHouse завершаются с ошибкой "read-only file system"Общая информация
Проблема
MySQL-MGR обычно использует TopoLVM для динамического выделения томов. Однако в некоторых средах TopoLVM не поддерживается:
- Кластеры MicroOS: корневая файловая система доступна только для чтения, и TopoLVM может быть не установлен.
- Bare-metal-кластеры: некоторые кластеры используют локальное хранилище с ручным выделением PV.
- Тестовые/оценочные среды: облегченные установки без TopoLVM.
Без корректной настройки хранилища pod'ы MySQL не смогут запуститься из-за ошибок привязки PVC или проблем с правами доступа.
Решение
Используйте локальный StorageClass с PV, выделенными вручную. В этом руководстве рассматриваются:
- Установка зависимостей: убедитесь, что все требуемые operators установлены перед развертыванием MySQL-MGR.
- Создание StorageClass: настройте локальный StorageClass с привязкой
WaitForFirstConsumer. - Подготовка PV: создайте локальные PV с корректными путями, правами доступа и политиками удаления.
- Исправление хранилища ClickHouse (опционально): устраните ошибку
read-only file system, вызванную жестко заданным host path плагина query-analytics. - Создание экземпляра: разверните MySQL-MGR, используя локальный StorageClass.
Предварительные требования
Требуемые operators
Перед развертыванием MySQL-MGR убедитесь, что в кластере установлены следующие базовые operators:
Если вам нужны функции query analytics (журналирование медленных запросов, анализ запросов), также требуются следующие operators:
В файловых системах только для чтения (например, MicroOS) вы должны настроить путь хранения ClickHouse в CR RdsInstaller до установки query-analytics-operator. В противном случае operator немедленно создаст PV ClickHouse по пути по умолчанию /cpaas/ck, и это завершится ошибкой read-only file system. Подробности см. в Шаге 3.
Если ваш кластер использует TopoLVM, также требуется topolvm-operator. Поскольку это руководство описывает развертывание без TopoLVM, он здесь не нужен.
Вы можете проверить, что operators установлены, просмотрев их CSV:
Все operators должны иметь статус Succeeded в столбце PHASE.
Требования к кластеру
- Для production-развертываний рекомендуется не менее 3 worker-узлов (MySQL-MGR требует 3 участников для кворума group replication). Для тестирования возможны развертывания с одним участником.
- Достаточные ресурсы CPU и памяти на каждом узле.
- Доступный путь к каталогу с правом записи на всех узлах (например,
/opt/local-pv/на MicroOS).
Шаг 1: Создайте локальный StorageClass
Если в кластере еще нет подходящего StorageClass, создайте его:
volumeBindingMode: WaitForFirstConsumer требуется, чтобы PV привязывались только после того, как pod будет запланирован на конкретный узел. Это обеспечивает локальность данных.
Имя StorageClass произвольно. В этом руководстве используется mgr-local-pv, чтобы отличать его от динамического провиженера Rancher local-path. Вы можете использовать любое имя, но должны последовательно ссылаться на него на последующих шагах.
Шаг 2: Подготовьте локальные PersistentVolumes
Каждому участнику MySQL-MGR требуется один PV. Для кластера из 3 участников создайте как минимум 3 PV, распределив их по разным узлам.
Создайте каталоги на узлах
В MicroOS корневая файловая система доступна только для чтения. Используйте /opt/local-pv/ в качестве базового пути:
- Путь: на MicroOS не используйте
/dataили другие пути на уровне root — они завершатся ошибкойread-only file system. Вместо этого используйте/opt/local-pv/. - Права доступа:
chmod 777— это временный обходной вариант, поскольку контейнеры MySQL запускаются от имени пользователя без root-прав, чей UID/GID может не совпадать с хостом. Без прав на записьmysqld --initializeзавершится ошибкойPermission denied. В production-средах вместо777рассмотрите вариант назначения владельца с конкретным UID, который использует контейнер MySQL (обычно999:999). - Старые данные: если вы переиспользуете каталоги PV, сначала удалите все существующие файлы с помощью
rm -rf /opt/local-pv/pvN/*. Инициализация MySQL завершается ошибкой, если каталог данных не пуст.
Создайте ресурсы PV
Сначала определите имена узлов:
Затем создайте PV, сопоставив каждый с конкретным узлом. Для кластера из 3 участников на 3 узлах:
Проверьте, что все PV созданы и доступны:
Перед продолжением все PV должны иметь статус Available.
- Используйте
persistentVolumeReclaimPolicy: DeleteвместоRetain. ПриRetainPV после удаления PVC переходят в состояниеReleasedи не могут быть повторно использованы без ручной очистки. - Обратите внимание, что для локальных PV, подготовленных вручную, удаление объекта PV не очищает данные на диске автоматически. Перед повторным использованием каталоги все равно может потребоваться очистить вручную.
- Создавайте PV с запасом сверх минимально необходимого количества, чтобы обеспечить масштабирование и повторную подготовку. Однако дополнительные PV не помогают при failover: если узел будет потерян, привязанные к нему PV не могут быть перенесены. Восстановление после потери узла требует ручной повторной подготовки и повторной синхронизации данных.
Шаг 3 (опционально): Настройте путь хранения ClickHouse в файловых системах только для чтения
Этот шаг нужен только в том случае, если вы планируете использовать функции query analytics (журналирование медленных запросов, анализ запросов). Если query analytics не используется, пропустите этот шаг — экземпляры MySQL-MGR будут работать нормально и без него.
Плагин query-analytics развертывает ClickHouse, используя PV с host directory. По умолчанию host path — /cpaas/ck. В MicroOS или других системах с корневой файловой системой только для чтения это приводит к тому, что pod'ы ClickHouse завершаются с ошибкой:
Вы должны настроить hostPath до установки query-analytics-operator. Объединение RdsInstaller → QueryAnalyticsInstaller выполняется только при первом создании CR QueryAnalyticsInstaller (qai). После установки operator'а CR qai уже существует, и последующие изменения в RdsInstaller не будут применены. Чтобы восстановить уже существующее развертывание, см. Исправление существующего развертывания.
Настройте hostPath перед установкой query-analytics-operator
-
Сначала установите rds-operator (если он еще не установлен). CR
RdsInstallerсоздается rds-operator во время его инициализации. -
Найдите ресурс
RdsInstaller: -
Отредактируйте
RdsInstaller, чтобы переопределить host path ClickHouse:Установите
spec.slowSQLCK.hostPathв путь с правом записи на узле:INFOНа MicroOS используйте путь внутри
/opt/(например,/opt/local-pv/ck). Каталог будет создан автоматически с типомDirectoryOrCreate. -
Теперь установите clickhouse-operator и query-analytics-operator. PV ClickHouse будет создан с использованием настроенного пути вместо значения
/cpaas/ckпо умолчанию.
Исправление существующего развертывания с неверным hostPath
Если query-analytics-operator уже установлен со значением пути по умолчанию, и pod'ы ClickHouse завершаются с ошибкой, одного изменения RdsInstaller.spec.slowSQLCK.hostPath недостаточно — объединение в QueryAnalyticsInstaller выполняется только при первом создании qai. Вам также нужно принудительно пересоздать qai (или отредактировать qai напрямую).
Вариант A — пересоздать qai, чтобы объединение выполнилось снова:
-
Обновите
RdsInstaller, как описано в процедуре перед установкой выше: -
Удалите установку ClickHouse и старый PV:
-
Удалите CR
QueryAnalyticsInstaller. query-analytics-operator создаст его заново, объединив обновленные настройкиRdsInstaller: -
Проверьте новый
hostPath:Оба значения должны показывать настроенный путь (например,
/opt/local-pv/ck).
Вариант B — отредактировать qai напрямую (быстрее, но RdsInstaller будет отличаться от qai до следующего пересоздания):
query-analytics-operator пересоздаст установку ClickHouse и PV, используя путь, заданный в qai.
Шаг 4: Создайте экземпляр MySQL-MGR
-
Создайте secret с паролем:
-
Создайте CR MySQL с локальным StorageClass:
INFO- Secret с паролем должен соответствовать соглашению об именовании
mgr-${instance_name}-password. Operator обнаруживает его автоматически по этому имени. - Укажите
storageClassName: mgr-local-pv(или имя вашего StorageClass) в разделеvolumeClaimTemplate. Это заменяет значениеsc-topolvmпо умолчанию. - Поле
versionобязательно. Используйте"8.0"для MySQL 8.0.
- Secret с паролем должен соответствовать соглашению об именовании
-
Следите за состоянием экземпляра:
Дождитесь, пока в поле
STATEпоявится значениеready. -
Проверьте привязку PVC и размещение pod'ов:
Убедитесь, что каждый PVC привязан к PV и что pod'ы распределены по разным узлам.
Устранение неполадок
PVC застряли в состоянии Pending
Симптом: PVC остаются в состоянии Pending, и pod'ы не планируются.
Причина: Нет доступных PV, соответствующих имени StorageClass или node affinity, либо PV находятся в состоянии Released.
Исправление:
Pod'ы MySQL застряли в CrashLoopBackOff
Симптом: Pod'ы MySQL завершаются с ошибкой Permission denied во время инициализации.
Причина: У каталогов PV нет прав на запись для пользователя MySQL без root-прав.
Исправление:
Pod'ы MySQL завершаются с ошибкой "data directory has files in it"
Симптом: mysqld --initialize завершается ошибкой, потому что каталог данных не пуст.
Причина: В каталоге PV остались старые данные от предыдущего развертывания.
Исправление:
PV застряли в состоянии Released
Симптом: PV имеют статус Released и не могут быть привязаны к новым PVC.
Причина: PV были созданы с persistentVolumeReclaimPolicy: Retain.
Исправление: Удалите PV в состоянии Released и создайте их заново с persistentVolumeReclaimPolicy: Delete:
Экземпляр застрял в состоянии ErrorReconcile
Симптом: У экземпляра MySQL отображается condition ErrorReconcile, а поле STATE имеет значение available вместо ready, хотя все pod'ы запущены.
Причина: В цикле reconcile operator возникла ошибка конфликта при обновлении статуса CR.
Исправление: Добавьте аннотацию к CR MySQL, чтобы запустить повторный reconcile:
Pod'ы ClickHouse завершаются с ошибкой "read-only file system"
Симптом: Pod'ы ClickHouse не запускаются с ошибкой mkdir /cpaas: read-only file system.
Причина: Путь ClickHouse по умолчанию в плагине query-analytics (/cpaas/ck) не существует в файловых системах только для чтения.
Исправление: Следуйте Шагу 3, чтобы задать в CR RdsInstaller значение spec.slowSQLCK.hostPath на путь с правом записи.