部署haproxy代理,搭建基于nginx的高性能反向代理群集
2021/12/19 7:22:03
本文主要是介绍部署haproxy代理,搭建基于nginx的高性能反向代理群集,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
- 一、Haproxy概述、简介
- (1)Haproxy简介
- (2)Haproxy和LVS、Nginx的比较
- (3)Haproxy的代理模式
- 二、利用Haproxy+nginx搭建web群集
- 实验环境
- 实验目的
- 实验步骤
- (1)部署两台nginx服务器(两台步骤相同,编写网页不同)
- (2)部署haproxy服务器
- (3)验证
- 三、扩展——haproxy的日志管理
一、Haproxy概述、简介
(1)Haproxy简介
- Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,也是目前来说比较流行的一种集群调度工具
- 支持双机热备、虚拟主机、基于TCP和HTTP应用代理等功能
- 对于双机热备来说,Haproxy配置简单,拥有很好的对服务器节点的健康检查功能,当其代理的后端服务器出现故障时,Haproxy会自动的将该故障服务器摘除,当服务器的故障恢复后Haproxy还会自动讲RS服务器添加
(和keepalived的健康检查差不多)
- 对于高性能的反向代理来说,Haproxy使用于那些访问量很大,但是又需要会话保持或者七层应用的业务。Haproxy运行在普通的服务器硬件上,仅仅是进行简单的优化就可以支持数以万计的并发连接,并且它的运行模式使得它可以很简单、安全的整合到各种网站的架构中,同时使得应用服务器的ip地址不会暴露在网络中。Haproxy软件引入了frontend (前端) 和 backend (后端) 的功能,而frontend的acl匹配规则可以让运维管理人员根据任意HTTP请求作为头部来进行规则匹配,然后再把请求定向到相关的backend
(即server pools 服务器池等待前端把请求转过来的服务器组)
。通过frontend和backup (备用服务器) ,我们可以很容易的实现Haproxy的七层代理功能,haproxy是一款不可多得的优秀代理服务软件
(2)Haproxy和LVS、Nginx的比较
- LVS性能最好,但是相对于Haproxy来说,搭建要复杂许多
- Nginx的upstream模块支持集群功能,但是对集群节点的健康检查功能不强,性能没有Haproxy好
(3)Haproxy的代理模式
主要支持两种代理模式:
第一个: 四层TCP代理
例如:可以用于邮件服务器内部协议通信服务器、Mysql服务器等
第二个: 七层代理
在四层TCP代理模式下,Haproxy仅在客户端和服务器之间双向转发流量,但是在七层模式下Haproxy会分析应用层协议,并且能够通过运行、拒绝、交换、增加、修改或者删除请求(request)或者回应(reponse)里指定内容来控制协议
二、利用Haproxy+nginx搭建web群集
实验环境
以下实验所用的系统均为Centos7!
名称 | ip地址 | 扮演角色 |
---|---|---|
haproxy | 192.168.100.1 | haproxy代理服务器 |
nginx1 | 192.168.100.2 | nginx服务器 |
nginx2 | 192.168.100.3 | nginx服务器 |
实验目的
利用haproxy+nginx搭建的群集,使内部web服务器不用把ip地址暴露在网络上,并且实现两台web服务器页面的来回切换,实现负载均衡
实验步骤
(1)部署两台nginx服务器(两台步骤相同,编写网页不同)
******(1)先做基础配置,nginx1和nginx2 ————nginx1: [root@Centos7 ~]# hostnamectl set-hostname nginx1 [root@Centos7 ~]# su [root@nginx1 ~]# mount /dev/cdrom /mnt/ mount: /dev/sr0 写保护,将以只读方式挂载 mount: /dev/sr0 已经挂载或 /mnt 忙 /dev/sr0 已经挂载到 /mnt 上 ————nginx2: [root@Centos7 ~]# hostnamectl set-hostname nginx2 [root@Centos7 ~]# su [root@nginx2 ~]# mount /dev/cdrom /mnt/ mount: /dev/sr0 写保护,将以只读方式挂载 mount: /dev/sr0 已经挂载或 /mnt 忙 /dev/sr0 已经挂载到 /mnt 上 ******(2)分别在两台机器上安装必要组件、上传nginx的源码包进行配置、编译、安装,并且编写web页面 ————nginx1: [root@nginx1 ~]# yum -y install pcre-devel zlib-devel 。。。。。。 完毕! [root@nginx1 ~]# ls anaconda-ks.cfg nginx-1.12.0.tar.gz [root@nginx1 ~]# tar xf nginx-1.12.0.tar.gz -C /usr/src/ [root@nginx1 ~]# cd /usr/src/nginx-1.12.0/ [root@nginx1 nginx-1.12.0]# useradd -M -s /sbin/nologin nginx [root@nginx1 nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx &&make &&make install [root@nginx1 nginx-1.12.0]# echo "11111111" > /usr/local/nginx/html/index.html [root@nginx1 nginx-1.12.0]# /usr/local/nginx/sbin/nginx [root@nginx1 nginx-1.12.0]# netstat -anpt | grep nginx (查看端口号是否已经成功启动nginx) tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 6297/nginx: master [root@nginx1 nginx-1.12.0]# curl 127.0.0.1 (测试是否可以正常访问) 11111111 ————nginx2: [root@nginx2 ~]# yum -y install pcre-devel zlib-devel [root@nginx2 ~]# ls anaconda-ks.cfg nginx-1.12.0.tar.gz [root@nginx2 ~]# tar xf nginx-1.12.0.tar.gz -C /usr/src/ [root@nginx2 ~]# cd /usr/src/nginx-1.12.0/ [root@nginx2 nginx-1.12.0]# useradd -M -s /sbin/nologin nginx [root@nginx2 nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install [root@nginx2 nginx-1.12.0]# echo "2222222" > /usr/local/nginx/html/index.html [root@nginx2 nginx-1.12.0]# /usr/local/nginx/sbin/nginx [root@nginx2 nginx-1.12.0]# netstat -anpt | grep nginx tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3923/nginx: master [root@nginx2 nginx-1.12.0]# curl 127.0.0.1 2222222
(2)部署haproxy服务器
******(1)先做基础配置 [root@Centos7 ~]# hostnamectl set-hostname haproxy [root@Centos7 ~]# su [root@haproxy ~]# mount /dev/cdrom /mnt/ mount: /dev/sr0 写保护,将以只读方式挂载 mount: /dev/sr0 已经挂载或 /mnt 忙 /dev/sr0 已经挂载到 /mnt 上 ******(2)安装必要组件上传haproxy的源码包并且进行安装 [root@haproxy ~]# yum -y install pcre-devel bzip2-devel 。。。。。。 完毕! [root@haproxy ~]# ls anaconda-ks.cfg haproxy-1.5.19.tar.gz [root@haproxy ~]# tar xf haproxy-1.5.19.tar.gz -C /usr/src/ [root@haproxy ~]# cd /usr/src/haproxy-1.5.19/ [root@haproxy haproxy-1.5.19]# make TARGET=linux26 (表示安装64位系统) [root@haproxy haproxy-1.5.19]# make install [root@haproxy haproxy-1.5.19]# cd ******(3)配置haproxy [root@haproxy ~]# vim /usr/src/haproxy-1.5.19/examples/haproxy.cfg (模板文件) ——————————————————————————————————————华丽分割线———————————————————————————————————————— 配置文件解析: global 全局部分 log /dev/log local0 info log /dev/log local1 notice 把info和notice日志分别存放,以便查看 maxconn 4096 最大连接数 uid 99 用户id gid 99 组id # pidfile /var/run/haproxy.pid pid文件的路径及文件名 daemon 后台运行 defaults 默认配置 log global 应用全局部分的日志配置 mode http 模式为http option httplog option dontlognull retries 3 检查节点的失败次数,连续达到3次认为节点不可用 maxconn 2000 最大连接数 contimeout 5000 连接超时时间5000 clitimeout 50000 客户端超时时间50000 srvtimeout 50000 服务器超时时间50000 # option httpclose 关闭客户端请求 listen webcluster 0.0.0.0:80 web集群(侦听的地址和接口) option httpchk GET /index.html 检查http文件 balance roundrobin 负载均衡调度算法 轮询 roundrobin server inst1 192.168.100.2:80 check inter 2000 fall 3 server inst2 192.168.100.3:80 check inter 2000 fall 3 ##上面的两个server项都是nginx节点服务的地址、名称、端口 、检查间隔时间、健康检查次数3次认为失败 全局部分中日志存放位置/dev/log 目录中的log文件是一个套接字(socket)。它是一条通信线路的站点,而这些终点(sockets)之间存在着数据通讯网络。 它的通信过程是: 程序通过访问远程计算机的socket地址,访问的计算机的socket地址跟远程计算机的socket地址之间就建立了一条通讯线路。socket相当于是一个独有的身份标识 ——————————————————————————————————————————————————————————————————————————————————————— ******(4)创建一个新的目录,创建新的配置文件 [root@haproxy ~]# mkdir /etc/haproxy [root@haproxy ~]# vim /etc/haproxy/haproxy.cfg 写入: global log /dev/log local0 info log /dev/log local1 notice maxconn 4096 uid 99 gid 99 daemon defaults log global mode http option httplog option dontlognull retries 3 maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000 listen webcluster 0.0.0.0:80 option httpchk GET /index.html balance roundrobin server inst1 192.168.100.2:80 check inter 2000 fall 3 server inst2 192.168.100.3:80 check inter 2000 fall 3 保存退出 ******(5)优化haproxy的命令执行路径,使系统可以识别haproxy的命令 [root@haproxy ~]# cp /usr/src/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy [root@haproxy ~]# chmod +x /etc/init.d/haproxy [root@haproxy ~]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy [root@haproxy ~]# /etc/init.d/haproxy restart Reloading systemd: [ 确定 ] Restarting haproxy (via systemctl): [ 确定 ]
(3)验证
打开一台测试机访问haproxy服务器的地址192.168.100.1
第一次访问
第二次访问
发现可以成功切换页面,并且内网web服务器也没有将ip地址暴露,由此,haproxy+nginx群集搭建完成!!
三、扩展——haproxy的日志管理
要知道Haproxy的日志默认是输出到系统的syslog中的,查看起来非常不方便,为了方便管理和查看haproxy的日志,需要在生产环境中单独定义
[root@haproxy ~]# cd /etc/rsyslog.d/ [root@haproxy rsyslog.d]# vim haproxy.conf (编写新的配置文件) 写入: local0.* /var/log/haproxy/ha-info.log local1.* /var/log/haproxy/ha-notice.log 保存退出 [root@haproxy rsyslog.d]# vim /etc/sysconfig/rsyslog (修改系统日志文件) 修改为: # Options for rsyslogd # Syslogd options are deprecated since rsyslog v3. # If you want to use them, switch to compatibility mode 2 by "-c 2" # See rsyslogd(8) for more details SYSLOGD_OPTIONS="-r -m 0 -c 2" 保存退出 [root@haproxy rsyslog.d]# systemctl restart rsyslog (重启rsyslog服务) [root@haproxy rsyslog.d]# /etc/init.d/haproxy restart (重启haproxy服务) Restarting haproxy (via systemctl): [ 确定 ] [root@haproxy rsyslog.d]# tail -5 /var/log/haproxy/ha-info.log (使用测试机再次访问然后查看日志,发现已经成功记录) Feb 20 21:30:15 haproxy haproxy[1800]: 192.168.100.10:49159 [20/Feb/2021:21:30:14.911] webcluster webcluster/inst2 185/0/0/0/185 200 242 - - ---- 1/1/0/1/0 0/0 "GET / HTTP/1.1" Feb 20 21:30:15 haproxy haproxy[1800]: 192.168.100.10:49159 [20/Feb/2021:21:30:15.096] webcluster webcluster/inst1 179/0/0/1/180 200 243 - - ---- 1/1/0/1/0 0/0 "GET / HTTP/1.1" Feb 20 21:30:15 haproxy haproxy[1800]: 192.168.100.10:49159 [20/Feb/2021:21:30:15.276] webcluster webcluster/inst2 189/0/0/1/190 200 242 - - ---- 1/1/0/1/0 0/0 "GET / HTTP/1.1" Feb 20 21:30:15 haproxy haproxy[1800]: 192.168.100.10:49159 [20/Feb/2021:21:30:15.466] webcluster webcluster/inst1 187/0/0/1/188 200 243 - - ---- 1/1/0/1/0 0/0 "GET / HTTP/1.1" Feb 20 21:30:15 haproxy haproxy[1800]: 192.168.100.10:49159 [20/Feb/2021:21:30:15.654] webcluster webcluster/inst2 123/0/1/0/124 200 242 - - ---- 1/1/0/1/0 0/0 "GET / HTTP/1.1"
这篇关于部署haproxy代理,搭建基于nginx的高性能反向代理群集的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-13用Nginx防范DDoS攻击的那些事儿
- 2024-12-13用Terraform在AWS上搭建简单NGINX服务器指南
- 2024-10-29Nginx发布学习:从入门到实践的简单教程
- 2024-10-28Nginx发布:新手入门教程
- 2024-10-21nginx 怎么设置文件上传最大20M限制-icode9专业技术文章分享
- 2024-10-17关闭 nginx的命令是什么?-icode9专业技术文章分享
- 2024-09-17Nginx实用篇:实现负载均衡、限流与动静分离
- 2024-08-21宝塔nginx新增8022端口方法步骤-icode9专业技术文章分享
- 2024-08-21nginx配置,让ws升级为wss访问的方法步骤-icode9专业技术文章分享
- 2024-08-15nginx ws代理配置方法步骤-icode9专业技术文章分享