温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

keepalived中怎么利用haproxy实现高可用和负载均衡

发布时间:2021-06-22 15:11:12 来源:亿速云 阅读:185 作者:Leah 栏目:大数据

本篇文章给大家分享的是有关keepalived中怎么利用haproxy实现高可用和负载均衡,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

1.Nginx是工作在网络的7层之上,不支持TCP协议的转发,1.9 以后可以通过stream模块实现了tcp代理功能但是稳定性还是有所欠缺。而公司现有的系统有部分协议是ICE的因此如果不支持TCP协议改动会比较大。

2.Nginx不支持健康检查,虽然后来淘宝出了个nginx_upstream_check_module但是需要额外安装插件,另外这个插件也只是支持http的不支持TCP的。所以有一定的局限性。

*什么是健康检查?简单来说就是负载均衡服务器定时调用负载服务器某个HTTP接口或ping一下tpc端口检查服务是否可用。这个对实现系统高可用非常有用,健康检测可以自定义脚本来检测后端服务,这有利于那些经常出现假死,无法通过常规判断端口来检测后台是否正常的问题。 比如,RabbitMQ,业务程序自定义检查等。目前HA支持3种形式检查

1)通过监听端口进行健康检测 。这种检测方式,haproxy只会去检查后端server的端口,并不能保证服务的真正可用。

例如:

listen http_proxy 0.0.0.0:80
        mode http
        cookie SERVERID
        balance roundrobin
        option httpchk
        server web1 192.168.1.1:80 cookie server01 check
        server web2 192.168.1.2:80 cookie server02 check inter 500 rise 1 fall 2

2)通过URI获取进行健康检测 。检测方式,是用过去GET后端server的的web页面,基本上可以代表后端服务的可用性。

listen http_proxy 0.0.0.0:80
        mode http
        cookie SERVERID
        balance roundrobin
        option httpchk GET /index.html
        server web1 192.168.1.1:80 cookie server01 check
        server web2 192.168.1.2:80 cookie server02 check inter 500 rise 1 fall 2

3)通过request获取的头部信息进行匹配进行健康检测 。这种检测方式,则是基于高级,精细的一些监测需求。通过对后端服务访问的头部信息进行匹配检测。 

listen http_proxy 0.0.0.0:80
        mode http
        cookie SERVERID
        balance roundrobin
        option httpchk HEAD /index.jsp HTTP/1.1\r\nHost:\ www.xxx.com
        server web1 192.168.1.1:80 cookie server01 check
        server web2 192.168.1.2:80 cookie server02 check inter 500 rise 1 fall 2

3.haproxy内置负载监控界面,可以很清晰看到负载情况。

这里并不是说Nginx比不上Haproyx只是相对而言Haproxy提供我们想要的功能,而且无需安装其它插件,相对而言比较简单。因此综合考虑我们决定采用Haproyx+keepalive实现高可用。

下图就是整个负载均衡的架构图:

keepalived中怎么利用haproxy实现高可用和负载均衡

Haproxy安装:

#下载
#http://www.haproxy.org/download/1.7/src/haproxy-1.7.8.tar.gz
#cd /data/nfs/download
#yum install gcc gcc-c++ autoconf automake -y

#安装haproxy
tar -axf haproxy-* && cd ./haproxy-*
make TARGET=linux2628 ARCH=x86_64 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproyx
安装成功后,查看版本
/usr/local/haproyx/sbin/haproxy -v

这里写图片描述

复制haproxy文件到/usr/sbin下 
因为下面的haproxy.init启动脚本默认会去/usr/sbin下找,当然你也可以修改,不过比较麻烦。

cp /usr/local/haproxy/sbin/haproxy /usr/sbin/

复制haproxy脚本,到/etc/init.d下

cp ./examples/haproxy.init /etc/init.d/haproxy
chmod 755 /etc/init.d/haproxy


创建系统账号

useradd -r haproxy

创建配置文件

mkdir /etc/haproxy
vi /etc/haproxy/haproxy.cfg
在配置文件haproxy.cfg中添加如下设置:

#全局配置
global
    #设置日志
    log 127.0.0.1 local3 info
    chroot /usr/local/haproxy
    #用户与用户组
    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

#前端配置,http_front名称可自定义
frontend http_front
    # 发起http请求道80端口,会被转发到设置的ip及端口
    bind *:80
    #haproxy的状态管理页面,通过/haproxy?stats来访问
    stats uri /haproxy?stats
    default_backend http_back

#后端配置,http_back名称可自定义
backend http_back
    #负载均衡方式
    #source 根据请求源IP
    #static-rr 根据权重
    #leastconn 最少连接者先处理
    #uri 根据请求的uri
    #url_param 根据请求的url参数
    #rdp-cookie 据据cookie(name)来锁定并哈希每一次请求
    #hdr(name) 根据HTTP请求头来锁定每一次HTTP请求
    #roundrobin 轮询方式
    balance roundrobin
    #设置健康检查页面
    option httpchk GET /index.html
    #传递客户端真实IP
    option forwardfor header X-Forwarded-For
    # inter 2000 健康检查时间间隔2秒
    # rise 3 检测多少次才认为是正常的
    # fall 3 失败多少次才认为是不可用的
    # weight 30 权重
    # 需要转发的ip及端口
    server node1 192.168.179.131:8081 check inter 2000 rise 3 fall 3 weight 30
    server node2 192.168.179.131:8082 check inter 2000 rise 3 fall 3 weight 30
 

keepalive安装

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

global_defs {

    notification_email {  

     root@localhost  

   }  

   notification_email_from root@localhost  

   smtp_server localhost  

   smtp_connect_timeout 30  

   router_id  NodeA 

}

vrrp_instance VI_1 {  

    state MASTER   #指定A节点为主节点 备用节点上设置为BACKUP即可  

    interface eth0   #绑定虚拟IP的网络接口  

    virtual_router_id 51  #VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP组  

    priority 100   #主节点的优先级(1-254之间),备用节点必须比主节点优先级低  

    advert_int 1   #组播信息发送间隔,两个节点设置必须一样  

    authentication {   #设置验证信息,两个节点必须一致  

        auth_type PASS  

        auth_pass 1111  

    }  

    virtual_ipaddress {   #指定虚拟IP, 两个节点设置必须一样  

        192.168.1.220

    }  

}

interface eth0  这个的网卡名称一定别弄错了,要弄成自己的。可以使用 ip a 命令查看

启动keepalive

/etc/init.d/keepalived start

以上就是keepalived中怎么利用haproxy实现高可用和负载均衡,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI