Kubernetes 版 MySQL Operator 手册  /  MySQL InnoDB Cluster  /  MySQL InnoDB Cluster 服务说明

3.4 MySQL InnoDB Cluster 服务说明

为了连接到 InnoDB Cluster,会在 Kubernetes 集群内创建一个 服务。 导出的端口表示 MySQL 协议和 X 协议的读写端口和只读端口。

Press CTRL+C to copy
$> kubectl describe service mycluster

输出结果类似于:

Press CTRL+C to copy
Name: mycluster Namespace: default Labels: mysql.oracle.com/cluster=mycluster tier=mysql Annotations: <none> Selector: component=mysqlrouter,mysql.oracle.com/cluster=mycluster,tier=mysql Type: ClusterIP IP Family Policy: SingleStack IP Families: IPv4 IP: 10.106.33.215 IPs: 10.106.33.215 Port: mysql 3306/TCP TargetPort: 6446/TCP Endpoints: 172.17.0.12:6446 Port: mysqlx 33060/TCP TargetPort: 6448/TCP Endpoints: 172.17.0.12:6448 Port: mysql-alternate 6446/TCP TargetPort: 6446/TCP Endpoints: 172.17.0.12:6446 Port: mysqlx-alternate 6448/TCP TargetPort: 6448/TCP Endpoints: 172.17.0.12:6448 Port: mysql-ro 6447/TCP TargetPort: 6447/TCP Endpoints: 172.17.0.12:6447 Port: mysqlx-ro 6449/TCP TargetPort: 6449/TCP Endpoints: 172.17.0.12:6449 Port: router-rest 8443/TCP TargetPort: 8443/TCP Endpoints: 172.17.0.12:8443 Session Affinity: None Events: <none>

另一个视图显示了名为 myclustermycluster-instances 的服务

Press CTRL+C to copy
$> kubectl get service

输出结果类似于:

Press CTRL+C to copy
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d1h default mycluster ClusterIP 10.102.198.226 <none> 3306/TCP,33060/TCP,6446/TCP,6448/TCP,6447/TCP,6449/TCP 2d default mycluster-instances ClusterIP None <none> 3306/TCP,33060/TCP,33061/TCP 2d

用于从 Kubernetes 集群内部连接到 InnoDB Cluster 的长主机名为 {innodbclustername}.{namespace}.svc.cluster.local,它根据端口使用 MySQL Router 路由到当前的主/副本。可接受的主机名格式

Press CTRL+C to copy
{innodbclustername}.{namespace}.svc.cluster.local {innodbclustername}.{namespace}.svc {innodbclustername}.{namespace} {innodbclustername}

使用这些名称将转到 Kubernetes LoadBalancer(Kubernetes 服务的一部分),它会重定向到 MySQL Router。然后,MySQL Router 会根据角色(例如 PRIMARY 或 SECONDARY)与各个服务器通信。

例如,假设 'mycluster' 是“默认”命名空间中的 InnoDB Cluster 名称

Press CTRL+C to copy
mycluster.default.svc.cluster.local

仅使用 {innodbclustername} 作为主机名假定会话的上下文是默认命名空间或相应设置。或者,您可以使用 clusterIP 而不是主机名;以下是一个检索它的示例

Press CTRL+C to copy
$> kubectl get service/mycluster -o jsonpath='{.spec.clusterIP}'

另请参阅 第 5 章,连接到 MySQL InnoDB Cluster