天天看點

Haproxy、Keepalived雙主高可用負載均衡

集合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 &amp;&gt; </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,如需轉載請自行聯系原作者