Citrix NetScaler是一款不錯(cuò)的4-7層硬件負(fù)載均衡交換機(jī),市場(chǎng)占有率僅次于F5 BIG-IP,位居第二。NetScaler 8.0是美國(guó)思杰系統(tǒng)有限公司(Citrix Systems, Inc)正式推出的最新版本NetScaler產(chǎn)品系列。
從我的實(shí)際測(cè)試來(lái)看,NetScaler 8.0在七層負(fù)載均衡方面,性能和功能都要比F5 BIG-IP強(qiáng)。
NetScaler 8.0的負(fù)載均衡監(jiān)控中,可以對(duì)MySQL數(shù)據(jù)庫(kù)進(jìn)行健康檢查,而F5 BIG-IP目前只支持對(duì)Oracle和Microsoft SQL Server數(shù)據(jù)庫(kù)的健康檢查。
但是,NetScaler 8.0自帶的MySQL健康檢查腳本(nsmysql.pl)并不完善,它只能檢查一條SQL語(yǔ)句執(zhí)行是否出錯(cuò),并不能檢查MySQL主從結(jié)構(gòu)中的MySQL Slave數(shù)據(jù)庫(kù)同步是否正常、表有無(wú)損壞、同步延遲是否過(guò)大、是否出現(xiàn)錯(cuò)誤、非sleeping狀態(tài)的連程數(shù)是否過(guò)高等情況。于是,我根據(jù)自己的需要,為NetScaler 8.0寫(xiě)了一個(gè)MySQL Slave數(shù)據(jù)庫(kù)負(fù)載均衡健康檢查腳本(nsmysql-slave.pl),實(shí)現(xiàn)了上述需求。
有了“nsmysql-slave.pl”做健康檢查,利用NetScaler的VIP(虛擬IP),就可以完美實(shí)現(xiàn)多臺(tái)MySQL Slave數(shù)據(jù)庫(kù)的負(fù)載均衡了。當(dāng)一臺(tái)MySQL Slave數(shù)據(jù)庫(kù)出現(xiàn)不同步、表?yè)p壞、同步延遲過(guò)大(本腳本中默認(rèn)設(shè)置的落后MySQL主庫(kù)180秒視為延遲,可根據(jù)具體應(yīng)用修改)、連程數(shù)太高(本腳本中默認(rèn)設(shè)置的是大于100視為連程數(shù)太高,可根據(jù)具體應(yīng)用修改)等情況,“nsmysql-slave.pl”就會(huì)自動(dòng)將其檢查出來(lái),并告知NetScaler,NetScaler會(huì)將該數(shù)據(jù)庫(kù)標(biāo)識(shí)為宕機(jī),從而不將用戶的查詢請(qǐng)求傳送到這臺(tái)發(fā)生故障的數(shù)據(jù)庫(kù)上。故障一旦修復(fù),“nsmysql-slave.pl”會(huì)自動(dòng)告知NetScaler,該數(shù)據(jù)庫(kù)已經(jīng)可以使用。
“nsmysql-slave.pl”源代碼如下:
腳本壓縮包下載:
健康檢查腳本寫(xiě)完了,現(xiàn)在開(kāi)始配置NetScaler 8.0:
1、使用SecureCRT等SSH客戶端工具登錄到NetScaler,然后執(zhí)行以下命令:
將“nsmysql-slave.pl”的源代碼粘貼到其中,然后保存退出,再執(zhí)行以下命令:
2、檢查一下從NetScaler上是否能夠連接MySQL Slave數(shù)據(jù)庫(kù):
Enter password:(在此輸入MySQL登錄密碼)
ERROR 1251: Client does not support authentication protocol requested by server; consider upgrading MySQL client
如果你的MySQL Slave服務(wù)器版本高于4.0,就會(huì)出現(xiàn)以上錯(cuò)誤。這是因?yàn)镸ySQL 4.1及其以上版本的密碼驗(yàn)證算法與MySQL 4.0及其以下版本不同,而NetScaler 8.0上的MySQL客戶端默認(rèn)版本為4.0.25,因此,4.0.25版本的MySQL客戶端連接4.1、5.X、6.X版本的MySQL服務(wù)器就會(huì)出錯(cuò)。
解決辦法1:升級(jí)NetScaler 8.0上的MySQL客戶端,但最好不要這么做,因?yàn)镹etScaler與底層的FreeBSD系統(tǒng)和應(yīng)用軟件嵌入很密切的,不要輕易替換成非官方版本,以免導(dǎo)致不兼容、不穩(wěn)定等情況。
解決方法2:在各臺(tái)MySQL Slave服務(wù)器上新建一個(gè)名為“netscaler”的超級(jí)管理員賬號(hào),將密碼改為使用舊加密算法進(jìn)行加密的密碼。如果從安全考慮,可將以下語(yǔ)句中的%換成NetScaler的Subnet IP。
Server version: 5.1.24-rc MySQL Community Server (GPL)
Type "help;" or "h" for help. Type "c" to clear the buffer.
mysql>
3、各臺(tái)MySQL Slave數(shù)據(jù)庫(kù)必須添加允許NetScaler的Subnet IP訪問(wèn)的賬號(hào),因?yàn)樵谕痪W(wǎng)段,不能開(kāi)啟源IP支持,MySQL服務(wù)器上看到的將是NetScaler的Subnet IP:
例如:【W(wǎng)eb服務(wù)器(192.168.1.21)】──→【NetScaler VIP(192.168.1.5)】- - - →【NetScaler Subnet IP(192.168.1.2)】──→【MySQL Slave服務(wù)器(192.168.1.31)】
MySQL Slave服務(wù)器看到的是IP地址是192.168.1.2,就需要添加NetScaler的Subnet IP訪問(wèn)的賬號(hào)("apache"@"192.168.1.2"):
Server version: 5.1.24-rc MySQL Community Server (GPL)
Type "help;" or "h" for help. Type "c" to clear the buffer.
mysql>
4、從Web管理界面登錄NetScaler 8.0,進(jìn)入Configuration頁(yè)面(需要安裝Java Runtime Environment,版本在JRE 1.4.x+以上):
5、點(diǎn)擊【Load Balancing】──【Monitors】欄的“add”按鈕,添加一個(gè)名為“mysql_slave”的MySQL健康檢查:
①、Interval:正常情況下,10秒鐘檢查一次;
②、Response Timeout:每次檢查的超時(shí)時(shí)間為8秒,必須小于Interval;
?、邸own Time:宕機(jī)狀態(tài)下,每5秒鐘檢查一次;
④、Retries:重試5次后仍然檢查失敗,標(biāo)記服務(wù)器為宕機(jī);
⑤、Type:選擇MySQL;
⑥、Script Name:點(diǎn)擊其后的“Browse...”按鈕,選擇我編寫(xiě)的MySQL Slave健康檢查腳本“nsmysql-slave.pl”;
⑦、Dispatcher IP和Dispatcher Port必須填“127.0.0.1”和“3013”,不要改變;
?、唷ser Name輸入剛才創(chuàng)建的賬號(hào)“netscaler“,password輸入創(chuàng)建賬號(hào)時(shí)設(shè)定的“12345678”。
6、點(diǎn)擊【Load Balancing】──【Service Groups】欄的“add”按鈕,添加一個(gè)名為“pool_mysql”的MySQL服務(wù)器池:
?、佟⑻砑诱鎸?shí)MySQL Slave服務(wù)器到“pool_mysql”服務(wù)器池,協(xié)議選擇TCP:
?、?、健康檢查方式選擇第5步中創(chuàng)建的“mysql_slave”:
7、點(diǎn)擊【Load Balancing】──【Virtual Servers】欄的“add”按鈕,添加一個(gè)名為“vs_mysql_slave”的VIP(虛擬IP):
?、?、添加“pool_mysql”服務(wù)器池到名為“vs_mysql_slave”的VIP(192.168.1.5:3306),協(xié)議選擇TCP:
?、?、負(fù)載均衡方式選擇Least Connection(最小連接數(shù)):
8、Web服務(wù)器要訪問(wèn)MySQL Slave,只需訪問(wèn)NetScaler的VIP──192.168.1.5的3306端口即可。至此,已經(jīng)完美解決多臺(tái)MySQL Slave數(shù)據(jù)庫(kù)的負(fù)載均衡問(wèn)題。
聯(lián)系客服