文章目录
Web架构
负载均衡介绍
负载均衡:Load Balance,简称LB,是一种服务或基于硬件设备等实现的高可用反向代理技术,负载均衡将特定的业务(web服务、网络流量等)分担给指定的一个或多个后端特定的服务器或设备,从而提高了公司业务的并发处理能力、保证了业务的高可用性、方便了业务后期的水平动态扩展。
阿里云SLB介绍:https://developer.aliyun.com/article/1803
为什么使用负载均衡
1.增加业务并发访问及处理能力 --> 解决单服务器瓶颈问题
2.节约公网IP地址 --> 降低IT支出成本
3.隐藏内部服务器IP --> 提高内部服务器安全性
4.Web服务器的动态水平扩展 --> 对用户无感知
5.负载均衡配置简单 --> 固定格式的配置文件
6.负载均衡功能丰富 --> 支持四层和七层,支持动态下线主机
7.负载均衡性能较强 --> 并发数万甚至百万
负载均衡类型
四层:
LVS: Linux virtual server
Nginx: 1.9版之后
HAProxy: High Availability Proxy
七层:
HAProxy
Nginx
硬件:
F5 :https://www.f5.com.cn/
Netscaler :https://www.netscaler.com/
Array :https://www.arraynetworks.com.cn/
深信服: https://www.sangfor.com.cn/
北京灵州 :http://www.lingzhou.com.cn/cpzx/llfzjh/
HAProxy简介
HAProxy的定位和LVS类似,是一个专业级的反向代理,往往作为企业服务的总入口。
Nginx作为web服务器,其性能还是很优秀的,但是作为反向代理性能还是不如LVS,LVS是工作在Linux内核中的,LVS的并发可以达到百万级以上。
LVS虽然性能好,但是没有Nginx功能丰富,Nginx可以提供四层和七层的反向代理,且还具备健康检查功能。
HAProxy作为反向代理介于LVS和Nginx之间,性能比Nginx好,功能比LVS更丰富。HAProxy会作为企业项目中一个总的入口。
应用场景
随着公司业务的发展,公司负载均衡服务既有四层的,又有七层的,通过LVS实现四层和Nginx实现七层的负载均衡对机器资源消耗比较大,并且管理复杂度提升,运维总监要求,目前需要对前端负载均衡服务进行一定的优化和复用,能否用一种服务同既能实现七层负载均衡,又能实现四层负载均衡,并且性能高效,配置管理容易,而且还是开源。
在企业生产环境中,每天会有很多的需求变更,比如增加服务器、新业务上线、url路由修改、域名配置等等,对于前端负载均衡设备来说,容易维护,复杂度低,是首选指标。在企业中,稳定压倒一切,与其搞得很复杂,经常出问题,不如做的简单和稳定。在企业中,90%以上的故障,来源于需求变更。可能是程序bug,也可能是人为故障,也可能是架构设计问题等。前端负载均衡设备为重中之重,在软件选型上一定充分考虑,能满足业务的前提下,尽可能降低复杂度,提高易维护性。
HAProxy是什么
社区版:https://www.haproxy.org/
企业版:https://www.haproxy.com/
这里HAProxy吹了一个牛,“offering high availability”提供高可用,其实它本身不具备高可用,需要借助别的服务,像Keepalived…
HAProxy功能
支持功能
1.TCP和HTTP反向代理
2.SSL/TSL服务器
3.可以针对HTTP请求添加cookie,进行路由后端服务器
4.可平衡负载至后端服务器,并支持持久连接
5.支持所有主服务器故障切换至备用服务器
6.支持专用端口实现监控服务
7.支持停止接受新连接请求,而不影响现有连接
8.可以在双向添加,修改或删除HTTP报文首部响应报文压缩
9.支持基于pattern实现连接请求的访问控制
10.通过特定的URI为授权用户提供详细的状态信息
11.支持http反向代理
12.支持动态程序的反向代理
13.支持基于数据库的反向代理
脚本安装
#!/bin/bash
#
#******************************************************************************
#Author: wangxiaochun
#Date: 2022-07-03
#FileName: install_haproxy.sh
#URL: www.wangxiaochun.com
#Description: install haproxy for centos 7/8 & ubuntu 18.04/20.04
#Copyright (C): 2022 All rights reserved
#******************************************************************************
HAPROXY_VERSION=2.6.1
HAPROXY_FILE=haproxy-${HAPROXY_VERSION}.tar.gz
#HAPROXY_FILE=haproxy-2.2.12.tar.gz
LUA_VERSION=5.4.4
LUA_FILE=lua-${LUA_VERSION}.tar.gz
#LUA_FILE=lua-5.4.3.tar.gz
HAPROXY_INSTALL_DIR=/apps/haproxy
SRC_DIR=/usr/local/src
CWD=`pwd`
CPUS=`lscpu |awk '/^CPU\(s\)/{print $2}'`
LOCAL_IP=$(hostname -I|awk '{print $1}')
STATS_AUTH_USER=admin
STATS_AUTH_PASSWORD=123456
VIP=192.168.10.100
MASTER1=192.168.10.101
MASTER2=192.168.10.102
MASTER3=192.168.10.103
. /etc/os-release
color () {
RES_COL=60
MOVE_TO_COL="echo -en \\033[${RES_COL}G"
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
SETCOLOR_FAILURE="echo -en \\033[1;31m"
SETCOLOR_WARNING="echo -en \\033[1;33m"
SETCOLOR_NORMAL="echo -en \E[0m"
echo -n "$1" && $MOVE_TO_COL
echo -n "["
if [ $2 = "success" -o $2 = "0" ] ;then
${SETCOLOR_SUCCESS}
echo -n $" OK "
elif [ $2 = "failure" -o $2 = "1" ] ;then
${SETCOLOR_FAILURE}
echo -n $"FAILED"
else
${SETCOLOR_WARNING}
echo -n $"WARNING"
fi
${SETCOLOR_NORMAL}
echo -n "]"