CentOS利用Keepalived構建雙主MySQL+雙機熱備

 

以前的文章介紹瞭如何配置MySQL雙主互備,見http://www.linuxidc.com/Linux/2013-05/83784.htm
 
這裏介紹如何配合前者實現Keepalived雙機熱備
 
系統環境:CentOS 6.3 x64 
 
MySQL版本:mysql-5.6.10  
 
Keepalived版本:keepalived-1.2.7
 
 
 
MySQL-VIP:192.168.7.253  
 
MySQL-master1:192.168.7.201  
 
MySQL-master2:192.168.7.249  
 
 
 
1.在MySQL-master1:192.168.7.201服務器上keepalived安裝及配置
 
 
 
編譯安裝,實際以本機kernel版本爲準
 
 
 
# wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
 
# tar zxvf keepalived-1.2.7.tar.gz 
 
# cd keepalived-1.2.7 
 
# ./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.32-
 
279.el6.x86_64
 
# make && make install
 
 
 
新建一個配置文件,默認keepalived啓動會去/etc/keepalived目錄下尋找配置文件
 
 
 
# mkdir /etc/keepalived 
 
 
 
# vi /etc/keepalived/keepalived.conf 
 
------------------
 
global_defs {
 
 
 
    notification_email {
 
 
 
    lzyangel@126.com
 
 
 
    }
 
 
 
    notification_email_from lzyangel@126.com
 
 
 
    smtp_server stmp.126.com  
 
 
 
    smtp_connect_timeout 30
 
 
 
    router_id MySQL-ha
 
 
 
    }
 
 
 
vrrp_instance VI_1{
 
 
 
    # 兩臺配置此處均是BACKUP
 
 
 
    state BACKUP
 
 
 
    # 注意網卡接口  
 
 
 
    interface eth0 
 
 
 
    virtual_router_id 51
 
 
 
    # 優先級,另外一臺改成90
 
 
 
    priority 100  
 
 
 
    advert_int 1
 
    
 
    # 不主動搶佔資源
 
 
 
    nopreempt    
 
 
 
    authentication {
 
 
 
    auth_type PASS
 
 
 
    auth_pass 1111
 
 
 
    }
 
 
 
    virtual_ipaddress {
 
 
 
    192.168.7.253
 
 
 
    }
 
 
 
    }
 
 
 
 
 
 
 
virtual_server 192.168.7.253 3306 {
 
 
 
    # 每一個2秒檢查一次real_server狀態
 
 
 
    delay_loop 2  
 
 
 
    # LVS算法
 
 
 
    lb_algo wrr    
 
 
 
    # LVS模式    
 
 
 
    lb_kind DR 
 
 
 
    # 會話保持時間    
 
 
 
    persistence_timeout 60  
 
 
 
    protocol TCP
 
 
 
    real_server 192.168.7.201 3306 {
 
 
 
    weight 3
 
 
 
    # 檢測到服務down後執行的腳本
 
 
 
    notify_down /etc/rc.d/keepalived.sh  
 
 
 
    TCP_CHECK {
 
 
 
    # 鏈接超時時間
 
 
 
    connect_timeout 10 
 
 
 
    # 重連次數  
 
 
 
    nb_get_retry 3        
 
 
 
    # 重連間隔時間    
 
 
 
    delay_before_retry 3
 
 
 
    # 健康檢查端口  
 
 
 
    connect_port 3306      
 
 
 
    }
 
 
 
    }
 
----------------------
 
 
 
 
 
編寫檢測服務down後所要執行的腳本
 
 
 
# vi /etc/rc.d/keepalived.sh 
 
 
 
-------------  
 
#!/bin/sh  
 
pkill keepalived 
 
------------- 
 
 
 
# chmod +x /etc/rc.d/keepalived.sh 
 
 
 
注:此腳本是上面配置文件notify_down選項所用到的,keepalived使用notify_down選項來檢查real_server的服務狀態。
 
當發現real_server服務故障時,便觸發此腳本.
 
咱們能夠看到,腳本就一個命令:
 
經過pkill keepalived強制殺死keepalived進程,從而實現了MySQL故障自動轉移.
 
另外,咱們不用擔憂兩個MySQL會同時提供數據更新操做,由於每臺MySQL上的keepalived的配置裏面只有本機MySQL的IP+VIP,而不是兩臺MySQL的IP+VIP.
 
 
 
啓動keepalived
 
# /usr/local/keepalived/sbin/keepalived -D 
 
查看鏈接狀態 
 
# ps -aux | grep keepalived
 
返回:
 
---------------
 
 
 
root    25348  0.0  0.0  36792  720 ?        Ss  07:15  0:00 
 
 
 
/usr/local/keepalived/sbin/keepalived -D
 
root    25349  0.5  0.1  40968  2016 ?        S    07:15  0:00 
 
 
 
/usr/local/keepalived/sbin/keepalived -D
 
root    25350  0.0  0.1  40968  1340 ?        S    07:15  0:00 
 
 
 
/usr/local/keepalived/sbin/keepalived -D 
 
 
 
--------------------
 
測試
 
 
 
找一臺局域網PC,而後去ping  MySQL的VIP,這時候MySQL的VIP是能夠ping的通的
 
 
 
中止MySQL服務,看keepalived健康檢查程序是否會觸發咱們編寫的腳本,去kill掉keepalived進程
 
# service mysqld stop
 
# ps -aux | grep keepalived
 
無返回結果linuxmysql

2.在MySQL-master2:192.168.7.249服務器上keepalived安裝及配置linux

 

編譯安裝,實際以本機kernel版本爲準算法

 

# wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gzsql

# tar zxvf keepalived-1.2.7.tar.gz數據庫

# cd keepalived-1.2.7服務器

# ./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.32-oop

279.el6.x86_64測試

# make && make install網站

 

新建一個配置文件,默認keepalived啓動會去/etc/keepalived目錄下尋找配置文件router

 

# mkdir /etc/keepalived

 

# vi /etc/keepalived/keepalived.conf

------------------

global_defs {

 

notification_email {

 

lzyangel@126.com

 

}

 

notification_email_from lzyangel@126.com

 

smtp_server stmp.126.com

 

smtp_connect_timeout 30

 

router_id MySQL-ha

 

}

 

vrrp_instance VI_1{

 

# 兩臺配置此處均是BACKUP

 

state BACKUP

 

# 注意網卡接口

 

interface eth0

 

virtual_router_id 51

 

# 優先級,另外一臺改成90

 

priority 90

 

advert_int 1

 

# 不主動搶佔資源

 

nopreempt

 

authentication {

 

auth_type PASS

 

auth_pass 1111

 

}

 

virtual_ipaddress {

 

192.168.7.253

 

}

 

}

 

 

 

virtual_server 192.168.7.253 3306 {

 

# 每一個2秒檢查一次real_server狀態

 

delay_loop 2

 

# LVS算法

 

lb_algo wrr

 

# LVS模式

 

lb_kind DR

 

# 會話保持時間

 

persistence_timeout 60

 

protocol TCP

 

real_server 192.168.7.249 3306 {

 

weight 3

 

# 檢測到服務down後執行的腳本

 

notify_down /etc/rc.d/keepalived.sh

 

TCP_CHECK {

 

# 鏈接超時時間

 

connect_timeout 10

 

# 重連次數

 

nb_get_retry 3

 

# 重連間隔時間

 

delay_before_retry 3

 

# 健康檢查端口

 

connect_port 3306

 

}

 

}

----------------------

編寫檢測服務down後所要執行的腳本

 

# vi /etc/rc.d/keepalived.sh

 

-------------

#!/bin/sh

pkill keepalived

-------------

 

# chmod +x /etc/rc.d/keepalived.sh

 

啓動keepalived

# /usr/local/keepalived/sbin/keepalived -D

 

# ps -aux | grep keepalive

 

至此配置完成,網站後臺只須要配置MySQL-VIP:192.168.7.253虛擬地址便可

這裏實際鏈接的master數據庫,以哪臺master先開mysql服務爲準。

 

當master1:192.168.7.201 mysql端口擋掉或者服務器異常關閉,keepalived會自動跳轉到master2:192.168.7.249.

由於兩臺數據庫的數據時同步的,用戶訪問的是MySQL-VIP:192.168.7.253虛擬地址,因此網站數據鏈接會無縫透明轉接到master2服務器,實現雙機熱備+數據同步功能。保證網站數據庫的實時可用性。

 

注:當某一臺master服務器掛掉恢復後,需同時打開MYSQL服務和keepalived服務,保證另外一臺服務器若是掛掉會無縫轉接。

因此建議mysql與keeplived設置服務開機啓動。

# chkconfig mysqld on

# vi /etc/rc.local

添加:

---------------

/usr/local/keepalived/sbin/keepalived -D

相關文章
相關標籤/搜索