邢志峰
[摘 要]近年來,虛擬化技術已在企業中得到了廣泛應用,越來越多的Web應用程序使用MySQL作為數據的管理和存儲,數據庫的高可用、數據安全、負載均衡成為了企業關注的重點。本文以河鋼集團承鋼公司企業內部的虛擬化平臺為基礎,以開源的Galera Cluster for MySQL為解決方案,搭建一套基于同步復制的多主MySQL集群。其特點是使用簡單,沒有單點故障,可用性高,能很好地保證業務不斷增長時數據的安全性和集群的擴展性。
[關鍵詞]虛擬化;MySQL數據庫;集群搭建
doi:10.3969/j.issn.1673 - 0194.2017.12.086
[中圖分類號]TP311.1 [文獻標識碼]A [文章編號]1673-0194(2017)12-0-02
1 虛擬化技術和ESXI的介紹
虛擬化,是指通過虛擬化技術將一臺計算機虛擬為多臺邏輯計算機。在一臺計算機上同時運行多個邏輯計算機,每個邏輯計算機可運行不同的操作系統,且應用程序都可以在相互獨立的空間內運行而互不影響,從而顯著提高計算機的工作效率。目前,虛擬化技術越來越成熟,企業為節約成本,只需購買配置較高的服務器安裝虛擬操作系統,就能把一臺服務器當做多臺服務器進行使用,既經濟實用,又管理方便。
ESXI是直接運行在裸機上的高性能、高可用性的系統架構,它給多臺虛擬機提供CPU、內存、存儲、網絡資源,Windows平臺的PC機可以通過vSphere客戶端軟件進行遠程訪問和管理。
ESXI的主要特性如下:
(1)可靠性和安全性,ESXI體系結構基于Linux的控制臺操作系統,實現可維護性和基于代理的合作伙伴集成,并直接在核 VMkernel中實現了必備的管理功能,消除了與通用操作系統相關的安全漏洞,提高了安全性和可靠性。
(2)簡化部署和配置,新的ESXI體系結構的配置項較少,因此可以極大地簡化部署和配置,且更容易保持一致性。
(3)減少管理開銷,ESXI體系結構采用基于API的合作伙伴集成模型,因此,不再需要安裝和管理第三方管理代理。利用遠程命令行腳本編寫環境,可以自動執行日常任務。
(4)虛擬機的備份與恢復功能,ESXI提供多種的備份與恢復功能,如快照、克隆、模板的導入和導出等。
(5)物理機、虛擬機的遷移,VMware Converter是一款能將物理電腦系統、VMware其他版本虛擬機鏡像,或第三方虛擬機鏡像轉化為一個虛擬機映像文件的工具,且生成的映像可以在該公司的VMware虛擬機軟件中使用。
2 MySQL數據庫集群的搭建
2.1 MySQL Galera Cluster 介紹
Galera Cluster是在名為WSRep(集合寫入式復制,Write Set Replication)的更通用的API基礎之上開發而成的。WSRep API是個獨立的開源項目,由Codership發起,它在數據庫服務器和數據復制插件之間定義了一個接口。MySQL-WSRep是MySQL的一個補丁,它在數據庫服務器中實現了WSRep API接口。安裝這個補丁之后,MySQL就可以啟動WSRep的插件,Galera是WSRep提供者,實現了同步多主節點數據復制功能,Galera replication特性具有同步復制主備無延遲、支持多主同時讀寫,保證數據一致性、集群中各節點保存全量數據、節點添加或刪除,自動檢測和配置、行級別并行復制、不需要寫binlog。
2.2 Galera的實現架構
Galera的實現架構,如圖1所示。
2.3 安裝前的準備
(1)需要至少三臺虛擬服務器,建議安裝Centos 6,數據庫為MySQL 5.5版本,為服務器分配好IP地址。
(2)準備好MySQL with WSRep、Galera等軟件安裝包。
(3)關閉系統防火墻Selinux和Iptables。
2.4 安裝部署
(1)第一個節點的安裝及配置,首先關閉系統防火墻,設置MySQL的yum源并安裝依賴包。
(2)安裝數據及服務組件,建立Cluster使用者,設置遠程登錄,修改主節點的配置文件,啟動集群服務,確認MySQL 3306端口和WSRep的4567端口處于監聽狀態。
(3)第二個節點安裝及配置其他節點,方法與安裝第一個節點類似,在修改從節點配置文件時,需要將WSRep_cluster_address的地址指向主節點。
(4)檢查各節點運行狀態,使用數據庫管理工具測試數據庫集群功能。
2.5 使用前的注意事項
(1)使用Galera必須要給MySQL-Server打WSRep補丁??梢灾苯邮褂霉俜教峁┑囊呀洿蚝醚a丁的MySQL安裝包,如果服務器上已經安裝了標準版MySQL,需要先卸載再重新安裝。卸載前注意備份數據。
(2)MySQL/Galera集群只支持InnoDB存儲引擎。如果數據表使用的是MyISAM,需要轉換為InnoDB,否則記錄不會在多臺復制??梢栽趥浞堇蠑祿r,為MySQLdump命令添加skip-create-options參數,這樣會去掉表結構的聲明信息,再導入集群時自動使用InnoDB引擎。不過這樣會將AUTO_INCREMENT一并去掉,已有AUTO_INCREMENT列的表,必須在導入后重新定義。
(3)MySQL 5.5及以下的InnoDB引擎不支持全文索引(FULLTEXT indexes),如果之前使用了MyISAM并建立了全文索引字段,只能安裝MySQL 5.6 with WSRep patch。
(4)所有數據表必須要有主鍵(PRIMARY),如果沒有主鍵可以建一條AUTO_INCREMENT列。
(5)MySQL/Galera集群不支持下面的查詢:LOCK/UNLOCK TABLES,不支持下面的系統變量:character_set_server、utf16、utf32及ucs2。
(6)數據庫日志不支持保存到表,只能輸出到文件(log_output = FILE),不能設置binlog-do-db、binlog-ignore-db。
(7)跟其他集群一樣,為了避免節點出現腦裂而破壞數據,建議Galera集群最低添加3個節點。
(8)在高并發的情況下,多主同時寫入時可能會發生事務沖突,此時只有一個事務請求會成功,其他的全部失敗??梢栽趯懭牖蚋率r,自動重試一次,再返回結果。
(9)節點中每個節點的地位是平等的,沒有主次,向任何一個節點讀寫效果都是一樣的。實際可以配合VIP/LVS或HA使用,實現高可用性。
(10)如果集群中的機器全部重啟,如機房斷電,第一臺啟動的服務器必須以空地址啟動。
主要參考文獻
[1]王春海.深入學習VMware vSphere 6[M].北京:人民郵電出版社,2016.
[2]張工廠.MySQL技術精粹——架構、高級特性、性能優化與集群實戰[M].北京:清華大學出版社,2015.