新聞中心
LVS是Linux Virtual Server的簡(jiǎn)稱,也就是Linux虛擬服務(wù)器, 是一個(gè)由章文嵩博士發(fā)起的自由軟件項(xiàng)目,它的官方站點(diǎn)是www.linuxvirtualserver.org。現(xiàn)在LVS已經(jīng)是 Linux標(biāo)準(zhǔn)內(nèi)核的一部分,在Linux2.4內(nèi)核以前,使用LVS時(shí)必須要重新編譯內(nèi)核以支持LVS功能模塊,但是從Linux2.4內(nèi)核以后,已經(jīng)完全內(nèi)置了LVS的各個(gè)功能模塊,無(wú)需給內(nèi)核打任何補(bǔ)丁,可以直接使用LVS提供的各種功能。

創(chuàng)新互聯(lián)公司是一家專注于網(wǎng)站建設(shè)、成都做網(wǎng)站與策劃設(shè)計(jì),衛(wèi)東網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:衛(wèi)東等地區(qū)。衛(wèi)東做網(wǎng)站價(jià)格咨詢:028-86922220
keepalived簡(jiǎn)單來(lái)講就是,Keepalived是一個(gè)專門為lvs提供高可用功能的機(jī)制,它可以實(shí)現(xiàn)當(dāng)有兩個(gè)主從lvs,而且主lvs損壞的時(shí)候,將其IP地址以及l(fā)vs轉(zhuǎn)移至備份lvs上。其高可用主要基于VRRP協(xié)議實(shí)現(xiàn),VRRP是一個(gè)“選舉”協(xié)議,它能夠動(dòng)態(tài)地將一個(gè)虛擬路由器的責(zé)任指定至同一個(gè)VRRP組中的其它路由器上,從而消除了靜態(tài)路由配置的單點(diǎn)故障。如果一個(gè)VRRP設(shè)備將虛擬路由器IP地址作為真實(shí)的接口地址,則該設(shè)備被稱為IP地址擁有者。如果IP地址擁有者是可用的,通常它將成為Master。
1.架構(gòu)圖
注意
(一) MySQL需要把bind-address的配置去掉,否則無(wú)法實(shí)現(xiàn)虛擬ip訪問(wèn)
(二) 關(guān)閉所有l(wèi)inux防火墻:/sbin/iptables –F(可能沒用)
(三) 重啟networking:sudo /etc/init.d/networking restart(可能沒用)
2. 架構(gòu)
Mysql:
master
10.24.6.5:3306(system !System)
LB
10.24.6.4 Master
10.24.6.7 BACKUP
VIP:
10.24.6.2
3.LVS負(fù)載均衡配置
3.1. Lvs模塊檢測(cè)
Ipvs 具體實(shí)現(xiàn)是由ipvsadm 這個(gè)程序來(lái)完成,因此判斷一個(gè)系統(tǒng)是否具備ipvs 功能,只需要察看ipvsadm 程序是否被安裝。察看ipvsadm 程序最簡(jiǎn)單的辦法就是在任意路徑執(zhí)行命令ipvsadm。表6-1 為安裝ipvsadm 及未安裝ipvsadm 的輸出對(duì)比。
| 執(zhí)行 ipvsadm 后的輸出 | |
|---|---|
| 未安裝ipvsadm | bash: /sbin/ipvsadm: 沒有那個(gè)文件或目錄 |
| 安裝ipvsadm | IP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags ->RemoteAddress:Port Forward Weight ActiveConn InActConn |
顯示詳細(xì)信息
表6-1 ipvsadm 輸出對(duì)比
a) 通過(guò)系統(tǒng)命令比較簡(jiǎn)單:apt-get install ipvsadm
b) 檢驗(yàn)ipvsadm 是否被正確安裝
? i. 執(zhí)行ipvsadm,看是否有表6-1 第2 欄的輸出。
? ii. 檢查當(dāng)前加載的內(nèi)核模塊,看是否存在ip_vs 模塊。
modprobe -l |grep ipvs
或lsmod | grep ip_vs
img
Ubuntu9.10已經(jīng)用了2.6的內(nèi)核,所以不需要再編譯內(nèi)核了
3.2.配置
LVS默認(rèn)不需要配置
4.KeepAlived高可用配置
4.1. 安裝
4.2. MASTER配置(/etc/keepalived/keepalived.conf)
global_defs {
router_id HaMySQL_1
}
vrrp_instance VI_MYSQL {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.24.6.2
}
}
virtual_server 10.24.6.2 3306 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 10.24.6.5 3306 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
real_server 10.24.6.6 3306 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
4.3. SLAVE配置(/etc/keepalived/keepalived.conf)
global_defs {
router_id HaMySQL_1
}
vrrp_instance VI_MYSQL {
state BACKUP
interface eth0
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.24.6.2
}
}
virtual_server 10.24.6.2 3306 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 10.24.6.5 3306 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
real_server 10.24.6.6 3306 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
4.4. 日志
Ubuntu下面是/var/log/syslog
All daemon messages are logged through the Linux syslog. If you start Keepalived with the “dump
configuration data” option, you should see in your /var/log/messages (on Debian this may be
/var/log/daemon.log depending on your syslog configuration) something like this :
4.5. 負(fù)載均衡服務(wù)的啟用和驗(yàn)證
Lvs 客戶端的啟用和驗(yàn)證在前面的有過(guò)詳細(xì)的說(shuō)明,此處略過(guò)。前面我們也提過(guò),keepalived 啟動(dòng)過(guò)程不會(huì)檢查配置文件的語(yǔ)法,因此在啟動(dòng)keepalived 以前,需要人工對(duì)/etc/keepalived/keepalived.conf 文件做全面的語(yǔ)法檢查。一個(gè)比較容易犯的錯(cuò)誤就是把花括號(hào)“}”寫漏了,不成對(duì)!當(dāng)lvs 客戶端都正常啟動(dòng)并且配置文件經(jīng)檢查無(wú)誤后(當(dāng)然有錯(cuò)誤也無(wú)妨,隨時(shí)可以修改嘛!),執(zhí)行命令 /usr/local/keepalived/sbin/keepalived –D ,然后我們查看系統(tǒng)進(jìn)程,看是否是3 個(gè)keepalived 進(jìn)程。如果配置文件的路徑不是/etc/keepalived/keepalived.conf 則需要在啟動(dòng)時(shí)用選項(xiàng)-f 指定。
最能反映keepalived 啟動(dòng)情況的地方當(dāng)屬系統(tǒng)日志。手動(dòng)執(zhí)行啟動(dòng)操作后,使用命令 tail –f /var/log/syslog 滾動(dòng)查看輸出,就能詳細(xì)了解其運(yùn)行情況。圖6-3 為某個(gè)lvs 環(huán)境的keepalived 啟動(dòng)輸出:
另外一個(gè)反映keepalived 正常運(yùn)行狀態(tài)的地方是網(wǎng)絡(luò)接口vip 的啟用。通過(guò)執(zhí)行ip add 即可看見vip 已經(jīng)被綁定在制定的網(wǎng)絡(luò)接口(注意:ifconfig 不能顯示 vip)。需要注意的是,BACKUP 的vip 暫時(shí)不綁定。如下圖所示:
4.6. Vip驗(yàn)證
Master
Slave
4.7. IPVSADM驗(yàn)證
Master
Clave
4.8. 測(cè)試驗(yàn)證
實(shí)體mysql
img
Vip mysql
4.9. 高可用測(cè)試結(jié)果
LB:
10.24.6.4 Master關(guān)閉以后,10.24.6.7 BACKUP啟用接管
MYSQL:
10.24.6.5:3306
10.24.6.6:3306
任意一個(gè)mysql異常之后,可連接到其他mysql
5. 遇到問(wèn)題
5.1. Mysql連接不上(錯(cuò)誤碼111)分析
1.Mysql連接vip
2.Mysql連接vip的抓包情況
通過(guò)抓包可知,10.24.6.2:3306是可以連上的,它有回包,只不過(guò)回包的狀態(tài)為R
3.TCP連接出現(xiàn)RST的情況分析:
? @1端口未打開
? @2請(qǐng)求超時(shí)
? @3提前關(guān)閉
? @4在一個(gè)已關(guān)閉的socket上收到數(shù)據(jù)
4.在結(jié)合mysql返回值為111可以知道應(yīng)該是mysql服務(wù)提前關(guān)閉了,
Google了下mysql111的解決辦法:
QT鏈接Mysql的時(shí)候出現(xiàn)QSqlError(2003, “QMYSQL: Unable to connect”, “Can’t connect to MySQL server on ‘172.18.186.244’ (111)”)錯(cuò)誤,google之后發(fā)現(xiàn)是mysql為了安全,對(duì)hostname進(jìn)行了綁定。
解決辦法:修改/etc/mysql/my.cnf(不同Linux發(fā)行版位置可能不同,我用的是Ubuntu 11.04,windows是my.ini文件),里面有一句:bind-address = 127.0.0.1用#注釋掉,重啟mysql服務(wù)就OK了。
原文地址:http://stackoverflow.com/questions/1420839/cant-connect-to-mysql-server-error-111
\5. 解決方案(去掉bind-address):
修改在10.24.6.5的mysql配置:
修改在10.24.6.6的mysql配置:
****
6. 總結(jié)
標(biāo)題名稱:通過(guò)LVS + Keepalived 部署MySQL高可用
鏈接URL:http://m.fisionsoft.com.cn/article/coohhog.html


咨詢
建站咨詢
