實驗環境:一台web服務器lap 192.168.1.117
一台mysql master 192.168.1.18
一台mysql slave 192.168.1.19
如果沒有此環境 就自己部署一個lap+mysql主從的web
繼上一章節MySQL主從配置完畢后,接着配置keepalived、heartbeat服務,主要用於Mysql故障自動切換。那說到keepalived,keepalived到底是什么呢?
keepalived是一個類似於layer3, 4 & 7交換機制的軟件,也就是我們平時說的第3層、第4層和第7層交換。
Keepalived的作用是檢測web服務器的狀態,如果有一台web服務器、Mysql服務器宕機,或工作出現故障,Keepalived將檢測到后,會將有故障的web服務器或者Mysql服務器從系統中剔除,當服務器工作正常后Keepalived自動將web、Mysql服務器加入到服務器群中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的WEB和Mysql服務器
keepalived是一個類似於layer3, 4 & 7交換機制的軟件,也就是我們平時說的第3層、第4層和第7層交換。
Keepalived的作用是檢測web服務器的狀態,如果有一台web服務器、Mysql服務器宕機,或工作出現故障,Keepalived將檢測到后,會將有故障的web服務器或者Mysql服務器從系統中剔除,當服務器工作正常后Keepalived自動將web、Mysql服務器加入到服務器群中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的WEB和Mysql服務器。
Layer3,4&7工作在IP/TCP協議棧的IP層,TCP層,及應用層,原理分別如下:
Layer3:Keepalived使用Layer3的方式工作式時,Keepalived會定期向服務器群中的服務器發送一個ICMP的數據包(既我們平時用的Ping程序),如果發現某台服務的IP地址沒有激活,Keepalived便報告這台服務器失效,並將它從服務器群中剔除,這種情況的典型例子是某台服務器被非法關機。Layer3的方式是以服務器的IP地址是否有效作為服務器工作正常與否的標准。
Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的狀態來決定服務器工作正常與否。如web server的服務端口一般是80,如果Keepalived檢測到80端口沒有啟動,則Keepalived將把這台服務器從服務器群中剔除。
Layer7:Layer7就是工作在具體的應用層了,比Layer3,Layer4要復雜一點,在網絡上占用的帶寬也要大一些。Keepalived將根據用戶的設定檢查服務器程序的運行是否正常,如果與用戶的設定不相符,則Keepalived將把服務器從服務器群中剔除.
keepalived是VRRP的完美實現 在介紹keepalived之前,先介紹一下VRRP的原理。
在現實的網絡環境中,兩台需要通信的主機大多數情況下並沒有直接的物理連接。對於這樣的情況,它們之間路由怎樣選擇?主機如何選定到達目的主機的下一跳路由,這個問題通常的解決方法有二種:
1) 在主機上使用動態路由協議(RIP、OSPF等)
2) 在主機上配置靜態路由
很明顯,在主機上配置路態路由是非常不切實際的,因為管理、維護成本以及是否支持等諸多問題。配置靜態路由就變得十分流行,但路由器(或者說默認網關default gateway)卻經常成為單點。
VRRP的目的就是為了解決靜態路由單點故障問題。
VRRP通過一競選(election)協議來動態的將路由任務交給LAN中虛擬路由器中的某台VRRP路由器。
開始試驗:其實keepalived 就是自動切換mysql主從 假如主數據庫掛了 則需要人工手動去切換 這樣很麻煩的比如下面的演示:
1.18 和 1.19 mysql都是好的 此時1.117鏈接的是主1.18,這里是域名鏈接,這樣方便我們切換。
其實主數據庫是好的 從就沒什么用 就好比數據同步 那么假如主掛了
那么此時數據庫就會出現問題
那么我們就要切換slave數據庫
這樣在真實企業中會慢的 也不方便 那么keepalived 能在瞬間通過vrrp綁定虛擬路由vip幫我們解決自動切換
Keepalived安裝配置:
wget http://www.keepalived.org/software/keepalived-1.2.1.tar.gz(兩台數據庫都要安裝) 防火牆和selinux都關掉
tar zxf keepalived-1.2.1.tar.gz
cd keepalived-1.2.1 &&./configure --with-kernel-dir=/usr/src/kernels/2.6.18-164.el5-i686(這里寫的是自己機器的內內核 這里記住如果內核Tab不出來, 那么我們就安裝內核擴展包 yum –y install kernel kernel-devel)
(這里編譯出錯 就安裝yum -y install popt-devel)
make && make install
DIR=/usr/local/ ;cp $DIR/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp $DIR/etc/sysconfig/keepalived /etc/sysconfig/ && mkdir -p /etc/keepalived
cp $DIR/sbin/keepalived /usr/sbin/
修改Master 服務器上keepalived.conf配置如下,vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
1039821294@qq.com
}
notification_email_from 1039821294@qq.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
# VIP1
vrrp_instance VI_1 {
state MASTER (記住在數據庫主上就是MASTER 從上面就是BACKUP)
interface eth0
lvs_sync_daemon_inteface eth0
virtual_router_id 151
priority 100
advert_int 5
nopreempt
authentication {
auth_type PASS
auth_pass 2222
}
virtual_ipaddress {
192.168.1.100 (這個vrrp必須和你的數據庫保持在一個網段)
}
}
virtual_server 192.168.1.100 3306 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.1.18 3306 {
weight 100
notify_down /data/sh/mysql.sh
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
Mysql 從服務器配置keepalived.conf跟master一樣,只需要把Realserver IP修改成real_server 192.168.1.19;優先級從100改成90即可。
! Configuration File for keepalived
global_defs {
notification_email {
1039821294@qq.com
}
notification_email_from 1039821294@qq.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
# VIP1
vrrp_instance VI_1 {
state BACKUP
interface eth0
lvs_sync_daemon_inteface eth0
virtual_router_id 151
priority 90
advert_int 5
nopreempt
authentication {
auth_type PASS
auth_pass 2222
}
virtual_ipaddress {
192.168.1.100
}
}
#######Define virtual####################
virtual_server 192.168.1.100 3306 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.1.19 3306 {
weight 100
notify_down /data/sh/mysql.sh
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
在master、slave數據庫上創建/data/sh/mysql.sh腳本,內容為:
/etc/init.d/keepalived stop
然后分別重啟兩台數據庫上keepalived服務即可。
tail –fn 10 /var/log/messages
如果日志有報錯就執行 modprobe ip_vs (主從都是一樣 都要加 一般沒有報錯就不要執行)
通過 ip addr list 可以查看vrrp的ip
我們可以用 telnet 192.168.1.100 3306
那么我們把192.168.1.117web服務器上的數據庫dns改為虛擬vip192.168.1.100
然后測試網站是否能打開
最后測試停止master Mysql服務,就會自動切換到Backup從數據庫上。然后再重啟主數據庫和keepalived ,vip又會跑到master上
關於Mysql集群高可用就在此告一段落,當然除了keepalived高可用之外,Mysql優化還可以進行讀寫分離、Mysql+DRBD、拆分表等等優化,有興趣的童鞋可以繼續深入研究。