ITPub博客

首页 > 数据库 > MySQL > MySQL主主+Keepalived+LVS高可用(二):单点写入

MySQL主主+Keepalived+LVS高可用(二):单点写入

MySQL 作者:df3013 时间:2014-12-26 11:33:13 0 删除 编辑

方案简介

本方案采用keepalived中的sorry_server来实现写入数据库为单点的需求。本方案实现的功能是当网络有问题、mysql 有问题、 服务器宕机、 keepalived 服务停止后,服务器能自动跳转到备用机,当主服务器服务启动起来后会自动切换回来。

1)    安装LVS

~]#rpm -ivh libnl-devel-1.1-14.el6.x86_64.rpm

~]#rpm -ivh popt-devel-1.13-7.el6.x86_64.rpm

~]#rpm -ivh popt-static-1.13-7.el6.x86_64.rpm

~]#wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz

~]#tar -zxvf ipvsadm-1.26.tar.gz -C /opt/

~]#cd /opt/ipvsadm-1.26

~]#make && make install

2)    创建LVS脚本

#Master A和B都执行此操作

~]# cat /etc/init.d/realserver

#!/bin/bash

VIP=192.168.56.111

. /etc/rc.d/init.d/functions                    

case "$1" in

start)

    /sbin/ifconfig lo down 

    /sbin/ifconfig lo up       

    echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore   

    echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce   

    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore   

    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce   

    /sbin/sysctl -p >/dev/null 2>&1

    /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 up

    /sbin/route add -host $VIP dev lo:0 

    echo "LVS-DR real server starts successfully."                   

    ;;   

stop)   

    /sbin/ifconfig lo:0 down   

    /sbin/route del $VIP >/dev/null 2>&1   

    echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore   

    echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce   

    echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore   

    echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce   

    echo "LVS-DR real server stopped."

    ;;

status)

    isLoOn=`/sbin/ifconfig lo:0 | grep "$VIP"`

    isRoOn=`/bin/netstat -rn | grep "$VIP"`

    if [ "$isLoOn" == "" -a "$isRoOn" == "" ]; then

       echo "LVS-DR real server has to run yet."

    else

       echo "LVS-DR real server is running."

    fi

    exit 3

    ;;

*)   

    echo "Usage: $0 {start|stop|status}"

    exit 1   

esac                    

exit 0

3)    KeepAlived配置

Master A

~]# cat /etc/keepalived/keepalived.conf

! Configuration File for keepalived

 

! Configuration File for keepalived

 

global_defs {

   notification_email {

     jixiang.yu@trekiz.com

   }

   notification_email_from Alexandre.Cassen@firewall.loc

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id MySQL_HA

}

 

vrrp_instance MySQL-HA{

    state MASTER

    interface eth1

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.56.111

    }

}

 

virtual_server 192.168.56.111 3306{

    delay_loop 3

    lb_algo rr

    lb_kind DR

    persistence_timeout 20

    protocol TCP

    sorry_server 192.168.56.102 3306

    real_server 192.168.56.101 3306{

        weight 3

        TCP_CHECK { 

            connect_timeout 10

            nb_get_retry 3

            delay_before_retry 3

            connect_port 3306

        }

    }

}

Master B

~]# cat /etc/keepalived/keepalived.conf

global_defs {

   notification_email {

     jixiang.yu@trekiz.com

   }

   notification_email_from Alexandre.Cassen@firewall.loc

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id MySQL_HA

}

 

vrrp_instance MySQL-HA{

    state BACKUP

    interface eth1

    virtual_router_id 51

    priority 90

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.56.111

    }

}

 

virtual_server 192.168.56.111 3306{

    delay_loop 3

    lb_algo rr

    lb_kind DR

    persistence_timeout 20

    protocol TCP

    sorry_server 192.168.56.102 3306

    real_server 192.168.56.101 3306{

        weight 3

        TCP_CHECK { 

            connect_timeout 10

            nb_get_retry 3

            delay_before_retry 3

            connect_port 3306

        }

    }

}

4)    realserver配置

#A和B一样

~]# cat /etc/init.d/realserver

#!/bin/bash

VIP=192.168.56.111

. /etc/rc.d/init.d/functions                    

case "$1" in

start)

    /sbin/ifconfig lo down 

    /sbin/ifconfig lo up       

    echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore   

    echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce   

    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore   

    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce   

    /sbin/sysctl -p >/dev/null 2>&1

    /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 up

    /sbin/route add -host $VIP dev lo:0 

    echo "LVS-DR real server starts successfully."                    

    ;;   

stop)   

    /sbin/ifconfig lo:0 down   

    /sbin/route del $VIP >/dev/null 2>&1   

    echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore   

    echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce   

    echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore   

    echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce   

    echo "LVS-DR real server stopped."

    ;;

status)

    isLoOn=`/sbin/ifconfig lo:0 | grep "$VIP"`

    isRoOn=`/bin/netstat -rn | grep "$VIP"`

    if [ "$isLoOn" == "" -a "$isRoOn" == "" ]; then

       echo "LVS-DR real server has to run yet."

    else

       echo "LVS-DR real server is running."

    fi

    exit 3

    ;;

*)   

    echo "Usage: $0 {start|stop|status}"

    exit 1   

esac                     

exit 0

5)    启动realserver和KeepAlived服务

#A和B都分别启动

~]# /etc/init.d/realserver start

LVS-DR real server starts successfully.

~]# /etc/init.d/keepalived start

Starting keepalived:

Master A~]# ipvsadm -ln

~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.56.111:3306 rr persistent 20

  -> 192.168.56.101:3306          Local   3      0          0 

Master B~]# ipvsadm -ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.56.111:3306 rr persistent 20

  -> 192.168.56.101:3306          Route   3      0          0

并将 keepalived 和 realserver 的启动脚本加入到 rc.local 自启动中:
echo “/etc/rc.d/init.d/realserver.sh start” >> /etc/rc.local

echo “/etc/rc.d/init.d/keepalived start” >> /etc/rc.local

6)    Failover测试

1.       停止Master A上的mysql, MySQL自动切换到sorry_server,使用如下命令查看:

~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.56.111:3306 rr persistent 20

  -> 192.168.56.102:3306          Route   1      1          0    

2.       停止Master上的keepalived,VIP飘到backup(Master B)上,如:

3.       启动Master A上的mysql, MySQL服务会切换到Master(101)上

4.       启动Master A上的keepalived,VIP切换回Master(101)

5.       重启Master上的mysql,先切换到backup(102),再切换回101

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/21621129/viewspace-1380748/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-08-19

  • 博文量
    25
  • 访问量
    47136