zoukankan      html  css  js  c++  java
  • MySQL+keepalived高可用配置

    实验环境:一台web服务器lap 192.168.1.117

                      一台mysql master 192.168.1.18

                      一台mysql slave 192.168.1.19

    如果没有此环境 就自己部署一个lap+mysql主从的web

    继上一章节MySQL主从配置完毕后,接着配置keepalived、heartbeat服务,主要用于Mysql故障自动切换。那说到keepalived,keepalived到底是什么呢?

    keepalived是一个类似于layer3, 4 & 7交换机制的软件,也就是我们平时说的第3层、第4层和第7层交换。

    Keepalived的作用是检测web服务器的状态,如果有一台web服务器、Mysql服务器宕机,或工作出现故障,Keepalived将检测到后,会将有故障的web服务器或者Mysql服务器从系统中剔除,当服务器工作正常后Keepalived自动将web、Mysql服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的WEB和Mysql服务器

    keepalived是一个类似于layer3, 4 & 7交换机制的软件,也就是我们平时说的第3层、第4层和第7层交换。

    Keepalived的作用是检测web服务器的状态,如果有一台web服务器、Mysql服务器宕机,或工作出现故障,Keepalived将检测到后,会将有故障的web服务器或者Mysql服务器从系统中剔除,当服务器工作正常后Keepalived自动将web、Mysql服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的WEB和Mysql服务器。

    Layer3,4&7工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下:

    Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。

    Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。

    Layer7:Layer7就是工作在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除.

    keepalived是VRRP的完美实现 在介绍keepalived之前,先介绍一下VRRP的原理。

    在现实的网络环境中,两台需要通信的主机大多数情况下并没有直接的物理连接。对于这样的情况,它们之间路由怎样选择?主机如何选定到达目的主机的下一跳路由,这个问题通常的解决方法有二种:

    1) 在主机上使用动态路由协议(RIP、OSPF等)

    2) 在主机上配置静态路由

    很明显,在主机上配置路态路由是非常不切实际的,因为管理、维护成本以及是否支持等诸多问题。配置静态路由就变得十分流行,但路由器(或者说默认网关default gateway)却经常成为单点。

    VRRP的目的就是为了解决静态路由单点故障问题。

    VRRP通过一竞选(election)协议来动态的将路由任务交给LAN中虚拟路由器中的某台VRRP路由器。

    开始试验:其实keepalived 就是自动切换mysql主从  假如主数据库挂了 则需要人工手动去切换 这样很麻烦的比如下面的演示:

    1.18 和 1.19 mysql都是好的 此时1.117链接的是主1.18,这里是域名链接,这样方便我们切换。

     

     

    其实主数据库是好的  从就没什么用  就好比数据同步 那么假如主挂了

     

    那么此时数据库就会出现问题

     

    那么我们就要切换slave数据库

     

     

    这样在真实企业中会慢的 也不方便  那么keepalived 能在瞬间通过vrrp绑定虚拟路由vip帮我们解决自动切换

    Keepalived安装配置:

    wget http://www.keepalived.org/software/keepalived-1.2.1.tar.gz(两台数据库都要安装)       防火墙和selinux都关掉

    tar zxf keepalived-1.2.1.tar.gz  

    cd keepalived-1.2.1 &&./configure --with-kernel-dir=/usr/src/kernels/2.6.18-164.el5-i686(这里写的是自己机器的内内核 这里记住如果内核Tab不出来, 那么我们就安装内核扩展包 yum –y install kernel kernel-devel

    里编译出错 就安装yum -y install popt-devel)

    make && make install  

    DIR=/usr/local/ ;cp $DIR/etc/rc.d/init.d/keepalived  /etc/rc.d/init.d/

    cp $DIR/etc/sysconfig/keepalived /etc/sysconfig/ && mkdir -p /etc/keepalived

    cp $DIR/sbin/keepalived /usr/sbin/

     

    修改Master 服务器上keepalived.conf配置如下,vi /etc/keepalived/keepalived.conf

    ! Configuration File for keepalived  

    global_defs {  

       notification_email {  

          1039821294@qq.com  

       }  

       notification_email_from 1039821294@qq.com  

       smtp_server 127.0.0.1  

       smtp_connect_timeout 30  

       router_id LVS_DEVEL  

    }  

    # VIP1  

    vrrp_instance VI_1 {  

        state MASTER     (记住在数据库主上就是MASTER  从上面就是BACKUP)    

        interface eth0  

        lvs_sync_daemon_inteface eth0  

        virtual_router_id 151  

        priority 100  

        advert_int 5  

        nopreempt  

        authentication {  

            auth_type PASS  

            auth_pass 2222  

        }  

        virtual_ipaddress {  

            192.168.1.100   (这个vrrp必须和你的数据库保持在一个网段)

        }  

    }  

    virtual_server 192.168.1.100 3306 {  

        delay_loop 6     

        lb_algo wrr     

        lb_kind DR    

        persistence_timeout 60     

        protocol TCP          

        real_server 192.168.1.18 3306 {  

            weight 100         

            notify_down /data/sh/mysql.sh  

            TCP_CHECK {  

            connect_timeout 10  

            nb_get_retry 3  

            delay_before_retry 3  

            connect_port 3306  

            }  

        }  

    }

     

    Mysql 从服务器配置keepalived.conf跟master一样,只需要把Realserver IP修改成real_server 192.168.1.19;优先级从100改成90即可。

     

    ! Configuration File for keepalived

    global_defs {

       notification_email {

          1039821294@qq.com

       }

       notification_email_from 1039821294@qq.com

       smtp_server 127.0.0.1

       smtp_connect_timeout 30

       router_id LVS_DEVEL

    }

    # VIP1

    vrrp_instance VI_1 {

        state BACKUP

        interface eth0

        lvs_sync_daemon_inteface eth0

        virtual_router_id 151

        priority 90

        advert_int 5

        nopreempt

        authentication {

            auth_type PASS

            auth_pass 2222

        }

        virtual_ipaddress {

            192.168.1.100

        }

    }

    #######Define virtual####################

    virtual_server 192.168.1.100 3306 {

        delay_loop 6

        lb_algo wrr

        lb_kind DR

        persistence_timeout 60

        protocol TCP

        real_server 192.168.1.19 3306 {

            weight 100

            notify_down /data/sh/mysql.sh

            TCP_CHECK {

            connect_timeout 10

            nb_get_retry 3

            delay_before_retry 3

            connect_port 3306

            }

        }

    }

    master、slave数据库上创建/data/sh/mysql.sh脚本,内容为:

    /etc/init.d/keepalived stop

    然后分别重启两台数据库上keepalived服务即可。

    tail –fn 10 /var/log/messages

     

    如果日志有报错就执行 modprobe ip_vs (主从都是一样 都要加  一般没有报错就不要执行

     

    通过 ip addr list   可以查看vrrp的ip

     

    我们可以用 telnet 192.168.1.100 3306  

     

    那么我们把192.168.1.117web服务器上的数据库dns改为虚拟vip192.168.1.100

     

     

    然后测试网站是否能打开

     

    最后测试停止master Mysql服务,就会自动切换到Backup从数据库上。然后再重启主数据库和keepalived ,vip又会跑到master上

    关于Mysql集群高可用就在此告一段落,当然除了keepalived高可用之外,Mysql优化还可以进行读写分离、Mysql+DRBD、拆分表等等优化,有兴趣的童鞋可以继续深入研究。

  • 相关阅读:
    86. Partition List
    2. Add Two Numbers
    55. Jump Game
    70. Climbing Stairs
    53. Maximum Subarray
    64. Minimum Path Sum
    122. Best Time to Buy and Sell Stock II
    以场景为中心的产品设计方法
    那些产品经理犯过最大的错
    Axure教程:如何使用动态面板?动态面板功能详解
  • 原文地址:https://www.cnblogs.com/zhangan/p/10899960.html
Copyright © 2011-2022 走看看