共計 3415 個字符,預計需要花費 9 分鐘才能閱讀完成。
本篇內容主要講解“怎么構建 Mysql 高可用集群系統”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓丸趣 TV 小編來帶大家學習“怎么構建 Mysql 高可用集群系統”吧!
一、MySQL 復制的實現原理
MySQL 支持單向、雙向復制、異步復制,復制過程中一個服務器充當主服務器,而一個或多個其它服務器充 當從服務器。主服務器將更新寫入一個二進制日志文件中,并創建一個索引文件以跟蹤日志循環。這些日志可以記錄發送到從服務器的更新。當一個從服務器連接主 服務器時,日志文件會通知主服務器,從服務器在日志中讀取的最后一次成功更新的位置。接著,從服務器在上次成功更新的位置處開始進入更新操作。更新完成后 從服務器開始進入等待狀態,等待主服務器后續的更新。
需要注意的是:在進行復制時,所有對復制中的表的更新必須在主服務器上進行。否則,可能發生對主服務器上的表進行的更新與對從服務器上的表所進行的更新之間的沖突。
單向復制有利于健壯性、速度和系統管理.
主服務器 / 從服務器設置增加了健壯性。主服務器出現問題時,可以切換到從服務器。
通過在主服務器和從服務器之間切分處理客戶查詢的負荷,可以得到更好的客戶響應時間。SELECT 查詢可以發送到從服務器以降低主服務器的查詢處理負荷。但修改數據的語句仍然應發送到主服務器,以便主服務器和從服務器保持同步。
MySQL 提供了數據庫的同步功能,這對實現數據庫的冗災、備份、恢復、負載均衡等都是有極大幫助的。
一般情況下,在 Mysql 復制中,主服務器也稱為 master,二從服務器稱為 slave,因此,想要啟用同步機制,在 master 上就必須啟用二進制日 志。每個 slave 接受來自 master 上在二進制日志中記錄的更新操作,而在 slave 上相當于執行了這個操作的一個拷貝。
二、MySQL 同步細節
MySQL 同步功能由 3 個線程(master 上 1 個 binlog dump,slave 上 2 個,分別是 Sql 進程和 IO 進程) 來實現。執行“START SLAVE”語句后,slave 就創建一個 I / O 線程。I/ O 線程連接到 master 上,并請求 master 發送二進制日志中的語句。master 創建一 個線程來把日志的內容發送到 slave 上。
slave 上的 I / O 線程讀取 master 的 Binlog Dump 線程發送的語句,并且把它們拷貝到其數據目錄下的中繼日志 (relay logs) 中。第三個是 SQL 線程,salve 用它來讀取中繼日志,然后執行它們來更新數據。
slave 上使用 2 個線程的優點是,把讀日志和執行分開成 2 個獨立的任務。執行任務如果慢的話,讀日志任務不會跟著慢下來。例如,如果 slave 停止了一 段時間,那么 I / O 線程可以在 slave 啟動后很快地從 master 上讀取全部日志,盡管 SQL 線程可能落后 I / O 線程好幾的小時。如果 slave 在 SQL 線程沒全部執行完就停止了,但 I / O 線程卻已經把所有的更新日志都讀取并且保存在本地的中繼日志中了,因此在 slave 再次啟動后就會繼續執行它們 了。這就允許在 master 上清除二進制日志,因為 slave 已經無需去 master 讀取更新日志了。
本文講解的環境為:一個 mysql 的 master 主節點 node1,三個 Mysql 的 Slave 節點,三個 Slave 節點都從 primary 節點進行實時的同步數據,Mysql 高可用集群主機信息如圖 1 所示:
三、在 node1、slave1、slave2、slave3 上安裝 MYSQL
安裝 MySQL 有多種方法,這里僅以 rpm 安裝為列說明。
[root@node1~]#yum -y install mysql-server mysql-devel mysql mysql-bench mysql-test
安裝完成后,使用如下命令啟動 mysql 服務:
[root@node1 ~]# /etc/init.d/mysqld start
為了保障數據安全,建議把數據放到專業的存儲設備或者磁盤陣列分區,這里假定磁盤陣列的分區為 /data 目錄,接著把數據文件放到 /data 目錄下:
[root@node1 ~]# cp -R /var/lib/mysql /data/mysql
[root@node1 ~]# chown ndash;R mysql:mysql /data/mysql
修改 /etc/my.cnf 文件,在 [mysqld] 組增加如下配置:
datadir = /data/mysql
最后,重啟 MySQL 服務即可。
四、在 Mysql 主節點 node1 上編輯配置文件 my.cnf
編輯主服務器的配置文件 /etc/my.cnf,在 [mysqld] 中添加如下內容即可:
server-id = 1 #服務器 ID。服務器之間不能有重復 ID,一般 master 是 1
log-bin=mysql-bin #打開 mysql 的 binlog 功能,后面的名字可以自己指定,如果不改名字的話,默認是以主機名字命名
binlog-do-db=ixdba #ixdba 是需要備份的數據庫名,如果備份多個數據庫,重復設置這個選項即可
binlog-ignore-db=mysql #不需要備份的數據庫名稱,如果需要忽略備份多個數據庫,重復設置這個選項即可。
五、在 master 節點 node1 上建立復制用戶
mysql GRANT REPLICATION SLAVE ON *.* TO repl_user @ % IDENTIFIED BY repl_password
這里一定將 repl_user 用戶設置為遠程任意節點可以登錄。
六、備份 Master 數據
備份 Master 上的數據,首先執行如下 SQL 語句:
mysql FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)
mysql reset master;
Query OK, 0 rows affected (0.00 sec)
不要退出這個終端,否則這個鎖就失效了;在不退出終端的情況,再開一個終端直接打包壓縮數據文件或使用 mysqldump 工具來導出數據。
[root@node1 ~]# cd /var/lib/ #進入 mysql 的數據目錄,根據自己情況而定。
[root@node1 lib]# tar zcvf mysql.tar.gz mysql
[root@node1 lib]# scp mysql.tar.gz 192.168.12.231/232/233:/var/lib/
用 scp 命令把打包的數據傳到其他幾臺 Slave 機器上。
數據傳輸完成之后,在上面的命令終端上執行:
mysql UNLOCK TABLES;
七、設置 Slave 主機
編輯 /etc/my.cnf 文件,在 [mysqld] 中添加如下內容即可:
server-id = 2
log-bin=mysql-bin
binlog-do-db=ixdba
binlog-ignore-db=mysql
其他的 Slave 以此類推,保證 server-id 全局唯一即可。
八、在 slave 上執行如下命令
mysql CHANGE MASTER TO MASTER_HOST= 192.168.12.135 ,
– MASTER_USER= repl_user ,
– MASTER_PASSWORD= repl_password ,
– MASTER_LOG_FILE= mysql-bin.000001 ,
– MASTER_LOG_POS=98;
執行完之后執行:
mysql slave start;
Query OK, 0 rows affected (0.00 sec)
mysql show slave status\G
從輸出可以看到:Slave_IO_Running 和 Slave_SQL_Running 如果都為 Yes 時,表示配置成功。
九、需要注意的幾個問題
(1)如果在 my.cnf 里面定義了 log-bin、relay-log 參數,那么要保證定義與 hostname 無關,因為如果這兩類 log 的文件名與主機名有關,切換過程會導致 slave 主機不能繼續同步的問題。例如可以做下設置:
log-bin = mysql-bin
relay-log = mysql-relay-bin
保證在兩臺主機上兩種文件的名字一樣。
(2)最好把 my.cnf 文件也放入磁盤陣列所在分區的數據目錄。
到此,相信大家對“怎么構建 Mysql 高可用集群系統”有了更深的了解,不妨來實際操作一番吧!這里是丸趣 TV 網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!