手把手教程: CentOS 6.5 LVS + KeepAlived 搭建 負載均衡 高可用 集羣

 

 

爲了實現服務的高可用和可擴展,在網上找了幾天的資料,如今終於配置完畢,現將心得公佈處理,但願對和我同樣剛入門的菜鳥能有一些幫助。html

1、理論知識(原理)

咱們不只要知其然,並且要知其因此然,因此先給你們準備一些理論知識課,這樣對之後的應用將會事半功倍。linux

一、什麼是LVS?

請閱讀做者章文嵩博士本身的研究報告,共計4部分,看完後對集羣和LVS就有了初步的瞭解,不懂時能夠翻翻。web

LVS項目介紹http://www.linuxvirtualserver.org/zh/lvs1.htmlvim

LVS集羣的體系結構http://www.linuxvirtualserver.org/zh/lvs2.htmlcentos

LVS集羣中的IP負載均衡技術http://www.linuxvirtualserver.org/zh/lvs3.html瀏覽器

LVS集羣的負載調度 http://www.linuxvirtualserver.org/zh/lvs4.htmltomcat

二、什麼是KeepAlived?

Keepalived原理與實戰精講 http://zhumeng8337797.blog.163.com/blog/static/100768914201191762253640/bash

三、什麼是CentOS?

百度百科給出的 http://baike.baidu.com/link?url=X3SzN3bJWjW_PkWC6GB2MTs5KhVmxBAxnCRjs9W7-IARDiHloZ_oRWj17BEz0kY3服務器

四、小結

相信讀了以上的理論知識後,已經對集羣的實現原理有了大概的瞭解,那接下來咱們就開始動手吧。網絡

2、服務器的安裝

咱們會用到4個服務器,橫向分2層:

第1層是LVS服務器(1個主,1個從;從能夠多個)用來轉發請求,須要安裝ipvsadm和keepAlived;第2層是提供具體服務的服務器(表中用了2個;固然也能夠是多個,現實的應用會上百臺。),安裝的是具體的服務,這裏咱們安裝的是TOMCAT。

主機環境以下:

192.168.10.100  LVS_VIP(VIP:Virtual IP)
192.168.10.140  LVS_Master    
192.168.10.141  LVS_Backup
192.168.10.142  WEB1_RealServer
192.168.10.143  WEB2_RealServer

克隆:咱們先安裝配置好一層的一個服務器,其餘服務器使用克隆方式。

一、安裝虛擬機VMvare

版本是10.0.1,具體的下載和安裝教程請瀏覽百度經驗:http://jingyan.baidu.com/article/c843ea0b754a7977931e4aa7.html

二、安裝CentOS

1)版本是CentOS 6.5官方正式版64位,下載地址:http://www.centoscn.com/CentosSoft/iso/2013/1205/2196.html

2)在虛擬機中安裝CentOS的教程請參考:http://www.jb51.net/os/78318.html,說的已經很清楚了;注意一個分區環節:

教程中的第13步,由於沒有分過區,因此不知道怎麼增長分區了,後來才弄明白,如圖:

點edit進去後,而後在裏面點擊ADD增長/home分區便可;

3)安裝完畢後,改虛擬機名爲LVS_Master,而後再克隆2個虛擬機服務器,一個虛擬機作原始備份,一個作WEB1_RealServer。

如何克隆?請參考:http://blog.sina.com.cn/s/blog_9ba89b9901019bn9.html;

三、LVS層安裝LVS和KeepAlived

打開LVS_Master服務器;
先安裝lvs_master的服務,lvs_backup使用克隆虛擬機的方式,而後在配置文件修改三個參數便可,下面會講到。

只要按照以下步驟一步一步來,我敢確定一次成功!

1)開啓剛剛建好的虛擬機,此時應該已經設置好系統的登陸帳號和密碼了。好的,登陸系統,打開終端:

 

 

[html]  view plain  copy
  1. ifconfig  

在終端中輸入ifconfig,而後回車,會看到本服務器的IP地址信息,如圖:(若是想了解其餘的CentOS命令,請參考http://www.jb51.net/os/RedHat/60044.html)

 

 

2)因爲咱們的操做所有是用命令行執行的,在虛擬機與本機中切換確實不太方便,給你們準備了一個簡單好用的鏈接虛擬機中CentOS系統的工具putty,下載地址:

http://download.csdn.net/detail/tengyuantuohai/1276306

打開下載的putty.exe,如圖填寫好服務器的IP地址後點擊OPEN,選擇「是」,打開putty的應用頁面:

 

 

[html]  view plain  copy
  1. root  

在putty的終端輸入root回車(root爲超級管理員帳號),輸入密碼(注意輸入密碼時頁面是不會顯示的),回車登陸

 

 

3)安裝IPVSADM

知識點:IPVSADM理解爲IPVS管理工具;LVS(Linux Virtual Server)的核心爲IPVS(IP Virtual Server),從Linux內核版本2.6起,IPVS模塊已經編譯進了Linux內核。

使用yum命令進行安裝,系統會選擇最適合內核版本的ipvsadm

[html]  view plain  copy
  1. yum -y install ipvsadm  

4)防火牆

爲了測試方便,咱們直接關閉防火牆,在實際使用中開啓須要的端口便可(具體配置可參考:http://www.cnblogs.com/rockee/archive/2012/05/17/2506671.html)

[html]  view plain  copy
  1. service iptables stop  


5)KeepAlived 的安裝

知識點:KeepAlived是一個路由軟件,它主要的目的是讓咱們經過簡單的配置,實現高可用負載均衡,固然負載均衡依賴於Linux虛擬服務器(IPVS)的內核模塊,其高可用性使用VRRP協議來實現,KeepAlived不只會檢測負載均衡服務器池中每臺機器的健康情況並通知IPVS將非健康的機器從池中移除掉;同時它還能對負載均衡調度器自己實現健康狀態檢查,當主負載均衡調度器出現問題時,備用負載均衡調度器頂替主進行工做。

逐條執行以下命令,執行的緣由暫不解釋,實際就是須要這些組件,安裝便可。

[html]  view plain  copy
  1. cd /usr/src  
  2. yum -y install openssl-devel  
  3. wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz  
  4. wget http://mirror.centos.org/centos/6/os/x86_64/Packages/popt-static-1.13-7.el6.x86_64.rpm  
  5. yum -y install popt-static-1.13-7.el6.x86_64.rpm  
  6. yum -y install kernel-devel make gcc openssl-devel libnl* popt*  
  7. ln -s /usr/src/kernels/2.6.32-220.13.1.el6.x86_64/ /usr/src/linux  
  8. tar zxvf keepalived-1.2.7.tar.gz  
  9. cd keepalived-1.2.7  
  10. ./configure --with-kernel-dir=/usr/src/kernels/2.6.32-358.2.1.el6.x86_64/  

 

[html]  view plain  copy
  1.   

執行完最後一條時,終端應該顯示爲下圖這樣,若是不是請不要繼續,本身返回來看下有沒有哪裏執行有誤;

若是是上圖這樣,恭喜你已經成功了一大半,剩下的就簡單了!

繼續執行

[html]  view plain  copy
  1. make && make install  
  2. cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/  
  3. cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/  
  4. mkdir /etc/keepalived  
  5. cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/  
  6. cp /usr/local/sbin/keepalived /usr/sbin/  

OK,KeepAlived安裝完畢,而後進行配置。

6)KeepAlivde的配置

The First:打開IP Forward 功能(LVS現有三種負載均衡規則都須要打開此功能,若是不打開此功能,下面的配置配得再好都無濟於事。)

[html]  view plain  copy
  1. yum -y install vim  
  2. vim /etc/sysctl.conf  

打開後修改裏面「net.ipv4.ip_forward = 1」,結果以下圖:

(修改經常使用命令:i鍵表示要插入修改,修改好後摁ESC,而後輸入":wq",保存退出,其餘命令參考:http://www.cnblogs.com/zhanglong0426/archive/2010/10/07/1845268.html)

 

修改好後保存退出,執行以下命令使設置當即生效

[html]  view plain  copy
  1. sysctl -p  


第二步:KeepAlivde的配置

配置文件在這個位置: /etc/keepalived/keepalived.conf

啓動KeepAlived時,它默認會去/etc/keepalived下面找它的配置文件,因此上面命令中咱們已經將這個配置文件複製過來了。如今進行修改:

[html]  view plain  copy
  1. vim  /etc/keepalived/keepalived.conf  

具體的參數詳情請參考:http://zhumeng8337797.blog.163.com/blog/static/100768914201191762253640/

下面是我配置好的文件內容

[html]  view plain  copy
  1. ! Configuration File for keepalived  
  2. global_defs {  
  3.     notification_email {   
  4.         test@sina.com   
  5.     }   
  6.     notification_email_from admin@test.com  
  7.     smtp_server 127.0.0.1  
  8.     smtp_connect_timeout 30  
  9.     router_id LVS_MASTER  
  10. }  
  11.   
  12. vrrp_instance VI_1 {  
  13.     state MASTER  
  14.     interface eth1  
  15.     virtual_router_id 60  
  16.     priority 100  
  17.     advert_int 1  
  18.     authentication {  
  19.         auth_type PASS  
  20.         auth_pass 1111  
  21.     }  
  22.     virtual_ipaddress {  
  23.         192.168.10.100  
  24.     }  
  25. }  
  26.   
  27. virtual_server 192.168.10.100 8080 {  
  28.     delay_loop 6  
  29.     lb_algo rr   
  30.     lb_kind DR  
  31.     nat_mask 255.255.255.0  
  32.     persistence_timeout 50  
  33.     protocol TCP  
  34.   
  35.     real_server 192.168.10.142 8080 {  
  36.         weight 1  
  37.         TCP_CHECK {  
  38.             connect_timeout 3  
  39.             nb_get_retry 3  
  40.             delay_before_retry 3  
  41.         }  
  42.     }  
  43.   
  44.     real_server 192.168.10.143 8080 {  
  45.         weight 1  
  46.         TCP_CHECK {  
  47.             connect_timeout 3  
  48.             nb_get_retry 3  
  49.             delay_before_retry 3  
  50.         }  
  51.     }  
  52. }  



以上就完成了keepAlived的配置,下面進行啓動

[html]  view plain  copy
  1. chkconfig keepalived on  
  2. service keepalived start  

查看進程

[html]  view plain  copy
  1. ps aux | grep keepalived  


結果如圖

Keepalived正常運行時,共啓動3個進程,其中一個進程是父進程,負責監控其子進程;一個是vrrp子進程;另一個是checkers子進程。

若是此時只看到2個進程,請從安裝keepalived的步驟從新執行。

 

查看下虛擬IP是否已經加上(重要)

[html]  view plain  copy
  1. ip a  


如圖:

說明虛擬IP已經自動配置上了。

 

還有3個命令在先列示下,並不用執行

顯示集羣中服務器ip信息:ipvsadm -ln

查看日誌:tail -f /var/log/messages

查看請求轉發狀況:ipvsadm -lcn | grep 虛擬IP

7)至此,LVS_MASTER服務器已經配置好並啓動了,接下來咱們配置web服務器。

四、WEB服務器WEB1_RealServer的配置

1)打開虛擬機WEB1_RealServer;

2)配置虛擬IP啓動腳本

[html]  view plain  copy
  1. yum -y install vim  
  2. vim /etc/init.d/realserver.sh  


在文件中輸入以下腳本:

[html]  view plain  copy
  1. #!/bin/bash  
  2. SNS_VIP=192.168.10.100  
  3. . /etc/rc.d/init.d/functions  
  4. case "$1" in  
  5. start)  
  6.  ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP  
  7.  /sbin/route add -host $SNS_VIP dev lo:0  
  8.  echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore  
  9.  echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce  
  10.  echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore  
  11.  echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce  
  12.  sysctl -p >/dev/null 2>&1  
  13.  echo "RealServer Start OK"  
  14.  ;;  
  15. stop)  
  16.  ifconfig lo:0 down  
  17.  route del $SNS_VIP >/dev/null 2>&1  
  18.  echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore  
  19.  echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce  
  20.  echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore  
  21.  echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce  
  22.  echo "RealServer Stoped"  
  23.  ;;  
  24.  *)  
  25.  echo "Usage: $0 {start|stop}"  
  26.  exit 1  
  27. esac  
  28. exit 0  


3)安裝配置TOMCAT

我測試用的是TOMCAT6

[html]  view plain  copy
  1. yum -y install tomcat6 tomcat6-webapps tomcat6-admin-webapps  
  2. chkconfig tomcat6 on  
  3. service tomcat6 start  

啓動後如圖:

 

關閉防火牆:

[html]  view plain  copy
  1. service iptables stop  

 

打開瀏覽器:http://192.168.10.142:8080

會看到TOMCAT的熟悉頁面了。

 

爲了測試負載均衡,咱們將這個頁面改下,以更好的標識這個網頁是本服務器的

Tomcat6安裝目錄位於/usr/share/tomcat6,因此咱們要編輯tomcat下的webapps/ROOT/index.html這個文件。

[html]  view plain  copy
  1. cd /usr/share/tomcat6/webapps/ROOT/  
  2. cat /dev/null > index.html  
  3. vim index.html  

將以下文本寫入index.html,而後打開瀏覽器:http://192.168.10.142:8080,已經改變:

[html]  view plain  copy
  1. web1 192.168.10.142  

 

 

4)啓動虛擬IP的腳本

[html]  view plain  copy
  1. sh /etc/init.d/realserver.sh start  
  2. ifconfig  

運行後會看到網絡有了一個虛擬IP,如圖:

 

5)去LVS_MASTER服務器的終端查看下ipvsadm,查看已經鏈接上了WEB1服務器,運行命令

[html]  view plain  copy
  1. ipvsadm -ln  

結果如圖:

 

已經能夠看到有服務器加入進來了。

此時咱們訪問網頁http://192.168.10.100,出現界面顯示web1 192.168.10.142;或者使用命令行測試轉發狀況,以下:

[html]  view plain  copy
  1. ipvsadm -lcn | grep 192.168.10.100  

運行結果:



OK,至此已經能實現負載均衡了,接下來咱們經過克隆實現多個主機的試驗。

五、服務器克隆

1)從LVS_MASTER克隆一個LVS_BACKUP服務器,而後修改其中的參數,MASTER與BACKUP配置僅三處不一樣:global_defs中的router_id、vrrp_instance中的state、priority

(注意keepAlived的配置文件中有一個網卡設備,虛擬機的網卡設備多是不同的,有的是eth0,有的是eth1,因此也是要改動的,不然從服務器的服務器頗有可能服務不正常)

配置好的以下文:

[html]  view plain  copy
  1. ! Configuration File for keepalived  
  2. global_defs {  
  3.     notification_email {   
  4.         test@sina.com   
  5.     }   
  6.     notification_email_from admin@test.com  
  7.     smtp_server 127.0.0.1  
  8.     smtp_connect_timeout 30  
  9.     router_id LVS_BACKUP  
  10. }  
  11.   
  12. vrrp_instance VI_1 {  
  13.     state BACKUP  
  14.     interface eth2  
  15.     virtual_router_id 60  
  16.     priority 90  
  17.     advert_int 1  
  18.     authentication {  
  19.         auth_type PASS  
  20.         auth_pass 1111  
  21.     }  
  22.     virtual_ipaddress {  
  23.         192.168.10.100  
  24.     }  
  25. }  
  26.   
  27. virtual_server 192.168.10.100 8080 {  
  28.     delay_loop 6  
  29.     lb_algo rr   
  30.     lb_kind DR  
  31.     nat_mask 255.255.255.0  
  32.     persistence_timeout 50  
  33.     protocol TCP  
  34.   
  35.     real_server 192.168.10.142 8080 {  
  36.         weight 1  
  37.         TCP_CHECK {  
  38.             connect_timeout 3  
  39.             nb_get_retry 3  
  40.             delay_before_retry 3  
  41.         }  
  42.     }  
  43.   
  44.     real_server 192.168.10.143 8080 {  
  45.         weight 1  
  46.         TCP_CHECK {  
  47.             connect_timeout 3  
  48.             nb_get_retry 3  
  49.             delay_before_retry 3  
  50.         }  
  51.     }  
  52. }  


2)從WEB1_RealServer克隆一個WEB2_RealServer,將tomcat的index.html文件改成web2 192.168.10.143。(這裏的IP是我測試的,您的能夠自定義)

啓動realserver.sh腳本。

 

3)OK,至此咱們已經虛擬出2個LVS服務器,一對主從;2個WEB服務器,web1和web2。接下來咱們進行測試,看可否知足咱們的初始需求。

3、負載和可用性測試

開啓每一個服務器的相關服務,關閉防火牆,咱們開始進行測試。

一、測試LVS層

1)首先執行ip a命令,主服務器會存在一個虛擬IP,從服務器不會存在這個虛擬IP。如今瀏覽網頁顯示正常。虛擬IP如圖所示:

顯示集羣中服務器ip信息:ipvsadm -ln

查看日誌:tail -f /var/log/messages

查看請求轉發狀況:ipvsadm -lcn | grep 虛擬IP

 

LVS_MASTER中的IP信息

 

LVS_BACKUP服務器的IP信息

 

2)如今停掉LVS_MASTER的keepAlived服務,看LVS_BACKUP是否能夠自動加上虛擬IP地址,而且開始轉發請求。

(注意keepAlived的配置文件中有一個網卡設備,虛擬機的網卡設備多是不同的,有的是eth0,有的是eth1,因此也是要改動的,不然從服務器的服務器頗有可能服務不正常)

LVS_MASTER如圖:

 

LVS_BACKUP服務器截圖:

 

切換很快,訪問網頁:http://192.168.10.100:8080也能正常顯示。

3)、恢復主服務器的keepAlived服務後,主服務器馬上接替了從服務器的工做,就不作截圖了。和第1)個正常效果是同樣的。

4)、測試WEB服務器,看可否正常提供服務。先斷掉WEB1,看下效果。

ipvsadm中的服務器列表,已經去掉了WEB1服務器,訪問網頁也只能訪問到WEB2服務器了。

 

5)開啓WEB1,關掉WEB2。測試正常。

4、總結

通過不斷的測試,終於完成了這篇稿子,望你們可以指正。還有一點就是不少時候都是配置文件中的一些小毛病形成的,好比:

一、keepAlived中的通知郵箱好像必需要寫,不然不正確;

二、keepAlived中的網卡設備要注意,按照服務器的實際狀況填寫;

三、使用時,必要的端口要打開,或者關掉防火牆。不然有事不提供服務;

四、一些命令行的執行,少一些參數執行就可能會有一些問題。

五、LINUX系統的目錄結構也頭疼,要不斷的熟悉,不然也讓你故意弄混了。

 

好了,你們若是有什麼建議或者問題,歡迎留言。

相關文章
相關標籤/搜索