MySQL+keepalived高可用配置


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM