(一) Mysql須要把bind-address的配置去掉,不然沒法實現虛擬ip訪問mysql
(二) 關閉全部linux防火牆:/sbin/iptables –F(可能沒用)linux
(三) 重啓networking:sudo /etc/init.d/networking restart(可能沒用)sql
master<=slavewindows
10.24.6.5:3306(system !System)<=10.24.6.6:3306(system !System) 安全
10.24.6.4 Masterbash
10.24.6.7 BACKUP網絡
10.24.6.2架構
Ipvs 具體實現是由ipvsadm 這個程序來完成,所以判斷一個系統是否具有ipvs 功能,只須要察看ipvsadm 程序是否被安裝。察看ipvsadm 程序最簡單的辦法就是在任意路徑執行命令ipvsadm。表6-1 爲安裝ipvsadm 及未安裝ipvsadm 的輸出對比。負載均衡
|
執行 ipvsadm 後的輸出socket |
未安裝ipvsadm |
bash: /sbin/ipvsadm: 沒有那個文件或目錄 |
安裝ipvsadm |
IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags ->RemoteAddress:Port Forward Weight ActiveConn InActConn |
|
a) 經過系統命令比較簡單:apt-get install ipvsadm
b) 檢驗ipvsadm 是否被正確安裝
i. 執行ipvsadm,看是否有表6-1 第2 欄的輸出。
ii. 檢查當前加載的內核模塊,看是否存在ip_vs 模塊。
modprobe -l |grep ipvs
或lsmod | grep ip_vs
Ubuntu9.10已經用了2.6的內核,因此不須要再編譯內核了
LVS默認不須要配置
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
}
}
}
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
}
}
}
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 :
Lvs 客戶端的啓用和驗證在前面的有過詳細的說明,此處略過。前面咱們也提過,keepalived 啓動過程不會檢查配置文件的語法,所以在啓動keepalived 之前,須要人工對/etc/keepalived/keepalived.conf 文件作全面的語法檢查。一個比較容易犯的錯誤就是把花括號「}」寫漏了,不成對!當lvs 客戶端都正常啓動而且配置文件經檢查無誤後(固然有錯誤也無妨,隨時能夠修改嘛!),執行命令 /usr/local/keepalived/sbin/keepalived –D ,而後咱們查看系統進程,看是不是3 個keepalived 進程。若是配置文件的路徑不是/etc/keepalived/keepalived.conf 則須要在啓動時用選項-f 指定。
最能反映keepalived 啓動狀況的地方當屬系統日誌。手動執行啓動操做後,使用命令 tail –f /var/log/syslog 滾動查看輸出,就能詳細瞭解其運行狀況。圖6-3 爲某個lvs 環境的keepalived 啓動輸出:
另一個反映keepalived 正常運行狀態的地方是網絡接口vip 的啓用。經過執行ip add 便可看見vip 已經被綁定在制定的網絡接口(注意:ifconfig 不能顯示 vip)。須要注意的是,BACKUP 的vip 暫時不綁定。以下圖所示:
Master
Slave
Master
Clave
實體mysql
Vip mysql
LB:
10.24.6.4 Master關閉之後,10.24.6.7 BACKUP啓用接管
MYSQL:
10.24.6.5:3306
10.24.6.6:3306
任意一個mysql異常以後,可鏈接到其餘mysql
1.Mysql鏈接vip
2.Mysql鏈接vip的抓包狀況
經過抓包可知,10.24.6.2:3306是能夠連上的,它有回包,只不過回包的狀態爲R
3.TCP鏈接出現RST的狀況分析:
@1端口未打開
@2請求超時
@3提早關閉
4.在結合mysql返回值爲111能夠知道應該是mysql服務提早關閉了,
Google了下mysql111的解決辦法:
QT連接Mysql的時候出現QSqlError(2003, "QMYSQL: Unable to connect", "Can't connect to MySQL server on '172.18.186.244' (111)")錯誤,google以後發現是mysql爲了安全,對hostname進行了綁定。
解決辦法:修改/etc/mysql/my.cnf(不一樣Linux發行版位置可能不一樣,我用的是Ubuntu 11.04,windows是my.ini文件),裏面有一句:bind-address = 127.0.0.1用#註釋掉,重啓mysql服務就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配置: