具有負載均衡功能的MySQL服務器集群部署及實現

MySQL是一個高速度、高性能、多線程的關系型數據庫管理系統,適用平臺多,可擴展性強。

在實際生產環境中,部署和實現具有一定負載均衡功能的 MySQL服務器集群,對于提高用戶數據庫應用系統的性能、速度和穩定性具有明顯的作用。本文簡要介紹了在 FreeBSD 7.0-Release系統上部署實現MySQL服務器集群的方案,并對可能出現的問題提供了相應的解決方法。
1. 引言
MySQL是一個高速度、高性能、多線程、開放源代碼,建立在客戶/服務器(Client /Server)結構上的關系型數據庫管理系統(RDBMS)。它始于1979年,最初是Michael Widenius為瑞典TcX公司創建的UNIREG數據庫系統,當時的UNIREG沒有SQL(Structured Query Language結構化查詢語言)接口,限制了它的應用。19965月,Widenius開發出了MySQL的最初版本,開始在Internet上公開發行。MySQL的開發人員從一開始就一直關注它的性能,為此不惜特性集,直到今天,MySQL依然保持本色,以高速度高性能為首要原則。隨著時間的推移,MySQL也加入了大型數據庫產品的高級特性,如存儲過程、視圖、觸發器等,使其在企業級數據庫系統中開始被部署應用[1]200810 月,SUN公司收購了MySQL AB公司,開始進入開源領域。隨著重量級操作系統Solaris的開源,SUN MySQL在數據庫市場占有的份額將會進一步提高。因此,在生產環境中部署具有負載均衡功能的MySQL服務器集群,對于提高企業數據庫應用系統的速度、穩定性及可伸縮性具有很大的現實意義,也可以有效降低應用系統的投資成本。本文將以FreeBSD 7.0-Release操作系統為例,利用MySQL數據庫的復制(Replication)特性,簡要介紹部署MySQL服務器集群的實現方法和相關注意事項。
2. 系統模型
本集群的結構為一個主MySQL服務器(Master)服務器與多個從屬 MySQL服務器(Slave)建立復制(replication)連接,主服務器與從屬服務器實現一定程度上的數據同步,多個從屬服務器存儲相同的數據副本,實現數據冗余,提供容錯功能。部署開發應用系統時,對數據庫操作代碼進行優化,將寫操作(UPDATEINSERT)定向到主服務器,把大量的查詢操作(SELECT)定向到從屬服務器,實現集群的負載均衡功能。如果主服務器發生故障,從屬服務器將轉換角色成為主服務器,使應用系統為終端用戶提供不間斷的網絡服務;主服務器恢復運行后,將其轉換為從屬服務器,存儲數據庫副本,繼續對終端用戶提供數據查詢檢索服務。
3. 部署實現
本文以一臺主服務器帶三臺從屬服務器為例,簡要介紹MySQL服務器集群的實現方案和具體方法步驟。
3.1 系統部署
由于FreeBSD系統對機器硬件要求較低,出于降低系統部署成本考慮,主服務器和從屬服務器操作系統均采用FreeBSD 7.0-Release,并采用最小化定制安裝,完成以后系統占用磁盤空間僅為254M(不計swap分區所占空間,它隨具體機器內存容量的變化而變化)。為充分發揮系統硬件性能,MySQL數據庫采用源代碼編譯安裝。
3.1.1 安裝FreeBSD系統
在主服務器和從屬服務器上安裝FreeBSD 7.0-Release,具體安裝方法步驟不是本文主要內容,在此略過,如有疑問可以參考FreeBSD系統手冊。需要說明的是為方便用戶系統運行期間的維護管理,要打開系統的SSH服務功能,系統安裝配置期間允許root用戶遠程登錄,正常運行以后要關閉root用戶的遠程登錄功能。在/etc/ssh /sshd_config配置文件中對PermitRootLogin設置為yes為允許root用戶遠程登錄到系統,設置為no即為不允許。修改保存文件后執行kill –HUP `cat /var/run/sshd.pid`命令即可重啟sshd守護進程,使設置生效[2]。上述操作需要root用戶權限。
3.1.2 編譯安裝MySQL
MySQL的官方網站http://www.mysql.com下載MySQL數據庫的安裝源代碼壓縮包,本例下載的是mysql-5.1.30.tar.gz,以root用戶身份登錄到系統,開始安裝MySQL數據庫系統。

由于在對MySQL進行源代碼編譯安裝時要求使用GNUC編譯器,而FreeBSD系統本身提供的不是該編譯器,因此用戶必須下載安裝GNU C編譯器[3]。把下載的gnumake-3.81.tar.gz解壓安裝,按如下步驟即可安裝GNU C編譯器:

[root@FreebsdMaster/softwares]# tar –zxvf gnumake-3.81.tar.gz
[root@FreebsdMaster /softwares]# cd make-3.81

[root@FreebsdMaster /softwares/make-3.81]# ./configure ; make; make install; make clean

GNU C編譯器默認安裝到/usr/local/bin,在安裝MySQL時按絕對路徑調用make命令即可,如# /usr/local/bin/make

MySQL的編譯安裝比較復雜,具體操作及相關注意事項如下:

(1).
解壓mysql-5.1.30.tar.gz,并進行配置

[root@FreebsdMaster /softwares]# tar –zxvf mysql-5.1.30.tar.gz

[root@FreebsdMaster /softwares]# cd mysql-5.1.30

[root@FreebsdMaster /softwares/mysql-5.1.30]# ./configure

-–prefix=/app/mysql5 -–with-charset=gb2312

說明:MySQL默認的安裝目錄是/usr/local/mysql,為了增強系統部署的靈活性,緊貼用戶應用系統實際情況,可以用—-prefix 參數定制安裝目錄。–with-charset參數是使MySQL數據庫支持中文gb2312字符集,如果需要支持其它字符集,使用–with- extra-charset參數,格式為—-with-extra-charset=CHARSET1,CHARSET2, …

(2). 編譯安裝MySQL

[root@FreebsdMaster /softwares/mysql-5.1.30]# /usr/local/bin/make

[root@FreebsdMaster /softwares/mysql-5.1.30]# /usr/local/bin/make install

[root@FreebsdMaster /softwares/ mysql-5.1.30]# /usr/local/bin/make clean

注意一定要按絕對路徑調用GNU C編譯器,否則編譯過程報錯退出。

(3). 為系統添加mysql用戶組和用戶

[root@FreebsdMaster /]# pw group add mysql

[root@FreebsdMaster /]# adduser

FreeBSD系統沒有groupadd命令,其添加用戶組的命令是pw,添加用戶命令adduser按系統提示操作即可完成。當然用 pw user add mysql命令也可以完成添加用戶mysql的功能,但不如adduser命令功能完善。

(4). 更改/app/mysql5目錄及文件屬性

[root@FreebsdMaster /app]# chmod –R mysql mysql5

[root@FreebsdMaster /app]# chgrp –R mysql mysql5

說明:/app/mysql5MySQL數據庫系統所在目錄,如果用戶部署的應用系統數據量極大,可以將數據庫系統目錄設在大容量磁盤陣列上。磁盤陣列設置與具體機器硬件相關性很大,具體操作設置參考具體硬件系統說明和FreeBSD操作手冊。不借助第三方軟件,FreeBSD 7.0-Release系統可以配置RAID0RAID1磁盤陣列。

(5). 安裝MySQL系統初始數據庫

[root@FreebsdMaster /softwares/ mysql-5.1.30]# ./scripts/mysql_install_db.sh –basedir=/app/mysql5 –-data-dir=/app/mysql5/data

注意:必須考慮Unix系統的文件權限特性,首先給mysql_install_db.sh腳本添加可執行屬性,否則安裝腳本無法執行。執行 chmod +x ./scripts/mysql_install_db.sh命令即可。參數–basedir=/app/mysql5–datadir=/app /msyql5/data為必加參數,否則腳本運行報錯退出,無法安裝系統初始數據庫mysql和測試數據庫testmysql數據庫包含系統權限設置表,沒有這些表數據庫服務進程mysqld將無法啟動。

(6). 再次更改/app/mysql5目錄及其文件屬性

[root@FreebsdMaster /app]# chmod –R root mysql5

[root@FreebsdMaster /app]# chmod –R mysql mysql5/data

這樣做是為了保證系統安全,防止通過MySQL系統漏洞的入侵行為。MySQLmysql用戶身份運行,對/data目錄具有完全訪問權限,對其它目錄則只有系統管理員根據需要設置的訪問權限,確保FreeBSD系統的安全。這里需要特別提醒用戶注意的是要確保mysqld文件(MySQL的守護進程,位于/app/mysql5/libexec目錄下)沒有設置setuid標志位,如果設置了該標志位,入侵者對其它文件就具有其不應有的權限。具體原因參考關于Unix系統安全的手冊,本文對這個問題不再贅述。

(7). 啟動MySQL服務器

上述操作全部完成以后,輸入如下命令啟動MySQL數據庫服務守護進程:
[root@FreebsdMaster /]# /app/mysql5/bin/mysqld_safe –user=mysql &
–user參數表示以mysql用戶身份運行MySQL數據庫服務守護進程,“&”符號表示以后臺方式運行。輸入 netstat –an|grep 3306命令,如果看到下面的輸出則表示MySQL5.1.30已在用戶系統上編譯安裝成功。其中,3306MySQL數據庫系統默認的監聽端口號。
[root@FreebsdMaster /]# netstat –an|grep 3306
tcp4 0 0 *.3306 *.* LISTEN
按照同樣方法與步驟在其它三臺機器上安裝FreeBSD 7.0-ReleaseMySQL5.1.30,為下面的MySQL服務器集群配置準備好系統平臺基礎。
3.2 系統配置
所有系統安裝完畢之后,需要對它們做一些必要的配置方可按照用戶預先設計的結構模型實現具有負載均衡功能的MySQL服務器集群。
3.2.1 FreeBSD操作系統配置
(1). 調整內核參數,優化操作系統性能
因為是處于生產環境的服務器,投入正常運行之前一定要對內核參數進行必要的調整,提升系統性能,加強穩定性。簡要說就是去掉不必要的硬件支持選項,使新內核占用更少的內存,加快啟動速度。不同機器硬件系統差異很大,用戶可根據具體系統的硬件情況不斷調整試驗,最終定制出最優化、最安全的FreeBSD 系統。一定要屏蔽掉組合鍵Ctrl+Alt+Del的熱重啟功能,防止用戶誤按Ctrl+Alt+Del重啟系統,引起數據庫系統服務意外中斷。在內核配置文件如MYKERNEL中加入:
options SC_DISABLE_REBOOT
重新編譯系統內核,重啟后即可屏蔽Ctrl+Alt+Del組合鍵的熱重啟功能。如何定制新內核及重新編譯FreeBSD系統,用于可參考FreeBSD系統手冊,此不贅述。
(2). 進行其它設置,增強系統安全性
用戶可根據以下一般安全準則設置自己的FreeBSD系統。
·選擇一個好的密碼并予以妥善保護。
·對于敏感文件采用適當安全等級的加密算法進行加密。對于敏感級別不是很高的文件采用系統自帶的crypt工具加密;對于敏感度極高的文件則使用專用加密工具,如PGPGPG進行不對稱加密,提高加密文件的防攻擊能力。
·仔細設置文件訪問權限,達到保護文件目的。
·保護好自己的.profile文件。恰當設置.profile文件的訪問權限,確保只有自己能訪問。
·仔細維護已設置setuidsetgid標志位的任何程序。
·禁止不加防范地離開已注冊終端。任何時候都必須按常規正常退出系統,先執行clear清屏命令,防止其它用戶看到操作痕跡,再執行exit命令退出終端。
·防范特洛伊木馬程序。正確設置PATH變量的檢索順序,確保系統目錄位于當前目錄的前面。
·防范病毒的入侵。
·監控最近一次注冊時間,確保沒有他人盜用自己的帳號。
特別提示:對于生產環境的服務器,一定要保證服務器的物理安全,安全措施再完善的系統,一旦被入侵者物理接觸,所有的安全措施將形同虛設!
Unix系統安全是一個很大的課題,本文只是提及了一些最膚淺的常識,具體內容用戶可以參考相關書籍或網上資源。為確保Unix系統的配置具有高度的安全性,可以使用Internet安全中心(Center for Internet SecurityCIS)提供的安全測試工具Benchmarks或評估工具Scoring Tools,檢驗和監控系統配置的安全性 [4]
3.2.2 MySQL數據庫系統配置
為了能使上述系統實現一對多的主從復制(replication)和冗余機制,還需要對以上四個MySQL服務器進行一些必要的配置。
(1). 配置主機名和IP地址
本實現方案中把MySQL服務器Master主機名設為FreebsdMasterIP地址配置為192.168.1.100,其它三臺Slave 依次設為 FreebsdSlave1192.168.1.101FreebsdSlave2192.168.1.102;FreebsdSlave3IP 地址192.168.1.103
(2). 設置root用戶密碼
MySQLroot用戶初始密碼為空,為保證系統安全必須為root用戶設置密碼:
[root@FreebsdMaster /]# /app/mysql5/bin/mysql –uroot –p
Enter password:
mysql>SET PASSWORD=PASSWORD(‘secret’);
Unix系統一樣,輸入密碼時屏幕沒有任何回顯,進入系統后執行SET PASSWORD SQL語句設置或修改MySQL root用戶密碼。為使應用系統服務器遠程連接到MySQL數據庫服務器,除本地root用戶以外,還要設置一個能從用戶內部網絡其它終端登錄的root 用戶。具體操作如下:
  mysql>USE mysql;
  mysql>UPDATE user SET Host=’%’ WHERE Host=’hostname.yourdomain’ AND User=’root’;
  mysql>flush privileges;
  完成上述操作后應用系統服務器就可以連接到MySQL數據庫服務器進行各種操作了,這個遠程root用戶的初始密碼為空,用戶需要從遠程終端登錄,為其設置密碼。
  (3). 開啟MySQL服務器的二進制更新日志功能
  上述MySQL服務器安裝完成后,安裝程序沒有生成my.cnf配置文件,為此用戶需要手工添加/etc/my.cnf文件。MySQL服務是由 /app/myql5/libexec/mysqld提供的,其尋找my.cnf配置文件的默認順序為/etc/my.cnf~/.my.cnf/usr/local/mysql/etc/my.cnf

? 版權聲明
THE END
喜歡就支持一下吧
點贊12 分享