天天看點

LVS+keepalived高可用

LVS+Keepalived負載均衡

LVS簡介及工作原理

LVS 簡單工作原理:使用者請求LVS VIP,LVS根據轉發方式和算法,将請求轉發給後端伺服器,後端伺服器接受到請求,傳回給使用者。對于使用者來說,看不到WEB後端具體的應用。

LVS轉發方式有三種,分别是NAT、DR、TUN模式,常用算法:RR、LC、WRR、WLC模式等(RR為輪詢模式,LC為最少連接配接模式)

LVS NAT原理:使用者請求LVS到達director,director将請求的封包的目标位址改成後端的realserver位址,同時将封包的目标端口也改成後端標明的realserver相應端口,最後将封包發送到realserver,realserver将資料返給director,director再把資料發送給使用者。(兩次請求都經過director,是以通路大的話,director會成為瓶頸)

LVS DR原理:使用者請求LVS到達director,director将請求的封包的目标MAC位址改成後端的realserver MAC位址,目标IP為VIP(不變),源IP為使用者IP位址(保持不變),然後Director将封包發送到realserver,realserver檢測到目标為自己本地IP,如果在同一個網段,然後将請求直接返給使用者。如果使用者跟realserver不在一個網段,則通過網關傳回使用者。(此種轉發效率最高)

LVS TUN原理:跟LVS DR類似,也是改變封裝MAC位址,多了一層隧道加密。實施環境複雜,比LVS DR模式效率略低。

LVS環境安裝配置

下載下傳LVS所需軟體ipvsadm-1.2.4.tar.gz軟體,編譯安裝:

<code>wget -c http:</code><code>//www</code><code>.linuxvirtualserver.org</code><code>/software/kernel-2</code><code>.6</code><code>/ipvsadm-1</code><code>.24.</code><code>tar</code><code>.gz</code>

<code>ln</code> <code>-s </code><code>/usr/src/kernels/2</code><code>.6.* </code><code>/usr/src/linux</code>  <code>//IPVS</code><code>子產品編譯進核心裡,需要做軟連接配接</code>

<code>tar</code> <code>xzvf ipvsadm-1.24.</code><code>tar</code><code>.gz &amp;&amp;cdipvsadm-1.24 &amp;&amp; </code><code>make</code> <code>&amp;&amp;</code><code>make</code> <code>install</code>

<code>檢視LVS轉發清單指令為:ipvsadm–Ln</code>

<code>清空lvs轉發            ipvsadm -C</code>

Keepalived安裝配置

<code>wget    </code>

<code>tar</code> <code>-xzvf  keepalived-1.2.12.</code><code>tar</code><code>.gz;</code><code>cd</code>  <code>keepalived-1.2.12;</code>

<code>.</code><code>/configure</code> <code>&amp;&amp;</code><code>make</code> <code>&amp;&amp; </code><code>make</code> <code>install</code>

安裝完畢,配置keepalived服務為系統服務。

<code>DIR=</code><code>/usr/local/</code> 

<code>cp</code> <code>$DIR</code><code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/keepalived</code>

<code>/etc/rc</code><code>.d</code><code>/init</code><code>.d/ &amp;&amp; </code><code>cp</code> <code>$DIR</code><code>/etc/sysconfig/keepalived</code> <code>/etc/sysconfig/</code>

<code>&amp;&amp; </code><code>mkdir</code> <code>-p </code><code>/etc/keepalived</code> <code>&amp;&amp; </code><code>cp</code> <code>$DIR</code><code>/sbin/keepalived</code>

<code>/usr/sbin/</code>

在MASTER上即192.168.77.188上的/etc/keepalived/目錄建立keepalived.conf配置檔案,并寫入如下内容:

<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># VIP1</code>

<code>vrrp_instance VI_1 {</code>

<code>    </code><code>state MASTER</code>

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

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

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

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

<code>    </code><code>advert_int 5</code>

<code>    </code><code>nopreempt</code>

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

<code>        </code><code>auth_type PASS</code>

<code>        </code><code>auth_pass 1111</code>

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

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

<code>        </code><code>192.168.77.223</code>

<code>virtual_server 192.168.77.223 80 {</code>

<code>    </code><code>delay_loop 6</code>

<code>    </code><code>lb_algo wrr</code>

<code>    </code><code>lb_kind DR</code>

<code>    </code><code>persistence_timeout 60</code>

<code>    </code><code>protocol TCP</code>

<code> </code><code>#REAL_SERVER_1</code>

<code>    </code><code>real_server 192.168.77.133 80 {</code>

<code>        </code><code>weight 100</code>

<code>        </code><code>TCP_CHECK {</code>

<code>        </code><code>connect_timeout 10</code>

<code>        </code><code>nb_get_retry 3</code>

<code>        </code><code>delay_before_retry 3</code>

<code>        </code><code>connect_port 80</code>

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

<code>#REAL_SERVER_2</code>

<code>    </code><code>real_server 192.168.77.166 80 {</code>

在LVS BACKUP即192.168.77.199伺服器/etc/keepalived/目錄建立keepalived.conf配置檔案如下配置,需要注意的是用戶端的配置要修改優先級及狀态:

<code>    </code><code>state BACKUP</code>

<code>    </code><code>priority 90</code>

配置完成後分别重新開機keepalived服務并tail -f /var/log/message 檢視日志,若果報錯請執行以下加載子產品:

<code>modprobe ip_vs</code>

<code>modprobe ip_vs_wrr</code>

<code>modprobe ip_vs_rr</code>

之後重新開機在檢視日志是否正常加載vip

LVS 主備配置完畢,接下來需要在realserver配置LVS VIP,為什麼要在realserver綁定VIP呢?

用戶端通路director的VIP,director接收請求,将通過相應的算法将請求轉發給相應的realserver。在轉發的過程中,會修改請求包的目的mac位址,目的ip位址不變。

Realserver接收請求,并直接響應用戶端。這時便出現一個問題,director此時與realserver位于同一個網絡中,當director直接将請求轉發給realserver時,realserver檢測到該請求包的目的ip是vip而并非自己,便會丢棄,而不會響應。為了解決這個問題,是以需要在所有Realserver上都配上VIP。

為什麼一定要配置在lo接口上呢?

在realserver上的lo口配置VIP,這樣限制了VIP不會在實體交換機上産生MAC位址表,進而避免IP沖突。

用戶端啟動Realserver.sh腳本内容:

  分别在後端機器192.168.77.133和192.168.77.166的data目錄下建立個腳本并分别啟動,腳本内容如下:

<code>#!/bin/sh</code>

<code>#LVS Client Server</code>

<code>VIP=192.168.77.223</code>

<code>case</code>  <code>$1  </code><code>in</code>

<code>start)</code>

<code>    </code><code>ifconfig</code> <code>lo:0 $VIP netmask 255.255.255.255 broadcast $VIP</code>

<code>    </code><code>/sbin/route</code> <code>add -host $VIP dev lo:0</code>

<code>    </code><code>echo</code> <code>"1"</code> <code>&gt;</code><code>/proc/sys/net/ipv4/conf/lo/arp_ignore</code>

<code>    </code><code>echo</code> <code>"2"</code> <code>&gt;</code><code>/proc/sys/net/ipv4/conf/lo/arp_announce</code>

<code>    </code><code>echo</code> <code>"1"</code> <code>&gt;</code><code>/proc/sys/net/ipv4/conf/all/arp_ignore</code>

<code>    </code><code>echo</code> <code>"2"</code> <code>&gt;</code><code>/proc/sys/net/ipv4/conf/all/arp_announce</code>

<code>    </code><code>sysctl -p &gt;</code><code>/dev/null</code> <code>2&gt;&amp;1</code>

<code>    </code><code>echo</code> <code>"RealServer Start OK"</code>

<code>    </code><code>exit</code> <code>0</code>

<code>;;</code>

<code>stop)</code>

<code>    </code><code>ifconfig</code> <code>lo:0 down</code>

<code>    </code><code>route del $VIP &gt;</code><code>/dev/null</code> <code>2&gt;&amp;1</code>

<code>    </code><code>echo</code> <code>"0"</code> <code>&gt;</code><code>/proc/sys/net/ipv4/conf/lo/arp_ignore</code>

<code>    </code><code>echo</code> <code>"0"</code> <code>&gt;</code><code>/proc/sys/net/ipv4/conf/lo/arp_announce</code>

<code>    </code><code>echo</code> <code>"0"</code> <code>&gt;</code><code>/proc/sys/net/ipv4/conf/all/arp_ignore</code>

<code>    </code><code>echo</code> <code>"0"</code> <code>&gt;</code><code>/proc/sys/net/ipv4/conf/all/arp_announce</code>

<code>    </code><code>echo</code> <code>"RealServer Stoped OK"</code>

<code>    </code><code>exit</code> <code>1</code>

<code>*)</code>

<code>    </code><code>echo</code> <code>"Usage: $0 {start|stop}"</code>

<code>esac</code>

啟動後用ifconfig可以檢視到lo上的vip綁定成功。就可以用vip直接通路網站了。

後端LAMP在之前blog中寫過,,這裡省略,以上是全部lvs和keepalived配置安裝

本文轉自 Anonymous123 51CTO部落格,原文連結:http://blog.51cto.com/woshitieren/1686686

繼續閱讀