[英]MySQL InnoDB Cluster config - configure node address
我正在使用mysqlsh
設置 InnoDB 集群。 這是在 Kubernetes 中,但我認為這個問題更普遍。
當我使用cluster.configureInstance()
時,我看到的消息包括:
此實例將自己的地址報告為 node-2:3306
但是,節點只能通過 DNS 在類似node-2.cluster:3306
的地址找到彼此。 向集群添加實例時會出現問題; 他們試圖找到沒有限定名稱的其他節點。 錯誤的形式為:
[GCS] Error on opening a connection to peer node node-0:33061 when joining a group. My local port is: 33061.
它使用的是node-n:33061
而不是node-n.cluster:33061
。
如果重要的話,“DNS”會在 Kubernetes 中設置為無頭服務,在 pod 來來去去時提供一致的地址。 這很簡單,我將其命名為“cluster”以創建node-n.cluster
形式的地址。 我不想詳細說明這個問題,但我認為這並不重要,因為其他配置肯定需要集群中的實例也使用 DNS。
我認為在創建集群和添加節點時設置localAddress
可以解決問題。 事實上,在我將它添加到createCluster
選項之后,我可以查看數據庫並查看
| group_replication_local_address | node-0.cluster:33061 |
在我創建集群並查看拓撲后,本地地址設置似乎沒有任何效果:
{
"clusterName": "mycluster",
"defaultReplicaSet": {
"name": "default",
"primary": "node-0:3306",
"ssl": "REQUIRED",
"status": "OK_NO_TOLERANCE",
"statusText": "Cluster is NOT tolerant to any failures.",
"topology": {
"node-0:3306": {
"address": "node-0:3306",
"memberRole": "PRIMARY",
"mode": "R/W",
"readReplicas": {},
"replicationLag": null,
"role": "HA",
"status": "ONLINE",
"version": "8.0.29"
}
},
"topologyMode": "Single-Primary"
},
"groupInformationSourceMember": "node-0:3306"
}
添加更多實例繼續失敗,並出現相同的通信錯誤。
如何讓每個實例相信它需要宣傳的地址不同? 我將嘗試localAddress
設置的其他排列,但它看起來不像是為了解決我遇到的問題。 如何將實例為自己報告的地址與對其他實例實際有用的地址進行協調?
編輯添加:也許它是 Kubernetes 的東西? 或者無論如何都是 Docker 的東西。 容器中設置了一個環境變量:
HOSTNAME=node-0
容器化的 MySQL 是否使用它? 如果是這樣,我該如何覆蓋它?
顯然這個值必須在啟動時設置。 我的設置選項是
--report-host=${HOSTNAME}.cluster
啟動 MySQL 實例時解決了該問題。
專門針對 Kubernetes,示例位於https://github.com/adamelliotfields/kubernetes/blob/master/mysql/mysql.yaml
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.