zoukankan      html  css  js  c++  java
  • Lvs+Keepalived+Mysql单点写入主主同步高可用方案

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html
    内部邀请码:C8E245J (不写邀请码,没有现金送)
    国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为“中国PE第一股”,市值超1000亿元。 
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------

    原文地址: http://350201.blog.51cto.com/340201/1181286

    1.1  方案简介

    Lvs+keepalived作为目前比较流行的高可用解决方案,lvs提供负载均衡,keepalived作为故障转移,提高系统的可用性。但是一般的mysql高可用为了实现mysql数据的一致性,一般都是采用单点写入,本方案采用keepalived中的sorry_server来实现写入数据库为单点的需求。本方案实现的功能是当网络有问题、mysql有问题、服务器宕机、keepalived服务停止后,服务器能自动跳转到备用机,当主服务器服务启动起来后会自动切换回来。

    1.2  方案架构图

     

    1.3  方案优缺点

    优点:

    ü  安装配置简单,实现方便,高可用效率好,可以根据服务与系统的可用性多方面进行切换。

    ü  可以将写VIP和读VIP分别进行设置,为读写分离做准备。

    ü  扩展不是很方便。

    ü  可以在后面添加多个从服务器,并做到负载均衡。

    缺点:

    ü  在启动或者恢复后会立即替换掉定义的sorry_server,因此如果要实现指定条件替换或者不替换需要通过其他方式实现,比如:临时更改mysql的端口等。

    ü  切换需要1s左右的时间。

    1.4  方案实战

    1.4.1 适用场景

    这个方案适用于只有两台数据库服务器并且还没有实现数据库的读写分离的情况,读和写都配置VIP。这个方案能够便于单台数据库的管理维护以及切换工作。比如进行大表的表结构更改、数据库的升级等都是非常方便的。

    1.4.2 实战环境介绍

    服务器名

    IP

    VIP

    系统

    Mysql

    Master

    10.1.1.113

    10.1.1.176

    Centos 5.5 64bit

    5.1.63

    Backup

    10.1.1.75

    10.1.1.176

    Centos 5.5 64bit

    5.1.63

    1.4.3 Mysql的安装和配置

    Mysql的安装和配置相对来讲非常简单,这里就不做介绍,有兴趣的朋友可以查看我博客中关于mysql 5.1.63版本自动安装的文章http://blog.chinaunix.net/uid-20639775-id-3168737.html

    1.4.4 Mysql的主主同步配置

    Mysql的主主同步这里也不做介绍了,有兴趣的话可以看一下我博文中关于mysql主从同步管理的介绍,主主同步和主从同步差不多,只是互为主从而已,链接如下:

    http://blog.chinaunix.net/uid-20639775-id-3254611.html

    1.4.5 Lvs的安装

    在master、backup服务器都进行安装:

    wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz

    ln -s /usr/src/kernels/2.6.18-164.el5-i686/ /usr/src/linux

    tar zxvf ipvsadm-1.24.tar.gz

    cd ipvsadm-1.24

    make && make install

    1.4.6 Keepalived的安装

    在master、backup服务器都进行安装:

    wget http://www.keepalived.org/software/keepalived-1.1.19.tar.gz
    tar zxvf keepalived-1.1.19.tar.gz
    cd keepalived-1.1.19
    ./configure --prefix=/usr/local/keepalived
    make 
    make install
    cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
    cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
    cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
    mkdir /etc/keepalived

    1.4.7 Keepalived的配置

    1.4.7.1   Master的keepalived的配置

    Master和backup不一样的地方已经标记为红色

    vim /etc/keepalived/keepalived.conf

    global_defs {

    notification_email {

                   zhangxy@test.com

            }

            notification_email_from jiankong@test.com

            smtp_server mail.test.com

            smtp_connect_timeout 30

            router_id LVS1

    }

    vrrp_sync_group test {

    group {

            loadbalance

    }

    }

    vrrp_instance loadbalance {

            state MASTER

            interface eth0

            lvs_sync_daemon_inteface eth0

            virtual_router_id 51

            priority 180

            advert_int 1

    authentication {

            auth_type PASS

            auth_pass 1111

    }

    virtual_ipaddress {

            10.1.1.176 dev eth0 label eth0:1

    }

    }

    virtual_server 10.1.1.176 3306 {

            delay_loop 6

            lb_algo rr

            lb_kind DR

            persistence_timeout 20

            protocol TCP

            sorry_server 10.1.1.75 3306

            real_server 10.1.1.113 3306 {

            weight 3

            TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

            connect_port 3306

    }

    }

    }

    1.4.7.2   Backup的keepalived的配置

    Master和backup不一样的地方已经标记为红色

    vim /etc/keepalived/keepalived.conf

    global_defs {

    notification_email {

                   zhangxy@test.com

            }

            notification_email_from jiankong@test.com

            smtp_server mail.test.com

            smtp_connect_timeout 30

            router_id LVS1

    }

    vrrp_sync_group test {

    group {

            loadbalance

    }

    }

    vrrp_instance loadbalance {

            state BACKUP

            interface eth0

            lvs_sync_daemon_inteface eth0

            virtual_router_id 51

            priority 150

            advert_int 1

    authentication {

            auth_type PASS

            auth_pass 1111

    }

    virtual_ipaddress {

            10.1.1.176 dev eth0 label eth0:1

    }

    }

    virtual_server 10.1.1.176 3306 {

            delay_loop 6

            lb_algo rr

            lb_kind DR

            persistence_timeout 20

            protocol TCP

            sorry_server 10.1.1.75 3306

            real_server 10.1.1.113 3306 {

            weight 3

            TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

            connect_port 3306

    }

    }

    }

    1.4.8 Master和backup的realserver的配置

    对于realserver的配置master和backup是一致的,脚本内容如下:

    vim /etc/rc.d/init.d/realserver.sh

    #!/bin/bash

    # description: Config realserver lo and apply noarp

    SNS_VIP=10.1.1.176

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

    case "$1" in

    start)

           ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP

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

           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

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

           echo "RealServer Start OK"

           ;;

    stop)

           ifconfig lo:0 down

           route del $SNS_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 "RealServer Stoped"

           ;;

    *)

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

           exit 1

    esac

    exit 0

    1.4.9 Master和backup的启动

    启动master和backup的mysql以后,再在master和backup执行如下命令启动keepalived和realserver脚本:

    /etc/rc.d/init.d/realserver.sh start

    /etc/rc.d/init.d/keepalived start

    并将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

    1.4.10     高可用方案测试

    方案搭建好以后就要进行全方位的可靠性测试了,看看是否达到了我们的预期效果,大致测试步骤如下:

    ü  停掉master上的mysql,看看能否自动切换到sorry_server,使用如下命令查看:ipvsadm –ln。

    ü  停掉master上的keepalived,看写VIP是否会迁移到backup。

    ü  启动master上的mysql,看是否能切换回master。

    ü  启动master上的keepalived,看VIP是否会迁移回master上。

    ü  重启master的系统,看看切换过程是否OK

    出自http://blog.chinaunix.net/uid-20639775-id-3337448.html

  • 相关阅读:
    Next.js文档自定义App、Document,getInitialProps翻译
    使用fetch进行数据请求时报json错误
    菜单制作:ul li横向排列
    Django Auth组件->扩展用户
    001.Django_Model.整理
    PyCharm中的django项目的引入
    Css3 里的弹性盒的比例关系
    vue的组件通讯 父传子 -- 子传父-- 兄弟组件的传值 vue的组件传值
    新手如何创建一个vue项目 ---vue---新手创建第一个项目
    如何自学计算机前端开发?精细的自学步骤是什么样的?
  • 原文地址:https://www.cnblogs.com/AloneSword/p/3034874.html
Copyright © 2011-2022 走看看