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

相关文章
相关标签/搜索