Kubernetes 的 MySQL 运算符 / 第 3 章 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}'