1. 程式人生 > >手把手教程: CentOS 6.5 LVS + KeepAlived 搭建 負載均衡 高可用 集群

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

ipvs 管理 bar 10.10 方正 希望 滿足 open chm

為了實現服務的高可用和可擴展,在網上找了幾天的資料,現在終於配置完畢,現將心得公布處理,希望對和我一樣剛入門的菜鳥能有一些幫助。技術分享

一、理論知識(原理)

我們不僅要知其然,而且要知其所以然,所以先給大家準備一些理論知識課,這樣對以後的應用將會事半功倍。

1、什麽是LVS?

請閱讀作者章文嵩博士自己的研究報告,共計4部分,看完後對集群和LVS就有了初步的了解,不懂時可以翻翻。

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

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

LVS集群中的IP負載均衡技術

http://www.linuxvirtualserver.org/zh/lvs3.html

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

2、什麽是KeepAlived?

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

3、什麽是CentOS?

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

4、小結

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

二、服務器的安裝

我們會用到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

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

1、安裝虛擬機VMvare

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

2、安裝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;

3、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

執行完最後一條時,終端應該顯示為下圖這樣,如果不是請不要繼續,自己返回來看下有沒有哪裏執行有誤;

技術分享

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

繼續執行

[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. [email protected]
  5. }
  6. notification_email_from [email protected]
  7. smtp_server 127.0.0.1
  8. smtp_connect_timeout 30
  9. router_id LVS_MASTER
  10. }
  11. vrrp_instance VI_1 {
  12. state MASTER
  13. interface eth1
  14. virtual_router_id 60
  15. priority 100
  16. advert_int 1
  17. authentication {
  18. auth_type PASS
  19. auth_pass 1111
  20. }
  21. virtual_ipaddress {
  22. 192.168.10.100
  23. }
  24. }
  25. virtual_server 192.168.10.100 8080 {
  26. delay_loop 6
  27. lb_algo rr
  28. lb_kind DR
  29. nat_mask 255.255.255.0
  30. persistence_timeout 50
  31. protocol TCP
  32. real_server 192.168.10.142 8080 {
  33. weight 1
  34. TCP_CHECK {
  35. connect_timeout 3
  36. nb_get_retry 3
  37. delay_before_retry 3
  38. }
  39. }
  40. real_server 192.168.10.143 8080 {
  41. weight 1
  42. TCP_CHECK {
  43. connect_timeout 3
  44. nb_get_retry 3
  45. delay_before_retry 3
  46. }
  47. }
  48. }



以上就完成了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服務器。

4、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,至此已經能實現負載均衡了,接下來我們通過克隆實現多個主機的試驗。

5、服務器克隆

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. [email protected]
  5. }
  6. notification_email_from [email protected]
  7. smtp_server 127.0.0.1
  8. smtp_connect_timeout 30
  9. router_id LVS_BACKUP
  10. }
  11. vrrp_instance VI_1 {
  12. state BACKUP
  13. interface eth2
  14. virtual_router_id 60
  15. priority 90
  16. advert_int 1
  17. authentication {
  18. auth_type PASS
  19. auth_pass 1111
  20. }
  21. virtual_ipaddress {
  22. 192.168.10.100
  23. }
  24. }
  25. virtual_server 192.168.10.100 8080 {
  26. delay_loop 6
  27. lb_algo rr
  28. lb_kind DR
  29. nat_mask 255.255.255.0
  30. persistence_timeout 50
  31. protocol TCP
  32. real_server 192.168.10.142 8080 {
  33. weight 1
  34. TCP_CHECK {
  35. connect_timeout 3
  36. nb_get_retry 3
  37. delay_before_retry 3
  38. }
  39. }
  40. real_server 192.168.10.143 8080 {
  41. weight 1
  42. TCP_CHECK {
  43. connect_timeout 3
  44. nb_get_retry 3
  45. delay_before_retry 3
  46. }
  47. }
  48. }


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

啟動realserver.sh腳本。

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

三、負載和可用性測試

開啟每個服務器的相關服務,關閉防火墻,我們開始進行測試。

1、測試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。測試正常。

四、總結

經過不斷的測試,終於完成了這篇稿子,望大家能夠指正。還有一點就是很多時候都是配置文件中的一些小毛病造成的,比如:

1、keepAlived中的通知郵箱好像必須要寫,否則不正確;

2、keepAlived中的網卡設備要註意,按照服務器的實際情況填寫;

3、使用時,必要的端口要打開,或者關掉防火墻。否則有事不提供服務;

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

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

好了,大家如果有什麽建議或者問題,歡迎留言。

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