環境介紹

作業系統:centos6.5_x64 mini
負載均衡模式:dr(直接路由)
lvs與keepalived簡述:
lvs是linux virtual server的簡寫,意即linux虛拟伺服器,是一個虛拟的伺服器叢集系統。使用叢集技術和linux作業系統實作一個高性能、高可用的伺服器,很好的可伸縮性、可靠性和管理性。
lvs叢集采用ip負載均衡技術和基于内容請求分發技術。排程器具有很好的吞吐率,将請求均衡地轉移到不同的伺服器上執行,且排程器自動屏蔽掉伺服器的故障,進而将一組伺服器構成一個高性能的、高可用的虛拟伺服器。
keepalived采用vrrp(virtual router redundancy protocol,虛拟路由備援協定)熱備份協定,以軟體的方式實作linux伺服器的多機熱備功能。vrrp是針對路由器的一種備份解決方案-----由多台路由器組成一個熱備組。通過共用的虛拟ip位址對外提供服務;每個熱備組内同一時刻隻有一台主伺服器提供服務,其他伺服器處于備援狀态,若目前線上的伺服器失敗,其他伺服器會自動接替(優先級決定接替順序)虛拟ip位址,以繼續提供服務。
一、配置主從lvs伺服器
安裝依賴包:
1
<code>[root@localhost ~]</code><code># yum install-y gcc gcc-c++ makepcre pcre-devel kernel-devel openssl-devel libnl-devel popt-devel</code>
1、安裝ipvsadm
2
3
4
<code>wget http:</code><code>//www</code><code>.linuxvirtualserver.org</code><code>/software/kernel-2</code><code>.6</code><code>/ipvsadm-1</code><code>.26.</code><code>tar</code><code>.gz</code>
<code>tar</code> <code>zxvf ipvsadm-1.26.</code><code>tar</code><code>.gz</code>
<code>cd</code> <code>ipvsadm-1.26</code>
<code>make</code> <code>&& </code><code>make</code> <code>install</code>
2、安裝keepalived
5
<code>wget http:</code><code>//www</code><code>.keepalived.org</code><code>/software/keepalived-1</code><code>.2.7.</code><code>tar</code><code>.gz</code>
<code>tar</code> <code>zxvf keepalived-1.2.7.</code><code>tar</code><code>.gz</code>
<code>cd</code> <code>keepalived-1.2.7</code>
<code>.</code><code>/configure</code> <code>--prefix=</code><code>/usr/local/keepalived</code>
将keepalived配置成系統服務
<code>cp</code> <code>/usr/local/keepalived/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/keepalived</code> <code>/etc/init</code><code>.d/</code>
<code>cp</code> <code>/usr/local/keepalived/etc/sysconfig/keepalived</code> <code>/etc/sysconfig/</code>
<code>mkdir</code> <code>/etc/keepalived/</code>
<code>cp</code> <code>/usr/local/keepalived/etc/keepalived/keepalived</code><code>.conf </code><code>/etc/keepalived/</code>
<code>cp</code> <code>/usr/local/keepalived/sbin/keepalived</code> <code>/usr/sbin/</code>
3、修改主keepalived配置檔案(備隻修改router_id、state和priority)
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
<code>[root@localhost ~]</code><code># vi /etc/keepalived/keepalived.conf</code>
<code>! configuration file forkeepalived</code>
<code>global_defs {</code>
<code>notification_email {</code>
<code>test</code><code>@sina.com </code><code>#故障接受聯系人</code>
<code> </code><code>}</code>
<code>notification_email_from admin@</code><code>test</code><code>.com </code><code>#故障發送人</code>
<code>smtp_server 127.0.0.1 </code><code>#本機發送郵件</code>
<code>smtp_connect_timeout 30</code>
<code>router_id lvs_master </code><code>#backup上修改為lvs_backup</code>
<code>vrrp_instance vi_1 {</code>
<code>state master </code><code>#backup上修改為backup</code>
<code>interface eth0</code>
<code>virtual_router_id 51 </code><code>#虛拟路由辨別,主從相同</code>
<code>priority 100 </code><code>#backup上修改為90</code>
<code>advert_int 1</code>
<code>authentication {</code>
<code>auth_type pass</code>
<code>auth_pass 1111 </code><code>#主從認證密碼必須一緻</code>
<code>virtual_ipaddress { </code><code>#web虛拟ip(vtp)</code>
<code>172.0.0.10</code>
<code> </code><code>}</code>
<code>virtual_server 172.0.0.10 80 { </code><code>#定義虛拟ip和端口</code>
<code>delay_loop 6 </code><code>#檢查真實伺服器時間,機關秒</code>
<code>lb_algo rr </code><code>#設定負載排程算法,rr為輪訓</code>
<code>lb_kind dr </code><code>#設定lvs負載均衡dr模式</code>
<code>persistence_timeout 50 </code><code>#同一ip的連接配接60秒内被配置設定到同一台真實伺服器</code>
<code>protocol tcp </code><code>#使用tcp協定檢查realserver狀态</code>
<code>real_server 172.0.0.13 80 { </code><code>#第一個web伺服器</code>
<code>weight 3 </code><code>#節點權重值</code>
<code>tcp_check { </code><code>#健康檢查方式</code>
<code>connect_timeout 3 </code><code>#連接配接逾時</code>
<code>nb_get_retry 3 </code><code>#重試次數</code>
<code>delay_before_retry 3 </code><code>#重試間隔/s</code>
<code>}</code>
<code>real_server 172.0.0.14 80 { </code><code>#第二個web伺服器</code>
<code>weight 3</code>
<code>tcp_check {</code>
<code>connect_timeout 3</code>
<code>nb_get_retry 3</code>
<code>delay_before_retry 3</code>
<code> </code><code>}</code>
<code>[root@localhost ~]</code><code># service keepalived restart #啟動keepalived</code>
二、分别在兩台web伺服器編寫腳本并啟動
<code>[root@localhost ~]</code><code># vi /etc/init.d/real.sh</code>
<code>#description : start realserver</code>
<code>vip=172.0.0.10</code>
<code>. </code><code>/etc/init</code><code>.d</code><code>/functions</code>
<code>case</code> <code>"$1"</code> <code>in</code>
<code>start)</code>
<code>/sbin/ifconfig</code> <code>lo:0 $vip broadcast $vip netmask 255.255.255.255 up</code>
<code>echo</code> <code>"1"</code> <code>></code><code>/proc/sys/net/ipv4/conf/lo/arp_ignore</code>
<code>echo</code> <code>"2"</code> <code>></code><code>/proc/sys/net/ipv4/conf/lo/arp_announce</code>
<code>echo</code> <code>"1"</code> <code>></code><code>/proc/sys/net/ipv4/conf/all/arp_ignore</code>
<code>echo</code> <code>"2"</code> <code>></code><code>/proc/sys/net/ipv4/conf/all/arp_announce</code>
<code>echo</code> <code>"lvs realserver start ok"</code>
<code>;;</code>
<code>stop)</code>
<code>/sbin/ifconfig</code> <code>lo:0 down</code>
<code>echo</code> <code>"0"</code> <code>></code><code>/proc/sys/net/ipv4/conf/lo/arp_ignore</code>
<code>echo</code> <code>"0"</code> <code>></code><code>/proc/sys/net/ipv4/conf/lo/arp_announce</code>
<code>echo</code> <code>"0"</code> <code>></code><code>/proc/sys/net/ipv4/conf/all/arp_ignore</code>
<code>echo</code> <code>"0"</code> <code>></code><code>/proc/sys/net/ipv4/conf/all/arp_announce</code>
<code>echo</code> <code>"lvs realserver stoped ok"</code>
<code>*)</code>
<code>echo</code> <code>"usage: $0 {start|stop}"</code>
<code>exit</code> <code>1</code>
<code>esac</code>
<code>[root@localhost ~]</code><code># chmod +x /etc/init.d/real.sh</code>
<code>[root@localhost ~]</code><code># /etc/init.d/real.sh start</code>
<code>lvs realserver start ok</code>
<code>[root@localhost ~]</code><code># echo "/etc/init.d/real.sh start" >> /etc/rc.local</code>
<code>[root@localhost ~]</code><code># service httpd start</code>
<code>[root@localhost ~]</code><code># echo “192.168.0.30″ > /var/www/html/index.html</code>
<code>[root@localhost ~]</code><code># echo “192.168.0.40″ > /var/www/html/index.html</code>
<code>[root@localhost ~]</code><code># service iptables stop #關閉防火牆</code>
<code>[root@localhost ~]</code><code># setenforce 0 #臨時關閉selinux</code>
三、測試及常用指令
http://172.0.0.10 #通路一直重新整理會輪訓顯示172.0.0.13/14
模拟宕掉主lvs,伺服器照常工作,再宕掉web1,這時隻會顯示web2,這樣就實作ip負載均衡,高可用叢集。當主lvs恢複後,會切換成主動伺服器,如果keepalived監控子產品檢測web故障恢複後,恢複的主機又将此節點加入叢集系統中。
常用指令:
[root@localhost ~]# ipvsadm -ln #顯示叢集中伺服器ip資訊
[root@localhost ~]# ip addr #顯示vtp綁定在哪個伺服器上
[root@localhost ~]# tail -f /var/log/messges
(從日志中可知,主機出現故障後,備機立刻檢測到,此時備機變為master角色,并且接管了主機的虛拟ip資源,最後将虛拟ip綁定在etho裝置上)