反向代理负载均衡系列之Haproxy

Posted 王佐的运维笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反向代理负载均衡系列之Haproxy相关的知识,希望对你有一定的参考价值。

目录:

1.反向代理概述

2.Node节点部署

3.反向代理部署

3.1Haproxy动态维护

3.2Haproxy生产使用建议

3.3Haproxy与nginx


1.反向代理概述

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。


环境准备:

web-node2.com

主机名
IP地址
角色
系统
web-node1.com
172.16.8.100 web-node1节点 Centos 7.6
web-node2.com
172.16.8.101 web-node2节点 Centos 7.6
lb-node1.com 172.16.8.102

Nginx反向代理

Centos 7.6


2.Node节点部署

在两台web-node节点中均使用Yum安装一个Apache用于做真实机,监听9090端口

web-node1.com部署

[root@web-node1 ~]# rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpmwarning: /var/tmp/rpm-tmp.BgjDaw: Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEYPreparing... ################################# [100%]Updating / installing... 1:epel-release-7-12 warning: /etc/yum.repos.d/epel.repo created as /etc/yum.repos.d/epel.repo.rpmnew################################# [100%]
[root@web-node1 ~]# yum install -y gcc glibc gcc-c++ make screen tree lrzsz##部署web-node1 httpd服务[root@web-node1 ~]# yum install -y httpd[root@web-node1 ~]# sed -i 's/Listen 80/Listen 9090/g' /etc/httpd/conf/httpd.conf[root@web-node1 ~]# systemctl start httpd[root@web-node1 ~]# echo "web-node1.com" > /var/www/html/index.html[root@web-node1 ~]# curl http://172.16.8.100:9090/web-node1.com

web-node2.com部署

[root@web-node1 ~]# rpm -ivh \http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm[root@web-node1 ~]# yum install -y gcc glibc gcc-c++ make screen tree lrzsz
##部署web-node2 httpd服务[root@web-node2 ~]# yum install -y httpd[root@web-node2 ~]# sed -i 's/Listen 80/Listen 9090/g' /etc/httpd/conf/httpd.conf[root@web-node2 ~]# systemctl start httpd[root@web-node2 ~]# echo "web-node2.com" > /var/www/html/index.html[root@web-node2 ~]# curl http://172.16.8.101:9090/web-node2.com


3.反向代理部署

1.Haproxy 源码编译安装,并监听80端口

[root@lb-node1 ~]# cd /usr/local/src/[root@lb-node1 src]# wget http://www.haproxy.org/download/1.6/src/haproxy-1.6.9.tar.gz[root@lb-node1 src]# tar xf haproxy-1.6.9.tar.gz[root@lb-node1 src]# cd haproxy-1.6.9[root@lb-node1 haproxy-1.6.9]# make TARGET=linux2628 PREFIX=/usr/local/haproxy-1.6.9[root@lb-node1 haproxy-1.6.9]# make install[root@lb-node1 ~]# cp /usr/local/sbin/haproxy /usr/sbin/[root@lb-node1 ~]# haproxy -vHA-Proxy version 1.6.9 2016/08/30Copyright 2000-2016 Willy Tarreau <willy@haproxy.org>

## Haproxy启动脚本[root@lb-node1 ~]# cp /usr/local/src/haproxy-1.6.9/examples/haproxy.init /etc/init.d/haproxy[root@lb-node1 ~]# chmod 755 /etc/init.d/haproxy

## Haproxy配置文件[root@lb-node1 ~]# useradd -r haproxy[root@lb-node1 ~]# mkdir /etc/haproxy[root@lb-node1 ~]# mkdir /var/lib/haproxy[root@lb-node1 ~]# mkdir /var/run/haproxy

2.编辑Haproxy配置文件,并启动

[root@lb-node1 ~]# cat /etc/haproxy/haproxy.cfgglobal log 127.0.0.1 local3 info chroot /var/lib/haproxy user haproxy group haproxy daemon
defaults log global mode http option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000
frontend ha_laujian_com mode http bind *:80 stats uri /haproxy?stats default_backend ha_laujian_com_backend ##acl配置 acl proxy_laujian_com hdr_end(host) proxy.laujian.com use_backend proxy_laujian_com_backend if proxy_laujian_com

backend ha_laujian_com_backend#source cookie SERVERID option forwardfor header X-REAL-IP option httpchk GET /index.html balance roundrobin server web-node1 172.16.8.100:9090 check inter 2000 rise 3 fall 3 weight 1   server web-node2 172.16.8.101:9090 check inter 2000 rise 3 fall 3 weight 1
backend proxy_laujian_com_backend option forwardfor header X-REAL-IP option httpchk GET /index.html balance roundrobin   server web-node2 172.16.8.101:9090 check inter 2000 rise 3 fall 3 weight 1

##配置Haproxy日志[root@lb-node1 ~]# sed -i 's@\#\$ModLoad imudp@\$ModLoad imudp@g' /etc/rsyslog.conf[root@lb-node1 ~]# sed -i 's@\#\$UDPServerRun 514@\$UDPServerRun 514@g' /etc/rsyslog.conf[root@lb-node1 ~]# echo "local3.* /var/log/haproxy.log" >> /etc/rsyslog.conf
##启动Haproxy服务[root@lb-node1 ~]# /etc/init.d/haproxy start

3.测试Haproxy


[root@lb-node1 ~]# curl http://172.16.8.102/web-node2.com[root@lb-node1 ~]# curl http://172.16.8.102/web-node1.com[root@lb-node1 ~]# curl http://172.16.8.102/web-node2.com[root@lb-node1 ~]# curl http://172.16.8.102/web-node1.com

proxy.laujian.com调度至web-node2(解析hosts) 更多acl配置

[root@lb-node1 ~]# curl proxy.laujian.comweb-node2.com[root@lb-node1 ~]# curl proxy.laujian.comweb-node2.com

4.Haproxy状态管理页面
访问:http://172.16.8.102/haproxy?stats

3.1Haproxy动态维护

1.在global下添加socket文件

stats socket /var/lib/haproxy/haproxy.sock mode 600 level adminstats timeout 2m

2.安装socat

[root@lb-node1 ~]# yum install -y socat#查看Haproxy的help[root@lb-node1 ~]# echo "help" |socat stdio /var/lib/haproxy/haproxy.sock

3.查看info状态信息,可以通过zabbix来监控相关状态值

[root@lb-node1 ~]# echo "show info" |socat stdio /var/lib/haproxy/haproxy.sockName: HAProxyVersion: 1.6.9Release_date: 2016/08/30Nbproc: 1Process_num: 1Pid: 6108Uptime: 0d 0h01m24sUptime_sec: 84Memmax_MB: 0Ulimit-n: 4034Maxsock: 4034Maxconn: 2000Hard_maxconn: 2000CurrConns: 0CumConns: 2CumReq: 2Maxpipes: 0PipesUsed: 0PipesFree: 0ConnRate: 0ConnRateLimit: 0MaxConnRate: 0SessRate: 0SessRateLimit: 0MaxSessRate: 0CompressBpsIn: 0CompressBpsOut: 0CompressBpsRateLim: 0Tasks: 9Run_queue: 1Idle_pct: 100node: lb-node1.comdescription:

4.Haproxy维护模式
关闭proxy_laujian_com下web-node2

root@lb-node1 ~]# echo "disable server proxy_laujian_com_backend/web-node2" |socat stdio /var/lib/haproxy/haproxy.sock
Message from syslogd@localhost at Oct 19 17:16:56 ... haproxy[6180]: backend proxy_laujian_com_backend has no server available!

重启启动web-node2(此操作对现有Server生效,不支持新增加节点)

[root@lb-node1 ~]# echo "enable server proxy_laujian_com_backend/web-node2" |socat stdio /var/lib/haproxy/haproxy.sock


3.2Haproxy生产使用建议

haproxy的本地端口会出现用尽情况,解决方案如下4条

1.更改local的端口范围,调整内核参数

[root@lb-node1 ~]# cat /proc/sys/net/ipv4/ip_local_port_range 32768 61000

2.调整timewait的端口复用,设置为1

[root@lb-node1 ~]# cat /proc/sys/net/ipv4/tcp_tw_reuse 1

3.调整tcp_wait的时间,不建议修改

[root@lb-node1 ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout 60

4.最佳方案:增加多个ip,端口数量就足够

3.3Haproxy与nginx

nginx

服务 优点 缺点


     

      Nginx

web服务器,应用广泛,安装配置简单

健康检查单一
7层负载均衡,并且支持4层负载均衡 负载均衡算法少
性能强大,网络依赖小 动态管理较弱
location灵活匹配 没有集群管理状态页面


Haproxy

Haproxy 优点 缺点
高性能负载均衡、负载均衡算法比较多 1.配置稍有麻烦
强大7层代理,性能优于Nginx 2.应用没有nginx广泛
与socket通信进行动态管理
丰富的集群管理状态页面









以上是关于反向代理负载均衡系列之Haproxy的主要内容,如果未能解决你的问题,请参考以下文章

反向代理之HAProxy的简单应用

反向代理软件之HAproxy基础

反向代理软件之HAproxy基础

haproxy负载均衡器及反向代理

Nginx实现反向代理负载均衡功能

Linux 反向代理之HAproxy