HAProxy杂记(1)
HAProxyhaproxy基础
1、安装haproxy
# yum -y install haproxy
# yum -y install haproxy
查看haproxy生成的文件 :
# rpm -ql haproxy
备份配置文件:
# cp haproxy.cfg{,.back}
# ls
haproxy.cfghaproxy.cfg.back
haproxy演示
实验环境:1台haproxy,2台httpd
1、两台网页服务器安装httpd
# yum install -y httpd
# yum install -y httpd
设置首页,启动服务:
# echo "Web1" > /var/www/html/index.html
# systemctl start httpd.service
#
# echo "Web2" > /var/www/html/index.html
# systemctl start httpd.service
#
2、配置haproxy文件,将用户请求转发到后端去
# vim haproxy.cfg
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontendmain *:80
default_backend websrvs
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend websrvs
balance roundrobin
server web1 10.201.106.132:80 check
server web2 10.201.106.133:80 check
~
启动服务:
# systemctl start haproxy.service
# systemctl status haproxy.service
● haproxy.service - HAProxy Load Balancer
Loaded: loaded (/usr/lib/systemd/system/haproxy.service; disabled; vendor preset: disabled)
Active: active (running) since Sun 2017-01-15 22:30:40 CST; 5s ago
Main PID: 4924 (haproxy-systemd)
CGroup: /system.slice/haproxy.service
├─4924 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
├─4925 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
└─4926 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
Jan 15 22:30:40 master1.com systemd: Started HAProxy Load Balancer.
Jan 15 22:30:40 master1.com systemd: Starting HAProxy Load Balancer...
Jan 15 22:30:40 master1.com haproxy-systemd-wrapper: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
#
访问:http://10.201.106.131/
可以在两个web站点轮流跳转
3、健康状态监测测试
3.1 停止一个web节点服务
# systemctl stop httpd
现在只能访问剩下的那个节点了;
4、开启日志功能
4.1 开启本地日志服务
配置日志文件:
# vim /etc/rsyslog.conf
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# Save boot messages also to boot.log
local2.* /var/log/haproxy.log
重启日志服务:
# systemctl restart rsyslog.service
# systemctl status rsyslog.service
● rsyslog.service - System Logging Service
Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2017-01-15 22:47:46 CST; 13s ago
Main PID: 5073 (rsyslogd)
CGroup: /system.slice/rsyslog.service
└─5073 /usr/sbin/rsyslogd -n
Jan 15 22:47:46 master1.com systemd: Starting System Logging Service...
Jan 15 22:47:46 master1.com systemd: Started System Logging Service.
#
查看是否监听UDP 514端口:
# ss -unlp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 *:40858 *:* users:(("haproxy",pid=4926,fd=6),("haproxy",pid=4925,fd=6))
UNCONN 0 0 *:514 *:* users:(("rsyslogd",pid=5104,fd=3))
UNCONN 0 0 :::514 :::* users:(("rsyslogd",pid=5104,fd=4))
#
4.2 查看haproxy日志
# tail /var/log/haproxy.log
Feb5 23:21:29 localhost haproxy: Server websrvs/web1 is UP, reason: Layer4 check passed, check duration: 0ms. 2 active and 0 backup servers online. 0 sessions requeued, 0 total in queue.
Feb5 23:21:31 localhost haproxy: 10.201.106.1:56402 main websrvs/web2 5/0/9/2/16 304 141 - - ---- 1/1/0/1/0 0/0 "GET / HTTP/1.1"
Feb5 23:21:32 localhost haproxy: 10.201.106.1:56402 main websrvs/web1 727/0/1/4/732 200 273 - - ---- 1/1/0/0/0 0/0 "GET / HTTP/1.1"
Feb5 23:21:32 localhost haproxy: 10.201.106.1:56402 main websrvs/web2 738/0/3/6/747 200 273 - - ---- 1/1/0/0/0 0/0 "GET / HTTP/1.1"
Feb5 23:21:33 localhost haproxy: 10.201.106.1:56402 main websrvs/web1 572/0/1/2/575 200 273 - - ---- 1/1/0/1/0 0/0 "GET / HTTP/1.1"
#
haproxy 高级配置
修改haproxy调度算法为source
vim haproxy.cfg
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend websrvs
balance source
重载服务:
# systemctl reload haproxy.service
访问测试后:只在一个web上面停留了,不会跳转至另一个web;
修改为uri算法
# vim haproxy.cfg
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend websrvs
balance uri
hash-type consistent
重载服务:
# systemctl reload haproxy.service
生成10个测试页面:
# for i in {1..10};do echo "Page $i on Web1" > /var/www/html/test$i.html;done
# for i in {1..10};do echo "Page $i on Web2" > /var/www/html/test$i.html;done
#
# ls /var/www/html/
index.html test1.htmltest3.htmltest5.htmltest7.htmltest9.html
test10.htmltest2.htmltest4.htmltest6.htmltest8.html
访问测试:http://10.201.106.131/test2.html
只固定在一个web服务器上;
# curl http://10.201.106.131/test2.html
Page 2 on Web1
# curl http://10.201.106.131/test2.html
Page 2 on Web1
# curl http://10.201.106.131/test2.html
Page 2 on Web1
# curl http://10.201.106.131/test2.html
Page 2 on Web1
# curl http://10.201.106.131/test2.html
Page 2 on Web1
#
# curl http://10.201.106.131/test5.html
Page 5 on Web1
# curl http://10.201.106.131/test5.html
Page 5 on Web1
# curl http://10.201.106.131/test5.html
Page 5 on Web1
# curl http://10.201.106.131/test6.html
Page 6 on Web1
# curl http://10.201.106.131/test6.html
Page 6 on Web1
# curl http://10.201.106.131/test6.html
Page 6 on Web1
# curl http://10.201.106.131/test8.html
Page 8 on Web1
# curl http://10.201.106.131/test8.html
Page 8 on Web1
# curl http://10.201.106.131/test9.html
Page 9 on Web2
# curl http://10.201.106.131/test9.html
Page 9 on Web2
# curl http://10.201.106.131/test3.html
Page 3 on Web2
# curl http://10.201.106.131/test3.html
Page 3 on Web2
# curl http://10.201.106.131/test4.html
Page 4 on Web2
# curl http://10.201.106.131/test4.html
Page 4 on Web2
# curl http://10.201.106.131/test8.html
Page 8 on Web1
# curl http://10.201.106.131/test8.html
Page 8 on Web1
#
hdr调度算法
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend websrvs
balance hdr(User-Agent)
hash-type consistent
通过curl模拟别的浏览器访问:
# curl -A 'hello' http://10.201.106.131/test4.html
Page 4 on Web2
#
# curl -A 'IE' http://10.201.106.131/test4.html
Page 4 on Web2
# curl -A 'IE' http://10.201.106.131/test4.html
Page 4 on Web2
# curl -A '360' http://10.201.106.131/test4.html
Page 4 on Web2
# curl -A '360' http://10.201.106.131/test4.html
设置监听多个端口
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontendmain
bind *:80
bind *:8080
default_backend websrvs
重启服务:
# systemctl restart haproxy.service
# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:8080 *:*
LISTEN 0 128 *:80 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
#
修改权重测试
# vim haproxy.cfg
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend websrvs
balance roundrobin
server web1 10.201.106.132:80 check weight 1
server web2 10.201.106.133:80 check weight 3
# systemctl reload haproxy.service
测试访问网页结果是,访问3次web2,才访问一次web1;
页:
[1]