在分布式系統(tǒng)中,高可用性是非常重要的因素之一。MySQL8作為一個數(shù)據(jù)庫系統(tǒng),也需要高可用性來保證數(shù)據(jù)的持久性和一致性。MySQL8支持使用MGR(MySQL Group Replication)來進(jìn)行高可用配置。通過將數(shù)據(jù)庫數(shù)據(jù)分布到多個節(jié)點(diǎn),當(dāng)其中一個節(jié)點(diǎn)出現(xiàn)故障時(shí),其他節(jié)點(diǎn)可以繼續(xù)提供服務(wù),從而保證整個系統(tǒng)的高可用性。
在MGR中,需要配置至少3個節(jié)點(diǎn)來保障可用性,其中一個節(jié)點(diǎn)為Primary節(jié)點(diǎn),其他為Secondary節(jié)點(diǎn)。Primary節(jié)點(diǎn)是用來接收寫入操作的,而Secondary節(jié)點(diǎn)則復(fù)制Primary節(jié)點(diǎn)的數(shù)據(jù)。當(dāng)Primary節(jié)點(diǎn)出現(xiàn)故障或者不可用時(shí),系統(tǒng)會自動將Secondary節(jié)點(diǎn)中的一個節(jié)點(diǎn)晉升為新的Primary節(jié)點(diǎn)。
下面我們來看一下如何配置MySQL8的MGR。假設(shè)我們有3個節(jié)點(diǎn),它們的IP地址分別為192.168.0.1、192.168.0.2和192.168.0.3。
# 在每個節(jié)點(diǎn)上安裝MySQL8 $ sudo apt-get update $ sudo apt-get install mysql-server # 在Primary節(jié)點(diǎn)上創(chuàng)建MGR的管理員賬號 $ mysql -u root -p mysql>CREATE USER 'mgr_user'@'%' IDENTIFIED BY 'mgr_password'; mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'mgr_user'@'%'; mysql>FLUSH PRIVILEGES; # 在Primary節(jié)點(diǎn)上啟動MGR mysql>SET GLOBAL group_replication_bootstrap_group=ON; mysql>START GROUP_REPLICATION; mysql>SET GLOBAL group_replication_bootstrap_group=OFF; # 在Secondary節(jié)點(diǎn)上加入MGR mysql>SET GLOBAL group_replication_allow_local_disjoint_gtids_join=ON; mysql>CHANGE MASTER TO MASTER_USER='mgr_user', MASTER_PASSWORD='mgr_password' FOR CHANNEL 'group_replication_recovery'; mysql>START GROUP_REPLICATION;
這樣,以上三個節(jié)點(diǎn)就已經(jīng)配置了MGR。如果Primary節(jié)點(diǎn)出現(xiàn)故障,MGR就會自動將某個Secondary節(jié)點(diǎn)晉升為新的Primary節(jié)點(diǎn),從而保證整個系統(tǒng)的高可用性。