在企業(yè)級應(yīng)用中,MySQL數(shù)據(jù)庫的高可用性至關(guān)重要。Debian作為一種穩(wěn)定且廣泛使用的Linux發(fā)行版,為搭建MySQL高可用集群提供了良好的基礎(chǔ)。本文將詳細介紹在Debian系統(tǒng)上搭建MySQL高可用集群的步驟,幫助你確保數(shù)據(jù)庫服務(wù)的持續(xù)穩(wěn)定運行。
環(huán)境準備
在開始搭建MySQL高可用集群之前,需要做好環(huán)境準備工作。首先,準備至少三臺安裝了Debian系統(tǒng)的服務(wù)器,這里以Debian 11為例。確保這些服務(wù)器之間網(wǎng)絡(luò)互通,并且可以通過SSH進行遠程管理。
接下來,更新系統(tǒng)軟件包到最新版本,以確保系統(tǒng)的安全性和穩(wěn)定性。在每臺服務(wù)器上執(zhí)行以下命令:
sudo apt update sudo apt upgrade -y
安裝MySQL
在每臺服務(wù)器上安裝MySQL數(shù)據(jù)庫。Debian 11的軟件源中提供了MySQL的安裝包,執(zhí)行以下命令進行安裝:
sudo apt install mysql-server -y
安裝完成后,啟動MySQL服務(wù)并設(shè)置為開機自啟:
sudo systemctl start mysql sudo systemctl enable mysql
為了保證數(shù)據(jù)庫的安全性,需要對MySQL進行初始安全設(shè)置。執(zhí)行以下命令:
sudo mysql_secure_installation
按照提示進行操作,設(shè)置root用戶密碼、刪除匿名用戶、禁止root遠程登錄等。
配置MySQL主從復(fù)制
主從復(fù)制是實現(xiàn)MySQL高可用的基礎(chǔ),通過將主服務(wù)器的數(shù)據(jù)復(fù)制到從服務(wù)器,當主服務(wù)器出現(xiàn)故障時,可以快速切換到從服務(wù)器。
首先,選擇一臺服務(wù)器作為主服務(wù)器,編輯主服務(wù)器的MySQL配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf,添加或修改以下配置:
server-id = 1 log_bin = /var/log/mysql/mysql-bin.log binlog_do_db = your_database_name
其中,server-id 是服務(wù)器的唯一標識,log_bin 開啟二進制日志,binlog_do_db 指定需要復(fù)制的數(shù)據(jù)庫。
重啟主服務(wù)器的MySQL服務(wù):
sudo systemctl restart mysql
登錄主服務(wù)器的MySQL,創(chuàng)建一個用于復(fù)制的用戶并授予復(fù)制權(quán)限:
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'your_password'; GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%'; FLUSH PRIVILEGES; SHOW MASTER STATUS;
記錄下 File 和 Position 的值,后續(xù)從服務(wù)器配置時會用到。
然后,選擇一臺或多臺服務(wù)器作為從服務(wù)器,編輯從服務(wù)器的MySQL配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf,添加或修改以下配置:
server-id = 2 relay-log = /var/log/mysql/mysql-relay-bin.log log_bin = /var/log/mysql/mysql-bin.log
重啟從服務(wù)器的MySQL服務(wù):
sudo systemctl restart mysql
登錄從服務(wù)器的MySQL,配置從服務(wù)器連接到主服務(wù)器:
CHANGE MASTER TO MASTER_HOST='master_server_ip', MASTER_USER='repl_user', MASTER_PASSWORD='your_password', MASTER_LOG_FILE='your_master_log_file', MASTER_LOG_POS=your_master_log_pos; START SLAVE; SHOW SLAVE STATUS\G
確保 Slave_IO_Running 和 Slave_SQL_Running 都為 Yes,表示主從復(fù)制配置成功。
安裝和配置Pacemaker和Corosync
Pacemaker和Corosync是用于實現(xiàn)高可用集群的開源軟件,它們可以監(jiān)控MySQL服務(wù)的狀態(tài),當主服務(wù)器出現(xiàn)故障時,自動將服務(wù)切換到從服務(wù)器。
在每臺服務(wù)器上安裝Pacemaker和Corosync:
sudo apt install pacemaker corosync -y
編輯Corosync配置文件 /etc/corosync/corosync.conf,配置集群節(jié)點信息:
totem {
version: 2
secauth: off
cluster_name: mysql_cluster
transport: udpu
}
nodelist {
node {
ring0_addr: node1_ip
name: node1
}
node {
ring0_addr: node2_ip
name: node2
}
node {
ring0_addr: node3_ip
name: node3
}
}
quorum {
provider: corosync_votequorum
}
logging {
to_logfile: yes
logfile: /var/log/corosync/corosync.log
to_syslog: yes
}將配置文件同步到其他節(jié)點,然后啟動Corosync和Pacemaker服務(wù):
sudo systemctl start corosync pacemaker sudo systemctl enable corosync pacemaker
配置Pacemaker資源
使用Pacemaker配置MySQL服務(wù)的高可用資源。首先,安裝必要的資源代理:
sudo apt install resource-agents -y
然后,使用 crm configure 命令進入Pacemaker配置界面,配置MySQL資源:
primitive mysql ocf:heartbeat:mysql \
params binary="/usr/sbin/mysqld" \
config="/etc/mysql/mysql.conf.d/mysqld.cnf" \
pid="/var/run/mysqld/mysqld.pid" \
socket="/var/run/mysqld/mysqld.sock" \
op monitor interval="30s" timeout="30s" \
op start interval="0" timeout="60s" \
op stop interval="0" timeout="60s"
ms ms_mysql mysql \
meta master-max="1" master-node-max="1" clone-max="3" clone-node-max="1" notify="true"
primitive vip ocf:heartbeat:IPaddr2 \
params ip="your_virtual_ip" cidr_netmask="24"
colocation vip_on_mysql inf: vip ms_mysql:Master
order vip_after_mysql inf: ms_mysql:promote vip:start
property stonith-enabled=false
property no-quorum-policy=ignore上述配置中,mysql 是MySQL服務(wù)的資源,vip 是虛擬IP地址,通過 colocation 和 order 確保虛擬IP地址和MySQL主服務(wù)在同一節(jié)點上。
退出配置界面,Pacemaker會自動應(yīng)用配置。此時,虛擬IP地址會綁定到MySQL主服務(wù)器上,當主服務(wù)器出現(xiàn)故障時,Pacemaker會自動將虛擬IP地址和MySQL服務(wù)切換到其他從服務(wù)器上。
測試高可用集群
為了驗證MySQL高可用集群的有效性,可以進行以下測試。首先,使用虛擬IP地址連接到MySQL數(shù)據(jù)庫:
mysql -h your_virtual_ip -u your_user -p
確??梢哉_B接并操作數(shù)據(jù)庫。然后,模擬主服務(wù)器故障,停止主服務(wù)器的MySQL服務(wù)或Corosync、Pacemaker服務(wù):
sudo systemctl stop mysql
等待一段時間后,再次使用虛擬IP地址連接到MySQL數(shù)據(jù)庫,檢查是否可以正常連接。同時,可以查看Pacemaker的日志文件 /var/log/pacemaker.log,確認服務(wù)切換的過程。
總結(jié)
通過以上步驟,我們在Debian系統(tǒng)上成功搭建了MySQL高可用集群。主從復(fù)制確保了數(shù)據(jù)的一致性和冗余性,Pacemaker和Corosync實現(xiàn)了服務(wù)的自動切換,提高了數(shù)據(jù)庫服務(wù)的可用性和可靠性。在實際應(yīng)用中,還需要定期備份數(shù)據(jù)庫、監(jiān)控集群狀態(tài),以確保集群的穩(wěn)定運行。