文章目录
haproxy 简介:
haproxy 是一款开源的负载均衡软件,他提供 L4 和 L7 层负载功能,全称为 high availability proxy。
下面将主要介绍两大系统的三种安装方式
一.Ubuntu安装:
版本:ubuntu1804
可以正常连接网络
开启ssh远程登陆root
~# apt-get install software-properties-common
~# add-apt-repository ppa:vbernat/haproxy-2.0
~# apt update
~# apt-cache madison haproxy
~# apt install haproxy=2.0.4-1ppa1~bionic
#验证haproxy版本
# haproxy -v
HA-Proxy version 2.0.4-1ppa1~bionic 2019/08/09 - https://haproxy.org/
二.Centos 7 yum安装haproxy
# yum list haproxy
# yum install haproxy -y
# rpm -ql haproxy
查看 haproxy 版本信息
[root@haproxy ~]# haproxy -v
HA-Proxy version 1.5.18 2016/05/10
Copyright 2000-2016 Willy Tarreau <willy@haproxy.org>
默认的base仓库中包含haproxy的安装包文件,但是版本比较旧,是1.5.18的版本,距离当前版本已经有较长时间
没有更新,由于版本比较旧所以有很多功能不支持,如果对功能和性能没有要求可以使用此版本,否则推荐使用新
版本
以上为ubuntu apt安装和centos yum安装的过程步骤 过程较为简单
下面将介绍cenos 7中的编译安装
三.Centos 7编译安装haproxy
解决lua环境
由于 CentOS自带的lua版本较低,因为haproxy 高版本依赖 lua5.3 以上的版本,因此编译安装 haproxy 之前,需要提前编译安装 新的lua环境,然后才能编译安装HAProxy。
1.lua简介:
HAProxy 支持基于lua实现功能扩展,lua是一种小巧的脚本语言,于1993年由巴西里约热内卢天主教大学
(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组开发,其设计目的是为了嵌入应用程序中,
从而为应用程序提供灵活的扩展和定制功能。
官方网址:http://www.lua.org/
Lua的应用场景:
游戏开发
独立应用脚本
Web 应用脚本
扩展和数据库插件,如MySQL Proxy
安全系统,如入侵检测系统
2.环境及源码包的安装:
# yum install libtermcap-devel ncurses-devel libevent-devel readline-devel gcc -y //编译安装 lua 所依赖的软件包
# wget http://www.lua.org/ftp/lua-5.3.5.tar.gz //安装lu-5.3.5
3.解压源码包
# tar xf lua-5.3.5.tar.gz //解压lua-5.3.5
# cd lua-5.3.5 //进入解压后的lua目录
# make linux test
# cd //返回根目录
4.版本检查
# lua -v //查看当前lua系统版本
# ./src/lua -v //查看编译安装的版本
编译安装haproxy
1.安装下载源码包及编译环境
# wget http://www.haproxy.org/download/2.1/src/haproxy-2.1.2.tar.gz //下载haproxy源码包
# tar xf haproxy-2.1.2.tar.gz //解压源码包
# yum install gcc gcc-c++ glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel net-tools iotop bc zip unzip zlib zlib-devel lsof ntpdate -y //加载haproxzy的编译环境
2.编译安装
# cd haproxy-2.1.2 //进入解压包目录
# make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_CPU_AFFINITY=1 USE_LUA=1 LUA_INC=/root/lua-5.3.5/src LUA_LIB=/root/lua-5.3.5/src PREFIX=/usr/local/haproxy //添加编译参数
# make install PREFIX=/usr/local/haproxy
# cp haproxy /usr/sbin/
# cd
3.版本验证
# /usr/local/haproxy/sbin/haproxy -v //验证HAProxy版本
4.启动脚本配置
# vi /usr/lib/systemd/system/haproxy.service
[unit]
Description=HAProxy Load Balancer
After=syslog.target network.target
[Service]
ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
# systemctl daemon-reload //后台重新装载进程
5. haproxy服务的配置文件
# vi /etc/haproxy/haproxy.cfg
以下为本机配置:
#---------------------------------------------------------------------
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user root
group root
daemon
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
#---------------------------------------------------------------------
listen webapps
bind 192.168.1.138:80
server web1 127.0.0.1:88 check inter 3000 fall 2 rise 5
server web2 xxx.xxx.xxx.xxx:xx check inter 3000 fall 2 rise 5
6.启动
# mkdir -p /var/lib/haproxy //haproxy目录需要手动创建,否则报错。
# haproxy -f /etc/haproxy/haproxy.cfg -d // 检查配置文件有没有错
# chown 99.99 /var/lib/haproxy/ -R
启动正常的显示的结果:
# systemctl start haproxy
# ss -ntl //检查端口
# systemctl status haproxy //启动服务
7.状态验证
# curl 127.0.0.1
curl: (7) Failed connect to 127.0.0.1:80; Connection refused
# curl 192.168.1.138
web server index page
haproxy主要配置参数
1.haproxy的全局配置
global : 表示全局配置内容开始
log : 定义 rsyslog 配置
chroot : 锁定 haproxy 进程的运行目录
pidfile : 指定 pid 文件存放路径
maxconn : 指定进程的最大并发连接数
user : 指定进程的运行者身份
group : 指定进程的运行组身份
daemon : 指定进程以守护进程运行
nbproc : 指定 haproxy 开启的进程数
cpu-map : 1.8 版本以上的 haproxy 指定进程号和指定cpu绑定
nbthread: 指定每个进程所开启的线程数,默认为 1 个
spread-checks: 分散 tcp 健康监测,防止后台服务器数量过多,压力过大,建议 2-5
2.proxies 配置haproxy 所代理的主机配置
- defaults :表示代理配置功能开始
- mode http/tcp :表示默认采用的代理模式, L4 或者 L7
- log global :日志配置
- option dontlognull :是否记录空连接日志
- option http-server-close:开启 http 服务端主动关闭连接功能
- option forwardfor :开启 http 转发的 Forwarded-For 报文头功能
- option redispatch :当已建立的连接服务器宕机后,强制将用户请求调度到其他健康的服务器
- retries :连接失败后的重复尝试连接次数
- timeout http-request :设置 http 请求最大请求时长
- timeout queue :连接在等待队列中的最大时长
- timeout connect :设置等待连接成功的最长时间
- timeout client :设置客户端不活跃时间
- timeout server :设置服务器端最大不活跃时间
- timeout http-keep-alive :设置连接的 keepalive 时间
- timeout check :设置已连接的连接检查
- maxconn :设置前端最大连接数量
3.listten 方式定义代理服务功能
listen:后面配置一个代理名称,配置区分大小写
bind :定义本格代理中haproxy对外监听的IP地址和端口
server:指定后端被代理的地址和健康检测配置
4.frontend和backend
通过前后端分别定义的方式完成代理配置,建议使用上面的listen方式,示例:
forntend web
bind 00.000.000.000:00
use_backend web_server
backend web_server
server 000.000.000.000:00
server 000.000.000.000:00
5.haproxy.service配置信息
由于 haproxy 通常会配置多个业务和系统的代理配置,将全部配置信息写到一个配置文件中不便于管理,下面我们可以指定一个目录作为配置文件的存放目录,haproxy启动时可以读取目录下的全部配置文件,比如我们创建 /etc/haproxy/conf目录,然后修改 haproxy的启动配置文件,添加该路径
[root@haproxy ~]# vi /usr/lib/systemd/system/haproxy.service
[unit]
Description=HAProxy Load Balancer
After=syslog.target network.target
[Service]
ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf -c -q
ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf -p /var/lib/haproxy/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target