Архитектура
Percona XtraDB Cluster интегрирует Percona Server for MySQL, работающий с движком хранения XtraDB, и Percona XtraBackup с библиотекой Galera для обеспечения синхронной мульти-мастер репликации.
Дизайн оператора тесно связан с реализацией высокой доступности Percona XtraDB Cluster, которая, в свою очередь, может быть кратко описана следующей схемой.
Каждый узел, являясь обычным экземпляром MySQL Server, содержит одинаковый набор данных, синхронизированных между узлами. Рекомендуемая конфигурация — минимум 3 узла. В базовой настройке с таким количеством узлов Percona XtraDB Cluster обеспечивает высокую доступность, продолжая работу при отключении любого из узлов. Дополнительно балансировка нагрузки может быть достигнута с помощью маршрутизатора HAProxy, который принимает входящий трафик от MySQL клиентов и перенаправляет его на backend MySQL серверы.
Для обеспечения высокой доступности оператор использует node affinity, чтобы запускать экземпляры Percona XtraDB Cluster на отдельных рабочих узлах, если это возможно. В случае сбоя какого-либо узла, pod с ним автоматически пересоздаётся на другом узле.
Для обеспечения хранения данных для stateful приложений Kubernetes использует Persistent Volumes. PersistentVolumeClaim (PVC) применяется для автоматического выделения хранилища под pods. В случае сбоя интерфейс Container Storage Interface (CSI) должен иметь возможность повторно примонтировать хранилище на другом узле. StorageClass PVC должен поддерживать эту функцию.
Функциональность оператора расширяет Kubernetes API объектом PerconaXtraDBCluster и реализована как приложение на golang. Каждый объект PerconaXtraDBCluster соответствует одной отдельной установке Percona XtraDB Cluster. Оператор отслеживает все события, связанные с созданными объектами. При создании нового объекта PerconaXtraDBCluster, изменении или удалении существующего, оператор автоматически создаёт/изменяет/удаляет все необходимые объекты Kubernetes с соответствующими настройками для обеспечения корректной работы Percona XtraDB Cluster.