目录:
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.cfggloballog 127.0.0.1 local3 infochroot /var/lib/haproxyuser haproxygroup haproxydaemondefaultslog globalmode httpoption httplogoption dontlognulltimeout connect 5000timeout client 50000timeout server 50000frontend ha_laujian_commode httpbind *:80stats uri /haproxy?statsdefault_backend ha_laujian_com_backend##acl配置acl proxy_laujian_com hdr_end(host) proxy.laujian.comuse_backend proxy_laujian_com_backend if proxy_laujian_combackend ha_laujian_com_backend#source cookie SERVERIDoption forwardfor header X-REAL-IPoption httpchk GET /index.htmlbalance roundrobinserver web-node1 172.16.8.100:9090 check inter 2000 rise 3 fall 3 weight 1server web-node2 172.16.8.101:9090 check inter 2000 rise 3 fall 3 weight 1backend proxy_laujian_com_backendoption forwardfor header X-REAL-IPoption httpchk GET /index.htmlbalance roundrobinserver 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.sockMessage 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_range32768 61000
2.调整timewait的端口复用,设置为1
[root@lb-node1 ~]# cat /proc/sys/net/ipv4/tcp_tw_reuse1
3.调整tcp_wait的时间,不建议修改
[root@lb-node1 ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout60
4.最佳方案:增加多个ip,端口数量就足够
3.3Haproxy与nginx
nginx
| 服务 | 优点 | 缺点 |
Nginx | web服务器,应用广泛,安装配置简单 | 健康检查单一 |
| 7层负载均衡,并且支持4层负载均衡 | 负载均衡算法少 | |
| 性能强大,网络依赖小 | 动态管理较弱 | |
| location灵活匹配 | 没有集群管理状态页面 |
Haproxy
| Haproxy | 优点 | 缺点 |
| 高性能负载均衡、负载均衡算法比较多 | 1.配置稍有麻烦 | |
| 强大7层代理,性能优于Nginx | 2.应用没有nginx广泛 | |
| 与socket通信进行动态管理 | ||
| 丰富的集群管理状态页面 |




