haproxy和nginx在功能上比较相似,但是又各有不同,接下来我先跟大家阐述这两个方法的区别:
nginx是master-workers多进程,每个进程单线程,多核CPU能充分利用; haproxy是多线程,单进程就能实现超高性能,虽然haproxy也能多进程,但是网上资料多认为开了多进程也不能提升性能,不建议多进程跑。
即使做反向代理nginx性能略低于haproxy。
各自特点如下:
nginx:
使用花括号,层级化的配置文件结构
除了自带的map、if语句可以实现简单逻辑,原生支持js/perl脚本,非官方支持lua
除了做负载均衡还可以做静态web服务器,缓存服务器(Haproxy不行)
模块化,按需编译,因为模块化,所以可选很多第三方扩展模块
开源版本只有基础功能,更多的功能要折腾第三方模块,或者花钱买官方扩展版的nginx plus
haproxy:
定义和引用,命令式的配置结构
支持acl,但不支持其他脚本语言(评论里有人说现在可以支持了)
做负载均衡性能比nginx好
有一个状态统计页面官方支持会话保持、健康检查等(nginx开源版不带)
基础功能覆盖要比nginx开源版好,但是不易扩展,缺乏第三方资源。
Nginx的优点: 1、优点工作在OSI第7层,可以针对http应用做一些分流的策略 2、Nginx对网络的依赖非常小,理论上能ping通就就能进行负载功能 3、Nginx安装和配置比较简单 4、可以承担高的负载压力且稳定 5、Nginx可以通过端口检测到服务器内部的故障 6、Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器 Nginx的缺点: 1、Nginx不支持url来检测。 2、Nginx仅能支持http和Email,这个它的弱势。 3、Nginx的Session的保持,Cookie的引导能力相对欠缺。 HAProxy的优点: 1、HAProxy是支持虚拟主机的 2、支持url检测后端的服务器 3、它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的; 4、HAProxy可以对Mysql读进行负载均衡,节点检测 5、HAProxy的算法较多
一. HAProxy的基本配置
 下载好之后就有了haproxy用户,在以下文件添加该用户  
更改haproxy的配置文件: 
添加status,以方便一会查看 


更改两个server的ip以及其httpd服务端口: 
开启haproxy服务: 查看日志,以确定haproxy是否开启成功:  
在网页上查看服务状态: 
红色标注就是服务未开启
开启httpd服务之后,先是黄色填充: 

等待一下就变成绿色: 
查看负载均衡的结果:
 
二. haproxy的优化策略
Haproxy的8种负载均衡算法:
roundrobin,表示简单的轮询
static-rr,表示根据权重,
leastconn,表示最少连接者先处理,
source,表示根据请求源IP,
uri,表示根据请求的URI;
url_param,表示根据请求的URl参数’balance url_param’ requires an URL parameter name
hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。
测试:balance source <一>
先更改配置文件: 
开启acl权限以及静态访问: 
将server服务器只保留一个: 
访问haproxy服务页面:

在静态访问的ip里上传一张图片以便观察结果:

当我们访问172.25.2.5的images/vim.jpg时,虽然我们并没有配置server5上的httpd服务,但是会默认访问172.25.2.7上的文件: 
<二>
更改配置文件: 

balance roundrobin :haproxy把请求轮流的转发到每一个服务器上,依据每台服务器的权重,此权重会动态调整。最常见的默认配置。
balance source :haproxy按照客户端的IP地址进行负载均衡策略,即同一IP地址的所有请求都发送到同一服务器时,需要配置此选项。 
停掉server6的httpd服务: 
此时curl ip ,就只能定位到server7: 
重新开启server6,因为同一IP地址的所有请求都发送到同一服务器,所以一旦检测到服务开启就会继续把之前的ip访问定位到之前的服务器: 

更改权重:


这时curl就会发现,server6出现的次数比server7多: 
将server5当作backup:
 
因为80端口开启服务已被占用,为了不冲突,更改端口为8080:
 
查看一下端口: 

访问ip,最下栏显示已经配置成功: 
查看实验结果:
停掉server6,7的服务: 

curl ip,显示server5:  配置成功!!!
配置访问密码: 

需要密码用户访问: 

三. 读写分离
为了便于查找日志,排错,需要读写分离:
设置黑名单: 
把真机ip配置到黑名单: 
真机无法访问: 
但是server6可以:

黑名单重定向: 
让黑名单重定向403错误: 
curl -I,配置成功: 
黑名单重定向百度:    
结合php服务:  
  
在server5上添加php服务:  

在server6上配置php上传文件的大小:     
 
server6,7配置相同,直接将server6的文件传过去:  
在server5上重新启用roundrobin:  

访问网页:  在日志上查看现在是app1服务:
 上传图片:   
在server7查看upload目录,有上传记录:  server6上没有: 
五. haproxy高可用
安装pacemaker:
配置软件仓库: 
 
做免密协议:    
在server4安装:

启用服务:  更改hacluster密码:   
查看集群是否成功:  显示success就成功: 

开启server4,5的服务:  
查看状态:  
发现有warning:
 设置stonish-enabled为false就好: 
将配置文件传给server4:  
访问server4,配置成功: 
列出资源和提供者: 
配置vip以及监控:  ip addr配置成功: 
停掉server5的服务:

再列出就只有server4online: 
开启server5: 
停掉server4,5的haproxy:    
再再server’4上试着查看服务状态: 

将vip加入服务:  
此时vip在server4上: 重新开启服务:  
down掉server4:  server4会自动重启
server5上查看服务:

现在服务由server5接管,并且vip也飘到了server5上:   
|