文章目录
一:负载均衡简介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:在负载均衡器上安装Haproxy3.22:配置Haproxy文件3.23:创建自启动脚本,并启动Haproxy3.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.620.0.0.41haproxy-1.5.19.tarNginx服务器1Centos 7.620.0.0.42nginx-1.12.0.tarNginx服务器2Centos 7.620.0.0.43nginx-1.12.0.tar客户端win 1020.0.0.50Edge浏览器
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
gid
99
daemon
#debug
#quiet
default
log global
mode http
option httplog
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 infolog /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
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
感谢观看