• haproxy负载均衡中使用keepalived


    haproxy是一个开源的,高性能的,负载均衡软件,借助haproxy可以快速,可靠的构建一个负载均衡群集。

    优点如下:

    1、可靠性和稳定性非常好,可以和硬件级的负载均衡设备F5相媲美。

    2、最高可同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个。

    3、支持8种负载均衡算法,支持回话保持。

    4、支持虚拟主机功能。

    5、支持连接拒绝,全透明代理并且有一个功能强大的服务器状态监控界面。

    6、拥有功能强大的ACL支持。

    haproxy真的很强大。这里不对他的功能一样一样展示,读者可自行去网上了解其他功能。

    用haproxy构建群集的时候,比如后方代理两个http,如果haproxy宕机,后方的http正常运行网站也是瘫痪状态,这就造成了单点故障。

    解决方案是什么呢?

    这时keepalived就登场了!

    keepalived基于vrrp协议,两台主机之间生成一个虚拟的ip,我们称漂移ip,漂移ip由主服务器承担,一但主服务器宕机,备份服务器就会抢占漂移ip,继续工作,有效的解决了群集中的单点故障。

    --------------------------------------------------------------------------------------------------------------------------

    让haproxy监听keepalived的漂移ip工作,一但haproxy宕机,备份抢占漂移ip继续承担着代理的工作。

    有人问过我一个问题,两台keepalived应该是主服务器性能好一点还是备份服务器性能好一点呢,当时我毫不犹豫的说当然是主的性能更好,这个问题的答案是应该是备份的服务器性能更好一点才对。为什么呢?

     如果你的主服务器承担不了网站的访问量,宕机了 ,备份服务器接管主服务器的工作,如果备份服务器还没有主服务器性能好过不了多久也会再次宕机!!

    这里就不考虑后方的数据库,监控,缓存等等一些东西了,就以两个http上面都是html文件 测试整体的高可靠性。

    ----------------------------------------------------------------------------------------------------------------------

    环境 centos7.3

    主haproxy 192.168.43.31

    备haproxy 192.168.43.32

    HTTP1       192.168.43.33

    HTTP2       192.168.43.34

    漂移ip        192.168.43.100

    1,构建keepalived

    备份服务器的配置信息

    yum install -y keepalived
    vi /etc/keepalived/keepalived.conf

    global_defs { #这里关于邮箱的都删掉了现在用不到。
    smtp_connect_timeout 30 #连接超时时间
    router_id LVS_DEVEL01 #相当于给这个服务器起个昵称
    }


    vrrp_instance VI_1 {
    state MASTER #定义为主服务器
    interface ens32 #承载漂移ip的网卡 7的系统 ens开头
    virtual_router_id 51 #定义一个热备组,可以认为这是51号热备组
    priority 100 #主服务器优先级要比备服务器高
    advert_int 1 #1秒互相通告一次,检查对方死了没。
    authentication {
    auth_type PASS #认证类型
    auth_pass 1111 #认证密码 这些相当于暗号
    }
    virtual_ipaddress {
    192.168.43.100 #漂移ip
    }
    }
     

    备份服务器的配置信息

    global_defs {
    smtp_connect_timeout 30
    router_id LVS_DEVEL02 #两个服务器不能一样
    }

    vrrp_instance VI_1 {
    state BACKUP #备份服务器 是backup
    interface ens32
    virtual_router_id 51
    priority 90 #优先级要低
    advert_int 1
    authentication {
    auth_type PASS
    auth_pass 1111
    }
    virtual_ipaddress {
    192.168.43.100 #漂移ip
    }
    }


    systemctl stop NetworkManager 两边都关掉 不然有影响。
    systemctl start keepalived #开启keepalived服务
    ip a 可以看到漂移ip 在主服务器上
     

    备服务器上面没

    关掉主的network服务,模拟故障

    可以看到已经漂移到了备份服务器

     

    2,构建haproxy服务器
    haproxy的包可以去官网下载

    https://www.haproxy.org/download/1.7/src/

    这里使用的1.7的haproxy

    如果使用的最小化安装,需要安装一下gcc环境

    yum install -y gcc gcc-c++

    [root@localhost haproxy-1.7.9]# make TARGET=linux2628 PREFIX=/usr/local/haproxy
    [root@localhost haproxy-1.7.9]# make install PREFIX=/usr/local/haproxy

    TARGET=linux2628,内核版本大于2.6.28的使用linux2628

    [root@localhost haproxy-1.7.9]# cp examples/haproxy.init /etc/init.d/haproxy #启动脚本
    [root@localhost haproxy-1.7.9]# chmod +x /etc/init.d/haproxy 
    [root@localhost haproxy-1.7.9]# cp /usr/local/haproxy/sbin/haproxy /usr/sbin/ #启动脚本里要用
    [root@localhost haproxy-1.7.9]# useradd haproxy -s /sbin/nologin 
    [root@localhost haproxy-1.7.9]# mkdir /etc/haproxy #配置文件需要自己创建

    [root@localhost haproxy-1.7.9]# vi /etc/haproxy/haproxy.cfg #vi自己添加配置内容
    下面是配置内容,两个haproxy可以一样

    global
        log 127.0.0.1 local3 info
        user haproxy
        group haproxy
        daemon
        maxconn 4000
    defaults
        log global
        mode http
        option httplog
        option dontlognull
        timeout connect 5000
        timeout client 50000
        timeout server 50000
    frontend http_front
        bind 192.168.43.100:80
        #haproxy的状态管理页面,通过/haproxy?stats来访问
        stats uri /haproxy?stats
        default_backend http_back
    backend http_back
        balance roundrobin
        option httpchk GET /index.html
        option forwardfor header X-Forwarded-For
        server node1 192.168.43.33:80 check inter 2000 rise 3 fall 3 weight 30
        server node2 192.168.43.34:80 check inter 2000 rise 3 fall 3 weight 30

    解析--------------------------------------------------


    global
        log 127.0.0.1 local3 info  用127.0.0.1上的rsyslog服务中的local3设备记录日志,日志级别为info
        user haproxy     用户
        group haproxy  组
        daemon     以守护进程的方式运行
        maxconn 4000   最大并发连接数
    defaults
        log global   表示用global模块中定义的日志配置
        mode http    模式  使用http模式
        option httplog     默认haproxy日志,不记录http请求,开启记录http请求
        option dontlognull   保证HAProxy不记录上级负载均衡发送过来的用于检测状态没有数据的心跳包。
        timeout connect 5000  成功连接一台服务器最长等待时间 单位毫秒
        timeout client 50000  连接客户端最长等待时间 单位毫秒
        timeout server 50000  服务器回应客户端最长等待时间 单位毫秒
    frontend http_front
        bind 192.168.43.100:80   监听本服务器 192.168.43.100的ip 80端口
        stats uri /haproxy?stats    haproxy的状态管理页面,通过/haproxy?stats来访问
        default_backend http_back   定义一个服务器组 http_back
    backend http_back
        balance roundrobin   轮询
        option httpchk GET /index.html 启动http的健康检查
        option forwardfor header X-Forwarded-For    设置后端服务器可以看到客户端ip 访问日志中
        server node1 192.168.43.33:80 check inter 2000 rise 3 fall 3 weight 30

        server node2 192.168.43.34:80 check inter 2000 rise 3 fall 3 weight 30

     后端服务器昵称node1

     ip和端口

     check 关键字

     inter 健康检查间隔  2000毫秒

     rise 检测 3次 认为正常

     fall 检测3次认为失败

     weight 权重 30

    注意 这里监听了漂移ip 

      

    --------------------------------------------------------

    两个haproxy配置可以一样

    下面启动haproxy

    如果遇到启动不成功看系统日志排错。一般是配置文件有问题

    -----------------------

    备服务器会报错 因为监听了漂移ip 但是备服务器上没漂移ip

     

    解决方法

    vi /etc/sysctl.conf 添加

    net.ipv4.ip_nonlocal_bind = 1  忽略监听ip的检查

     sysctl -p  

     

    ----------------------------------------

    server node1 192.168.43.33:80 check inter 2000 rise 3 fall 3 weight 30

     server node2 192.168.43.34:80 check inter 2000 rise 3 fall 3 weight 30

    配置文件中指定的后面的两台web服务器就不演示了  保证可以互相通信 网站可以访问就可以。

    测试效果---------------------------------------

    访问漂移ip 可以看到haproxy的代理效果

     

    关掉主服务器的network服务模拟故障,漂移ip由备份服务器承担 ,继续工作

  • 相关阅读:
    编程语言是一种宗教
    execel 的java库
    c3p0配置学校
    Linux 文件命令精通指南
    几个WEB中常用的js方法
    不可多得的Javascript(AJAX)开发工具 - Aptana
    JDBC连不上Oracle数据库的解决方法
    利用PROFILE管理口令和资源
    ORACLE 数据库名、实例名、ORACLE_SID的区别
    用Java编写Oracle存储过程
  • 原文地址:https://www.cnblogs.com/gxyandwmm/p/12628658.html
Copyright © 2020-2023  润新知