• keepalived+haproxy实现高可用负载均衡


    前言:

    HAProxy

    HAProxy主要是提供高可用性、负载均衡以及基于TCP(4层)和HTTP(7层)应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进当前的架构中,同时可以保护web服务器不被暴露到网络上。

    Keepalived

    Keepalived是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。


    环境准备:
    10.0.0.7 web01
    10.0.0.8 web02
    10.0.0.3 lib01
    10.0.0.4 lib02
    10.0.0.55 VIP centOS 7
    通过部署haproxy负载均衡,keepalived lib01与lib02实现高可用

    首先
    lib01上部署haproxy负载均衡
    关闭selinux、关闭iptables
    1)安装常用软件
    yum install -y gcc glibc gcc-c++ screen

        2)下载haproxy软件

    http://www.haproxy.org/download/1.7/src/haproxy-1.7.10.tar.gz

        由于http://www.haproxy.org在国内被屏蔽,只能通过其他方式获取软件

       3)将软件上传到相应目录,进行解压,源码编译安装haproxy

    [root@lib01 ~]# cd /usr/local/src
    [root@lib01 src]# tar zxf haproxy-1.7.10.tar.gz 
    [root@lib01 src]# cd haproxy-1.7.10
    [root@lib01 haproxy-1.7.10]# make TARGET=linux3100 PREFIX=/usr/local/haproxy-1.7.10
    [root@lib01 haproxy-1.7.10]# make install
    [root@lib01 haproxy-1.7.10]# cp /usr/local/sbin/haproxy /usr/sbin/
    通过 haproxy -v,我们可以看到haproxy的版本号
    [root@lib02 ~]# haproxy -v
    HA-Proxy version 1.7.10-a7dcc3b 2018/01/02
    Copyright 2000-2018 Willy Tarreau <willy@haproxy.org>

        4)创建haproxy用户及配置文件目录

    [root@lib01 haproxy-1.7.10]# useradd -r haproxy
    [root@lib01 haproxy-1.7.10]# mkdir /etc/haproxy
    [root@lib01 haproxy-1.7.10]# mkdir /var/lib/haproxy
    [root@lib01 haproxy-1.7.10]# mkdir /var/run/haproxy

        5)编辑启动脚本

    [root@lib01 haproxy-1.7.10]# cp examples/haproxy.init /etc/init.d/haproxy
    [root@lib01 haproxy-1.7.10]# chmod 755 /etc/init.d/haproxy

         6)编辑配置文件/etc/haproxy/haproxy.cfg

         vim /etc/haproxy/haproxy.cfg

    global
    log 127.0.0.1 local3 info
    chroot /var/lib/haproxy
    user haproxy
    group haproxy
    pidfile /var/run/haproxy.pid
    daemon
    defaults
    log global
    mode http
    option httplog
    option dontlognull
    timeout connect 5000 #连接超时
    timeout client 50000 #客户端超时
    timeout server 50000 #服务器端超时

    frontend www.desc.com
    mode http
    bind *:80
    stats refresh 30s #统计页面自动刷新时间
    stats uri /stats #统计页面url
    stats realm Proxy Haproxy #统计页面密码框上提示文本
    stats auth admin:admin #统计页面用户名和密码设置
    stats hide-version #隐藏统计页面上HAProxy的版本信息
    stats admin if TRUE #管理界面,如果认证成功了,可通过web管理节点
    default_backend www.desc.com #定义一个名为www.desc.com前端部分。此处将对于的请求转发给后端

    backend www.desc.com #定义一个名为www.desc.com后端部分
    option httpchk GET /index.html
    balance roundrobin #负载均衡算法
    server web01 10.0.0.7:80 check inter 2000 rise 3 fall 3 weight 1 #定义的多个后端
    server web02 10.0.0.8:80 check inter 2000 rise 3 fall 3 weight 2

         启动服务

    [root@lib01 haproxy-1.7.10]# /etc/init.d/haproxy start
    Starting haproxy (via systemctl):                          [  OK  ]

         通过web界面,查看状态信息

    http://10.0.0.3/stats

       7)开启日志

    vim /etc/rsyslog.conf

    $ModLoad imudp #取消注释
    $UDPServerRun 514 #取消注释
    local3.* /var/log/haproxy.log #最后一行添加local3的路径

    [root@lib01 haproxy-1.7.10]# systemctl restart rsyslog.service
    [root@lib01 haproxy-1.7.10]# touch /var/log/haproxy.log
    [root@lib01 haproxy-1.7.10]# chown -R haproxy.haproxy /var/log/haproxy.log
    [root@lib01 haproxy-1.7.10]# /etc/init.d/haproxy restart
    Restarting haproxy (via systemctl): [ OK ]

         通过监控日志,可以看到haproxy已经启动成功

    [root@lib01 haproxy-1.7.10]# tailf /var/log/haproxy.log 
    Dec 10 09:37:39 localhost haproxy[1660]: Stopping frontend www.desc.com in 0 ms.
    Dec 10 09:37:39 localhost haproxy[1660]: Stopping backend www.desc.com in 0 ms.
    Dec 10 09:37:39 localhost haproxy[1660]: Proxy www.desc.com stopped (FE: 0 conns, BE: 0 conns).
    Dec 10 09:37:39 localhost haproxy[1660]: Proxy www.desc.com stopped (FE: 0 conns, BE: 0 conns).
    Dec 10 09:37:39 localhost haproxy[1692]: Proxy www.desc.com started.
    Dec 10 09:37:39 localhost haproxy[1692]: Proxy www.desc.com started.

         通过测试,我们可以看到自动切换

    到此,web的负载均衡部署完成!

    接下来开始部署高可用,lib02与lib配置一样,我们这一选择克隆lib02,

    然后在两台机器上部署keepalived

    1)安装keepalive

    [root@lib01 ~]# yum -y install keepalived

    2)编辑配置文件(lib01与lib02)

    vim /etc/keepalived/keepalived.conf
    ! Configuration File for keepalived
    
    global_defs {
    router_id lb01   #(lib02)
    }
    vrrp_script chk_haproxy {
            script "/etc/keepalived/chk_haproxy.sh"
            interval 4
            weight 60  
    }
    vrrp_instance VI_1 {
        state MASTER     #(BACKUP)
        interface eth0
        virtual_router_id 51
        priority 150  #(100)
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
     track_script {
            chk_haproxy
        }
        virtual_ipaddress {
            10.0.0.55
        }
    }

    3)主副添加监控脚本

    vim /etc/keepalived/chk_haproxy.sh
    #!/bin/sh
    pid=/var/run/haproxy.pid
    if [ -f $pid ];then
      exit 0
    else
      exit 1
    fi

    chmod +x /etc/keepalived/chk_haproxy.sh

    4)启动服务

    systemctl start keepalived.service

    /etc/init.d/haproxy restart

    5)检查VIP

    [root@lib01 ~]# ip a|grep 10.0.0.55
        inet 10.0.0.55/32 scope global eth0

    通过查看到的VIP,说明我们部署成功

    通过VIP能够访问我们haproxy的状态信息

    6)模拟故障,先把lib01的haproxy停掉

    /etc/init.d/haproxy stop

    发现VIP已经漂移到lib02上,我们的服务能够正常访问

    再把lib01上的haproxy启动

    /etc/init.d/haproxy start

    VIP又漂移回来,到此,已经实现keepalived+haproxy高可用负载均衡。



        

  • 相关阅读:
    水木清华小爬虫
    不让复制是不可能的----js获取选中文字
    [转]nonlocal和global
    LLVM和clang
    Megcup2017 Dogfood
    史莱姆自爆问题
    前端颜色表
    [转]论文十诫
    返利网盈利模式
    事务的四个属性ACID
  • 原文地址:https://www.cnblogs.com/wzxmt/p/10094558.html
Copyright © 2020-2023  润新知