Haproxy 入门、监控和 statsd 打点指北
作为一个奇奇怪怪的前端码畜,偶尔就会和一些奇奇怪怪的事情打交道,前一阵子也算是挺忙的了(尽管只是个没有更新博客,连续跳票的借口)。
这次使用 haproxy,是因为他作为负载均衡和反向代理而言配置起来比 Nginx 简单,并且自己就提供了监听页面。
我们来看一个完整的配置文件就知道了:
global
daemon
maxconn 500
ulimit-n 8000
user daemon
group deamon
chroot /var/empty
pidfile /var/run/haproxy.pid
log localhost local0 notice
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http-front
bind *:80
option httpclose
maxconn 100
reqirep ^Host:\\ www.abc.com Host:\\ abc.com
acl host_abc_com hdr(host) -i abc.com
acl host_cn hdr_end(host) -i .cn
acl host_xyz hdr_beg(host) -i xzy.
acl url_xxx url_reg -i ^/xxx
use_backend host-abc-com if host_abc_com
use_backend host-cn if host_cn
use_backend host-xyz-url-xxx if host_xyz url_xxx
default_backend default-servers
backend default-servers
server default-servers1 127.0.0.1:8000 maxconn 32
backend host-abc-com
balance roundrobin
option httpcheck
option forwardfor
option httpclose
option redispatch
retries 3
server abc-com1 192.168.1.100:80 check inter 2000 rise 2 fall 3 maxconn 32
server abc-com2 192.168.1.101:80 check inter 2000 rise 2 fall 3 maxconn 32
backend host-cn
balance roundrobin
option httpcheck
option forwardfor
option httpclose
option redispatch
retries 3
server abc-com1 192.168.1.100:80 check inter 2000 rise 2 fall 3 maxconn 32
server abc-com2 192.168.1.101:80 check inter 2000 rise 2 fall 3 maxconn 32
server abc-com3 192.168.1.102:80 check inter 2000 rise 2 fall 3 maxconn 32 backup
backend host-xyz-url-xxx
balance roundrobin
option httpcheck
option forwardfor
option httpclose
option redispatch
retries 3
server abc-com1 192.168.1.100:80 check inter 2000 rise 2 fall 3 maxconn 32
server abc-com2 192.168.1.101:80 check inter 2000 rise 2 fall 3 maxconn 32
相比起 Nginx 来说,可读性应该来说是很强的了,于是我写了一个配置生成器,就能够实现动态的配置生成了,由于这是我们的内部代码,不方便公开啦,不过可以看到,这一切都是非常简单就能实现的。
关于配置文件,只要通过看一下文档就可以知道怎么写了。
启动:
haproxy -D -f haproxy.cnf -p haproxy.pid -sf $(cat haproxy.pid)
Haproxy 自带了分析与监控(统计),这样可以设定一个页面来查看各个服务的健康状况。
要设置健康检查和健康检查的条件,只要在 backend
中设置:
option httpchk GET /ping
http-check expect ! rstatus ^5
以上条件的意思是:检查是否有 /ping
,如果不是 5xx
则代表健康检查通过。
统计设置:
listen stats
bind :9000
mode http
stats enable
stats hide-version
stats realm Haproxy Statistics
stats uri /haproxy_stats
stats auth test:test
通过 url
来设置页面路径,通过 auth
来设置用户名和密码。所以我们访问 localhost:9000/haproxy_stats
就能访问统计面板。
之后老板又多了新需求,需要打点,这里用到了 Grafana,一个开源的统计和监控程序,Haproxy 中的统计数据通过 ;csv
可以输出纯数据版用以给程序使用。
我们用过 Haproxy 的统计数据达到 statsd。
这里用到了一个开源的 Python 程序,可以简单用 supervisor 跑起来:https://github.com/softlayer/haproxy-statsd,把配置文件写好之后即可使用:
[haproxy-statsd]
haproxy_url = http://127.0.0.1:1936/;csv
haproxy_user =
haproxy_password =
statsd_host = 127.0.0.1
statsd_port = 8125
statsd_namespace = haproxy.(HOSTNAME)
interval = 5
然后在 Grafana 中可以用以下路径访问:stats.gauges.[namespace].[pxname].[svname].[statname]
之后,我们通过配置 Grafana 就可以实现监控,具体的不多说,看文档:http://docs.grafana.org/features/datasources/graphite/
后记:由于这是十月份开的坑,我十二月才……Emmm,所以……有的东西有点忘了,以后再用了在补充。
评论 (0)