文章目录

  • 一、Haproxy的概念和原理
  • 1 常见的负载均衡方案
  • 2 haproxy的作用点和优点
  • 3 4层负载和7层负载的区别
  • 4 haproxy的负载算法
  • 二 nginx haproxy LVS各自的特点
  • nginx
  • haproxy
  • LVS
  • 三、构建Haproxy实例
  • 1.架构图
  • 2.搭建nginx服务器
  • 3 部署haproxy调度器
  • 4 配置haproxy调度器
  • 5 启动haproxy服务
  • 访问web站点
  • 6 测试高可用
  • 四 日志查询


一、Haproxy的概念和原理

1 常见的负载均衡方案

分为软件和硬件
软件上分为LVS Haproxy nginx
1 LVS是最为有效的负载均衡解决方案 但是搭建麻烦且不支持正则处理,不能实现动静分离
2 Nginx的upstream模块支持群集功能,但是对群集节点健康检查功能不强,高并发性能没有Haproxy好。
硬件上有F5 梭子鱼、绿盟等

2 haproxy的作用点和优点

1作用点
Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理的软件适用于负载大的web站点运行在硬件上可支持数以万计的并发连接的连接请求 .适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。Haproxy运行在当前的硬件上,完全可以支持数以万计的并发连接且可以服务器暴露在公网上保证安全
2 优点
Haproxy在负载均衡速度和并发处理上是优于Nginx
Haproxy支持虚拟主机,可以工作在4、7层
能够补充Nginx的一些缺点,比如session的保持、Cookie的引导等工作
支持url检测后端的服务器的状态
Haproxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡
支持很多负载均衡算法, Round-robin (轮询) 、weight-round-robin (加权轮询)、 source (原地址保持) 、RI(请求URL) 、rdp-cookie (根据cookie)

3 4层负载和7层负载的区别

四层负载均衡器是通过分析IP层及TCP/UDP层的流量实现的基于“IP +端口”的负载均衡,主要通过报文的目标地址和端口配合负载均衡算法选择后端真实服务器,确定是否需要对报文进行修改(根据需求,可能会修改目标地址、源地址、MAC地址等)并将数据转发至选出的后端真实服务器。

七层负载均衡器是基于应用层信息(如URL、Cookies等)的负载均衡。主要依据报文的内容配合负载均衡算法选择后端真实服务器,然后再分发请求到真实服务器进行处理,也称"内容交换器"。客户端与负载均衡器、负载均衡器与后端真实服务器之间会分别建立TCP连接。

4 haproxy的负载算法

前面说了 haproxy支持多种负载算法 最常用的有三种
1 RR 轮询 最常用的调度算法
2 LC 最小连接数 根据后端服务器的连接数来动态分配前端的请求数
3 SH 基于来源访问调度算法,用于一些有Session会话记录在服务器端的场景,可以基于来源的IP、Cookie等做集群调度

二 nginx haproxy LVS各自的特点

nginx

支持正则
轻量级
只支持基于端口的健康检查
不支持session的直接保持,但能通过IP_hash来解决
对网络稳定性要求不高
反向代理能力强 可以和tomcat Apache结合
优秀的开源社区

haproxy

支持8种负载均衡策略
仅做负载均衡软件使用,在高并发情况下性能优于nginx
支持URL健康检测、支持session保持

LVS

只能基于四层端口转发
在四层做分发作用,抗负载能力强
应用范围广 最为有效的负载解决方案
配置繁琐

三、构建Haproxy实例

1.架构图

haproxy 普通用户编译安装 haproxy -sf_haproxy 普通用户编译安装

2.搭建nginx服务器

yum -y install pcre pcre-devel zlib zlib-devel gcc gcc-c++ make

useradd -M -s /sbin/nologin nginx

wget -P /opt http://nginx.org/download/nginx-1.20.0.tar.gz

cd /opt
tar -zxvf nginx-1.20.0.tar.gz 

cd /opt/nginx-1.20.0

./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx 

make -j && make install

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/nginx
ln -s /usr/local/nginx/conf/nginx.conf /etc/nginx.conf

echo '
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target' > /lib/systemd/system/nginx.service

chmod 754 /lib/systemd/system/nginx.service

echo "<h1>www.ash.com</h1>" > /usr/local/nginx/html/index.html 
#echo "<h1>http nginx</h1>" > /usr/local/nginx/html/index.html 

systemctl start nginx.service
systemctl enable nginx.service


主地址为192.168.30.20

haproxy 普通用户编译安装 haproxy -sf_haproxy 普通用户编译安装_02


从地址为192.168.30.22

haproxy 普通用户编译安装 haproxy -sf_nginx_03

3 部署haproxy调度器

yum install -y pcre-devel bzip2-devel gcc gcc-c++ make  安装依赖环境和编译工具
wget -P /opt https://www.haproxy.org/download/1.5/src/haproxy-1.5.19.tar.gz   网络源获取包
cd /opt 
tar -zxvf haproxy-1.5.19.tar.gz  去到目录并解压文件
uname -r  注意内核版本
make TARGET=linux2628 ARCH=x86_64 编译
make install 编译安装

haproxy 普通用户编译安装 haproxy -sf_负载均衡_04

4 配置haproxy调度器

mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/
cd /etc/haproxy/
vim haproxy.cfg

haproxy 普通用户编译安装 haproxy -sf_服务器_05


haproxy 普通用户编译安装 haproxy -sf_haproxy 普通用户编译安装_06

5 启动haproxy服务

service haproxy start

haproxy 普通用户编译安装 haproxy -sf_服务器_07

访问web站点

haproxy 普通用户编译安装 haproxy -sf_nginx_08


haproxy 普通用户编译安装 haproxy -sf_nginx_09

6 测试高可用

杀掉主nginx的进程

haproxy 普通用户编译安装 haproxy -sf_nginx_10


从服务任然可以进行

haproxy 普通用户编译安装 haproxy -sf_服务器_11

四 日志查询

haproxy的日志是输出到系统的syslog中,查看起来不是非常方便,为了更好的管理haproxy的日志,我们在生产环境中一般单独定义出来。需要将haproxy的info及notice日志分别记录到不同的日志文件中。

haproxy 普通用户编译安装 haproxy -sf_haproxy 普通用户编译安装_12


需要修改rsyslog配置,为了便于管理。将haproxy相关的配置独立定义到haproxy.conf,并放到/etc/rsyslog.d/下,rsyslog启动时会自动加载此目录下的所有配置文件。vim /etc/rsyslog.d/haproxy. 本文件为创建 原本不存在

这部分配置是将haproxy的info日志记录到/var/log/haproxy/haproxy-info.log下,将notice日志记录到/var/log/haproxy/haproxy-notice.log下。“&~”表示当日志写入到日志文件后,rsyslog停止处理这个信息。

haproxy 普通用户编译安装 haproxy -sf_nginx_13


重启日志服务 查看

haproxy 普通用户编译安装 haproxy -sf_服务器_14