实验规划:

主机名IP地址角色
node01192.168.112.128web01
node02192.168.112.129web02
node03192.168.112.130haproxy

操作系统信息:

[root@node03 ~]# cat /etc/redhat-release 
CentOS release 6.6 (Final)
[root@node03 ~]# uname -a
Linux node03 2.6.32-504.el6.x86_64 #1 SMP Wed Oct 15 04:27:16 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
[root@node03 ~]#

安装haproxy:

[root@node03 ~]# yum -y install haproxy nginx php

安装nginx php:

[root@node01 ~]# yum -y install nginx
[root@node02 ~]# yum -y install nginx

node01和node02上nginx配置文件:

user  nginx;
worker_processes  4;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            root   html;
            index  index.html index.htm;
        }
}

node03上haproxy和nginx配置文件

haproxy:

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                 3000
listen s-monitor *:90
   mode http
   stats enable
   stats refresh 5s
   stats realm New0ldName
   stats uri /
   stats auth user:123456
frontend  main *:80
    acl url_static       path_beg       -i /static /p_w_picpaths /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js
    use_backend static          if url_static
    default_backend             app
backend static
    balance     roundrobin
    server      static 127.0.0.1:8080 check
backend app
    balance     roundrobin
    server  app1 192.168.112.128:80 check
    server  app2 192.168.112.129:80 check

nginx配置文件:

user  nginx;
worker_processes  4;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
user  nginx;
worker_processes  4;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    #access_log  logs/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;
    server {
        listen       8080;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        root    /data/website/app;
        location / {
            #root   html;
            index  index.php index.html index.htm;
        }
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }


haproxy平滑重启操作:

(1)如果是编译安装 

[root@node03 ~]#/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.conf  -sf `cat /usr/local/haproxy/var/run/haproxy.pid`

或者

[root@node03 ~]#/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.conf  -st `cat /usr/local/haproxy/var/run/haproxy.pid`

(2)如果是yum安装

[root@node03 ~]# /etc/init.d/haproxy reload


开启日志记录:

编辑/etc/rsyslog.conf和/etc/sysconfig/syslog文件

[root@~]# vim  /etc/rsyslog.conf:
 13 $ModLoad imudp  #将注释去除
 14 $UDPServerRun 514 #将注释去除
local3.*         /var/log/haproxy.log #最下方添加
local0.*         /var/log/haproxy.log #最下方添加
[root@~]#vi /etc/sysconfig/syslog
#######################################
把SYSLOGD_OPTIONS="-m 0"
改成 SYSLOGD_OPTIONS="-r -m 0"
#######################################


相关解释说明:

-r:打开接受外来日志消息的功能,其监控514 UDP端口;
-x:关闭自动解析对方日志服务器的FQDN信息,这能避免DNS不完整所带来的麻烦;
-m:修改syslog的内部mark消息写入间隔时间(0为关闭),例如240为每隔240分钟写入一次"--MARK--"信息;
-h:默认情况下,syslog不会发送从远端接受过来的消息到其他主机,而使用该选项,则把该开关打开,所有
接受到的信息都可根据syslog.conf中定义的@主机转发过去


重启rsyslog服务

[root@~]# systemctl restart rsyslog.service