目录
- 1. 源码编译安装haproxy 2.x,配置服务启动脚本。
- 2. 配置haproxy实现web服务器负载均衡。
- 1. 下载Haproxy源码包:
- 2. 下载源码编译工具:
- 3. 下载Haproxy依赖包lua并编译安装:
- 4. 查看lua版本信息:
- 5. 解压Haproxy源码包:
- 6. 安装编译时需要的依赖包
- 7. 编译安装Haproxy
- 8. 查看haproxy的目录结构
- 9. 对/usr/local/haproxy/sbin/haproxy做软连接:
- 10. 查看haproxy版本信息:
- 11. 为haproxy服务配置启动脚本:
- 12. 创建haproxy服务的配置文件:
- 13. 创建用户和组:
- 14. 启动haproxy服务:
- 15. 在后端两台真实服务器上创建web页面,并开启apache服务:
- 16. 测试haproxy是否实验负载均衡:
- 17. 查看haproxy的状态页面
- 3. 配置haproxy日志。
- 4. 通过haproxy的acl规则实现智能负载均衡(动静分离)。
1. 源码编译安装haproxy 2.x,配置服务启动脚本。
2. 配置haproxy实现web服务器负载均衡。
1. 下载Haproxy源码包:
wget -c https://repo.huaweicloud.com/haproxy/2.4/src/haproxy-2.4.8.tar.gz
2. 下载源码编译工具:
yum install -y gcc gcc-c++ make
3. 下载Haproxy依赖包lua并编译安装:
curl -R -O http://www.lua.org/ftp/lua-5.4.4.tar.gz
tar zxf lua-5.4.4.tar.gz -C /usr/local/src/
cd /usr/local/src/lua-5.4.4
make linux test
4. 查看lua版本信息:
cp /usr/local/src/lua-5.4.4/src/lua /usr/bin/lua
lua -v
5. 解压Haproxy源码包:
tar xf haproxy-2.4.8.tar.gz -C /usr/local/src/
cd /usr/local/src/haproxy-2.4.8
6. 安装编译时需要的依赖包
yum install openssl-devel pcre-devel systemd-devel -y
7. 编译安装Haproxy
make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_LUA=1 LUA_INC=/usr/local/src/lua-5.4.4/src/ LUA_LIB=/usr/local/src/lua-5.4.4/src/
make install PREFIX=/usr/local/haproxy
8. 查看haproxy的目录结构
tree /usr/local/haproxy/

9. 对/usr/local/haproxy/sbin/haproxy做软连接:
ln -sv /usr/local/haproxy/sbin/haproxy /usr/sbin/haproxy
10. 查看haproxy版本信息:
haproxy -v
11. 为haproxy服务配置启动脚本:
vim /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 /usr/local/haproxy/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
12. 创建haproxy服务的配置文件:
可以配置文件示例中复制,配置文件示例位置:/usr/local/src/haproxy-2.4.8/examples/
mkdir /etc/haproxy
vim /etc/haproxy/haproxy.cfg
global ##全局配置
maxconn 10000
stats socket /var/run/haproxy.stat mode 600 level admin
log 127.0.0.1 local2 info
user haproxy ##指定用户
group haproxy ##指定组
chroot /usr/local/haproxy ##服务工作目录
daemon ##开启保护进程
defaults ##默认配置
mode http
option httplog
log global
timeout client 1m
timeout server 1m
timeout connect 10s
timeout http-keep-alive 2m
timeout queue 15s
timeout tunnel 4h # for websocket
default-server inter 1000 weight 3
listen app1 ##此部分是前端部分和后端部分的结合
bind :80 ##监听的端口
log global
server web1 172.25.10.120:80 check ##后端的真实服务器地址
server web2 172.25.10.130:80 check ##后端的真实服务器地址
listen stats #配置监听页面
mode http
bind :9999 ##使用9999端口
stats enable
log global
stats uri /haproxy-status
stats auth haadmin:123456 ##指定登录监听页面的用户是haadmin,密码是123456
13. 创建用户和组:
useradd -r -s /sbin/nologin -d /usr/local/haproxy/ haproxy
14. 启动haproxy服务:
systemctl start haproxy.service
15. 在后端两台真实服务器上创建web页面,并开启apache服务:
记得关闭防火墙
RS1:echo "`hostname -I`,web test page" > /var/www/html/index.html
RS2: echo "`hostname -I`,web test page" > /var/www/html/index.html
systemctl start httpd
16. 测试haproxy是否实验负载均衡:

17. 查看haproxy的状态页面
http://172.25.10.110:9999/haproxy-status

3. 配置haproxy日志。
HAProxy配置
#在global配置项定义:
log 127.0.0.1 local{1-7} info #基于syslog记录日志到指定设备,级别有(err、warning、info、debug)
listen app1
bind :80
log global
mode http
server web1 172.25.10.120:80 check inter 3000 fall 3 rise 5
server web2 172.25.10.130:80 check inter 3000 fall 3 rise 5
# systemctl restart haproxy
Rsyslog配置
vim /etc/rsyslog.conf
$ModLoad imudp
$UDPServerRun 514
......
# Save haproxy messages also to haproxy.log
local2.* /var/log/haproxy.log
......
# systemctl restart rsyslog
验证HAProxy日志
重启syslog服务并访问app页面,然后验证是否生成日志
tail -f /var/log/haproxy.log
4. 通过haproxy的acl规则实现智能负载均衡(动静分离)。
由于HAProy可以工作在七层模型下,因此,要实现 HAProxy的强大功能,一定要使用强大灵活的ACL规则,通过ACL规则可以实现基于HAProy的智能负载均衡功能。HARroxy 通过ACL 规则完成两种主要的功能,分别是∶
1)通过设置的ACL规则检查客户端请求是否合法。如果符合ACL规则要求,那么就将放行,反正,如果不符合规则,则直接中断请求。
2)符合ACL 规则要求的请求将被提交到后端的backend 服务器集群,进而实现基于ACL 规则的负载均衡
ACL示例-域名匹配
mkdir /etc/haproxy/conf.d/
vim /etc/haproxy/conf.d/test.cfg
frontend openlab_http_port
bind :88
mode http
balance roundrobin
log global
option httplog
###################### acl setting ###############################
acl pc_domain hdr_dom(host) -i www.openlab.org
acl mobile_domain hdr_dom(host) -i mobile.openlab.org
###################### acl hosts #################################
use_backend pc_hosts if pc_domain
use_backend mobile_hosts if mobile_domain
default_backend pc_hosts
###################### backend hosts #############################
backend mobile_hosts
mode http
server w1 172.25.10.120:80 check inter 2000 fall 3 rise 5
backend pc_hosts
mode http
server w2 172.25.10.130:80 check inter 2000 fall 3 rise 5
vim /etc/hosts
172.25.10.110 mobile.openlab.org www.openlab.org openlab.org

ACL-匹配访问路径实现动静分离
配置文件
vim /etc/haproxy/conf.d/test.cfg
frontend openlab_http_port
bind :88
mode http
balance roundrobin
log global
option httplog
###################### acl setting ###############################
acl acl_static path_beg -i /static /images /javascript
acl acl_static path_end -i .jpg .jpeg .png .gif .css.js
###################### acl hosts #################################
use_backend static_hosts if acl_static
default_backend app_hosts
###################### backend hosts #############################
backend mobile_hosts
mode http
server w1 172.25.10.120:80 check inter 2000 fall 3 rise 5
backend pc_hosts
mode http
server w2 172.25.10.130:80 check inter 2000 fall 3 rise 5
创建相关文件
mkdir /var/www/html/static
echo "`hostname -I`" > /var/www/html/static/test.html
测试访问
curl 172.25.10.110/static/test.html