部署haproxy代理 搭建nginx集群
前言
使用需求: 负载均衡群阶可以用tocat+nginx的负载均衡群集,还有lvs负载均衡群集。三种群集相比来说,lvs性能最好,但是搭建复杂,ningx的upstream模块支持群集,但是群集的节点的故障检查功能不是很多,性能也比不上haproxy。
相对来能实现什么样的效果: 对于企业的服务器(web.ftp等)能实现负载均衡,其中一台服务器宕机之后能依然能上网站ftp。
知识点的描述: 负载均衡的常用调度算法:
(1):RR(Round Robin),是最简单最常用的一种算法,即轮询调度。
(2):LC(LEAST Conections),即最小节点数算法,根据后端的节点数大小动态分配前端请求
(3):SH(Source Hashing),即基于来源访问调度算法,用于一些有Session会话记录在服务器端的场景,可以基于来源的IP,Cookis等做集群调度
(4):如果需要实现haproxy的高可用,可以配置前一次所讲的keepalived,配置方法基本相同,需要增加一台haproxy用来做备份,注意一点的是需要在防火墙上开启keepalived的组播地址相应端口
Haproxy介绍:
Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,它支持双机热备、虚拟主机、基于TCP和HTTP应用代理等功能。
其配置简单,而且拥有很好的对服务器节点的健康检查功能(相当于keepalived健康检查),当其代理的后端服务器出现故障时,Haproxy会自动的将该故障服务器摘除,当服务器的故障恢复后Haproxy还会自动将RS服务器添加
Haproxy特别使用与那些访问量很大。但又需要会话保持或七层应用的业务。Haproxy运行在普通的服务器硬件上,仅仅进行简单的优化就可以支持数以万计的并发连接。
并且它的运行模式使得它可以很简单安全的整合到各种网站的架构中,同时使得应用服务器不会暴露到网络中。
Haproxy软件引入了frontend,backend的功能,frontend(acl规则匹配)可以运维管理人员根据任意HTTP请求头做规则匹配,然后把请求定向到相关的backend(server pools等待前端把请求转过来的服务器组)。通过frontend和backup,我们可以很容易的实现haproxy的7层代理功能,haproxy是一款不可多得的优秀代理服务软件
Haproxy支持两种主要代理模式: 第一个是4层tcp代理(例如:可用于邮件服务内部协议通信服务器、Mysql服务等)。第二个是7层代理(如HTTP代理)。在4层tcp代理模式下,Haproxy仅在客户端和服务器之间双向转发流量。但是在7层模式下Haproxy会分析应用层协议,并且能通过运行、拒绝、交换、增加、修改或者删除请求(request)或者回应(reponse)里指定内容来控制协议。
一、实验环境:
系统类型 | IP地址 | 主机名 | 所需软件 |
---|---|---|---|
Centos7.4 1708 64bit | 192.168.100.101 | Haproxy1 | haproxy-1.5.19+keepalived |
Centos7.4 1708 64bit | 192.168.100.102 | Nginx1 | nginx-1.12.0 |
Centos7.4 1708 64bit | 192.168.100.103 | Nginx2 | nginx-1.12.0 |
Centos7.4 1708 64bit | 192.168.100.104 | Haproxy2 | haproxy-1.5.19+keepalived |
实验拓扑:
二、实验步骤:
1、编译安装Nginx服务器(nginx1,nginx2)
1.nginx1 服务器
192.168.100.102
[root@nginx1 ~]# yum -y install pcre-devel zlib-devel
[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 $?
0
[root@nginx1 nginx-1.12.0]# cd
[root@nginx1 ~]# echo '<h1>web1</h1>' >/usr/local/nginx/html/index.html
[root@nginx1 ~]# /usr/local/nginx/sbin/nginx -t
[root@nginx1 ~]# /usr/local/nginx/sbin/nginx
[root@nginx1 ~]# netstat -anput |grep nginx
如果需要关闭服务 /usr/local/nginx/sbin/nginx -s stop
2.nginx2 服务器 (使用脚本安装,确认源码软件已存放在/root目录中)
192.168.100.103
[root@nginx2 ~]# vim nginx-install.sh
---------------------------------------------------------
#!/bin/bash
read -p "请输入首页内容:" index
yum -y install pcre-devel zlib-devel
tar zxvf nginx-1.12.0.tar.gz -C /usr/src/
cd /usr/src/nginx-1.12.0
useradd -M -s /sbin/nologin nginx
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install
echo "$index" > /usr/local/nginx/html/index.html
/usr/local/nginx/sbin/nginx
netstat -anput|grep nginx &>/dev/null
if [ $? -eq 0 ] ;then
echo "nginx服务成功启动"
else
echo "nginx服务未成功启动,请检查安装过程"
fi
-------------------------------------------------------
[root@nginx2