本節說明您想要用於群組複製的 MySQL 伺服器執行個體所需的配置設定。如需背景資訊,請參閱 第 20.3 節,「需求和限制」。
對於群組複製,資料必須儲存在 InnoDB 交易式儲存引擎中 (如需原因的詳細資訊,請參閱第 20.3.1 節,「群組複製需求」)。使用其他儲存引擎 (包括暫時的 MEMORY
儲存引擎) 可能會在群組複製中造成錯誤。設定 disabled_storage_engines
系統變數如下,以防止使用它們
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
下列設定會根據 MySQL 群組複製需求來配置複製。
server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
這些設定會將伺服器配置為使用唯一識別碼 1,以啟用 第 19.1.3 節,「使用全域交易識別碼進行複製」,並且只允許執行可以使用 GTID 安全記錄的陳述式。
此設定會停用寫入二進位記錄之事件的總和檢查碼,預設為啟用。MySQL 8.4 中的群組複製支援二進位記錄中存在總和檢查碼,而且可以使用它們來驗證某些通道上事件的完整性,因此您可以使用預設設定。如需更多詳細資訊,請參閱 第 20.3.2 節,「群組複製限制」。
另請參閱第 20.3.1 節,「群組複製需求」。
此時,選項檔案會確保已配置伺服器,並指示伺服器在給定的配置下具現化複製基礎結構。下列章節會為伺服器配置群組複製設定。
plugin_load_add='group_replication.so'
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address= "s1:33061"
group_replication_group_seeds= "s1:33061,s2:33061,s3:33061"
group_replication_bootstrap_group=off
plugin-load-add
會將群組複製外掛程式新增至伺服器在啟動時載入的外掛程式清單。在生產部署中,這比手動安裝外掛程式更佳。配置
group_replication_group_name
會告知外掛程式,它正在加入或建立的群組名為「aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa」。group_replication_group_name
的值必須是有效的 UUID。您可以使用SELECT UUID()
來產生一個。此 UUID 會構成 GTID 的一部分,當群組成員從用戶端接收的交易,以及群組成員在內部產生的檢視變更事件寫入二進位記錄時使用。將
group_replication_start_on_boot
變數設定為off
,會指示外掛程式在伺服器啟動時不要自動開始運作。這在設定群組複寫時非常重要,因為它可以確保您在手動啟動外掛程式之前可以先設定伺服器。一旦成員設定完成,您可以將group_replication_start_on_boot
設定為on
,以便群組複寫在伺服器啟動時自動啟動。設定
group_replication_local_address
會設定成員用於與群組中其他成員進行內部通訊的網路位址和連接埠。群組複寫使用此位址進行內部成員之間的連線,這些連線涉及群組通訊引擎 (XCom,一種 Paxos 變體) 的遠端執行個體。重要群組複寫的本機位址必須與用於 SQL 用戶端連線的主機名稱和連接埠不同,這些是由 MySQL 伺服器的
hostname
和port
系統變數定義。它不得用於用戶端應用程式。它必須僅用於執行群組複寫時群組成員之間的內部通訊。所有群組成員必須能夠解析由
group_replication_local_address
設定的網路位址。例如,如果每個伺服器執行個體都位於具有固定網路位址的不同機器上,您可以使用機器的 IP 位址,例如 10.0.0.1。如果您使用主機名稱,則必須使用完整名稱,並確保它可以透過 DNS、正確設定的/etc/hosts
檔案或其他名稱解析程序來解析。IPv6 位址 (或解析為這些位址的主機名稱) 以及 IPv4 位址都可以使用;一個群組可以包含使用 IPv6 的成員和使用 IPv4 的成員的混合。有關群組複寫對 IPv6 網路以及混合 IPv4 和 IPv6 群組的支援的詳細資訊,請參閱 第 20.5.5 節,「支援 IPv6 及混合 IPv6 和 IPv4 群組」。建議用於
group_replication_local_address
的連接埠為 33061。群組複寫將其用作複寫群組中群組成員的唯一識別碼。只要主機名稱或 IP 位址都不同,您就可以在複寫群組的所有成員中使用相同的連接埠,如本教學課程所示。或者,您可以使用相同的主機名稱或 IP 位址用於所有成員,只要連接埠都不同即可,例如在 第 20.2.2 節,「在本機部署群組複寫」 中所示。現有成員為加入成員提供的群組複寫分散式復原程序連線,並非由
group_replication_local_address
設定的網路位址。群組成員將其標準 SQL 用戶端連線提供給加入成員以進行分散式復原,如 MySQL 伺服器的hostname
和port
所指定;它們可以 (也) 公告分散式復原端點的替代清單,作為加入成員的專用用戶端連線。有關更多詳細資訊,請參閱 第 20.5.4.1 節,「分散式復原的連線」。重要如果加入成員無法使用 MySQL 伺服器的
hostname
系統變數定義的主機名稱正確識別其他成員,則分散式復原可能會失敗。建議執行 MySQL 的作業系統具有正確設定的唯一主機名稱,無論是使用 DNS 還是本機設定。伺服器用於 SQL 用戶端連線的主機名稱可以在效能結構描述表格replication_group_members
的Member_host
欄中驗證。如果多個群組成員外部化作業系統設定的預設主機名稱,則加入成員可能無法將其解析為正確的成員位址,並且無法連線進行分散式復原。在這種情況下,您可以使用 MySQL 伺服器的report_host
系統變數來設定每個伺服器要外部化的唯一主機名稱。設定
group_replication_group_seeds
會設定群組成員的主機名稱和連接埠,新成員會使用這些成員來建立與群組的連線。這些成員稱為種子成員。建立連線後,群組成員資格資訊會列在效能結構描述表格replication_group_members
中。通常,group_replication_group_seeds
清單包含每個群組成員的group_replication_local_address
的hostname:port
,但這並非強制性的,並且可以選擇群組成員的子集作為種子。重要group_replication_group_seeds
中列出的hostname:port
是種子成員的內部網路位址,由group_replication_local_address
設定,而不是用於 SQL 用戶端連線的hostname:port
,例如在效能結構描述表格replication_group_members
中所示。啟動群組的伺服器不會使用此選項,因為它是初始伺服器,因此負責引導群組。換句話說,引導群組的伺服器上的任何現有資料都將用作下一個加入成員的資料。第二個加入的伺服器會要求群組中唯一的一個成員加入,第二個伺服器上任何遺失的資料都會從引導成員的捐贈資料中複製,然後群組會擴展。第三個加入的伺服器可以要求這兩個成員中的任何一個加入,資料會同步到新成員,然後群組再次擴展。後續伺服器在加入時會重複此程序。
警告同時加入多個伺服器時,請確保它們指向已在群組中的種子成員。不要使用也正在加入群組的成員作為種子,因為它們在被聯絡時可能尚未在群組中。
最佳做法是先啟動引導成員,並讓它建立群組。然後使其成為其餘正在加入的成員的種子成員。這可確保在加入其餘成員時形成一個群組。
不支援同時建立群組和加入多個成員。它可能會運作,但很有可能這些操作會競爭,然後加入群組的動作最終會導致錯誤或逾時。
加入成員必須使用種子成員在
group_replication_group_seeds
選項中公告的相同協定 (IPv4 或 IPv6) 與種子成員通訊。為了群組複寫的 IP 位址權限,種子成員的允許清單必須包含加入成員的 IP 位址 (適用於種子成員提供的協定) 或解析為該協定位址的主機名稱。如果該位址的協定與種子成員公告的協定不符,則除了加入成員的group_replication_local_address
之外,還必須設定並允許此位址或主機名稱。如果加入成員沒有適用協定的允許位址,則其連線嘗試將被拒絕。有關更多詳細資訊,請參閱 第 20.6.4 節,「群組複寫 IP 位址權限」。設定
group_replication_bootstrap_group
會指示外掛程式是否要引導群組。在這種情況下,即使 s1 是群組的第一個成員,我們仍會在選項檔案中將此變數設定為 off。相反地,我們會在執行個體正在執行時設定group_replication_bootstrap_group
,以確保只有一個成員實際引導群組。重要group_replication_bootstrap_group
變數在任何時候都只能在屬於群組的一個伺服器執行個體上啟用,通常是您第一次引導群組時 (或者在整個群組關閉並再次啟動的情況下)。如果您多次引導群組,例如當多個伺服器執行個體都設定了此選項時,那麼它們可能會建立一個人工的腦裂情況,其中存在兩個具有相同名稱的不同群組。在第一個伺服器執行個體上線後,請務必將group_replication_bootstrap_group=off
設為關閉。
本教學課程中描述的系統變數是啟動新成員所需的設定,但還有其他系統變數可用於設定群組成員。這些列在 第 20.9 節,「群組複寫變數」中。
一些系統變數(其中一些是群組複製專用,另一些則不是)是群組範圍的組態設定,必須在所有群組成員上具有相同的值。如果群組成員為其中一個系統變數設定了值,而加入的成員為其設定了不同的值,則加入的成員無法加入群組,並且會傳回錯誤訊息。如果群組成員為此系統變數設定了值,而加入的成員不支援該系統變數,則它也無法加入群組。這些系統變數都在第 20.9 節「群組複製變數」中說明。