實驗環境:一臺web服務器lap 192.168.1.117mysql
一臺mysql master 192.168.1.18linux
一臺mysql slave 192.168.1.19web
若是沒有此環境 就本身部署一個lap+mysql主從的websql
繼上一章節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層交換。oop
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、拆分表等等優化,有興趣的童鞋能夠繼續深刻研究。