haproxy實驗筆記

技術小胖子發表於2017-11-09

實驗規劃:

主機名 IP地址 角色
node01 192.168.112.128 web01
node02 192.168.112.129 web02
node03 192.168.112.130 haproxy

作業系統資訊:

1
2
3
4
5
[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:

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

安裝nginx php:

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

node01和node02上nginx配置檔案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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 /images /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配置檔案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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)如果是編譯安裝 

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

或者

1
[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安裝

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


開啟日誌記錄:

編輯/etc/rsyslog.conf和/etc/sysconfig/syslog檔案

1
2
3
4
5
6
7
8
9
10
[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"
#######################################


相關解釋說明:

1
2
3
4
5
-r:開啟接受外來日誌訊息的功能,其監控514 UDP埠;
-x:關閉自動解析對方日誌伺服器的FQDN資訊,這能避免DNS不完整所帶來的麻煩;
-m:修改syslog的內部mark訊息寫入間隔時間(0為關閉),例如240為每隔240分鐘寫入一次"--MARK--"資訊;
-h:預設情況下,syslog不會傳送從遠端接受過來的訊息到其他主機,而使用該選項,則把該開關開啟,所有
接受到的資訊都可根據syslog.conf中定義的@主機轉發過去


重啟rsyslog服務

1
[root@~]# systemctl restart rsyslog.service


      本文轉自027ryan  51CTO部落格,原文連結:http://blog.51cto.com/ucode/1880704,如需轉載請自行聯絡原作者



相關文章