輕鬆構建Mysql高可用叢集系統

來源:互聯網
上載者:User

 

轉自:http://ixdba.blog.51cto.com/2895551/583232
原文作者:
技術成就夢想

一、 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所示:


 

圖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 –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檔案也放入磁碟陣列所在分區的資料目錄。

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.