部署群組複製最常見的方式是使用多個伺服器執行個體,以提供高可用性。也可以在本機部署群組複製,例如用於測試目的。本節說明如何在本地部署群組複製。
群組複製通常部署在多個主機上,因為這樣可確保提供高可用性。本節中的指示不適合用於生產環境部署,因為所有 MySQL 伺服器執行個體都在同一個主機上執行。如果此主機發生故障,整個群組都會失敗。因此,此資訊應僅用於測試目的,不應在生產環境中使用。
本節說明如何在一部實體機器上建立具有三個 MySQL 伺服器執行個體的複製群組。這表示需要三個資料目錄,每個伺服器執行個體一個,而且您需要獨立設定每個執行個體。此程序假設 MySQL 伺服器已下載並解壓縮到名為 mysql-9.0
的目錄中。每個 MySQL 伺服器執行個體都需要一個特定的資料目錄。建立名為 data
的目錄,然後在該目錄中建立每個伺服器執行個體的子目錄,例如 s1、s2 和 s3,並初始化每個子目錄。
mysql-9.0/bin/mysqld --initialize-insecure --basedir=$PWD/mysql-9.0 --datadir=$PWD/data/s1
mysql-9.0/bin/mysqld --initialize-insecure --basedir=$PWD/mysql-9.0 --datadir=$PWD/data/s2
mysql-9.0/bin/mysqld --initialize-insecure --basedir=$PWD/mysql-9.0 --datadir=$PWD/data/s3
在 data/s1
、data/s2
、data/s3
內部是一個初始化的資料目錄,其中包含 mysql 系統資料庫和相關表格等等。若要深入了解初始化程序,請參閱 第 2.9.1 節,「初始化資料目錄」。
請勿在生產環境中使用 -initialize-insecure
,這裡只為了簡化教學而使用。如需安全性設定的詳細資訊,請參閱 第 20.6 節,「群組複製安全性」。
當您遵循 第 20.2.1.2 節,「設定群組複製的執行個體」時,您需要為上一節中新增的資料目錄新增設定。例如
[mysqld]
# server configuration
datadir=<full_path_to_data>/data/s1
basedir=<full_path_to_bin>/mysql-9.0/
port=24801
socket=<full_path_to_sock_dir>/s1.sock
這些設定會將 MySQL 伺服器設定為使用先前建立的資料目錄,以及伺服器應該開啟並開始接聽連入連線的連接埠。
使用非預設的連接埠 24801 是因為在本教學中,三個伺服器執行個體使用相同的主機名稱。在具有三部不同機器的設定中,這不是必要的。
群組複製需要在成員之間建立網路連線,這表示每個成員都必須能夠解析所有其他成員的網路位址。例如,在本教學中,所有三個執行個體都在一部機器上執行,因此為了確保成員可以互相連線,您可以將一行新增至選項檔案,例如 report_host=127.0.0.1
。
然後,每個成員都必須能夠透過其 group_replication_local_address
連線到其他成員。例如,在成員 s1 的選項檔案中新增
group_replication_local_address= "127.0.0.1:24901"
group_replication_group_seeds= "127.0.0.1:24901,127.0.0.1:24902,127.0.0.1:24903"
這會將 s1 設定為使用連接埠 24901 與種子成員進行內部群組通訊。對於您要新增至群組的每個伺服器執行個體,請在成員的選項檔案中進行這些變更。對於每個成員,您必須確保指定唯一的位址,因此每個執行個體針對 group_replication_local_address
使用唯一的連接埠。通常,您希望所有成員都可以作為加入群組且尚未取得群組處理之交易的成員的種子。在這種情況下,請將所有連接埠新增至 group_replication_group_seeds
,如上所示。
第 20.2.1 節,「以單主模式部署群組複製」的剩餘步驟同樣適用於您以這種方式在本機部署的群組。