1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/oceanbase-ob-operator

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
arch-cn.md 11 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 15.03.2025 16:48 28a1dfa

Архитектурный дизайн

Об-оператор, как и другие операторы, предназначен для обеспечения бесшовной работы OceanBase в контейнерах на кластере Kubernetes.

На данном этапе об-оператор является версией в стадии развития, то есть это базовая структура с минимальным набором функций, которая будет постоянно дорабатываться и улучшаться.

Об-оператор уже поддерживает создание и удаление кластеров OceanBase, полный цикл управления жизненным циклом узлов и экспонирование через сервис для пользователя. В будущем планируется поддержка управления арендами, управления об-прокси, работы с несколькими кластерами Kubernetes и т.д.

В настоящее время поддерживается развертывание об-оператора с использованием YAML и Kustomize. Позднее будет поддерживаться развертывание с помощью Helm.

Основные концепции

01

OceanBase имеет высокую степень отказоустойчивости.

Кластер OceanBase состоит из нескольких зон и множества серверов OBServer. Уникальным идентификатором кластера OceanBase являются имя кластера и его идентификатор.

01

Один кластер OceanBase состоит из нескольких зон. Зона — это аббревиатура от доступной зоны (Availability Zone).Зона представляет собой логическую концепцию, обычно представляющую собой группу машин в одном помещении. Физически одна зона часто эквивалентна одному помещению, одному центру данных или одному IDC. Для обеспечения более высокого уровня безопасности данных и надежности услуг один кластер OceanBase обычно распределяется между тремя помещениями в одном городе, где три реплики одного и того же набора данных находятся в трёх разных зонах.OceanBase поддерживает распределение данных между различными регионами (region) и различные регионы обычно расположены на значительном расстоянии друг от друга, что позволяет удовлетворять требованиям региональной защиты от аварийных ситуаций. Один регион может содержать одну или несколько зон.

В случае с Kubernetes требуется помечать различные узлы метками для идентификации различных зон и регионов.

На текущем этапе об-оператор поддерживает многозонное развертывание, но пока не поддерживает многорегиональное развертывание.

Уровневая архитектура

01

Проект разделён на три части: контроллер StatefulApp, контроллер OBServer и оркестратор оператора.

Контроллер StatefulApp отвечает за обслуживание Pod, PVC и PV. Контроллер OBServer отвечает за обслуживание серверов OBServer. Оркестратор оператора отвечает за управление об-оператором между несколькими кластерами Kubernetes (этот модуль ещё не реализован).

Из-за того, что основная информация регистрации и адреса связи серверов OBServer представлены в виде IP-адресов, уровень ресурсов Kubernetes основан на простых Pod и использует специализированные CRD для создания пользовательских ресурсов.Контроллер StatefulApp является средством управления, аналогичным StatefulSet, но немного отличается от него:

  • StatefulApp поддерживает уникальный идентификатор для каждого Pod с механизмом "sticky" ID.
  • Каждый Pod имеет независимое хранилище, которое не делится между другими Pod.
  • StatefulApp позволяет конфигурировать Pod с различной конфигурацией.
  • Развертывание и обновление StatefulApp происходит последовательно, аналогично StatefulSet.
  • StatefulApp поддерживает выполнение операций над конкретными Pod.
  • StatefulApp не поддерживает коммуникацию через serviceName.01

Каждый Pod будет отображаться как один OBServer.

На данный момент в одном Pod содержится только один контейнер OBServer, но в будущем будут поддерживаться контейнеры логирования и мониторинга в виде Sidecar.

В контейнере OBServer находится легковесный агент, который взаимодействует с контроллером OBServer, выполняет операции эксплуатации и поддерживает процесс OBServer.

01

Оператор OB создает три типа CRD: OBCluster, OBRootService и OBServer. OBZone и OBRootService являются подресурсами OBCluster.

OBCluster: Описание кластера OceanBase, управление состоянием целиком, глобальный взгляд, без деталей. Пользователям требуется самостоятельно определять конфигурацию OBCluster.```yaml apiVersion: cloud.oceanbase.com/v1 kind: OBCluster metadata: namespace: oceanbase name: ob-test spec: version: 3.1.1-4 clusterID: 1 topology: - cluster: cn zone: - name: zone1 region: region1 nodeSelector: topology.kubernetes.io/zone: zone1 replicas: 1 - name: zone2 region: region1 nodeSelector: topology.kubernetes.io/zone: zone2 replicas: 1 - name: zone3 region: region1 nodeSelector: topology.kubernetes.io/zone: zone3 replicas: 1 resources: cpu: 2 memory: 10Gi storage: - name: data-file storageClassName: "local-path" size: 50Gi - name: data-log storageClassName: "local-path" size: 50Gi - name: log storageClassName: "local-path" size: 30Gi status: status: Ready topology: - cluster: cn clusterStatus: Ready lastTransitionTime: "2021-12-01T07:07:55Z" zone: - name: zone1 region: region1 zoneStatus: Ready expectedReplicas: 1 availableReplicas: 1 - name: zone2 region: region1 zoneStatus: Ready expectedReplicas: 1 availableReplicas: 1 - name: zone3 region: region1 zoneStatus: Ready expectedReplicas: 1 availableReplicas: 1


Зона представляет собой состояние сервера OB в контексте зоны. Пользователи могут использовать OBZone для просмотра состояния сервера OB в кластере OceanBase. Создание зон пользователями не требуется; оператор ob-operator автоматически поддерживает и регулярно обновляет эту информацию.```yaml
apiVersion: cloud.oceanbase.com/v1
kind: OBZone
metadata:
  namespace: oceanbase
  name: obzone-ob-test
  labels:
    app: ob-test
spec:
  topology:
  - cluster: cn
    zone:
    - name: zone1
      nodeSelector:
        topology.kubernetes.io/zone: zone1
      region: region1
      replicas: 1
    - name: zone2
      nodeSelector:
        topology.kubernetes.io/zone: zone2
      region: region1
      replicas: 1
    - name: zone3
      nodeSelector:
        topology.kubernetes.io/zone: zone3
      region: region1
      replicas: 1
status:
  topology:
  - cluster: cn
    zone:
    - name: zone1
      nodes:
      - serverIP: 10.10.10.1
        status: active
    - name: zone2
      nodes:
      - serverIP: 10.10.10.2
        status: active
    - name: zone3
      nodes:
      - serverIP: 10.10.10.3
        status: active

Классификатор распределения RootService на уровне кластера и состояние каждого отдельного RootService. Пользователи могут использовать RootService для просмотра состояния RootService в кластере OceanBase. Создание RootService пользователями не требуется; ob-operator автоматически поддерживает и регулярно обновляет эту информацию.

apiVersion: cloud.oceanbase.com/v1
kind: RootService
metadata:
  namespace: oceanbase
  name: rs-ob-test
  labels:
    app: ob-test
spec:
  topology:
  - cluster: cn
    zone:
    - name: zone1
      nodeSelector:
        topology.kubernetes.io/zone: zone1
      region: region1
      replicas: 1
    - name: zone2
      nodeSelector:
        topology.kubernetes.io/zone: zone2
      region: region1
      replicas: 1
    - name: zone3
      nodeSelector:
        topology.kubernetes.io/zone: zone3
      region: region1
      replicas: 1
status:
  topology:
  - cluster: cn
    zone:
    - name: zone1
      role: 1
      serverIP: 10.10.10.1
      status: active
    - name: zone2
      role: 2
      serverIP: 10.10.10.2
      status: active
    - name: zone3
      role: 2
      serverIP: 10.10.10.3
      status: active

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/oceanbase-ob-operator.git
git@api.gitlife.ru:oschina-mirror/oceanbase-ob-operator.git
oschina-mirror
oceanbase-ob-operator
oceanbase-ob-operator
master