MySQL+keepalived高可用配置

實驗環境:一臺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、拆分表等等優化,有興趣的童鞋能夠繼續深刻研究。

相關文章
相關標籤/搜索