天天看點

Haproxy+Keepalived叢集執行個體配置

作業系統: redhat 6.5 x64,本文采用rpm方式安裝haproxy,keepalived。   

app1: 192.168.0.24    

app1: 192.168.0.25    

vip : 192.168.0.26

http1:192.168.0.24:8080  主機配置lap環境。   

http2:192.168.0.25:8080  主機配置lap環境。

實作一個vip出現,出例采用vip位址是192.168.0.26。

說明:rhel/centos/oel6.x安裝版本中已經內建了keepalive-1.2.7,以及haproxy軟體包經過安裝沒有問題。   

在app1,app2兩個節點上直接采用rpm包安裝。

1

2

3

4

5

6

7

8

9

10

<code># rpm -ivh keepalived-1.2.7-3.el6.x86_64.rpm net-snmp-utils-5.5-49.el6.x86_64.rpm net-snmp-libs-5.5-49.el6.x86_64.rpm lm_sensors-3.1.1-17.el6.x86_64.rpm lm_sensors-</code>

<code>devel-3.1.1-17.el6.x86_64.rpm lm_sensors-libs-3.1.1-17.el6.x86_64.rpm    </code>

<code>preparing...                </code><code>########################################### [100%]    </code>

<code>   </code><code>1:lm_sensors-libs        </code><code>########################################### [ 17%]    </code>

<code>   </code><code>2:net-snmp-libs          </code><code>########################################### [ 33%]    </code>

<code>   </code><code>3:keepalived             </code><code>########################################### [ 50%]    </code>

<code>   </code><code>4:net-snmp-utils         </code><code>########################################### [ 67%]    </code>

<code>   </code><code>5:lm_sensors             </code><code>########################################### [ 83%]    </code>

<code>   </code><code>6:lm_sensors-devel       </code><code>########################################### [100%]    </code>

<code>#</code>

1) 在app1 節點一上配置檔案

說明: 修改配置檔案, 綁定的網卡是eth0,從機就是優先級與本機ip不一樣外,其它都是一樣,相比之前的示例增加了監控腳本。

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

<code># vi /etc/keepalived/keepalived.conf  </code>

<code>! configuration file </code><code>for</code> <code>keepalived    </code>

<code>global_defs {    </code>

<code>   </code><code>notification_email {    </code>

<code>     </code><code>[email protected]    </code>

<code>   </code><code>}    </code>

<code>   </code><code>notification_email_from [email protected]    </code>

<code>   </code><code>smtp_server 127.0.0.1    </code>

<code>   </code><code>smtp_connect_timeout 30    </code>

<code>   </code><code>router_id lvs_devel    </code>

<code>}</code>

<code>vrrp_script chk_haproxy {   </code>

<code>    </code><code>script </code><code>"killall -0 haproxy"</code>    

<code>    </code><code>interval 1    </code>

<code>    </code><code>weight -2    </code>

<code>vrrp_instance vi_1 {   </code>

<code>    </code><code>state master     </code>

<code>    </code><code>interface eth0    </code>

<code>    </code><code>virtual_router_id 51    </code>

<code>    </code><code>mcast_src_ip 192.168.0.24  </code>

<code>    </code><code>priority 100      </code>

<code>    </code><code>advert_int 1    </code>

<code>    </code><code>authentication {    </code>

<code>        </code><code>auth_type pass    </code>

<code>        </code><code>auth_pass 876543    </code>

<code>    </code><code>}    </code>

<code>    </code><code>virtual_ipaddress {    </code>

<code>        </code><code>192.168.0.26</code><code>/24</code> <code>dev eth0 label eth0:1    </code>

<code>    </code><code>track_interface {    </code>

<code>        </code><code>eth0    </code>

<code>    </code><code>track_script {    </code>

<code>        </code><code>chk_haproxy    </code>

2) 在app2節點二上配置檔案

<code>    </code><code>script </code><code>"killall -0 haproxy"</code>     

<code>    </code><code>interval 1     </code>

<code>    </code><code>weight -2  </code>

<code>    </code><code>mcast_src_ip 192.168.0.25    </code>

<code>    </code><code>priority 99  </code>

<code>        </code><code>192.168.0.26</code><code>/24</code>  <code>dev eth0 label eth0:1    </code>

1) 啟動服務并加為開機啟動:

<code>service keepalived start    </code>

<code>chkconfig keepalived on</code>

2) 測試并觀察vip漂移情況

(1) vip位址切換觀察

說明:兩種方式切換vip, 一個是關閉haproxy代理服務,一個是關閉相關節點的keepalived服務。

<code>[root@app1 /]</code><code># service keepalived start    </code>

<code>starting keepalived: [ ok ]</code>

<code>[root@app1 keepalived]</code><code># ip a   </code>

<code>1: lo: &lt;loopback,up,lower_up&gt; mtu 16436 qdisc noqueue state unknown     </code>

<code>    </code><code>link</code><code>/loopback</code> <code>00:00:00:00:00:00 brd 00:00:00:00:00:00    </code>

<code>    </code><code>inet 127.0.0.1</code><code>/8</code> <code>scope host lo    </code>

<code>    </code><code>inet6 ::1</code><code>/128</code> <code>scope host     </code>

<code>       </code><code>valid_lft forever preferred_lft forever    </code>

<code>2: eth0: &lt;broadcast,multicast,up,lower_up&gt; mtu 1500 qdisc pfifo_fast state up qlen 1000    </code>

<code>    </code><code>link</code><code>/ether</code> <code>00:0c:29:4c:39:43 brd ff:ff:ff:ff:ff:ff    </code>

<code>    </code><code>inet 192.168.0.24</code><code>/24</code> <code>brd 192.168.0.255 scope global eth0    </code>

<code>    </code><code>inet 192.168.0.26</code><code>/24</code> <code>scope global secondary eth0:1    </code>

<code>    </code><code>inet6 fe80::20c:29ff:fe4c:3943</code><code>/64</code> <code>scope link     </code>

<code>[root@app1 keepalived]</code><code>#</code>

<code>[root@app2 keepalived]</code><code># ip a    </code>

<code>    </code><code>link</code><code>/ether</code> <code>00:0c:29:cf:05:99 brd ff:ff:ff:ff:ff:ff    </code>

<code>    </code><code>inet 192.168.0.25</code><code>/24</code> <code>brd 192.168.0.255 scope global eth0    </code>

<code>    </code><code>inet6 fe80::20c:29ff:fecf:599</code><code>/64</code> <code>scope link     </code>

<code>[root@app2 keepalived]</code><code>#</code>

<code>注:可以關閉keepalived服務,以及關閉haproxy服務,通過</code><code>tail</code> <code>-f </code><code>/var/log/messages</code><code>觀察vip移動情況。</code>

<code>jan 11 12:54:19 app2 keepalived_vrrp[26911]: vrrp_instance(vi_1) received higher prio advert   </code>

<code>jan 11 12:54:19 app2 keepalived_vrrp[26911]: vrrp_instance(vi_1) entering backup state    </code>

<code>jan 11 12:54:19 app2 keepalived_vrrp[26911]: vrrp_instance(vi_1) removing protocol vips.    </code>

<code>jan 11 12:54:19 app2 keepalived_healthcheckers[26910]: netlink reflector reports ip 192.168.0.26 removed</code>

app1, app2配置操作

# vi /etc/sysctl.conf    

net.ipv4.ip_nonlocal_bind = 1    

# sysctl -p

# rpm -ivh haproxy-1.4.24-2.el6.x86_64.rpm

1)app1上建立配置檔案

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

<code># vi /usr/local/haproxy/conf/haproxy.cfg</code>

<code>global   </code>

<code>      </code><code>log  127.0.0.1   local0     </code>

<code>      </code><code>maxconn     4000     </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>user        haproxy    </code>

<code>      </code><code>group       haproxy    </code>

<code>      </code><code>daemon    </code>

<code>      </code><code>nbproc 1  </code>

<code>      </code><code>stats socket </code><code>/var/lib/haproxy/stats</code>

<code>defaults   </code>

<code>      </code><code>log       global       </code>

<code>      </code><code>mode      http   </code>

<code>      </code><code>option    httplog   </code>

<code>      </code><code>option    dontlognull     </code>

<code>      </code><code>option    redispatch   </code>

<code>      </code><code>option    httpclose     </code>

<code>      </code><code>option    forwardfor     </code>

<code>      </code><code>retries   3              </code>

<code>      </code><code>maxconn   2000     </code>

<code>      </code><code>contimeout  5000   </code>

<code>      </code><code>clitimeout  50000     </code>

<code>      </code><code>srvtimeout  50000     </code>

<code>      </code><code>timeout check   1s  </code>

<code>      </code><code>timeout http-request    10s     </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>listen stats   </code>

<code>      </code><code>mode http    </code>

<code>      </code><code>bind 0.0.0.0:91  </code>

<code>      </code><code>stats </code><code>enable</code>     

<code>      </code><code>stats uri </code><code>/admin</code>     

<code>      </code><code>stats realm </code><code>"admin console"</code>     

<code>      </code><code>stats auth admin:123456     </code>

<code>      </code><code>stats hide-version     </code>

<code>      </code><code>stats refresh 10s     </code>

<code>      </code><code>stats admin </code><code>if</code> <code>true</code>

<code>frontend web_proxy    </code>

<code>      </code><code>bind *:80    </code>

<code>      </code><code>acl url_dynamic path_end -i .php    </code>

<code>      </code><code>use_backend phpserver </code><code>if</code> <code>url_dynamic     </code>

<code>      </code><code>default_backend webservers</code>

<code>backend webservers   </code>

<code>      </code><code>balance roundrobin    </code>

<code>      </code><code>option httpchk get </code><code>/test</code><code>.html http</code><code>/1</code><code>.0\r\nhost:192.168.0.26     </code>

<code>      </code><code>server node01 192.168.0.24:8080 weight 3 check inter 2000 rise 2 fall 1     </code>

<code>      </code><code>server node02 192.168.0.25:8080 weight 3 check inter 2000 rise 2 fall 1</code>

<code>backend phpserver   </code>

<code>      </code><code>option httpchk get </code><code>/test</code><code>.php     </code>

<code>      </code><code>server node01 192.168.0.24:8080 weight 3 check inter 2000 rise 2 fall 1</code>

2)app2上建立配置檔案

<code>      </code><code>maxconn 4000     </code>

<code>      </code><code>option httpchk get </code><code>/test</code><code>.html     </code>

說明:兩節點互為主備模式,均優化将本機的節點應用做為主節點,也可以為負載均衡模式, 主例也配置了一個動靜分離的模式。

Haproxy+Keepalived叢集執行個體配置

haproxy日志配置,否則預設是不記haproxy日志的,注意與rhel/centos5.x版本的差別。

<code># vi /etc/rsyslog.conf</code>

<code>$modload imudp   </code>

<code>$udpserverrun 514    </code>

<code>$udpserveraddress 127.0.0.1    </code>

<code>local0.* </code><code>/var/log/haproxy</code><code>.log     </code>

<code>*.info;mail.none;authpriv.none;</code><code>cron</code><code>.none;local0.none </code><code>/var/log/messages</code>

<code>說明: 第五行是去掉在</code><code>/var/log/message</code><code>再記錄haproxy.log日志的功能的。  </code>

<code>直接手動執行   </code>

<code>service rsyslog restart</code>

注:redhat/centos6.x 預設haproxy服務運作采用haproxy使用者,rpm包安裝haproxy,系統已自動配置日錄檔案輪詢功能。

1,是否有多vip位址,如果有的話,需要配置多個vrrp_instance執行個體,雙機互備。   

2,監控腳本,用于監控nginx,或haproxy代理伺服器的存活狀态,用于切換vip位址。    

3,兩種方式切換vip,一個是關閉代理服務,一個是關閉相關節點的keepalived伺服器。

繼續閱讀