Haproxy 安装及简单配置


简介: HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,它是免费、开源、快速并且可靠的一种解决方案。

1. 编译安装

1.1 编译

仅使用基础功能
make TARGET=linux-glibc PREFIX=/usr/local/haproxy

参数说明:
1. TARGET=linux-glibc,haproxy2.0后的使用方法。2.0之前用TARGET=linux2628
2. PREFIX配置安装路径

haproxy支持https协议
make TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 PREFIX=/usr/local/haproxy

说明:
1. openssl version #openssl最低版本要1.0.2或以上
2. yum install openssl-devel zlib-devel pcre-devel -y

1.2 安装

  • install
    make install PREFIX=/usr/local/haproxy
  • 创建conf目录
    mkdir /usr/local/haproxy/conf
    cp examples/option-http_proxy.cfg /usr/local/haproxy/conf/haproxy.cfg
  • 链接
    编译安装完成之后会在当前目录中生成一个可执行程序,链接到/usr/sbin下:
    ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/haproxy

2. 启停命令

  • 启动:
    haproxy -f /usr/local/haproxy/conf/haproxy.cnf
  • 查看状态:
    ps -ef | grep haproxy
  • 停掉:
    kill -9 pid

启停脚本

3. 基础配置构成

HAProxy 配置文件根据功能和用途,主要有 5 个部分组成,但有些部分并不是必须的, 可以根据需要选择相应的部分进行配置。

  1. global 部分
    用来设定全局配置参数,属于进程级的配置,通常和操作系统配置有关。

  2. defaults 部分
    默认参数的配置部分。在此部分设置的参数值,默认会自动被引用到下面的 frontend、backend 和 listen 部分中,因此,如果某些参数属于公用的配置,只需在 defaults 部分添加一次即可。而如果在 frontend、backend 和 listen 部分中也配置了与 defaults 部分一样的参数,那么defaults 部分参数对应的值自动被覆盖。

  3. frontend 部分
    此部分用于设置接收用户请求的前端虚拟节点。frontend 可以根据 ACL 规则直接指定要使用的后端

  4. backend 部分
    此部分用于设置集群后端服务集群的配置,也就是用来添加一组真实服务器,以处理前端用户的请求。添加的真实服务器类似于 LVS 中的real server 节点。

  5. listen 部分
    此部分是 frontend 部分和 backend 部分的结合体。目前在 HAProxy 中,两种配置方式任选其一即可。

4. 配置文件详解

4.1 global

global
	maxconn 32768
	user ipnet
	group ipnet
    daemon
    quiet
    nbproc 1
    pidfile /usr/local/haproxy/conf/haproxy.pid
    stats socket /usr/local/haproxy/haproxy.stat mode 600 level admin

maxconn:设定每个 haproxy 进程可接受的最大并发连接数。
user/group:设置运行 haproxy 进程的用户和组
stats:和多进程haproxy有关,由于不建议使用多进程,所以也不建议设置此项。但建议设置为"stats socket"将套接字和本地文件进行绑定,如"stats socket /var/lib/haproxy/stats"。

4.2 defaults

defaults
       mode http
       log global 	#采用全局 log 配置
       option httplog
       option http-server-close
       option dontlognull
       #log 127.0.0.1:7514 local5  #建议关闭log功能,以提高性能
       retries 3
       option redispatch
       option allbackups
       option forwardfor    
       maxconn 29800
       option tcpka
       option abortonclose
       timeout connect 20s
       timeout client 180s
       timeout server 180s
       timeout queue  60s
       timeout http-request 5s

mode:设置 HAProxy 实例默认的运行模式,有 tcp、http、health 三个可选值。
tcp 模式:在此模式下,客户端和服务器端之间将建立一个全双工的连接,不会对七层报文做任何类型的检查,默认为 tcp 模式,经常用于 SSL、SSH、SMTP 等应用。
http 模式:在此模式下,客户端请求在转发至后端服务器之前将会被深度分析,所有不与 RFC 格式兼容的请求都会被拒绝。

retries:设置连接后端服务器的失败重试次数,连接失败的次数如果超过这里设置的值,HAProxy 会将对应的后端服务器标记为不可用。此参数也可在后面部分进行设置。

option选项
option httplog:在默认情况下,haproxy 日志是不记录 HTTP 请求的,这样很不方便 HAProxy 问题的排查与监控。通过此选项可以启用日志记录 HTTP 请求。
option http-server-close:在使用长连接时,为了避免客户端超时没有关闭长连接,此功能可以使服务器端关闭长连接
option dontlognull :保证HAProxy不记录上级负载均衡发送过来的用于检测状态没有数据的心跳包。
option redispatch:此参数用于 cookie 保持的环境中。在默认情况下,HAProxy会将其请求的后端服务器的 serverID 插入到 cookie 中,以保证会话的 SESSION 持久性。而如果后端的服务器出现故障,客户端的 cookie 是不会刷新的,这就出现了问题。此时,如果设置此参数,就会将客户的请求强制定向到另外一个健康的后端服务器上,以保证服务的正常。
option allbackups:在设置了backup的时候,默认第一个backup会优先,设置option allbackups后,所有备份服务器权重一样
option forwardfor:如果后端服务器需要获得客户端的真实ip,需要配置该参数,可以从http header 中获取客户端的IP
option tcpka:是否允许向server和client发送keepalive
option abortonclose:当服务器负载过高时,将自动关闭队列中处理时间较长的连接请求

4.3 frontend

frontend是在haproxy 1.3版本以后才引入的一个组件,同时引入的还有backend组件。通过引入这些组件,在很大程度上简化了haproxy配置文件的复杂性。frontend根据任意 HTTP请求头内容做ACL规则匹配,然后把请求定向到相关的backend。

frontend http-in
        bind :80
        mode http
        acl jslib path_beg -i /INAS/static/jslib/
        use_backend nginx-jslib if jslib
        default_backend tomcatcluster
        stats uri /haproxy-stats  
        stats realm Haproxy\ statistics
        stats refresh 10s
        stats admin if TRUE

这部分通过frontend 关键字定义了一个名为“http-in”的前端虚拟节点,下面介绍每个选项的含义:
bind:定义haproxy前端部分监听的端口。发起http请求到80端口,会被转发到设置的ip及端口
acl:定义jslib
use_backend:符合jslib规则,请求nginx-jslib服务池。
default_backend tomcatcluster: 设置请求默认转发的后端服务池
stats uri /haproxy-status:haproxy的状态管理页面,通过/haproxy-status来访问

4.3.1 ACL策略

待更新

4.4 backend

用来定义后端服务集群的配置,真实服务器,一个Backend对应一个或者多个实体服务器

backend tomcatcluster
        mode http
        #balance roundrobin     #负载均衡算法
        balance source     #客户端IP地址负载均衡        
	    cookie SERVERID insert indirect nocache
        option httpchk HEAD / HTTP/1.0   #健康检测/
        server tomcat1 10.180.212.88:8080 cookie server1 check inter 3s weight 50
        server tomcat2 10.180.212.88:9080 cookie server2 check inter 3s weight 50
    
backend nginx-jslib
        mode http
        balance roundrobin     #负载均衡算法
        #balance source     #客户端IP地址负载均衡
        cookie SERVERID insert indirect nocache
        option httpchk HEAD / HTTP/1.0   #健康检测/
    server jslib1 10.180.212.88:8081 cookie server3 check  inter 3s weight 50
    server jslib2 10.180.212.88:8082 cookie server4 check  inter 3s weight 50

balance:此关键字用来定义负载均衡算法。目前HAProxy 支持多种负载均衡算法,常用如下:
roundrobin:是基于权重进行轮询调度的算法,在服务器的性能分布比较均匀的时候,这是一种最公平、最合理的算法。此算法经常使用。
source:是基于请求源IP 的算法。此算法先对请求的源IP 进行hash 运算,然后将结果与后端服务器的权重总数相除后转发至某个匹配的后端服务器。这种方式可以使同一个客户端IP 的请求始终被转发到某特定的后端服务器。

cookie:表示允许向cookie 插入SESSION_COOKIE,每台服务器的SERVERID 可在下面的server 关键字中使用cookie 关键字定义。

option httpchk:此选项表示启用HTTP 的服务状态检测功能。HAProxy 作为一款专业的负载均衡器,它支持对backend 部分指定的后端服务节点的健康检查,以保证在后端backend 中某个节点不能服务时,把从frotend 端进来的客户端请求分配至backend 中其他健康节点上,从而保证整体服务的可用性。

5. 性能调优

global
	log 127.0.0.1 local0 info 
	maxconn 32768
	user ipnet
	group ipnet
    daemon
    quiet
    nbproc 1
    nbthread 4
    cpu-map auto:1/1-4 0-3  #4个线程,4个cpu,每个线程分配1个cpu
    pidfile /usr/local/haproxy/conf/haproxy.pid
    stats socket /usr/local/haproxy/haproxy.stat mode 600 level admin
  • 多线程支持
    默认情况下,HAProxy将启动一个进程和一个线程。要启动更多线程,应在全局配置部分中设置选项“ nbthread ”。
    请注意,选项“ nbthread ”与“ nbproc ” 兼容,这意味着甚至可以启动多个HAProxy进程,每个进程中有多个线程。
    然后,还应使用配置指令“ cpu-map ” 将进程和线程映射到CPU核心。
    运行单个HAProxy进程(1)以及映射到前四个CPU核心(0-3)的4个线程(1-4)所需的完整配置如下所示:
    nbproc 1 #设置启动进程数,默认是1
    nbthread 4 #4个线程
    cpu-map auto:1/1-4 0-3 # 绑定cpu

6. 让haproxy支持https

有些时候用户需要构建https站点,虽然tomcat支持https服务,不过考虑到现场基本上都用haproxy+tomcat架构,所以在haproxy上启用https服务更简单快捷方便。而haproxy跟tomcat之间仍旧采用http方式,充分发挥haproxy的性能,让专业的事情由专业的人去做。
实际上,对于http的负载均衡、策略转发、健康检测、session保持、HTTP/2、ssl支持上,haproxy比nginx更专业。特别的,haproxy还可以动态设置后端web server服务暂停与启用。

1. 编译,使haproxy支持https
参考前面

2. 生成证书
执行下面的4条命令:
a) keytool -genkeypair -keyalg RSA -validity 3650 -keystore keystore.p12 -storetype pkcs12 -storepass eastcom -ext SAN=DNS:eastcom-sw.com -dname "CN=*.eastcom-sw.com,OU=inas,O=eastcom-sw,L=HZ,ST=ZJ,C=CN"
b) keytool -exportcert -keystore keystore.p12 -storetype pkcs12 -storepass eastcom -rfc -file certificate.pem
c) openssl pkcs12 -in keystore.p12 -nodes -nocerts -out private_key.pem -passin pass:eastcom
d) cat certificate.pem private_key.pem > server.pem
这里密码设为eastcom,可以自己设定。另外,如果是正式购买的证书,会包含上述2个pem文件,直接用最后一条命令合并成server.pem即可。

3. 设置haproxy.cfg
配置文件

7. 配置haproxy端口转发–tcp篇

配置文件

8. 记录日志

defaults
		log 127.0.0.1:7514 local5

搭配:alarm-log.zip

9. ACL规则

待测试:
url_reg

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值