负载均衡之Haproxy安装配置篇

简介:

目前市场上,有关实现负载均衡的软件,使用比较多的是haproxy、nginx和lvs。

首先,介绍一下:什么是负载均衡?负载均衡一般通过两种方式来实现:基于操作系统的负载实现和基于第三方应用的负载实现。LVS就是基于Linux操作系统实现的一种负载,HAProxy就是开源的并且基于第三应用实现的负载。

两者之间的不同:LVS的特点是:

1、抗负载能力强。抗负载能力强、性能高,能达到F5硬件的60%;对内存和cpu资源消耗比较低;

2、工作在网络4层,通过vrrp协议转发(仅作分发之用),具体的流量由linux内核处理,因此没有流量的产生。

HAProxy的特点是:

1、支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;

2、haproxy特别适用于那些负载特别大的web站点,这些站点通常又需要会话保持或七层处理。当haproxy运行在硬件上,完全可以支持数以万计的并发连接。

介绍完基本知识,让我们开始学习haprxoy这款软件。

一、HAProxy介绍

反向代理服务器,支持双机热备,支持虚拟主机,但其配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障,HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入。

二、HAProxy的优点

1、免费开源,可靠性与稳定性都非常出色,可与硬件级设备媲美

2、支持连接拒绝,可以用于防止DDoS攻击

3、支持长连接、短连接和日志功能,可根据需要灵活配置

4、路由HTTP请求到后端服务器,基于cookie作会话绑定;同时支持通过获取指定的url来检测后端服务器的状态

5、HAProxy还拥有功能强大的ACL支持,可灵活配置路由功能,实现动静分离,在架构设计与实现上带来很大方便

6、可支持四层和七层负载均衡,几乎能为所有服务常见的提供负载均衡功能

7、拥有功能强大的后端服务器的状态监控web页面,可以实时了解设备的运行状态,还可实现设备上下线等简单操作。

8、支持多种负载均衡调度算法,并且也支持session保持。

三、配置文件介绍

haproxy 的配置文件由两部分组成:全局设定和对代理的设定,共分为五段:global,defaults,frontend,backend,listen。

3.1 配置文件格式

HAProxy的配置处理3类来主要参数来源:

——最优先处理的命令行参数;

——“global”配置段,用于设定全局配置参数;

——proxy相关配置段,如“defaults”、“listen”、“frontend”和“backend”;

3.2 时间格式

一些包含了值的参数表示时间,如超时时长。这些值一般以毫秒为单位,但也可以使用其它的时间单位后缀。

3.3 全局配置

* 进程管理及安全相关的参数

– chroot :修改haproxy的工作目录至指定的目录并在放弃权限之前执行chroot()操作,可以提升haproxy的安全级别,不过需要注意的是要确保指定的目录为空目录且任何用户均不能有写权限;

– daemon:让haproxy以守护进程的方式工作于后台,其等同于“-D”选项的功能,当然,也可以在命令行中以“-db”选项将其禁用;

– gid :以指定的GID运行haproxy,建议使用专用于运行haproxy的GID,以免因权限问题带来风险;

– group :同gid,不过指定的组名;

– log [max level [min level]]:定义全局的syslog服务器,最多可以定义两个;

– log-send-hostname []:在syslog信息的首部添加当前主机名,可以为“string”指定的名称;

– nbproc :指定启动的haproxy进程的个数,只能用于守护进程模式的haproxy;默认只启动一个进程,鉴于调试困难等多方面的原因,一般只在单进程仅能打开少数文件描述符的场景中才使用多进程模式;

– uid:以指定的UID身份运行haproxy进程;

– ulimit-n:设定每进程所能够打开的最大文件描述符数目,默认情况下其会自动进行计算,因此不推荐修改此选项;Linux默认单进程打开文件数为1024个;

– user:同uid,但使用的是用户名;

– stats:用户访问统计数据的接口;

– node:定义当前节点的名称,用于HA场景中多haproxy进程共享同一个IP地址时;

– description:当前实例的描述信息;

* 性能调整相关的参数

– maxconn :设定每个haproxy进程所接受的最大并发连接数,其等同于命令行选项“-n”;“ulimit -n”自动计算的结果正是参照此参数设定的;

– maxpipes :haproxy使用pipe完成基于内核的tcp报文重组,此选项则用于设定每个进程所允许使用的最大pipe个数;每个pipe会打开两个文件描述符,因此,“ulimit -n”自动计算时会根据需要调大此值;默认为maxconn/4,其通常会显得过大;

3.4 代理

代理相关的配置可以如下配置段中。

defaults”段用于为所有其它配置段提供默认参数,这默认配置参数可由下一个“defaults”所重新设定。

“frontend”段用于定义一系列监听的套接字,这些套接字可接受客户端请求并与之建立连接。

“backend”段用于定义一系列“后端”服务器,代理将会将对应客户端的请求转发至这些服务器。

“listen”段通过关联“frontend”和“backend”定义了一个完整的代理,通常只对TCP流量有用。

所有代理的名称只能使用大写字母、小写字母、数字、-(中线)、_(下划线)、.(点号)和:(冒号)。此外,ACL名称会区分字母大小写。

四、配置案例

一个最简单的http服务的配置

global

log 127.0.0.1

local2chroot /var/lib/haproxy

pidfile /var/run/haproxy.pid

maxconn 4000

user haproxy

group haproxy

daemon

stats socket /var/lib/haproxy/stats

defaults

mode http

log global

option  httplog

option dontlognull

option http-server-close

option forwardfor except 127.0.0.0/8

option redispatch

retries 3

timeout http-request 10s     #在客户端建立连接但不请求数据时,关闭客户端连接

timeout queue 1m                # 等待最大时长

timeout connect 10s     # 定义haproxy将客户端请求转发至后端服务器所等待的超时时长

timeout client 1m        # 客户端非活动状态的超时时长

timeout server 1m        # 客户端与服务器端建立连接后,等待服务器端的超时时长

timeout http-keep-alive 10s   # 定义保持连接的超时时长

timeout check 10s            # 健康状态监测时的超时时间,过短会误判,过长资源消耗

maxconn 3000                # 每个server最大的连接数

frontend webser         #webser为名称

option forwardfor

bind *:80    #自定义监听端口

default_backend app

backend app

balance roundrobin #使用roundrobin 算法

server app1 192.168.159.120:80 check

server app2 192.168.159.121:80 check

动静分离示例

frontend  webservs

bind *:80

acl  url_static  path_beg  -i  /static/images/javascript/stylesheets

acl  url_static  path_end  -i  .jpg.gif.png.css.js.html

acl   url_php   path_end  -i   .php

acl  host_static  hdr_beg(host)  -i img. imgs. video. videos.  ftp.  image.  download.

use_backend static   if   url_static   or  host_static 

use_backend  dynamic   if  url_php

default_backend  dynamic

backend    static

balance   roundrobin

server  node1  192.168.159.120:80  check  maxconn   3000

backend   dynamic

balance  roundrobin

server   node2   192.168.159.121:80   check    maxconn   1000

五、HAProxy+Keepalived实现高可用负载均衡

下图描述了使用keepalived+Haproxy主从配置来达到能够针对前段流量进行负载均衡到多台后端web1、web2、web3、img1、img2。但是由于haproxy会存在单点故障问题,因此使用keepalived来实现对Haproxy单点问题的高可用处理。

1240

一、环境准备:

centos系统服务器4台、两台用于做haproxy主从架构,两台作为后端server,服务器配置好

yum源、防火墙关闭、各节点时钟服务同步、各节点之间可以通过主机名互相通信。

1、准备四台主机:

一台Director-master,DIP:192.168.159.151 VIP:172.17.253.115(桥接模式和仅主机模式)

一台Director-backup,DIP:192.168.159.129 VIP:172.17.253.115(桥接模式和仅主机模式)

一台后台服务器,RIP:192.168.159.120 仅主机模式

一台后台服务器,RIP:192.168.159.121 仅主机模式

二、安装步骤:

1、iptables -F && setenforing 清空防火墙策略,关闭selinux

2、两台服务器Director-master和Director-backup都使用yum方式安装haproxy、keepalived服务

或编译安装:tar zxvf haproxy-1.4.8.tar.gz

cd haproxy-1.4.8

uname -a    //查看linux内核版本

make TARGET=linux26 PREFIX=/usr/local/haproxy

make install PREFIX=/usr/local/haproxy

3、后端服务器配置好基于LNMP架构的web服务

三、修改配置文件:

1.修改/etc/keepalived/keepalived.conf配置文件内容

! Configuration File for keepalived

global_defs {

notification_email {

root@localhost

}

notification_email_from root@magedu.com

smtp_server 127.0.0.1

smtp_connect_timeout 5

router_id LVS_DEVEL

}

vrrp_instance VI_1 {

state MASTER

interface eth0

virtual_router_id 23

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass riqi

}

virtual_ipaddress {

172.17.253.115

}

}

启动服务:systemctl start keepalived

2、配置日志服务

vim /etc/rsyslog.conf

$ModLoad imudp    开启UDP的日志服务,也可以开启TCP

$UDPServerRun 514

local2.* /var/log/haproxy.log  定义日志标准

systemctl restart rsyslog  重启日志服务

3、在haproxy-master上操作haproxy配置文件,定义全局配置

vim /etc/haproxy/haproxy.conf

global #全局配置

log        127.0.0.1 local2  #日志类型

chroot      /var/lib/haproxy  #修改haproxy的工作目录

pidfile    /var/run/haproxy.pid  #进程id

maxconn    4000       #最大连接数

user        haproxy     #运行用户

group      haproxy     #所属组

daemon     #让haproxy以守护进程的方式工作

defaults

mode                    http    #实现http的七层协议

log                    global  #日志定义,沿用global的日志文件

option                  httplog  #启用日志记录http请求

option                  dontlognull#日志将不会记录空连接

option http-server-close #强制短连接

option forwardfor      except 127.0.0.0/8  #添加xforward日志标记

option                  redispatch #出错时重新分配

retries                3 #重试次数

timeout http-request    10s #请求超时时间

timeout queue          1m #队列超时

timeout connect        10s #连接超时

timeout client          1m #客户端超时

timeout server          1m #服务端超时

timeout http-keep-alive 10s #持久连接

timeout check          10s #检查超时

maxconn                3000 #最大连接

listen stats                #定义一个统计报告服务

mode http                  #基于http服务

bind 0.0.0.0:1080          #1080端口的全局监听

stats enable #开启统计报告服务

stats hide-version #隐藏统计报告版本信息

stats uri  /haproxyadmin #统计报告访问url   (假若想访问监控界面:配置stats uri  /haproxy项,重启服务:访问地址为:本机IP地址:PORT或URL)

stats realm Haproxy\ Statistics #页面登陆信息

stats auth admin:admin #验证账号信息

stats admin if TRUE #验证模式

frontend    web #定义一系列监听套接字

bind      *:80

#acl url_static      path_beg      -i /static /images /javascript /stylesheets

#acl url_static      path_end      -i .jpg .gif .png .css .js

#use_backend static          if url_static

default_backend              lnmpserver

backend lnmpserver

balance    roundrobin

option      httpchk /index.php  检查页面

server      lnmpserver1 192.168.159.120:80 check inter 3000 rise 3 fall 3

server      lnmpserver2 192.168.159.121:80 check inter 3000 rise 3 fall 3

启动服务:systemctl start haproxy

netstat -nult 出现1080端口

开启转发

echo 1 > /proc/sys/net/ipv4/ip_forward

3、在haproxy-backup上操作:

修改/etc/keepalived/keepalived.conf配置文件内容

! Configuration File for keepalived

global_defs {

notification_email {

root@localhost

}

notification_email_from root@magedu.com

smtp_server 127.0.0.1

smtp_connect_timeout 5

router_id LVS_DEVEL

}

vrrp_instance VI_1 {

state BACKUP

interface eth0

virtual_router_id 23

priority 88

advert_int 1

authentication {

auth_type PASS

auth_pass riqi

}

virtual_ipaddress {

172.17.253.115

}

}

启动服务:systemctl start keepalived

vim /etc/haproxy/haproxy.conf

global #全局配置

log        127.0.0.1 local2  #日志类型

chroot      /var/lib/haproxy  #修改haproxy的工作目录

pidfile    /var/run/haproxy.pid  #进程id

maxconn    4000       #最大连接数

user        haproxy     #运行用户

group      haproxy     #所属组

daemon     #让haproxy以守护进程的方式工作

defaults

mode                    http    #实现http的七层协议

log                    global  #日志定义,沿用global的日志文件

option                  httplog  #启用日志记录http请求

option                  dontlognull#日志将不会记录空连接

option http-server-close #强制短连接

option forwardfor      except 127.0.0.0/8  #添加xforward日志标记

option                  redispatch #出错时重新分配

retries                3 #重试次数

timeout http-request    10s #请求超时时间

timeout queue          1m #队列超时

timeout connect        10s #连接超时

timeout client          1m #客户端超时

timeout server          1m #服务端超时

timeout http-keep-alive 10s #持久连接

timeout check          10s #检查超时

maxconn                3000 #最大连接

listen stats                #定义一个统计报告服务

mode http                  #基于http服务

bind 0.0.0.0:1080          #1080端口的全局监听

stats enable #开启统计报告服务

stats hide-version #隐藏统计报告版本信息

stats uri /haproxyadmin #统计报告访问url

stats realm Haproxy\ Statistics #页面登陆信息

stats auth admin:admin #验证账号信息

stats admin if TRUE #验证模式

frontend    web #定义一系列监听套接字

bind      *:80

#acl url_static      path_beg      -i /static /images /javascript /stylesheets

#acl url_static      path_end      -i .jpg .gif .png .css .js

#use_backend static          if url_static

default_backend              lnmpserver

backend lnmpserver

balance    roundrobin

option      httpchk /index.php  检查页面

server      lnmpserver1 192.168.159.120:80 check inter 3000 rise 3 fall 3

server      lnmpserver2 192.168.159.121:80 check inter 3000 rise 3 fall 3

启动服务:systemctl start haproxy

netstat -nult 出现1080端口和80端口

开启转发

echo 1 > /proc/sys/net/ipv4/ip_forward

4、测试

测试keepalived高可用:当主服务器正常工作时,VIP在主服务器上,当关闭主服务器的keepalived服务,VIP会漂移到从服务器上,而且网站照常可以访问。(关闭主服务器后IP漂移,可查看ip add)

访问:http://172.17.253.115:1080/haproxyadmin

1240



本文转自 优果馥思 51CTO博客,原文链接:http://blog.51cto.com/youguofusi/2046643

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
1月前
|
弹性计算 负载均衡 容灾
slb配置后端服务器组
配置阿里云SLB后端服务器组涉及四个主要步骤:创建服务器组、添加ECS实例、关联监听规则和设定负载均衡策略。这使得流量根据业务需求和服务器特性进行转发,便于应用架构的灵活管理和扩展,支持蓝绿部署、灰度发布,并通过多可用区提升系统可用性和容灾能力。
25 3
|
4月前
|
负载均衡 网络协议 网络架构
VRRP负载均衡模式配置实用吗?
VRRP负载均衡模式配置实用吗?
67 0
|
6月前
|
负载均衡 算法 应用服务中间件
百度搜索:蓝易云【Linux系统如何使用 HAProxy、Nginx 和 Keepalived 进行负载均衡?】
通过上述步骤,你可以在Linux系统中使用HAProxy、Nginx和Keepalived来实现负载均衡。这些工具可以帮助你将流量分配到多个后端服务器上,提高系统的性能、可靠性和可扩展性。
89 0
|
2天前
|
负载均衡 监控 网络协议
使用haproxy实现负载均衡集群
【4月更文挑战第14天】HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,快速并且可靠的一种解决方案。
8 1
|
1月前
|
弹性计算 缓存 网络协议
slb配置监听规则
配置Server Load Balancer的监听规则涉及选择协议(如HTTP/HTTPS/TCP/UDP)、设置端口,配置后端服务器组,设定健康检查(TCP或HTTP),定义转发规则(轮询、权重等),配置SSL证书、会话保持及安全优化措施。在阿里云上,这可通过登录控制台,选择SLB实例,添加监听并设置相关参数来完成。不同云服务商的具体步骤可能略有差异,参考官方文档为宜。
33 3
|
1月前
|
弹性计算 负载均衡 算法
SLB配置与使用
SLB配置与使用
28 4
|
1月前
|
SpringCloudAlibaba 负载均衡 Java
【二】SpringCloud Alibaba之Nacos整合篇(配置负载均衡)
【二】SpringCloud Alibaba之Nacos整合篇(配置负载均衡)
257 0
|
2月前
|
数据采集 负载均衡 应用服务中间件
Python爬虫之Splash负载均衡配置#7
Splash负载均衡配置【2月更文挑战第28天】
33 0
|
3月前
|
负载均衡 网络协议 小程序
Nginx配置Tcp负载均衡
Nginx配置Tcp负载均衡
|
4月前
|
负载均衡 算法 应用服务中间件
(原理及配置)nginx配置负载均衡
(原理及配置)nginx配置负载均衡
75 1