具備負載均衡功能MySQL服務器集群部署及實現(xiàn)_第1頁
具備負載均衡功能MySQL服務器集群部署及實現(xiàn)_第2頁
具備負載均衡功能MySQL服務器集群部署及實現(xiàn)_第3頁
具備負載均衡功能MySQL服務器集群部署及實現(xiàn)_第4頁
具備負載均衡功能MySQL服務器集群部署及實現(xiàn)_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、具備負載均衡功能MySQL服務器集群部署及實現(xiàn)1. 引言MySQL是一個高速度、高性能、多線程、開放源代碼,建立在客戶/服務器(Client/Server)結構上的關系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS)。它始于1979年,最初是Michael Widenius為瑞典TcX公司創(chuàng)建的UNIREG數(shù)據(jù)庫系統(tǒng),當時的UNIREG沒有SQL(Structured Query Language結構化查詢語言)接口,限制了它的應用。1996年5月,Widenius開發(fā)出了MySQL的最初版本,開始在Internet上公開發(fā)行。MySQL的開發(fā)人員從一開始就一直關注它的性能,為此不惜特性集,直到今天,MySQL

2、依然保持本色,以高速度高性能為首要原則。隨著時間的推移,MySQL也加入了大型數(shù)據(jù)庫產(chǎn)品的高級特性,如存儲過程、視圖、觸發(fā)器等,使其在企業(yè)級數(shù)據(jù)庫系統(tǒng)中開始被部署應用1。2008年10月,SUN公司收購了MySQL AB公司,開始進入開源領域。隨著重量級操作系統(tǒng)Solaris的開源,SUN MySQL在數(shù)據(jù)庫市場占有的份額將會進一步提高。因此,在生產(chǎn)環(huán)境中部署具有負載均衡功能的MySQL服務器集群,對于提高企業(yè)數(shù)據(jù)庫應用系統(tǒng)的速度、穩(wěn)定性及可伸縮性具有很大的現(xiàn)實意義,也可以有效降低應用系統(tǒng)的投資成本。本文將以FreeBSD 7.0-Release操作系統(tǒng)為例,利用MySQL數(shù)據(jù)庫的復制(Rep

3、lication)特性,簡要介紹部署MySQL服務器集群的實現(xiàn)方法和相關注意事項。2. 系統(tǒng)模型本集群的結構為一個主MySQL服務器(Master)服務器與多個從屬MySQL服務器(Slave)建立復制(replication)連接,主服務器與從屬服務器實現(xiàn)一定程度上的數(shù)據(jù)同步,多個從屬服務器存儲相同的數(shù)據(jù)副本,實現(xiàn)數(shù)據(jù)冗余,提供容錯功能。部署開發(fā)應用系統(tǒng)時,對數(shù)據(jù)庫操作代碼進行優(yōu)化,將寫操作(如UPDATE、INSERT)定向到主服務器,把大量的查詢操作(SELECT)定向到從屬服務器,實現(xiàn)集群的負載均衡功能。如果主服務器發(fā)生故障,從屬服務器將轉換角色成為主服務器,使應用系統(tǒng)為終端用戶提供不

4、間斷的網(wǎng)絡服務;主服務器恢復運行后,將其轉換為從屬服務器,存儲數(shù)據(jù)庫副本,繼續(xù)對終端用戶提供數(shù)據(jù)查詢檢索服務。3. 部署實現(xiàn)本文以一臺主服務器帶三臺從屬服務器為例,簡要介紹MySQL服務器集群的實現(xiàn)方案和具體方法步驟。3.1 系統(tǒng)部署由于FreeBSD系統(tǒng)對機器硬件要求較低,出于降低系統(tǒng)部署成本考慮,主服務器和從屬服務器操作系統(tǒng)均采用FreeBSD 7.0-Release,并采用最小化定制安裝,完成以后系統(tǒng)占用磁盤空間僅為254M(不計swap分區(qū)所占空間,它隨具體機器內(nèi)存容量的變化而變化)。為充分發(fā)揮系統(tǒng)硬件性能,MySQL數(shù)據(jù)庫采用源代碼編譯安裝。3.1.1 安裝FreeBSD系統(tǒng)在主服務

5、器和從屬服務器上安裝FreeBSD 7.0-Release,具體安裝方法步驟不是本文主要內(nèi)容,在此略過,如有疑問可以參考FreeBSD系統(tǒng)手冊。需要說明的是為方便用戶系統(tǒng)運行期間的維護管理,要打開系統(tǒng)的SSH服務功能,系統(tǒng)安裝配置期間允許root用戶遠程登錄,正常運行以后要關閉root用戶的遠程登錄功能。在/etc/ssh/sshd_config配置文件中對PermitRootLogin設置為yes為允許root用戶遠程登錄到系統(tǒng),設置為no即為不允許。修改保存文件后執(zhí)行kill HUP cat /var/run/sshd.pid命令即可重啟sshd守護進程,使設置生效2。上述操作需要root

6、用戶權限。3.1.2 編譯安裝MySQL到MySQL的官方網(wǎng)站下載MySQL數(shù)據(jù)庫的安裝源代碼壓縮包,本例下載的是mysql-5.1.30.tar.gz,以root用戶身份登錄到系統(tǒng),開始安裝MySQL數(shù)據(jù)庫系統(tǒng)。由于在對MySQL進行源代碼編譯安裝時要求使用GNU的C編譯器,而FreeBSD系統(tǒng)本身提供的不是該編譯器,因此用戶必須下載安裝GNU C編譯器3。把下載的gnumake-3.81.tar.gz解壓安裝,按如下步驟即可安裝GNU C編譯器:rootFreebsdMaster/softwares#tarzxvfgnumake-3.81.tar.gzrootFreebsdMaster/s

7、oftwares#cdmake-3.81rootFreebsdMaster/softwares/make-3.81#./configure;make;makeinstall;makecleanGNU C編譯器默認安裝到/usr/local/bin,在安裝MySQL時按絕對路徑調(diào)用make命令即可,如# /usr/local/bin/make。MySQL的編譯安裝比較復雜,具體操作及相關注意事項如下:(1). 解壓mysql-5.1.30.tar.gz,并進行配置rootFreebsdMaster/softwares#tarzxvfmysql-5.1.30.tar.gzrootFreebsdMa

8、ster/softwares#cdmysql-5.1.30rootFreebsdMaster/softwares/mysql-5.1.30#./configure-prefix=/app/mysql5-with-charset=gb2312說明:MySQL默認的安裝目錄是/usr/local/mysql,為了增強系統(tǒng)部署的靈活性,緊貼用戶應用系統(tǒng)實際情況,可以用-prefix參數(shù)定制安裝目錄。-with-charset參數(shù)是使MySQL數(shù)據(jù)庫支持中文gb2312字符集,如果需要支持其它字符集,使用-with-extra-charset參數(shù),格式為-with-extra-charset=CHAR

9、SET1,CHARSET2, 。(2). 編譯安裝MySQLrootFreebsdMaster/softwares/mysql-5.1.30#/usr/local/bin/makerootFreebsdMaster/softwares/mysql-5.1.30#/usr/local/bin/makeinstallrootFreebsdMaster/softwares/mysql-5.1.30#/usr/local/bin/makeclean注意一定要按絕對路徑調(diào)用GNU C編譯器,否則編譯過程報錯退出。(3). 為系統(tǒng)添加mysql用戶組和用戶rootFreebsdMaster/#pwgrou

10、paddmysqlrootFreebsdMaster /# adduserFreeBSD系統(tǒng)沒有groupadd命令,其添加用戶組的命令是pw,添加用戶命令adduser按系統(tǒng)提示操作即可完成。當然用 pw user add mysql命令也可以完成添加用戶mysql的功能,但不如adduser命令功能完善。(4). 更改/app/mysql5目錄及文件屬性rootFreebsdMaster/app#chmodRmysqlmysql5rootFreebsdMaster/app#chgrpRmysqlmysql5說明:/app/mysql5為MySQL數(shù)據(jù)庫系統(tǒng)所在目錄,如果用戶部署的應用系統(tǒng)數(shù)

11、據(jù)量極大,可以將數(shù)據(jù)庫系統(tǒng)目錄設在大容量磁盤陣列上。磁盤陣列設置與具體機器硬件相關性很大,具體操作設置參考具體硬件系統(tǒng)說明和FreeBSD操作手冊。不借助第三方軟件,F(xiàn)reeBSD 7.0-Release系統(tǒng)可以配置RAID0、RAID1磁盤陣列。(5). 安裝MySQL系統(tǒng)初始數(shù)據(jù)庫rootFreebsdMaster/softwares/mysql-5.1.30#./scripts/mysql_install_db.sh-basedir=/app/mysql5-data-dir=/app/mysql5/data注意:必須考慮Unix系統(tǒng)的文件權限特性,首先給mysql_install_db.

12、sh腳本添加可執(zhí)行屬性,否則安裝腳本無法執(zhí)行。執(zhí)行chmod +x ./scripts/mysql_install_db.sh命令即可。參數(shù)-basedir=/app/mysql5和-datadir=/app/msyql5/data為必加參數(shù),否則腳本運行報錯退出,無法安裝系統(tǒng)初始數(shù)據(jù)庫mysql和測試數(shù)據(jù)庫test,mysql數(shù)據(jù)庫包含系統(tǒng)權限設置表,沒有這些表數(shù)據(jù)庫服務進程mysqld將無法啟動。(6). 再次更改/app/mysql5目錄及其文件屬性rootFreebsdMaster/app#chmodRrootmysql5rootFreebsdMaster/app#chmodRmysq

13、lmysql5/data這樣做是為了保證系統(tǒng)安全,防止通過MySQL系統(tǒng)漏洞的入侵行為。MySQL以mysql用戶身份運行,對/data目錄具有完全訪問權限,對其它目錄則只有系統(tǒng)管理員根據(jù)需要設置的訪問權限,確保FreeBSD系統(tǒng)的安全。這里需要特別提醒用戶注意的是要確保mysqld文件(MySQL的守護進程,位于/app/mysql5/libexec目錄下)沒有設置setuid標志位,如果設置了該標志位,入侵者對其它文件就具有其不應有的權限。具體原因參考關于Unix系統(tǒng)安全的手冊,本文對這個問題不再贅述。(7). 啟動MySQL服務器上述操作全部完成以后,輸入如下命令啟動MySQL數(shù)據(jù)庫服務

14、守護進程:rootFreebsdMaster/#/app/mysql5/bin/mysqld_safeuser=mysql&-user參數(shù)表示以mysql用戶身份運行MySQL數(shù)據(jù)庫服務守護進程,“&”符號表示以后臺方式運行。輸入 netstat an|grep 3306命令,如果看到下面的輸出則表示MySQL5.1.30已在用戶系統(tǒng)上編譯安裝成功。其中,3306是MySQL數(shù)據(jù)庫系統(tǒng)默認的監(jiān)聽端口號。rootFreebsdMaster/#netstatan|grep3306tcp400*.3306*.*LISTEN按照同樣方法與步驟在其它三臺機器上安裝FreeBSD 7.0-

15、Release與MySQL5.1.30,為下面的MySQL服務器集群配置準備好系統(tǒng)平臺基礎。3.2 系統(tǒng)配置所有系統(tǒng)安裝完畢之后,需要對它們做一些必要的配置方可按照用戶預先設計的結構模型實現(xiàn)具有負載均衡功能的MySQL服務器集群。3.2.1 FreeBSD操作系統(tǒng)配置(1). 調(diào)整內(nèi)核參數(shù),優(yōu)化操作系統(tǒng)性能因為是處于生產(chǎn)環(huán)境的服務器,投入正常運行之前一定要對內(nèi)核參數(shù)進行必要的調(diào)整,提升系統(tǒng)性能,加強穩(wěn)定性。簡要說就是去掉不必要的硬件支持選項,使新內(nèi)核占用更少的內(nèi)存,加快啟動速度。不同機器硬件系統(tǒng)差異很大,用戶可根據(jù)具體系統(tǒng)的硬件情況不斷調(diào)整試驗,最終定制出最優(yōu)化、最安全的FreeBSD系統(tǒng)。一

16、定要屏蔽掉組合鍵Ctrl+Alt+Del的熱重啟功能,防止用戶誤按Ctrl+Alt+Del重啟系統(tǒng),引起數(shù)據(jù)庫系統(tǒng)服務意外中斷。在內(nèi)核配置文件如MYKERNEL中加入:options SC_DISABLE_REBOOT重新編譯系統(tǒng)內(nèi)核,重啟后即可屏蔽Ctrl+Alt+Del組合鍵的熱重啟功能。如何定制新內(nèi)核及重新編譯FreeBSD系統(tǒng),用于可參考FreeBSD系統(tǒng)手冊,此不贅述。(2). 進行其它設置,增強系統(tǒng)安全性用戶可根據(jù)以下一般安全準則設置自己的FreeBSD系統(tǒng)。選擇一個好的密碼并予以妥善保護。對于敏感文件采用適當安全等級的加密算法進行加密。對于敏感級別不是很高的文件采用系統(tǒng)自帶的cr

17、ypt工具加密;對于敏感度極高的文件則使用專用加密工具,如PGP、GPG進行不對稱加密,提高加密文件的防攻擊能力。仔細設置文件訪問權限,達到保護文件目的。保護好自己的.profile文件。恰當設置.profile文件的訪問權限,確保只有自己能訪問。仔細維護已設置setuid或setgid標志位的任何程序。禁止不加防范地離開已注冊終端。任何時候都必須按常規(guī)正常退出系統(tǒng),先執(zhí)行clear清屏命令,防止其它用戶看到操作痕跡,再執(zhí)行exit命令退出終端。防范特洛伊木馬程序。正確設置PATH變量的檢索順序,確保系統(tǒng)目錄位于當前目錄的前面。防范病毒的入侵。監(jiān)控最近一次注冊時間,確保沒有他人盜用自己的帳號。

18、特別提示:對于生產(chǎn)環(huán)境的服務器,一定要保證服務器的物理安全,安全措施再完善的系統(tǒng),一旦被入侵者物理接觸,所有的安全措施將形同虛設!Unix系統(tǒng)安全是一個很大的課題,本文只是提及了一些最膚淺的常識,具體內(nèi)容用戶可以參考相關書籍或網(wǎng)上資源。為確保Unix系統(tǒng)的配置具有高度的安全性,可以使用Internet安全中心(Center for Internet Security,CIS)提供的安全測試工具Benchmarks或評估工具Scoring Tools,檢驗和監(jiān)控系統(tǒng)配置的安全性 4。3.2.2 MySQL數(shù)據(jù)庫系統(tǒng)配置為了能使上述系統(tǒng)實現(xiàn)一對多的主從復制(replication)和冗余機制,還需

19、要對以上四個MySQL服務器進行一些必要的配置。(1). 配置主機名和IP地址本實現(xiàn)方案中把MySQL服務器Master主機名設為FreebsdMaster,IP地址配置為00,其它三臺Slave依次設為FreebsdSlave1,01;FreebsdSlave2,02;FreebsdSlave3,IP地址03。(2). 設置root用戶密碼MySQL的root用戶初始密碼為空,為保證系統(tǒng)安全必須為root用戶設置密碼:rootFreebsdMaster/#/app/mysql5/bin/mysqluroo

20、tpEnterpassword:mysql>SETPASSWORD=PASSWORD(secret);同Unix系統(tǒng)一樣,輸入密碼時屏幕沒有任何回顯,進入系統(tǒng)后執(zhí)行SET PASSWORD SQL語句設置或修改MySQL root用戶密碼。為使應用系統(tǒng)服務器遠程連接到MySQL數(shù)據(jù)庫服務器,除本地root用戶以外,還要設置一個能從用戶內(nèi)部網(wǎng)絡其它終端登錄的root用戶。具體操作如下:mysql>USEmysql;mysql>UPDATEuserSETHost=%WHEREHost=hostname.yourdomainANDUser=root;mysql>flushpr

21、ivileges;完成上述操作后應用系統(tǒng)服務器就可以連接到MySQL數(shù)據(jù)庫服務器進行各種操作了,這個遠程root用戶的初始密碼為空,用戶需要從遠程終端登錄,為其設置密碼。(3). 開啟MySQL服務器的二進制更新日志功能上述MySQL服務器安裝完成后,安裝程序沒有生成f配置文件,為此用戶需要手工添加/etc/f文件。MySQL服務是由/app/myql5/libexec/mysqld提供的,其尋找f配置文件的默認順序為/etc/f,/f,/usr/local/mysql/etc/f。啟動ee編輯器,# ee /etc/f,在Master機器的配置文件寫入如下內(nèi)容:mysqldlog-bin=m

22、ysql-master-binserver-id=1在其它三臺Slave機器的配置文件/etc/f文件寫入如下內(nèi)容:mysqldserver-id=int其中,int為一大于1且互不相等的正整數(shù),如2,3,4等。務必要正確設置每個機器上的/etc/f配置文件,尤其是server-id不能有重復,這是一對多數(shù)據(jù)庫復制能否成功的關鍵5!設定好上述/etc/f文件后啟動Master上的MySQL數(shù)據(jù)庫服務時就自動開啟了二進制更新日志功能。在Slave上啟動MySQL時要加上-log-bin參數(shù),即可開啟二進制更新日志功能。在Slave機器上啟動MySQL服務的命令如下:#/app/mysql5/bi

23、n/mysqld_safe-user=mysql-log-bin&這樣做的目的為了實現(xiàn)冗余容錯功能。當主服務器Master出現(xiàn)故障停止服務時,在預轉換角色成為Master的Slave上執(zhí)行STOP SLAVE; RESET MASTER SQL語句,在其它兩臺Slave上執(zhí)行CHANGE MASTER TO SQL語句,執(zhí)行STOP SLAVE; RESET MASTER SQL語句的Slave服務器即轉換成新的Master,其余兩臺機器則從新的Master復制數(shù)據(jù)庫數(shù)據(jù)(復制的是更新UPDATE、INSERT等操作,并不是簡單的copy),從而實現(xiàn)冗余容錯。3.3 系統(tǒng)實現(xiàn)完成上述準

24、備后可以開始實現(xiàn)MySQL數(shù)據(jù)庫的一對多復制,對應用系統(tǒng)的數(shù)據(jù)庫訪問代碼進行優(yōu)化,使更新操作UPDATE、INSERT等SQL語句定向到Master服務器,查詢檢索SELECT語句定向到Slave服務器,從而實現(xiàn)負載均衡;當主服務器Master出現(xiàn)故障停止服務時,通過服務器角色轉換實現(xiàn)冗余容錯;上述所有服務器通過高速核心交換機連接在一起,協(xié)同工作,提供集群(Cluster)性能。下面,本文就此舉一簡例,具體說明實現(xiàn)(Implementation)步驟。3.3.1 準備主服務器(1). 在主服務器上創(chuàng)建示例數(shù)據(jù)庫repl_db從本地或遠程終端登錄到Master服務器,執(zhí)行CREATE DATAB

25、ASE repl_db;語句,創(chuàng)建示例數(shù)據(jù)庫repl_db。建立表repl_table:mysql>CREATETABLErepl_table(f1INT,f2VARCHAR(20);向表中添加數(shù)據(jù):mysql>INSERTINTOrepl_table(f1,f2)VALUES(1,first);(2). 授予Slave復制(Replication)權限授予從屬服務器Slave進行復制的權限。假設從屬服務器連接到主服務器復制的用戶名為“repl”,密碼為“g00r002b”:mysql>GRANT REPLICATION SLAVE ON *.* TO repl% IDENT

26、IFIED BY g00r002b;刷新系統(tǒng)權限表,鎖定寫入語句操作:mysql>FLUSHTABLESWITHREADLOCK;這時所有寫入操作都被鎖定,包括支持事務(Transaction)特性的InnoDB類型表的提交(COMMIT)操作也被鎖定,為數(shù)據(jù)庫初始復制(copy)做好準備。(3). 簡單備份repl_db在此,通過tar命令把數(shù)據(jù)庫初始數(shù)據(jù)備份到/tmp目錄。#tarcvf/tmp/mysql-data.tar/app/mysql5/data/repl_db(4). 記錄主服務器狀態(tài)執(zhí)行SHOW MASTER STATUS 語句:mysql>SHOWMASTERS

27、TATUS;-+-+-+-+|File|Position|Binlog_Do_DB|Binlog_Ignore_DB|+-+-+-+-+|mysql-master-bin.000001|1027|+-+-+-+-+記下File和Position兩個參數(shù)的值,從屬服務器Slave為了復制(replication)連接到主服務器Master時要用到這兩個參數(shù),如果參數(shù)與此不符將導致復制(replication)失敗!(5). 釋放主服務器表級寫入鎖定mysql>UNLOCKTABLES;至此,主服務器解除寫入鎖定,一對多復制準備工作已全部完成,準備接受Slave的復制(replication

28、)連接。3.3.2 準備從屬服務器(1). 停止從屬服務器的MySQL數(shù)據(jù)庫服務#/app/mysql5/bin/mysqladminurootpshutdownEnterpassword:輸入MySQL系統(tǒng)root用戶密碼,MySQL服務停止。(2). 簡單copy數(shù)據(jù)庫初始數(shù)據(jù)在從屬服務器上執(zhí)行ftp操作,訪問主服務器,下載/tmp/mysql-data.tar文件,在/app/mysql5/data目錄下執(zhí)行如下操作,把初始數(shù)據(jù)copy到Slave服務器:rootFreebsdSlave1/app/mysql5/data#tarxvf/tmp/msyql-data.tar其它兩臺Slav

29、e服務器執(zhí)行同樣操作,實現(xiàn)數(shù)據(jù)庫初始數(shù)據(jù)的簡單copy。(3). 重啟從屬服務器上的MySQL數(shù)據(jù)庫服務#/app/mysql5/bin/mysqld_safe-user=mysql-log-bin&從屬服務器已啟動,同時啟動二進制更新日志功能,為角色轉換做好準備。(4). 登錄到從屬服務器Slave的MySQL客戶端#/app/mysql/bin/msyqluroot-p(5). 啟動從屬服務器上的復制(replication)線程mysql>CHANGEMASTERTO->MASTER_HOST='00',->MASTER_U

30、SER='repl',->MASTER_PASSWORD='g00r002b',->MASTER_LOG_FILE='mysql-master-bin.000001',->MASTER_LOG_POS=1027;QueryOK,0rowsaffected(0.00sec)mysql>STARTSLAVE;QueryOK,0rowsaffected(0.00sec)在所有從屬服務器上執(zhí)行相同的操作,自此從屬服務器已連接到主服務器,開始真正意義上的replication工作。測試從屬服務器的復制工作是否正常:mysql>

31、showslavestatusG*1.row*Slave_IO_State:WaitingformastertosendeventMaster_Host:00Master_User:replMaster_Port:3306Connect_Retry:60Master_Log_File:mysql-master-bin.000001Read_Master_Log_Pos:1027Relay_Log_File:FreebsdSlave1-relay-bin.000005Relay_Log_Pos:251Relay_Master_Log_File:mysql-master-bi

32、n.000001Slave_IO_Running:YesSlave_SQL_Running:Yes看到上述信息說明從屬服務器已啟動了與replication相關的線程I/O和SQL,一對多的replication已經(jīng)開始工作。(6). 功能測試在主服務器上寫入新的數(shù)據(jù):mysql>INSERTINTOrepl_table(f1,f2)VALUES(2,second);mysql>SELECT*FROMrepl_table;+-+-+|f1|f2|+-+-+|1|first|2|second|+-=-+-+2rowsinset(0.01sec)在Slave上執(zhí)行相同的查詢操作:mys

33、ql>SELECT*FROMrepl_table;+-+-+|f1|f2|+-+-+|1|first|2|second|+-+-+2rowsinset(0.01sec)得到相同的查詢結果,說明復制(replication)機制已成功開始工作!3.3.3 配置網(wǎng)絡DNS服務器在BIND DNS服務器中,為上述三臺從屬服務器Slave配置同一個名字,客戶端的查詢檢索操作將由DNS服務器定向到其中的一臺Slave。因此,對于同一名字,不同的客戶端會定向到不同的地址,訪問不同的MySQL服務器,從而達到負載均衡的目的。假設用戶為三臺Slave分配的DNS名字為mysqlslave.yourdom

34、ain,DNS服務器區(qū)域文件/var/named/yourdomain.zone中應包含如下數(shù)據(jù)項6:sqlmaster.yourdomain.INA00sqlslave1.yourdomain.INA01sqlslave2.yourdomain.INA02sqlslave3.yourdomain.INA03sqlslaveINCNAMEsqlslave1sqlslaveINCNAMEsqlslave2sqlslaveINCNAMEsqlslave3當客戶端進行查詢操作時,提交給主機sqlslave.you

35、rdomain的請求將由DNS服務器隨機定向到三臺Slave中的一臺,由其執(zhí)行查詢作業(yè),返回結果。從而在三臺Slave之間實現(xiàn)查詢級別的負載均衡。3.3.4 應用系統(tǒng)程序代碼優(yōu)化實際應用中,對數(shù)據(jù)庫的寫入操作相對查詢操作少得多,因此,優(yōu)化應用程序的數(shù)據(jù)庫連接代碼,把寫入操作定向到Master服務器,查詢操作定向到Slave服務器,提供主服務器和從屬服務器之間更新、查詢的負載均衡功能。本文以PHP數(shù)據(jù)庫連接代碼為例,簡要介紹代碼優(yōu)化方法7。(1). 準備不同的數(shù)據(jù)庫連接配置文件準備兩個數(shù)據(jù)庫連接文件mysql_connect_master.php和mysql_connect_slave.php,

36、其文件內(nèi)容如下:mysql_connect_master.php文件的內(nèi)容:/ConnecttotheDatabaseServer$linkID=mysql_connect("sqlmaster.yourdomain","user","password")ordie("Sorry,couldnotconnecttothedatabase!");/SelecttheDatabasemysql_select_db("repl_db")ordie("Sorry,Couldnotselectd

37、atabase!");?>mysql_connect_slave.php文件的內(nèi)容:/ConnecttotheDatabaseServer$linkID=mysql_connect("sqlslave.yourdomain","user","password")ordie("Sorry,couldnotconnecttothedatabase!");/SelecttheDatabasemysql_select_db("repl_db")ordie("Sorry,Coul

38、dnotselectdatabase!");?>(2). 優(yōu)化程序SQL語句代碼對應用程序中訪問數(shù)據(jù)庫的代碼段做出如下優(yōu)化:./$sqlisthequerystringtobecommittedtoMySQLserver.if(stripos($sql,"SELECT")include_once("./mysql_connect_slave.php");.mysql_close();elseinclude_once("./mysql_connect_master.php");.mysql_close();.?>說

39、明:每當向MySQL服務器提交數(shù)據(jù)庫操作時,加入一個if-else判斷語句對變量$sql進行判斷定向,如果是SELECT查詢操作,將其定向到從屬服務器Slave中的一個;如果是其它更新語句,則將其定向到主服務器Master。此處代碼段是應用系統(tǒng)實現(xiàn)負載均衡的關鍵,用戶務必根據(jù)自己實際情況,寫出準確無誤的代碼。每次對數(shù)據(jù)庫操作完畢都要及時釋放數(shù)據(jù)庫連接,以免更新、查詢操作分別定向失敗,影響系統(tǒng)負載均衡功能。這樣做雖然在一定程度上增加Web服務器或應用服務器的開銷,但與MySQL服務器集群負載均衡功能帶來的大幅性能提升及冗余容錯特性相比,這個開銷絕對是物超所值!3.4 注意事項正確部署實現(xiàn)具有負載

40、均衡功能的MySQL服務器集群必須注意以下事項:(1). MySQL數(shù)據(jù)庫復制(replication)特性是核心此處的復制不是簡單的copy,從屬服務器啟動兩個線程(thread):I/O線程和SQL線程,I/O線程接收主服務器對參與復制數(shù)據(jù)庫的更新操作事件(event),并記入自己的中繼二進制更新日志文件(hostname-relay-bin.00000n),由SQL線程將更新操作寫入自己的數(shù)據(jù)庫表項。主從服務器之間復制的不是具體的數(shù)據(jù)內(nèi)容,而是具體的以二進制格式記錄的操作事件,因而在一定程度上實現(xiàn)主從服務器之間的數(shù)據(jù)同步。(這種復制類似于生物學意義上的按基因復制,在英語中replicat

41、ion的主要詞義就是指該種復制。)(2). 復制的復雜性主從數(shù)據(jù)庫服務器間的replication要求Master與Slave上的MySQL版本最好一致,主從服務器必須設置相同的字符集,否則很容易造成復制失敗。主服務器上更新權限表內(nèi)容的FLUSH語句不會被復制8。(3). 按照范式化要求設計數(shù)據(jù)庫生產(chǎn)環(huán)境下基于MySQL服務器的應用系統(tǒng)要想穩(wěn)定運行,按范式化設計系統(tǒng)數(shù)據(jù)庫是基本要求,具體內(nèi)容可參考相關書籍。(4). 打開數(shù)據(jù)庫服務器的遠程用戶連接功能打開主從服務器的遠程用戶連接是實現(xiàn)更新、查詢操作分別定向的必要條件,否則,來自應用服務器的連接請求失敗,影響系統(tǒng)應用正常運行。(5). 負載均衡功能的實現(xiàn)需要良好的團隊合作BIND DNS服務器實現(xiàn)了從屬服務器Slave之間的負載均衡,Slave和Master之間的負載均衡則由應用系統(tǒng)開發(fā)人員在程序代碼級實現(xiàn)。整個系統(tǒng)的性能提升和冗余容錯需要網(wǎng)絡管

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論