集合Haproxy,Keepalived雙主雙機高可用模型,不論是Haproxy還是Keepalived甚至是上遊伺服器均提高生産力并增強可用性,也就是如下架構中Haproxy,Keepalived,Httpd伺服器任意當機一台服務還是可以正常運作的
規劃:
1
2
3
<code>172.16.43.1 , 172.16.43.2 兩台keepalived節點 (為haproxy做高可用)</code>
<code>172.16.43.1(172.16.43.2) 兩台haproxy (為上遊伺服器做反帶)</code>
<code>172.16.43.3 , 172.16.43.4 兩台web後端伺服器</code>
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
<code># 安裝keepalived, 兩台均要做 (172.16.43.1,2)</code>
<code>yum -y </code><code>install</code> <code>keepalived</code>
<code>#</code>
<code># keepalived配置 (172.16.43.1)</code>
<code># vim /etc/keepalived/keepalived.conf</code>
<code>global_defs {</code>
<code> </code><code>notification_email {</code>
<code> </code><code>root@localhost </code><code># 本地郵件位址</code>
<code> </code><code>}</code>
<code> </code><code>notification_email_from keepadmin@localhost</code>
<code> </code><code>smtp_connect_timeout 3</code>
<code> </code><code>smtp_server 127.0.0.1</code>
<code> </code><code>router_id LVS_DEVEL_KING</code>
<code>}</code>
<code>vrrp_script chk_haproxy {</code>
<code> </code><code>script </code><code>"/etc/keepalived/chk_haproxy.sh"</code> <code># 檢查腳本</code>
<code> </code><code>interval 2</code>
<code> </code><code>weight 2</code>
<code>vrrp_instance VI_1 {</code>
<code> </code><code>interface eth0</code>
<code> </code><code>state MASTER </code><code># 172.16.43.1 這是主,那麼 172.16.43.2 就是備</code>
<code> </code><code>priority 100 </code><code># 主 比 備 優先級高</code>
<code> </code><code>virtual_router_id 173 </code><code># vrid是行為vmac的根本</code>
<code> </code><code>garp_master_delay 1</code>
<code> </code><code>authentication {</code>
<code> </code><code>auth_type PASS</code>
<code> </code><code>auth_pass 1111</code>
<code> </code><code>track_interface {</code>
<code> </code><code>eth0</code>
<code> </code><code>virtual_ipaddress {</code>
<code> </code><code>172.16.43.88</code><code>/16</code> <code>dev eth0</code>
<code> </code><code>track_script {</code>
<code> </code><code>chk_haproxy </code><code># 腳本跟蹤監測</code>
<code>vrrp_instance VI_2 {</code>
<code> </code><code>state BACKUP </code><code># master for slave routers</code>
<code> </code><code>priority 99 </code><code># 99 for master</code>
<code> </code><code>virtual_router_id 174</code>
<code> </code><code>auth_pass 11111</code>
<code> </code><code>172.16.43.188</code><code>/16</code> <code>dev eth0</code>
<code># 172.16.43.2 keepalived配置</code>
<code> </code><code>root@localhost</code>
<code> </code><code>script </code><code>"/etc/keepalived/chk_haproxy.sh"</code>
<code> </code><code>state BACKUP </code><code># BACKUP for slave routers</code>
<code> </code><code>priority 99 </code><code># 99 for BACKUP</code>
<code> </code><code>virtual_router_id 173</code>
<code> </code><code>chk_haproxy</code>
<code> </code><code>state MASTER </code><code># master for slave routers</code>
<code> </code><code>priority 10000 </code><code># 99 for master</code>
<code># 剛才兩個節點 均要有 的監測腳本檔案 , 防止 haproxy 停止而 keepalived 不切換的情況</code>
<code># vim /etc/keepalived/chk_haproxy.sh</code>
<code>#!/bin/bash</code>
<code>if</code> <code>! `pidof haproxy &> </code><code>/dev/null</code><code>`; </code><code>then</code>
<code> </code><code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/haproxy</code> <code>start</code>
<code>fi</code>
<code>sleep</code> <code>2</code>
<code> </code><code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/keepalived</code> <code>stop</code>
### 啟動服務 #### service keepalived start
keepalived雙主模型啟動
<a href="http://s3.51cto.com/wyfs02/M01/25/71/wKioL1Nf6iLwG9TAAAd2IwA505U625.jpg" target="_blank"></a>
ii) 兩台haproxy
63
64
<code># 安裝haproxy,兩台均要 (172.16.43.1 , 2)</code>
<code>yum -y </code><code>install</code> <code>haproxy</code>
<code># 為haproxy分别提供配置檔案 , 兩台均一樣 , 不需要更改</code>
<code>global</code>
<code> </code><code>log 127.0.0.1 local2</code>
<code> </code><code>chroot </code><code>/var/lib/haproxy</code>
<code> </code><code>pidfile </code><code>/var/run/haproxy</code><code>.pid</code>
<code> </code><code>maxconn 4000</code>
<code> </code><code>user haproxy</code>
<code> </code><code>group haproxy</code>
<code> </code><code>daemon</code>
<code>defaults</code>
<code> </code><code>mode http </code><code># http tcp health 模型, 這裡監控 web 站點是以使用 http</code>
<code> </code><code>log global</code>
<code> </code><code>option httplog</code>
<code> </code><code>option dontlognull</code>
<code> </code><code>option redispatch </code><code># 排程到健康的伺服器</code>
<code> </code><code>option http-server-close </code><code># 不接受長連接配接</code>
<code> </code><code>option forwardfor except 127.0.0.0</code><code>/8</code> <code># 在響應頭中加入forwardfor标記</code>
<code> </code><code>retries 3</code>
<code> </code><code>timeout http-request 10s </code><code># 逾時時間設定</code>
<code> </code><code>timeout queue 1m</code>
<code> </code><code>timeout connect 10s</code>
<code> </code><code>timeout client 1m</code>
<code> </code><code>timeout server 1m</code>
<code> </code><code>timeout http-keep-alive 10s</code>
<code> </code><code>timeout check 10s</code>
<code> </code><code>maxconn 30000</code>
<code>listen stats</code>
<code> </code><code>mode http</code>
<code> </code><code>bind 0.0.0.0:8080 </code><code># status 頁面在8080提供服務</code>
<code> </code><code>stats </code><code>enable</code> <code># status 允許操作</code>
<code> </code><code>stats hide-version </code><code># status 隐藏haproxy版本資訊</code>
<code> </code><code>stats uri </code><code>/haproxyadmin</code><code>?stats </code><code># status 通路路徑</code>
<code> </code><code>stats realm Haproxy\ Statistics </code><code># status 登陸驗證資訊</code>
<code> </code><code>stats auth admin:admin </code><code># status 頁面登陸使用者名或密碼</code>
<code> </code><code>stats admin </code><code>if</code> <code>TRUE</code>
<code>frontend http-</code><code>in</code>
<code> </code><code>bind *:80</code>
<code> </code><code>log global</code>
<code> </code><code>option httpclose</code>
<code> </code><code>option logasap</code>
<code> </code><code>option dontlognull</code>
<code> </code><code>capture request header Host len 20</code>
<code> </code><code>capture request header Referer len 60</code>
<code> </code><code>acl url_static path_beg -i </code><code>/static</code> <code>/images</code> <code>/javascript</code> <code>/stylesheets</code>
<code> </code><code>acl url_static path_end -i .html .jpg .jpeg .gif .png .css .js</code>
<code> </code><code>use_backend static_servers </code><code>if</code> <code>url_static</code>
<code> </code><code>default_backend dynamic_servers</code>
<code>backend static_servers</code>
<code> </code><code>balance roundrobin</code>
<code> </code><code>server imgsrv1 172.16.43.3:80 check maxconn 6000</code>
<code>backend dynamic_servers</code>
<code> </code><code>balance </code><code>source</code>
<code> </code><code>server websrv1 172.16.43.3:80 check maxconn 1000</code>
<code> </code><code>server websrv2 172.16.43.4:80 check maxconn 1000</code>
### 啟動服務 #### service haproxy start
輸出狀态頁面
<a href="http://s3.51cto.com/wyfs02/M00/25/71/wKiom1Nf6mOyvPM4AApG0DuvVsI038.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M02/25/71/wKioL1Nf6jyjJBkLAApUCPIDuXg212.jpg" target="_blank"></a>
iii) 兩台web後端伺服器
<code># 安裝 httpd , php</code>
<code>yum -y</code>
<code>install</code> <code>httpd php</code>
### 啟動服務 #### service httpd start
iv) 測試
動靜分離
<a href="http://s3.51cto.com/wyfs02/M01/25/71/wKiom1Nf6q3R8wYnAA9TsBoB0x4743.jpg" target="_blank"></a>
高可用性
關閉了上遊一台web伺服器,可以見到服務請求沒有任何問題, 172.16.43.88 , 188 沒有問題
<a href="http://s3.51cto.com/wyfs02/M00/25/71/wKioL1Nf6oWQvxWNAAG7OuUuJHA886.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M02/25/71/wKiom1Nf6rXQM-LgAAkZxv46-kk155.jpg" target="_blank"></a>
本文轉自My_King1 51CTO部落格,原文連結:http://blog.51cto.com/apprentice/1404853,如需轉載請自行聯系原作者