Kubernetes 的 MySQL 运算符  / 第 3 章 MySQL InnoDB 集群  /  3.4 MySQL InnoDB集群服务说明

3.4 MySQL InnoDB集群服务说明

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

$> kubectl describe service mycluster

输出看起来类似于:

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
Session Affinity:  None
Events:            <none>

mycluster显示名为和 服务的替代视图 mycluster-instances

$> kubectl get service

输出看起来类似于:

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 集群的长主机名是 {innodbclustername}.{namespace}.svc.cluster.local,它使用 MySQL Router 路由到当前的主/副本,具体取决于端口。可接受的主机名形式:

{innodbclustername}.{namespace}.svc.cluster.local
{innodbclustername}.{namespace}.svc
{innodbclustername}.{namespace}
{innodbclustername}

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

例如,假设 'mycluster' 作为 'default' 命名空间中的 InnoDB 集群名称:

mycluster.default.svc.cluster.local

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

$> kubectl get service/mycluster -o jsonpath='{.spec.clusterIP}'

另见第 4 章,连接到 MySQL InnoDB 集群