Mysql+keepalived主从切换

Mysql+keepalived主从切换

一、概述

Keepalived看名字就知道,保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生,那说到keepalived不得不说的一个协议不是VRRP协议,可以说这个协议就是keepalived实现的基础。

二、配置实现mysql+keepalived主从切换

网络结构:

VIP :192.168.1.172

MYSQL1:192.168.1.100

MYSQL2:192.168.1.104

其中MYSQL1为主服务器

MYSQL2为从服务器

1mysql主主同步

要实现mysql+keepalived主从切换,首先要实现的就是两台mysql服务器的主主同步。关于主主同步,可以参考之前的文章mysql数据库远程同步及备份

2、安装keepalived

准备好源码包keepalived-1.2.7.tar.gz,然后将其放置在home/software目录下面:

#tar zxvf keepalived-1.2.7.tar.gz

#cd keepalived-1.2.7

#./configure

出错:

sudo apt-get install openssl

# apt-get install libpopt-dev

 sudo apt-get install libssl-dev

    sudo apt-get install libssl0.9.8

#make & make install

 

3keepalived主备配置文件

下面将详细讲述在MYSQL主服务器上对keepalived的配置。

由于keepalived启动的时候,默认到/etc目录下面去读取配置文件,所以要先在/etc目录下创建一目录keepalived

#mkdir –p /etc/keepalived

#cd /etc/keepalived

#vin keepalived.conf

! Configuration File for keepalived

 

global_defs {

   notification_email {

         [email protected]

   }

   notification_email_from [email protected]

   smtp_connect_timeout 3

   smtp_server 127.0.0.1

   router_id MySQL-ha

}

 

vrrp_script check_run {   #声明vrrp_script 的函数check_run

   script "/root/keepalived_check_mysql.sh"

   interval 5

}

 

vrrp_sync_group VG1 {

    group {

          VI_1

    }

}

vrrp_instance VI_1 {

    state MASTER   #指定主服务器节点为主节点,备用节点上设置为BACKUP即可

    interface eth0   #指定虚拟IP的网络接口

    virtual_router_id 88 #VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP

    priority 100  #主节点的优先级(1-254之间),备用节点必须比主节点优先级低。

    advert_int 1  #组播信息发送间隔,两个节点设置必须一样

    nopreempt  

    authentication {   #设置验证信息,两个节点必须一致

        auth_type PASS

        auth_pass skyai1.cublog.cn

    }

    track_script {    #调用函数代码块

        check_run

    }

    virtual_ipaddress {  #虚拟IP

        192.168.1.172

    }

}

 

MYSQL从服务器的keepalived配置如下:

! Configuration File for keepalived

 

global_defs {

   notification_email {

         [email protected]

   }

   notification_email_from [email protected]

   smtp_connect_timeout 3

   smtp_server 127.0.0.1

   router_id MySQL-ha

}

 

vrrp_script check_run {

   script "/root/keepalived_check_mysql.sh"

   interval 5

}

 

vrrp_sync_group VG1 {

    group {

          VI_1

    }

}

 

vrrp_instance VI_1 {

    state BACKUP

    interface eth0

    virtual_router_id 88

    priority 99

    advert_int 1

    nopreempt

    authentication {

        auth_type PASS

        auth_pass skyai1.cublog.cn

    }

    track_script {

        check_run

    }

    virtual_ipaddress {

        192.168.1.172

    }

}

 

4mysql状态检测脚本

在目录root下创建脚本keepalived_check_mysql.sh

#vim /root/keepalived_check_mysql.sh

#!/bin/bash

MYSQL=/usr/local/mysql/bin/mysql

MYSQL_HOST=localhost

MYSQL_USER=root

MYSQL_PASSWORD=123456

CHECK_TIME=3

 

#mysql  is working MYSQL_OK is 1 , mysql down MYSQL_OK is 0

 

MYSQL_OK=1

 

function check_mysql_helth (){

    $MYSQL -h $MYSQL_HOST -u $MYSQL_USER -p${MYSQL_PASSWORD} -e "show status;" >/dev/null 2>&1

    if [ $? = 0 ] ;then

    MYSQL_OK=1

    else

    MYSQL_OK=0

    fi

    return $MYSQL_OK

}

while [ $CHECK_TIME -ne 0 ]

do

    let "CHECK_TIME -= 1"

    check_mysql_helth

if [ $MYSQL_OK = 1 ] ; then

    CHECK_TIME=0

    exit 0

fi

if [ $MYSQL_OK -eq 0 ] &&  [ $CHECK_TIME -eq 0 ]

then

    pkill keepalived

    exit 1

fi

sleep 1

done

 

5、启动keepalived

#keepalived start

 

6、查看vrrp通读记录

#tcpdump vrrp

 Mysql+keepalived主从切换_第1张图片

此时显示是主服务器在提供服务。

关闭主服务器上的mysql

#mysql stop

 

然后由keepalived配置文件可以知道,mysql关闭的话,将会执行keepalived_check_mysql.sh这一脚本。这个脚本在执行的时候,会判断mysql的状态,如果mysql关闭了,将会关闭主服务器上的keepalived。主服务器上的keepalived一旦关闭,那么从服务器马上变为主服务器,为用户提供服务,如下图所示:

Mysql+keepalived主从切换_第2张图片

由上图可以看到,现在主从服务器已经切换了。

 

7、查看虚拟IP

由于前面所述,主服务器的mysql已经关闭,从服务器已经切换为主服务器,所以在从服务器上就可以查看到虚拟IP

#ip a

Mysql+keepalived主从切换_第3张图片

由图中可以看到虚拟IP

 

此时,一旦主服务器上的mysql重启,然后再启动keepalived之后,主服务器又会切换成向用户提供服务的服务器。

 

Mysql+keepalived主从切换_第4张图片

由图可知,已经切换成功。

在主服务器上查看虚拟IP

#ip a

 

Mysql+keepalived主从切换_第5张图片

可以看到虚拟IPOKmysql+keepalived自动切换完成。

你可能感兴趣的:(Mysql+keepalived主从切换)