文章目录
- 一:负载均衡简介
- 1.1:为什么使用负载均衡:
- 1.2:负载均衡类型:
- 二:常见的Web集群调度器
- 2.1:Haprox应用分析
- 2.2:Haproxy支持多种调度算法,最常用的有三种
- 2.3:haproxy功能
- 2.4:haproxy组成
- 三:使用Haproxy搭建Web群集
- 3.1:Nginx的安装与启动
- 3.11:在客户机上访问等进行测试
- 3.2:Haproxy配置安装与启动
- 3.21:在负载均衡器上安装Haproxy
- 3.22:配置Haproxy文件
- 3.23:创建自启动脚本,并启动Haproxy
- 3.24:配置与测试
- 四:Haproxy日志管理
- 4.1:编辑haproxy配置文件
一:负载均衡简介
负载均衡(Load
Balance,简称LB)是一种服务或基于硬件设备等实现的高可用反向代理技术,负载均衡将特定的业务(web服务、网络流量等)分担给指定的一个或多个后端特定的服务器或设备,从而提高了公司业务的并发处理能力、保证了业务的高可用性、方便了业务后期的水平动态扩展。
1.1:为什么使用负载均衡:
Web服务器的动态水平扩展–>对用户无感知
增加业务并发访问及处理能力–>解决单服务器瓶颈问题
节约公网IP地址–>降低IT支出成本
隐藏内部服务器IP–>提高内部服务器安全性
配置简单–>固定格式的配置文件
功能丰富–>支持四层和七层,支持动态下线主机
性能较强–>并发数万甚至数十万
1.2:负载均衡类型:
四层:
LVS(Linux Virtual Server)
HAProxy(High Availability Proxy)
Nginx(1.9)
七层:
HAProxy
Nginx
硬件:
F5 #https://f5.com/zh
Netscaler #https://www.citrix.com.cn/products/citrix-adc/
Array #https://www.arraynetworks.com.cn/
深信服 #http://www.sangfor.com.cn/
北京灵州 #http://www.lingzhou.com.cn/cpzx/llfzjh/
二:常见的Web集群调度器
- 目前常见的Web集群调度器分为软件和硬件
- 软件通常使用开源的LVS、Haprxy、Nginx
- 硬件一般是用比较多的是F5,也有很多使用国内的一些产品,如梭子鱼、绿盟等
2.1:Haprox应用分析
LVS在企业应用中抗负载能力很强,但存在不足
- LVS不支持正则处理,不能实现动静分离
- 对于大型网站,LVS的实施配置复杂,维护成本相对较高
Haproxy是一款可提供可用性、负载均衡、及基于TCP和HTTP应用的代理的软件
- 适用于负载大的web站点
- 运行在硬件可支持数以万计的并发连接请求
2.2:Haproxy支持多种调度算法,最常用的有三种
RR(Round Robin)
RR算法是最简单最常用的一种算法,即轮询调度
LC(Least Connections)
最小连接算法,根据后端的节点连接大小动态分配前端请求
SH(Source Hasging)
基于来源访问调度算法,用于一些有Session会话记录在服务的场景,可以基于来源的IP、Cookie等做群集调度
2.3:haproxy功能
HAProxy是TCP / HTTP反向代理服务器,尤其适合于高可用性高并发环境:
可以针对HTTP请求添加cookie,进行路由后端服务器
可平衡负载至后端服务器,并支持持久连接
支持基于cookie进行调度
支持所有主服务器故障切换至备用服务器
支持专用端口实现监控服务
支持不影响现有连接情况下停止接受新连接请求
可以在双向添加,修改或删除HTTP报文首部
支持基于pattern实现连接请求的访问控制
通过特定的URI为授权用户提供详细的状态信息 历史版本更新功能:
1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2-dev
2.4:haproxy组成
程序环境:
主程序:/usr/sbin/haproxy
配置文件:/etc/haproxy/haproxy.cfg
Unit file:/usr/lib/systemd/system/haproxy.service
配置段:
global:全局配置段
进程及安全配置相关的参数
性能调整相关参数
Debug参数
proxies:代理配置段
defaults:为frontend, backend, listen提供默认配置
frontend:前端,相当于nginx中的server {}
backend:后端,相当于nginx中的upstream {}
listen:同时拥有前端和后端,适用于一对一环境
三:使用Haproxy搭建Web群集
主机要求
- 用1台客户端,三台虚拟服务器模拟搭建一套Web群集
- 虚拟机安装Centos 7.6的系统
主机 | 操作系统 | IP地址 | 主要软件 |
Haproxy服务器 | Centos 7.6 | 20.0.0.41 | haproxy-1.5.19.tar |
Nginx服务器1 | Centos 7.6 | 20.0.0.42 | nginx-1.12.0.tar |
Nginx服务器2 | Centos 7.6 | 20.0.0.43 | nginx-1.12.0.tar |
客户端 | win 10 | 20.0.0.50 | Edge浏览器 |
3.1:Nginx的安装与启动
在两台网站服务器上安装Nginx,并启动服务
- 使用编码的方式进行安装
- 关闭Firewalld防火墙
- 安装基础软件包
- 增加系统用户nginx
- 编译安装Nginx并启动
#关闭防火墙
setenforce 0
iptables -F
#安装环境包
yum install -y pcre-devel zlib-devel gcc gcc-c++ make
#解压Nginx软件包
tar zxvf nginx-1.12.2.tar.gz -C /opt
#切换到nginx目录
[root@web1 ~]# cd /opt
[root@web1 opt]# cd nginx-1.12.2/
#配置
[root@web1 nginx-1.12.2]# ./configure \
> --prefix=/usr/local/nginx \ //安装目录
> --user=nginx \ //用户
> --group=nginx //用户组
编译及安装
make && make install
#创建web站点首页index.html
[root@web1 nginx-1.12.2]# cd html/
[root@web1 html]# vim test.html
//编写以下信息
<h1>this is web1</h1>
#切换web2节点服务器
<h1>this is web2</h1>
#建立软链接,便于管理nginx
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
#两台节点服务器都启动
nginx //启动
nginx -t //检查配置文件
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
#查看端口
netstat -ntap | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 22361/ngin: master
3.11:在客户机上访问等进行测试
3.2:Haproxy配置安装与启动
3.21:在负载均衡器上安装Haproxy
//下载依赖环境
[root@haproxy ~]# yum install -y \
> pcre-devel \
> bzip2-devel \
> gcc \
> gcc-c++ \
> make
[root@haproxy ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg 模板 图片 下载 桌面
haproxy-1.5.19.tar.gz 公共 视频 文档 音乐
//解压到当前目录
[root@haproxy ~]# tar zxvf haproxy-1.5.19.tar.gz
#编译安装
[root@haproxy ~]# cd haproxy-1.5.19/
[root@haproxy haproxy-1.5.19]# make TARGET=linux26
[root@haproxy haproxy-1.5.19]# make install
#创建haproxy配置文件目录
[root@haproxy haproxy-1.5.19]# mkdir /etc/haproxy
#复制模板配置文件到haproxy目录下
[root@haproxy haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/
3.22:配置Haproxy文件
vim /etc/haproxy/haproxy.cfg
删除:#chroot /usr/share/haproxy
#redispatch
this config needs haproxy-1.1.28 or haproxy-1.2.1
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
#chroot /usr/share/haproxy //这边注释
uid 99 //使用系统为99的ID号
gid 99
daemon
#debug
#quiet
default
log global //定义日志为global配置
mode http //http模式
option httplog //采用http日志格式记录日志
option dontlognull
retries 3 //检查节点服务器的失败连续达到三次认为节点不可用
#iredispatch //这边注释 不然服务启动不了
maxconn 2000 //最大连接数
contimeout 5000 //连接超时时间
clitimeout 50000 //客户端超时时间
srvtimeout 50000 //服务器超时时间
listen webcluster 0.0.0.0:80
option httpchk GET /test.html 检查节点服务器的test.html文件【首页文件】
balance roundrobin
server inst1 20.0.0.42:80 check inter 2000 fall 3 //定义备份点
server inst2 20.0.0:43:80 check inter 2000 fall 3 //定义备份点
3.23:创建自启动脚本,并启动Haproxy
#关闭防火墙
[root@localhost haproxy-1.5.19]# iptables -F
[root@localhost haproxy-1.5.19]# setenforce 0
[root@localhost haproxy-1.5.19]# cp examples/haproxy.init /etc/init.d/haproxy
#为haproxy赋予可执行权限
[root@localhost haproxy-1.5.19]# chmod +x /etc/init.d/haproxy
#加入系统服务
[root@localhost haproxy-1.5.19]# chkconfig --add /etc/init.d/haproxy
[root@localhost haproxy-1.5.19]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
#启动haproxy
[root@localhost haproxy-1.5.19]# service haproxy start
[root@localhost haproxy-1.5.19]# netstat -ntap | grep haproxy
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 87939/haproxy
3.24:配置与测试
- 测试Haproxy集群
- 测试高性能
- 可在两个不同的浏览器中分别访问两个测试网站,正常情况下应该出现两个网站的测试页面
- 高可用性
- 将其中一台 Nginx服务器停用,在客户端浏览器中访问 Haproxy,正常情况下应出现另外一台 Nginx服务器的网站测试页面
四:Haproxy日志管理
- Haproxy的日志默认是输出到系统的 syslog中,在生产环境中一般单独定义出来
- 定义的方法步骤
- 修改 Haproxy配置文件中关于日志配置的选项,加入配置:
- log /dev/log local0 info
- log /dev/log local0 notice
- 修改 rsyslog配置,将 Haproxy相关的配置独立定义到
- haproxy.conf,并放到/etc/rsyslog.d/下
- 保存配置文件并重启 rsyslog服务,完成 rsyslog配置
4.1:编辑haproxy配置文件
[root@localhost haproxy]# vim /etc/haproxy/haproxy.cfg
//在global下面两行日志文件位置重新定义分离
global
log /dev/log local0 info
log /dev/log local1 notice
...省略信息........
#修改配置文件需要重启服务
[root@localhost haproxy-1.5.19]# service haproxy restart
Restarting haproxy (via systemctl):
#创建配置文件目录
[root@localhost haproxy-1.5.19]# touch /etc/rsyslog.d/haproxy.conf
[root@localhost haproxy-1.5.19]# vim /etc/rsyslog.d/haproxy.conf
//编写配置
if ($programname == 'haproxy' and $syslogseverity-text == 'info')
then -/var/log/haproxy/haproxy-info.log
&~
if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
then -/var/log/haproxy/haproxy-notice.log
&~
#重启日志文件
[root@localhost haproxy-1.5.19]# systemctl restart rsyslog.service
- 再次访问刷新会产生两个日志文件
[root@localhost log]# cd haproxy/
[root@localhost haproxy]# ls
haproxy-info.log haproxy-notice.log