HAproxy

HAproxyphp

 

實驗環境:rhel6.5 selinux and iptables disabledhtml

實驗主機: 172.25.23.1  server1.example.com haproxy linux

172.25.23.4  server4.example.com web1web

 172.25.23.5  server5.example.com web2redis

 

1.安裝軟件算法

rpm 包方式:vim

rpmbuild -tb haproxy-1.4.23.tar.gz服務器

rpm -ivh /root/rpmbuild/RPMS/x86_64/haproxy-1.4.23-1.x86_64.rpm併發

 

源碼方式:負載均衡

tar zxf haproxy-1.4.23.tar.gz

cd haproxy-1.4.23

make TARGET=linux26 ARCH=x86_64 USE_PCRE=1 PREFIX=/usr/local/haproxy install

 

下載壓縮包haproxy-1.4.24.tar.gz

[root@server1 ~]# rpmbuild -tb haproxy-1.4.24.tar.gz

[root@server1 ~]# yum install pcre-devel -y

[root@server1 ~]# rpmbuild -tb haproxy-1.4.24.tar.gz

[root@server1 ~]# cd rpmbuild/RPMS/x86_64/

[root@server1 ~]# rpm -ivh haproxy-1.4.24-1.x86_64.rpm

[root@server1 ~]# cd /etc/haproxy/

 

2.編譯配置文件

[root@server1 ~]# cp haproxy.cfg haproxy.cfg.bak  #作備份

[root@server1 ~]# vim 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  local1 notice

        log loghost    local0 info#指定日誌類型,還有 err warning debug

        maxconn 4096#併發最大鏈接數量

        chroot /usr/share/haproxy#jail 目錄

        uid 99#用戶

        gid 99#

        daemon#後臺運行

        #debug

        #quiet

 

defaults

        log     global

        mode    http#默認使用 http 7 層模式 tcp: 4

        option  httplog#http 日誌格式

        option  dontlognull#禁用空連接日誌

        retries 3#重試 3 次失敗認爲服務器不可用

        option redispatch#client 鏈接到掛掉的機器時,從新分配到健康的主機!

        maxconn 2000

        contimeout      5000#鏈接超時

 clitimeout       50000#客戶端超時

        srvtimeout      50000 #服務器端超時

        stats uri /status#haproxy 監控頁面

 

listen  westos *:80#監聽的實例名稱,地址和端口

        balance roundrobin#負載均衡算法

        server  web1 172.25.23.4:80 check inter 2000 rise 2 fall 3

        server  web2 172.25.23.5:80 check inter 2000 rise 2 fall 3

                                                              

#check inter 2000:檢測心跳頻率

#rise 2:表示 2 次正確認爲服務器可用

#fall 5:表示 5 次失敗認爲服務器不可用

 

[root@server1 ~]# mkdir /usr/share/haproxy

[root@server1 ~]# /etc/init.d/haproxy start

 

3.測試

在兩臺real serverweb1 web2 上安裝httpd,建立測試頁而且啓動服務

測試訪問  172.25.23.1  會發現兩個測試頁輪詢顯示

 

健康檢查

defaults 模塊中加入 stats uri /status重啓服務

 

訪問 haproxy 監控頁面:http://172.25.23.1/status

wKioL1feCSXTqb2wAAEF87AK_5k437.png 

 

4.監控頁面添加認證:

listen stats_auth 172.25.23.1:80

stats enable

stats uri /status #監控頁面地址

stats auth admin:westos #管理賬號和密碼

stats refresh 5s #刷新頻率

5.haproxy 日誌:

vim /etc/rsyslog.conf #接受 haproxy 日誌

13 $ModLoad imudp

 14 $UDPServerRun 514

  42*.info;mail.none;authpriv.none;cron.none;local0.none      /var/log/messages

63 local0.*                       /var/log/haproxy.log#日誌文件位置

/etc/init.d/rsyslog  restart

 

vim /etc/haproxy/haproxy.cfg

...

#log loghost    local0 info#註釋掉該行

...

 

6.先後臺顯示健康檢查信息

vim /etc/haproxy/haproxy.cfg

...

frontend westos *:80

default_backendloop1

backend loop1

        balance roundrobin

        server  web1 172.25.23.4:80 check inter 2000 rise 2 fall 3

        server  web2 172.25.23.5:80 check inter 2000 rise 2 fall 3

 

/etc/init.d/haproxy  restart

訪問 172.25.23.1/status

wKiom1feCSbgpSEWAACXSxD9fzg698.png 

 

7.

加了權重,而且當兩個real server都掛掉時,顯示本身的測試頁

修改本身的http監聽端口爲8080,避免和haproxy80 端口衝突

vim /etc/haproxy/haproxy.cfg

...

frontend westos *:80

default_backendloop1

backend loop1

        balance roundrobin

        server  web1 172.25.23.4:80 check inter 2000 rise 2 fall 3 weight 1

        server  web2 172.25.23.5:80 check inter 2000 rise 2 fall 3 weight 1

server  backup 127.0.0.1:8080 backup

/etc/init.d/haproxy  restart

 

 

8.ACL

 

vim /etc/haproxy/haproxy.cfg

...

frontend westos *:80

acl badhost src 172.25.23.250#拒絕172.25.23.250訪問,也能夠是一個網段

block if badhost

default_backendloop1

 

backend loop1

        balance roundrobin

        server  web1 172.25.23.4:80 check inter 2000 rise 2 fall 3 weight 1

        server  web2 172.25.23.5:80 check inter 2000 rise 2 fall 3 weight 1

server  backup 127.0.0.1:8080 backup

/etc/init.d/haproxy  restart

 

172.25.23.250上訪問172.25.23.1

wKioL1feCSajT31oAAA2MJVqk3Q879.png 

 

9.經過錯誤代碼403重定向,定向到 http://172.25.23.1:8080

vim /etc/haproxy/haproxy.cfg

...

frontend westos *:80

acl badhost src 172.25.23.250#拒絕172.25.23.250訪問,也能夠是一個網段

block if badhost

errorloc 403 http://172.25.23.1:8080

default_backendloop1

 

backend loop1

        balance roundrobin

        server  web1 172.25.23.4:80 check inter 2000 rise 2 fall 3 weight 1

        server  web2 172.25.23.5:80 check inter 2000 rise 2 fall 3 weight 1

server  backup 127.0.0.1:8080 backup

/etc/init.d/haproxy  restart

 

 

10.根據來源重定向

vim /etc/haproxy/haproxy.cfg

...

frontend westos *:80

acl badhost src 172.25.23.250#拒絕172.25.23.250訪問,也能夠是一個網段

#block if badhost

#errorloc 403 http://172.25.23.1:8080

redirect location http://172.25.23.1:8080 if badhost

default_backendloop1

 

backend loop1

        balance roundrobin

        server  web1 172.25.23.4:80 check inter 2000 rise 2 fall 3 weight 1

        server  web2 172.25.23.5:80 check inter 2000 rise 2 fall 3 weight 1

server  backup 127.0.0.1:8080 backup

/etc/init.d/haproxy  restart

 

11.動靜分離

Server1

vim /etc/haproxy/haproxy.cfg

...

frontend westos *:80

acl badhost src 172.25.23.250#拒絕172.25.23.250訪問,也能夠是一個網段

#block if badhost

#errorloc 403 http://172.25.23.1:8080

#redirect location http://172.25.23.1:8080 if badhost

acl url_static path_beg -i /p_w_picpaths

acl url_static path_end -i .jpg$ .png$ .jpeg$ .gif$

use_backend loop2 if url_static

default_backendloop1

 

backend loop1

        balance roundrobin

        server  web1 172.25.23.4:80 check inter 2000 rise 2 fall 3 weight 1

    backend loop2

balance roundrobin

server  web2 172.25.23.5:80 check inter 2000 rise 2 fall 3 weight 1

 

/etc/init.d/haproxy  restart

 

 

Server 4  創建php測試頁

yum install php -y

/var/www/html 目錄下新建index.php測試頁

/etc/init.d/httpd restart

訪問172.25.23.1

 

wKiom1feCSfjWQfcAAC1E30RoEw514.png 

 

Server5

mkdir /var/www/html/p_w_picpaths

get redhat.jpg

 

/etc/init.d/httpd restart

 

訪問 172.25.23.1/p_w_picpaths/redhat.jpg

wKioL1feCSyDMH3eAAGWRIj6SMY231.png 

 

172.25.23.1/status

wKioL1feCTCBGzvsAAFCleCbn7c291.png 

 

 

 

12.讀寫分離

 

Server1

vim /etc/haproxy/haproxy.cfg

...

frontend westos *:80

acl badhost src 172.25.23.250#拒絕172.25.23.250訪問,也能夠是一個網段

#block if badhost

#errorloc 403 http://172.25.23.1:8080

#redirect location http://172.25.23.1:8080 if badhost

acl url_static path_beg -i /p_w_picpaths

acl url_static path_end -i .jpg$ .png$ .jpeg$ .gif$

 

acl read method GET

acl read method HEAD

 

acl write method PUT

acl write method POST

 

use_backend loop2 if write

default_backendloop1

 

backend loop1

        balance roundrobin

        server  web1 172.25.23.4:80 check inter 2000 rise 2 fall 3 weight 1

    backend loop2

balance roundrobin

server  web2 172.25.23.5:80 check inter 2000 rise 2 fall 3 weight 1

 

/etc/init.d/haproxy  restart

 

server4  server5  

yum install -y php

cd /var/www/html

wKiom1feCTGhTxCrAABIfv6kBHY934.png 

 

訪問 172.25.23.1

wKioL1feCTGAHR3VAAAhbdJMyHc246.png

相關文章
相關標籤/搜索