MySQL高可用之LVS + Keepalived + MySQL
1.架構圖
注意
(一) Mysql需要把bind-address的配置去掉,否則無法實現虛擬ip訪問
(二) 關閉所有linux防火牆:/sbin/iptables –F(可能沒用)
(三) 重啟networking:sudo /etc/init.d/networking restart(可能沒用)
2. 架構Mysql:
master<=slave
10.24.6.5:3306(system !System)<=10.24.6.6:3306(system !System)
LB
10.24.6.4 Master
10.24.6.7 BACKUP
VIP:
10.24.6.2
3.LVS負載平衡配置3.1. Lvs模組檢測
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 |
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的核心,所以不需要再編譯核心了
3.2.配置
LVS預設不需要配置
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. 負載平衡服務的啟用和驗證
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 暫時不綁定。如所示:
4.6. Vip驗證
Master
Slave
4.7. IPVSADM驗證
Master
Clave
4.8. 測實驗證
實體mysql
Vip mysql
4.9. 高可用測試結果
LB:
10.24.6.4 Master關閉以後,10.24.6.7 BACKUP啟用接管
MYSQL:
10.24.6.5:3306
10.24.6.6:3306
任意一個mysql異常之後,可串連到其他mysql
5. 遇到問題5.1. Mysql串連不上(錯誤碼111)分析
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配置:
6. 總結
- 主mysql和從mysql可以同時存在服務
- Keepalive從可用的服務列表裡面選擇一個服務訪問
- 主mysql和從mysql隨機播放
- 適合做負載平衡,主從備份
- share nothing架構
Linux下HAProxy+Keepalived雙機高可用方案
Haproxy+Keepalived搭建Weblogic高可用負載平衡叢集
Keepalived+HAProxy配置高可用負載平衡
CentOS 6.3下Haproxy+Keepalived+Apache配置筆記
Haproxy + KeepAlived 實現WEB群集 on CentOS 6
Haproxy+Keepalived構建高可用負載平衡
本文永久更新連結地址: