目标:
- 了解Haproxy的特点
- 轻松使用Haproxy搭建群集
内容:
一、 HAProxy的特点是:
- 支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;
- 能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
- 支持url检测后端的服务器出问题的检测会有很好的帮助。
- 更多的负载均衡策略比如:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)
- 单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度。
- HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。
- 支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)
- 适用场景:网站建设初期,可以选用Haproxy作为反向代理负载均衡(或者流量不大都可以不用负载均衡功能),因为其配置简单,性能也能满足一般的业务场景。
二、 案例
- 环境搭建
使用脚本为各个服务器配置IP地址,设置防火墙策略(实验环境暂时关闭)
#!/bin/bash
sed -i '2c BOOTPROTO=static' /etc/sysconfig/network-scripts/ifcfg-ens33
sed -i '17c ONBOOT=yes' /etc/sysconfig/network-scripts/ifcfg-ens33
sed -i '17a IPADDR=192.168.2.1' /etc/sysconfig/network-scripts/ifcfg-ens33
ifdown ens33;ifup ens33
systemctl stop firewalld
setenforce 0
- 编译安装Nginx服务器
详见轻松搭建Nginx服务 - 编译安装Haproxy
挂载系统盘,安装依赖包(省略挂盘,配置yum仓库过程)
yum -y install pcre-devel bzip2-devel
解压
tar xf /mnt/haproxy-1.5.19.tar.gz -C /usr/src/
进入解压后目录
cd /usr/src/haproxy-1.5.19/
指定系统类型64位
make TARGET=linux26
安装
make install
执行指定系统类型命令,显示如下:
执行安装命令,显示如下:
- haproxy服务器配置(注意:这是技术难点)
(1)创建配置文件
在系统目录里创建目录
mkdir -p /etc/haproxy
复制样例配置文件
cp examples/haproxy.cfg /etc/haproxy/
编辑复制后的配置文件
vim /etc/haproxy/haproxy.cfg
编辑配置文件内容
解释:
global
log /dev/log local0 info //配置日志记录,1ocal0为日志设备,默认存放到系统日志。
log /dev/log local1 notice //notice为日志级别,通常有24个级别
maxconn 4096 //定义每个haproxy进程的最大连接数
chroot /usr/share/haproxy //将其禁锢在指定目录,由于配置目录不是这个位置,故注释掉
uid 99
gid 99
daemon //以守护模式运行
nbproc 4 //设置haproxy启动时的进程数,该值的设置应该和服务器的CPU核心数一致,
defaults配置项配置默认参数,一般会被应用组件继承,如果在应用组件中没有特别声明,将安装默认配置参数设置。
defaults
log global //定义日志为g1oba1配置中的日志定义
mode http http模式,也可以为tcp模式
option httplog 启用http日志
option dontlognull 不记录空链接
retries 3 定义连接后端服务器的失败重连次数
#redispatch 将客户的请求强制定向到另外一个后端server上,以保证服务的正常
maxconn 2000
contimeout 5000 //连接超时时间
clitimeout 50000 //客户端超时时间
srvtimeout 50000 //服务器超时时间
listen webcluster 0.0.0.0:80 //应用为web服务,监听IP地址及端口,0.0.0.0代表任意IP地址
option httpchk GET /index.html //检查服务器的index.html文件
balance roundrobin //调度算*巡
server inst1 192.168.2.2:80 check inter 2000 fall 3 //定义在线节点
server inst2 192.168.2.3:80 check inter 2000 fall 3
[check]接受健康监测
[inter 2000]监测的间隔时长,单位毫秒
[rise 3]监测正常多少次后被认为后端服务器是可用的
[fall 3]监测失败多少次后被认为后端服务器是不可用的
- 创建自启动脚本
复制样例到系统文件目录
cp /usr/src/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
创建软链接,把haproxy添加到命令的默认搜索路径
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
设置执行权限
chmod +x /etc/init.d/haproxy
添加到开机自启配置文件中
chkconfig --add /etc/init.d/haproxy
手工启动haproxy
/etc/init.d/haproxy start
- haproxy的日志
为便于管理,将haproxy相关配置独立定义到haproxy.conf,并放到/etc/rsyslog.d/下,rsyslog启动时会自动加载此目录下的所有配置文件。
修改rsyslog配置
vim /etc/rsyslog.d/haproxy.conf
重启rsyslog服务
systemctl restart rsyslog
测试日志信息
tail -f /var/log/haproxy/haproxy-info.log
修改rsyslog配置内容如下:
- 测试高可用性
未配置NFS,刷新访问群集ip,分别显示web1、web2内容
配置NFS,刷新访问群集ip,显示相同内容
- 测试haproxy日志独立定义到指定文件