(一) Mysql需要把bind-address的配置去掉,否則無法實現虛擬ip訪問
(二) 關閉所有linux防火牆:/sbin/iptables –F(可能沒用)
(三) 重啟networking:sudo /etc/init.d/networking restart(可能沒用)
master<=slave
10.24.6.5:3306(system !System)<=10.24.6.6:3306(system !System)
10.24.6.4 Master
10.24.6.7 BACKUP
10.24.6.2
Ipvs 具體實現是由ipvsadm 這個程序來完成,因此判斷一個系統是否具備ipvs 功能,只需要察看ipvsadm 程序是否被安裝。察看ipvsadm 程序最簡單的辦法就是在任意路徑執行命令ipvsadm。表6-1 為安裝ipvsadm 及未安裝ipvsadm 的輸出對比。
執行 ipvsadm 後的輸出
未安裝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
表6-1 ipvsadm 輸出對比
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在一個已關閉的socket上收到數據
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配置: