keepalived+Mysql主從配置實驗

 

keepalived是一個相似於layer3, 4 & 7交換機制的軟件,也就是咱們平時說的第3層、第4層和第7層交換。
簡介:
Keepalived的做用是檢測web服務器的狀態,若是有一臺web服務器死機,或工做出現故障,Keepalived將檢測到,並將有故障的web服務器從系統中剔除,當web服務器工做正常後Keepalived自動將web服務器加入到服務器羣中,這些工做所有自動完成,不須要人工干涉,須要人工作的只是修復故障的web服務器。
工做原理:
 
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將把服務器從服務器羣中剔除。
做用:
主要用做RealServer的健康狀態檢查以及LoadBalance主機和BackUP主機之間failover的實現。
高可用web架構: LVS+keepalived+nginx+apache+php+eaccelerator(+nfs可選 可不選)
 
Apache+Discuz論壇+keepalived+Mysql主從高可用實驗:
 
環境:
三臺centos6.7系統;23.116配置Apache+discuz論壇系統;23.114爲mysql master,keepalived1.2.19;23.113爲mysql slave,keepalived1.2.19;網站、數據庫主從配置此處略過。

安裝keepalived  樓主使用keepalived1.2.19php

#基礎環境mysql

yum -y install gcc gcc-c++ pcre-devel zlib-devel openssl-devel popt popt-devellinux

#內核開發包keepalived要用,必定要安裝
yum –y install kernel-devel kernel 

tar –zxvf keep***nginx

cd keep***
./configure --with-kernel-dir=/usr/src/kernels/2.6.32-573.3.1.el6.x86_64/  (此處要根據本身實際環境來填寫目錄,可使用uname -r來查看本身當前的內核版本,複製到此處便可;若是你發現你的kernels 下面沒有。那就是沒有安裝 kernel-devel,也就是內核開發包)
make && make install;安裝完成以後,必定要善於使用echo $?來看返回的值是否爲0
安裝完成以後,默認的keepalived在/usr/local/etc目錄下,將目錄拷貝至經常使用目錄中:
cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/sbin/keepalived /usr/sbin/
mkdir /etc/keepalived
/etc/keepalived/keepalived/conf:默認這個配置文件是沒有的,須要本身建立
#mysql master的keepalived配置:
 
! Configuration File for keepalived  
global_defs {  
     notification_email {  
     it_shengyu@163.com  
     }  
     notification_email_from it_shengyu@163.com  
     smtp_server 127.0.0.1  
     smtp_connect_timeout 30  
     router_id mysql-ha  
     }  
#vrrp_script chk_mysql {
#    script "/root/sql.sh"
#    interval 2
#    weight 2
#}
 
vrrp_instance VI_1 {  
     state Master   #兩臺配置此處均是BACKUP  
     interface eth0
     virtual_router_id 51
     priority 100   #優先級,另外一臺改成90  
     advert_int 1  
     #nopreempt  #不搶佔,只在優先級高的機器上設置便可,優先級低的機器不設置  
     authentication {  
     auth_type PASS  
     auth_pass 1111  
     }  
     virtual_ipaddress {  
     10.10.23.137
 
     }  
     }  
 
virtual_server 10.10.23.137 3306 {  
     delay_loop 2   #每一個2秒檢查一次real_server狀態  
     lb_algo wrr   #LVS算法  
     lb_kind DR    #LVS模式  
     persistence_timeout 60   #會話保持時間  
     protocol TCP  
     real_server 10.10.23.114 3306 {  #服務器真實IP配置段
     weight 3  
     notify_down /root/sql.sh     
     TCP_CHECK {  
     connect_timeout 10    #鏈接超時時間  
     nb_get_retry 3       #重連次數  
     delay_before_retry 3   #重連間隔時間  
     connect_port 3306   #健康檢查端口  
     }
#     track_script {
#    check_run
#        }
     }
 
 
#mysql slave的keepalived配置文件:
! Configuration File for keepalived  
global_defs {  
     notification_email {  
     it_shengyu@163.com  
     }  
     notification_email_from it_shengyu@163.com  
     smtp_server 127.0.0.1  
     smtp_connect_timeout 30  
     router_id mysql-ha  
     }  
#vrrp_script chk_mysql {
#    script "/root/sql.sh"
#    interval 2
#    weight 2
#}
 
vrrp_instance VI_1 {  
     state Master   #兩臺配置此處均是BACKUP  
     interface eth0
     virtual_router_id 51
     priority 90   #優先級 
     advert_int 1  
     #nopreempt  #不搶佔,只在優先級高的機器上設置便可,優先級低的機器不設置  
     authentication {  
     auth_type PASS  
     auth_pass 1111  
     }  
     virtual_ipaddress {  
     10.10.23.137
 
     }  
     }  
 
virtual_server 10.10.23.137 3306 {  
     delay_loop 2   #每一個2秒檢查一次real_server狀態  
     lb_algo wrr   #LVS算法  
     lb_kind DR    #LVS模式  
     persistence_timeout 60   #會話保持時間  
     protocol TCP  
     real_server 10.10.23.113 3306 {  #服務器真實IP配置段
     weight 3  
     notify_down /root/sql.sh     
     TCP_CHECK {  
     connect_timeout 10    #鏈接超時時間  
     nb_get_retry 3       #重連次數  
     delay_before_retry 3   #重連間隔時間  
     connect_port 3306   #健康檢查端口  
     }
#     track_script {
#    check_run
#        }
     } 
 
notify_down:此處是引用一個腳本,若是mysql有故障時會觸發此腳本:
 
腳本很簡單,就是當mysql有故障的時候。會中止此服務器上的keepalived服務,若是這裏是作的keep+nginx,將mysql換爲nginx便可;
腳本定義一個變量,使用ps檢查mysqld是會啓動。--no-header是不打印頭部信息;wc -l是列出指定文件統計總數,若是爲0,表示mysqld服務沒有啓動;
完成以後,主從上面分別啓動keepalived服務,查看一下日誌,並查看一下vip如今是在哪一臺服務器上:
先查看主上的IP和日誌:
 
再查看從上的IP和日誌:
 
從上圖可看出,目前的VIP是在主服務器上的,下面咱們將主上的mysql服務中止掉,再查看日誌和VIP是否會自動轉移到從服務器上,【需先把腳本里面的第一段if註釋掉,否則會自動啓動mysql服務,將看不到實驗效果】
中止主上的數據庫以後再查看結果以下:
 
當主上的數據庫出現故障中止以後,會自動觸發腳本,關閉主上的keepalived服務,此時從服務器會搶佔keep master,過程很快,不會影響用戶訪問。
 
當主上的數據庫故障處理恢復以後,再啓動主上的keepalived,此時再查看結果:
 
如上,當主上的數據庫恢復、keepalived啓動以後,VIP會迅速跳轉到主服務器上來,再接替從服務器的工做。這是由於主服務器的優先級要高於從服務器。
 
  http://www.linuxidc.com/Linux/2014-08/105884.htm  keepalived選舉問題 【福利】
小白剛剛學習keepalived,實驗心得,歡迎各位大牛指點,交流!!!
相關文章
相關標籤/搜索