第 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 的状态中删除。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部