網站與網頁技術 - 使用DRBD與Heartbeat建構高可靠性的MySQL資料庫伺服器 (4/4: Replication) - 電腦

前往內容


使用DRBD與Heartbeat建構高可靠性的MySQL資料庫伺服器 (4/4: Replication)

MySQL Replication(複製), 有幾種架構, 這裡我們使用Master-Slave Replication, 好處是可以做到簡單的資料庫讀寫分離, 讀取動作可由Slave機器來做, 而Master只供寫入, 這樣可以少點Master資料庫的Disk I/O, 畢竟硬碟是電腦裡最慢的元件。

您可以依照前面的步驟使用DRBD與Heartbeat來建立HA Slave機器, 本文就簡單對MySQL Master-Slave Replication設置做介紹。

本系列文章將分成四段, 避免過於冗長, 方便各位閱讀:
一、DRBD安裝與設定
二、MySQL資料庫安裝與設定
三、Heartbeat服務監測安裝與設定
四、MySQL資料庫伺服器Master-Slave Replication安裝與設定


同樣需要裝好資料庫軟體, 採用Percona Server 5.6, 在之前的作業系統安裝時, 給了Slave機器hostname叫做"rep", hostname您可以自己決定。


以apt-get install percona-server-server-5.6指令裝好資料庫。


移除套件原本的預設my.cnf設定檔, 建立新的my.cnf。


機器採用與Master伺服器同樣的規格, 所以設定值相同, 不過server-id必須變更, Master是server-id = 1, 所以Slave我們設定server-id = 2

先回到db1, 也就是Master伺服器, 增加Replication需要的參數, 修改db1與db2的my.cnf。


db1加入sync_binlog=1設定值。

編輯my.cnf
nano /etc/mysql/my.cnf

後面補上
sync_binlog=1

並且存檔。


db2也要照做, db2是standby狀態, 所以存檔後並不需要啟動MySQL服務。

回到rep機器(Replication的Slave角色), 修改資料路徑。


我同樣把/var/lib/的子目錄mysql搬到/srv下, /srv在安裝作業系統中已經格式為XFS檔案系統。別忘了也建立/srv/tmp(my.cnf的tmpdir = /srv/tmp設定值)。

在此補上步驟, 讓各為免去翻前文的麻煩
cd /var/lib
mv mysql /srv/mysql
ln -s /srv/mysql /var/lib/mysql
chown -R mysql:mysql /srv/mysql


移除InnoDB初始資料
cd /srv/mysql
rm ibdata1
rm ib_logfile*


建立/srv/tmp目錄給MySQL伺服器用
cd /srv
mkdir tmp
chmod 777 tmp


接著就起動Slave伺服器吧
/etc/init.d/mysql start


又回到db1, 要來建立Replication用的MySQL系統帳號, 請大家要小心db1與rep之間別做錯了。


使用mysql指令: mysql -u root -p, 會詢問root的密碼, 輸入正確後就會進入MySQL自己的console。


建立Replication專用帳號, 在範例裡, 我取名為"repl", 密碼是"slavepass", 您可以自己決定帳號與密碼。

使用以下SQL建立repl帳號
CREATE USER 'repl'@'%' IDENTIFIED BY 'slavepass';



給予repl帳號Replication權限。

使用以下SQL設定權限
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';



接著我們需要取得Replication的位置資訊。

限制資料庫寫入
FLUSH TABLES WITH READ LOCK;


顯示binlog的檔名與位置
SHOW MASTER STATUS;


好! 您可以看到螢幕截圖裡的檔名"mysqld-bin.000005"與Position欄位的"411"數值, 把它記好。



解除資料庫唯讀
UNLOCK TABLES;


回到rep這台Slave機器, 同樣進入MySQL console。


確定是rep機器喔!


設定Master位置與其Repliaction資訊。

使用以下SQL設定Master主機位置
CHANGE MASTER TO MASTER_HOST='192.168.1.192', MASTER_USER='repl', MASTER_PASSWORD='slavepass', MASTER_LOG_FILE='mysqld-bin.000005', MASTER_LOG_POS=411;


起動Slave開始做Replication
START SLAVE;


利用SHOW SLAVE STATUS指令查看Replication的Slave狀態
SHOW SLAVE STATUS\G




以上是SHOW SLAVE STATUS的結果。

回到db1的MySQL console, 下達SHOW PROCESSLIST指令看看
SHOW PROCESSLIST\G



系統出現狀態為"Master has sent all binlog to slave..."的程序, 就是已經開始Master-Slave Replication了。

回到rep的MySQL console, 同樣下達SHOW PROCESSLIST指令看看
SHOW PROCESSLIST\G



出現兩個程序, 一個是"Waiting for master to send event"狀態, 一個是"Slave has read all relay log..."狀態。

再度回到db1(Master), 下達一個建立資料庫的指令
CREATE DATABASE test2;



用SHOW DATABASES指令看到"test2"資料庫已被建立。

回到rep(Slave), 看看"test2"資料庫是否存在
SHOW DATABASES;



Slave機器出現"test2"資料庫囉, 代表Master-Slave Replication運作正常!

MySQL Master-Slave Replication安裝與設定就完成囉! 各位可以利用DRBD與Heartbeat來建立更完整的MySQL Replication, 不過缺點就是standby機器是不能服務的, 在機器預算上得多花錢。

延伸閱讀:
1. 使用Percona Tool Kit修復MySQL Replication資料不同步
2. 使用Percona XtraBackup備份MySQL資料庫
Mobile01 FB粉絲團 http://www.facebook.com/TheMobile01

1頁 (共1頁)

前往