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、拆分表等等优化,有兴趣的童鞋可以继续深入研究。

  • 相关阅读:
    Python实现天数倒计时计算
    pandas 的数据结构Series与DataFrame
    在python中使用静态方法staticmethod
    python 中对list做减法操作
    推荐系统之 BPR 算法及 Librec的BPR算法实现【1】
    机器学习中的 ground truth
    PyCharm 默认运行 unittest
    Python的copy()与deepcopy()区别
    MySQL中Decimal类型和Float Double的区别 & BigDecimal与Double使用场景
    Spring Boot 返回 JSON 数据,一分钟搞定!
  • 原文地址:https://www.cnblogs.com/zhangan/p/10899960.html
Copyright © 2011-2022 走看看