第 2 章 RHOSO MariaDB Galera 集群
Red Hat OpenStack Services on OpenShift (RHOSO)部署以下两个 MariaDB Galera 集群:
-
OpenStack,用于托管所有 RHOSO 服务的数据库的集群。 -
openstack-cell1集群托管特定于cell1的 Compute 服务(nova)的数据库。
Galera 自定义资源(CR)配置两个集群。您可以为所需的 Galera CR 监控 Galera pod 的启动。
您可以使用 oc get galera 命令检索有关这些 Galera CR 的更多信息,如下例所示:
$ oc get galera
NAME READY MESSAGE
openstack True Setup complete
openstack-cell1 True Setup complete
Message 和 Ready 列显示 Galera CR 的启动状态和服务可用性,由 Name 列指定。当 Ready 条件为 True 时,pod 会启动并准备好接受流量。
Galera 服务 Operator mariadb-operator 执行以下 Galera 集群操作:
- 创建托管 mysqld 服务器的 pod。
-
运行引导 Galera 集群的逻辑。例如,
mariadb-operator使用 Galera 数据库的最新副本启动集群。 - 监控正在运行的 Galera pod。
- 当 Pod 无法进行健康检查时,重启 pod。
mariadb-operator 创建名为 openstack 的 OpenShift 服务对象,它提供 OpenStack 服务用于访问数据库的 IP 地址。您可以使用以下命令来显示此 IP 地址:
$ oc get service -l mariadb/name=openstack
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
openstack ClusterIP 10.217.5.210 <none> 3306/TCP 7h
mariadb-operator 还为 Galera pod 创建一个无头 DNS 服务,名为 openstack-galera,它仅用于内部 Galera 集群通信。OpenStack pod 无法访问此服务。
RHOSO 根据其就绪度健康检查将 Galera pod 标记为 available。当 Galera 集群由 mariadb-operator 启动时,第一个可用的 Galera pod 会接收所有传入的数据库流量。另一个可用的 Galera pod 处于热待机状态。
当活跃的 pod 从 Galera 集群断开连接时,出于某种原因(如 pod 停止或 pod 重启)发生故障转移。目前,热待机中的第一个可用 Galera pod 变为活跃 pod,openstack 服务会相应地更新。
您可以使用以下命令对 Galera 服务进行故障排除:
当您分析 openstack 服务时,IP 字段指定分配给该服务的 IP 地址,Endpoints 字段指定当前接收所有流量的 Galera pod 的 IP 地址。
$ oc describe service openstack
Name: openstack
Namespace: openstack
Labels: app=mariadb cr=mariadb-openstack mariadb/name=openstack mariadb/namespace=openstack mariadb/uid=796b4c64-fb39-4144-817f-34d2b309eb30 owner=mariadb-operator
Annotations: <none>
Selector: app=galera,cr=galera-openstack,statefulset.kubernetes.io/pod-name=openstack-galera-2
Type: ClusterIP
IP Family Policy: SingleStack
IP Families: IPv4
IP: 172.30.133.220
IPs: 172.30.133.220
Port: database 3306/TCP
TargetPort: 3306/TCP
Endpoints: 192.168.56.28:3306
Session Affinity: None
Events: <none>
当您分析无头 openstack-galera 服务时,未指定 IP 字段,但 Endpoints 字段指定所有 Galera pod 的 IP 地址,通常为 3。
$ oc describe service openstack-galera
Name: openstack-galera
Namespace: openstack
Labels: <none>
Annotations: <none>
Selector: app=galera,cr=galera-openstack
Type: ClusterIP
IP Family Policy: SingleStack
IP Families: IPv4
IP: None
IPs: None
Port: mysql 3306/TCP
TargetPort: 3306/TCP
Endpoints: 192.168.48.52:3306,192.168.52.43:3306,192.168.56.23:3306
Session Affinity: None
Events: <none>
2.1. 监控 Galera 启动 复制链接链接已复制到粘贴板!
您可以使用以下命令监控所需 Galera 自定义资源(CR)的 Galera pod 的启动 :$ oc describe galera <cr>
其中:
<cr>-
指定所需的 Galera CR,默认为
openstack或openstack-cell1。
分析 Galera CR 时:
-
Status报告 Galera 集群的启动状态。 -
Conditions报告 Galera pod 需要启动的先决条件的状态。
只有所有其他条件都为 True 时,Ready 条件才为 true。
Status:
Conditions:
Last Transition Time: 2024-04-22T07:32:06Z
Message: Setup complete
Reason: Ready
Status: True
Type: Ready
Last Transition Time: 2024-04-22T07:31:49Z
Message: Deployment completed
Reason: Ready
Status: True
Type: DeploymentReady
Last Transition Time: 2024-04-22T07:31:11Z
Message: Exposing service completed
Reason: Ready
Status: True
Type: ExposeServiceReady
Last Transition Time: 2024-04-22T07:31:11Z
Message: Input data complete
Reason: Ready
Status: True
Type: InputReady
Last Transition Time: 2024-04-22T07:31:11Z
Message: RoleBinding created
Reason: Ready
Status: True
Type: RoleBindingReady
Last Transition Time: 2024-04-22T07:31:11Z
Message: Role created
Reason: Ready
Status: True
Type: RoleReady
Last Transition Time: 2024-04-22T07:31:11Z
Message: ServiceAccount created
Reason: Ready
Status: True
Type: ServiceAccountReady
Last Transition Time: 2024-04-22T07:31:11Z
Message: Service config create completed
Reason: Ready
Status: True
Type: ServiceConfigReady
Last Transition Time: 2024-04-22T07:31:11Z
Message: Input data complete
Reason: Ready
Status: True
Type: TLSInputReady
当 Galera 服务 Operator mariadb-operator 引导 Galera 集群时,它会从每个数据库副本收集信息,然后将其存储在临时属性中。当 Galera 集群停止并重启时,这些临时 属性 会出现在 Galera CR 的 Status 中:
Status:
Attributes:
openstack-galera-0:
Seqno: 1232
openstack-galera-1:
Container ID: cri-o://f56ec2389e878b462a54f5255dad83db29daf4d8e8cda338904bfd353b370165
Gcomm: gcomm://
Seqno: 1232
openstack-galera-2:
Seqno: 1231
Bootstrapped: false
在启动 Galera 集群之前,mariadb-operator 将以等待状态启动所有 Galera pod 副本。即使您可以使用 oc get pods 命令查看 pod,它们还没有启动 mysqld 服务器。mariadb-operator 内省各个容器集的数据库副本的内容,以提取 Seqno (数据库序列号)。
在 mariadb-operator 从所有 pod 中提取 Seqno 后,它会决定哪个 pod 包含最新版本的数据库,并从此 pod 引导一个新的 Galera 集群。此 pod 启动 mysqld 服务器,并在 Galera CR 的状态中显示临时属性 gcomm://。当第一个 mysqld 服务器准备好提供流量时,Boot ped 属性变为 true,并且此 pod 的临时 属性 会从 Galera CR 的状态中删除。