MySQL Router 的運作方式是在應用程式和 MySQL 伺服器之間充當橋樑。應用程式連接到 Router 時,會像連接到一般的 MySQL 伺服器一樣。每當應用程式連接到 Router 時,Router 會從它知道的候選伺服器池中選擇合適的 MySQL 伺服器,然後連接到該伺服器。從那時起,Router 會轉發應用程式和 MySQL 之間的所有網路流量,包括從 MySQL 返回的回應。
MySQL Router 會保存線上 MySQL 伺服器的快取清單,或已設定的 InnoDB 叢集的拓撲和狀態。最初,此清單會在 Router 啟動時從 Router 的組態檔載入。當使用 --bootstrap
選項啟動 Router 時,會使用 InnoDB 叢集伺服器產生此清單。
為了保持快取更新,元數據快取元件會保持與其中一個包含元數據的 InnoDB 叢集伺服器的開啟連線。它會透過查詢元數據資料庫以及來自 MySQL 效能綱要的即時狀態資訊來完成此操作。每當修改 InnoDB 叢集時,例如使用 MySQL Shell 新增或移除 MySQL 伺服器時,就會變更叢集元數據,而每當偵測到叢集狀態變更時,MySQL 伺服器的群組複寫外掛程式就會即時更新 performance_schema 表格。
當 Router 偵測到連線的 MySQL 伺服器關閉時(例如,因為元數據快取遺失了連線且無法再次連線),它會嘗試連線到不同的 MySQL 伺服器,以從新的 MySQL 伺服器擷取元數據和 InnoDB 叢集狀態。
使用 MySQL Shell 捨棄叢集元數據(例如 dba.dropMetadataSchema()
)會導致 Router 捨棄所有目前的連線並禁止建立新的連線。這會導致全面中斷。
應用程式與關閉的 MySQL 伺服器的連線會自動關閉。它們必須重新連線到 Router,而 Router 會將它們重新導向到一個線上 MySQL 伺服器。