mysql使用keepalived搭建雙master

這裏的雙master並非2個都同時對應用開放寫,只是同一個時刻只有1個mysql對外開放寫,另外一個做爲slave接受從master同步過來的數據,當master掛掉後,經過keepalived的VIP轉移,使slave變成master,從而造成高可用的環境 mysql

keepalived的master配置以下 git

vrrp_script mycheck {
       script "/usr/local/keepalived/shutdown.sh"
       interval 2                      # check every 2 seconds
       weight 2                        # default prio: +2 if connect ok
}

global_defs {
        router_id NodeA
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth1
    virtual_router_id 151
    priority 201
    advert_int 1 
    nopreempt
    authentication {
        auth_type PASS
        auth_pass pass
    }
    virtual_ipaddress {
        192.168.0.100
    }
    track_script {
        mycheck
    }
}

slave配置以下: github

vrrp_script mycheck {
       script "/usr/local/keepalived/shutdown.sh"
       interval 2                      # check every 2 seconds
       weight 2                        # default prio: +2 if connect ok
}

global_defs {
        router_id NodeB
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth1
    virtual_router_id 151
    priority 100
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass pass
    }
    virtual_ipaddress {
        192.168.0.100
    }
    track_script {
        mycheck
    }
}


幾點要說明的:

1.配置成nopreempt表示非搶佔,即master由掛掉的狀態恢復後,並不搶佔VIP,slave端繼續提供服務 sql

2.因爲nopreempt只有BACKUP中支持,因此上面master和slave都配置成了BACKUP shell

3.VIP轉移只有在keepalived掛掉的狀況下才會出現(不必定,等會說明),也就是說機器宕機是能夠的,可是mysql自己掛掉了並不能致使keepalived掛掉,因此要檢測mysql是否掛掉 spa

4.經過檢測mysql佔用端口,好比3306並不難嚴謹,檢測mysql進程是否存在也不是很嚴謹,最好的辦法應該是執行mysql的命令以下: .net

mysql -uroot -proot -h 192.168.0.47 --connect_timeout=5 -e "select 1;"
5.有時候即便keepalived進程不在了,可是VIP還存在,經過ipconfig可能看不到VIP,能夠經過

ip -o -f inet addr show
就能夠看到VIP仍是存在的

因此爲了保險起見最好加上: code

ip addr del 192.168.0.100 dev eth1
刪除VIP

6.數據同步那塊能夠依賴mysql本身,也可使用ali的otter來進行同步 router

blog

http://my.oschina.net/dxqr/blog/524795

https://github.com/alibaba/otter

相關文章
相關標籤/搜索