haproxy配置示例
1.最基础的的配置
下面的例子配置了一个监听在所有接口的80端口上HTTP proxy服务,它转发所有的请求至后端监听在127.0.0.1:8000上的"server"。
global daemon maxconn 25600 defaults mode http timeout connect 5000ms timeout client 50000ms timeout server 50000ms frontend http-in bind *:80 default_backend servers backend servers server server1 127.0.0.1:8080 maxconn 32
2.http服务器实例
#--------------------------------------------------------------------- # Global settings #--------------------------------------------------------------------- global # to have these messages end up in /var/log/haproxy.log you will # need to: # # 1) configure syslog to accept network log events. This is done # by adding the '-r' option to the SYSLOGD_OPTIONS in # /etc/sysconfig/syslog # # 2) configure local2 events to go to the /var/log/haproxy.log # file. A line like the following can be added to # /etc/sysconfig/syslog # # local2.* /var/log/haproxy.log log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon 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 30000 listen stats mode http bind 0.0.0.0:1080 stats enable stats hide-version stats uri /haproxyadmin?stats stats realm Haproxy\ Statistics stats auth admin:admin stats admin if TRUE frontend http-in bind *:80 mode http log global option httpclose option logasap option dontlognull capture request header Host len 20 capture request header Referer len 60 default_backend servers frontend healthcheck bind :1099 mode http option httpclose option forwardfor default_backend servers backend servers balance roundrobin server websrv1 192.168.10.11:80 check maxconn 2000 server websrv2 192.168.10.12:80 check maxconn 2000
3.负载均衡MySQL服务的配置示例
后端的两个mysql主机应该设置为多主模式或者全部为从主机(只读),这样读写才不会出现问题。
#--------------------------------------------------------------------- # Global settings #--------------------------------------------------------------------- global # to have these messages end up in /var/log/haproxy.log you will # need to: # # 1) configure syslog to accept network log events. This is done # by adding the '-r' option to the SYSLOGD_OPTIONS in # /etc/sysconfig/syslog # # 2) configure local2 events to go to the /var/log/haproxy.log # file. A line like the following can be added to # /etc/sysconfig/syslog # # local2.* /var/log/haproxy.log # log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon defaults mode tcp log global option httplog option dontlognull 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 600 listen stats mode http bind 0.0.0.0:1080 stats enable stats hide-version stats uri /haproxyadmin?stats stats realm Haproxy\ Statistics stats auth admin:admin stats admin if TRUE frontend mysql bind *:3306 mode tcp log global default_backend mysqlservers backend mysqlservers balance leastconn server dbsrv1 192.168.10.11:3306 check port 3306 intval 2 rise 1 fall 2 maxconn 300 server dbsrv2 192.168.10.12:3306 check port 3306 intval 2 rise 1 fall 2 maxconn 300
4.动静分离示例
global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon # turn on stats unix socket 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 30000 listen stats mode http bind 0.0.0.0:1080 stats enable stats hide-version stats uri /haproxyadmin?stats stats realm Haproxy\ Statistics stats auth admin:admin stats admin if TRUE frontend http-in bind *:80 mode http log global option httpclose option logasap option dontlognull capture request header Host len 20 capture request header Referer len 60 acl url_static path_beg -i /static /images /javascript /stylesheets acl url_static path_end -i .jpg .jpeg .gif .png .css .js use_backend static_servers if url_static default_backend dynamic_servers backend static_servers balance roundrobin server imgsrv1 172.16.200.7:80 check maxconn 6000 server imgsrv2 172.16.200.8:80 check maxconn 6000 backend dynamic_servers cookie srv insert nocache balance roundrobin server websrv1 172.16.200.7:80 check maxconn 1000 cookie websrv1 server websrv2 172.16.200.8:80 check maxconn 1000 cookie websrv2 server websrv3 172.16.200.9:80 check maxconn 1000 cookie websrv3
5.实例:keepcalived + haproxy
haproxy.cfg
# this config needs haproxy-1.1.28 or haproxy-1.2.1 global log 127.0.0.1 local0 log 127.0.0.1 local3 warning #log 127.0.0.1 local1 notice #log loghost local0 info maxconn 3000 chroot /usr/share/haproxy uid nobody gid nobody daemon #debug #quiet defaults log global mode http option httplog option dontlognull retries 3 option redispatch maxconn 20000 timeout connect 5000 timeout client 50000 timeout server 50000 backend varnish_www #option httpchk option forwardfor balance uri #server varnish1 172.18.203.134:6081 check inter 3000 rise 2 fall 5 #server varnish2 172.18.203.135:6081 check inter 3000 rise 2 fall 5 server varnish1 172.18.203.134:6081 server varnish2 172.18.203.135:6081 backend varnish_m #option httpchk option forwardfor balance uri hash-type consistent #server varnish3 172.18.203.136:6081 check #server varnish4 172.18.203.137:6081 check server varnish3 172.18.203.136:6081 server varnish4 172.18.203.137:6081 frontend host bind *:80 acl host_m hdr(host) -i m.tycoon.com acl host_www hdr(host) -i www.tycoon.com acl host_www path_end -i .jpg .jpeg .png .gif .js .css .html .htm use_backend varnish_www if host_www use_backend varnish_m if host_m listen stats *:8901 stats enable stats refresh 30s stats hide-version stats uri /haproxy?stats stats realm HAProxy\ Statistics stats auth admin:tycoon
keepcalived主:
! Configuration File for keepalived global_defs { notification_email { root@localhost } notification_email_from admin@tycoon.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id lb-haproxy vrrp_mcast_group4 224.0.203.10 } vrrp_script chk_haproxy { script "killall -0 haproxy" interval 5 weight -8 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass tUPEA8I5 } track_script { chk_haproxy } virtual_ipaddress { 172.18.203.253/16 } }
keepalived从:
! Configuration File for keepalived global_defs { notification_email { root@localhost } notification_email_from admin@tycoon.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id lb-haproxy vrrp_mcast_group4 224.0.203.10 } vrrp_script chk_haproxy { script "killall -0 haproxy" interval 5 weight -8 } vrrp_instance VI_1 { state SLAVE interface eth0 virtual_router_id 71 priority 95 advert_int 1 authentication { auth_type PASS auth_pass tUPEA8I5 } track_script { chk_haproxy } virtual_ipaddress { 172.18.203.253/16 } }
6.实例2:ACL匹配子网站
global log 127.0.0.1 local0 info maxconn 4096 user nobody group nobody daemon nbproc 1 pidfile /usr/local/haproxy/logs/haproxy.pid defaults mode http retries 3 timeout connect 5s timeout client 30s timeout server 30s timeout check 2s listen admin_stats bind 0.0.0.0:19088 mode http log 127.0.0.1 local0 err stats refresh 30s stats uri /haproxy-status stats realm welcome login\ Haproxy stats auth admin:admin stats auth user1:passwd1 stats hide-version stats admin if TRUE front www bind *:80 mode http option httpdlog option forwardfor log global acl host_www hdr_reg(host) -i ^(www.tb.com|tb.com) acl host_bbs hdr_dom(host) -i bbs.tb.com acl host_blog hdr_beg(host) -i blog.tb.com use_backend server_www if host_www use_backend server_bbs if host_bbs use_backend server_blog if host_blog default_backend server_default backend server_default mode http option redispatch option abortonclose balance roundrobin cookie SERVER option httpcheck GET /check_status.html server default1 192.168.88.90:8000 cookie default1 weight 3 check inter 2000 rise 2 fail 3 server default2 192.168.88.91:8000 cookie default2 weight 3 check inter 2000 rise 2 fail 3 backend server_www mode http option redispatch option abortonclose balance source cookie SERVERID option httpcheck GET /check_status.jsp server www1 192.168.88.80:80 cookie www1 weight 6 check inter 2000 rise 2 fail 3 server www2 192.168.88.81:80 cookie www2 weight 6 check inter 2000 rise 2 fail 3 server www3 192.168.88.82:80 cookie www3 weight 6 check inter 2000 rise 2 fail 3 backend server_bbs mode http option redispatch option abortonclose balance source cookie SERVERID option httpcheck GET /check_status.php server bbs1 192.168.88.83:8080 cookie bbs1 weight 8 check inter 2000 rise 2 fail 3 server bbs2 192.168.88.84:8090 cookie bbs2 weight 8 check inter 2000 rise 2 fail 3 backend server_blog mode http option redispatch option abortonclose balance roundrobin cookie SERVERID option httpcheck GET /check_status.php server blog1 192.168.88.85:8000 cookie blog1 weight 5 check inter 2000 rise 2 fail 3 server blog2 192.168.88.86:8000 cookie blog2 weight 5 check inter 2000 rise 2 fail 3