手把手教程: CentOS 6.5 LVS + KeepAlived 搭建 負載均衡 高可用 集群
為了實現服務的高可用和可擴展,在網上找了幾天的資料,現在終於配置完畢,現將心得公布處理,希望對和我一樣剛入門的菜鳥能有一些幫助。
一、理論知識(原理)
我們不僅要知其然,而且要知其所以然,所以先給大家準備一些理論知識課,這樣對以後的應用將會事半功倍。
1、什麽是LVS?
請閱讀作者章文嵩博士自己的研究報告,共計4部分,看完後對集群和LVS就有了初步的了解,不懂時可以翻翻。
LVS項目介紹http://www.linuxvirtualserver.org/zh/lvs1.html
LVS集群的體系結構http://www.linuxvirtualserver.org/zh/lvs2.html
LVS集群中的IP負載均衡技術
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
- 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
- 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- yum -y install ipvsadm
4)防火墻
為了測試方便,我們直接關閉防火墻,在實際使用中開啟需要的端口即可(具體配置可參考:http://www.cnblogs.com/rockee/archive/2012/05/17/2506671.html)
[html] view plain copy- service iptables stop
5)KeepAlived 的安裝
知識點:KeepAlived是一個路由軟件,它主要的目的是讓我們通過簡單的配置,實現高可用負載均衡,當然負載均衡依賴於Linux虛擬服務器(IPVS)的內核模塊,其高可用性使用VRRP協議來實現,KeepAlived不僅會檢測負載均衡服務器池中每臺機器的健康狀況並通知IPVS將非健康的機器從池中移除掉;同時它還能對負載均衡調度器本身實現健康狀態檢查,當主負載均衡調度器出現問題時,備用負載均衡調度器頂替主進行工作。
逐條執行如下命令,執行的原因暫不解釋,實際就是需要這些組件,安裝即可。
[html] view plain copy- cd /usr/src
- yum -y install openssl-devel
- wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
- wget http://mirror.centos.org/centos/6/os/x86_64/Packages/popt-static-1.13-7.el6.x86_64.rpm
- yum -y install popt-static-1.13-7.el6.x86_64.rpm
- yum -y install kernel-devel make gcc openssl-devel libnl* popt*
- ln -s /usr/src/kernels/2.6.32-220.13.1.el6.x86_64/ /usr/src/linux
- tar zxvf keepalived-1.2.7.tar.gz
- cd keepalived-1.2.7
- ./configure --with-kernel-dir=/usr/src/kernels/2.6.32-358.2.1.el6.x86_64/
[html] view plain copy
執行完最後一條時,終端應該顯示為下圖這樣,如果不是請不要繼續,自己返回來看下有沒有哪裏執行有誤;
如果是上圖這樣,恭喜你已經成功了一大半,剩下的就簡單了!
繼續執行
[html] view plain copy- make && make install
- cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
- cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
- mkdir /etc/keepalived
- cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
- cp /usr/local/sbin/keepalived /usr/sbin/
OK,KeepAlived安裝完畢,然後進行配置。
6)KeepAlivde的配置
The First:打開IP Forward 功能(LVS現有三種負載均衡規則都需要打開此功能,如果不打開此功能,下面的配置配得再好都無濟於事。)
[html] view plain copy- yum -y install vim
- 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- sysctl -p
第二步:KeepAlivde的配置
配置文件在這個位置: /etc/keepalived/keepalived.conf
啟動KeepAlived時,它默認會去/etc/keepalived下面找它的配置文件,所以上面命令中我們已經將這個配置文件復制過來了。現在進行修改:
[html] view plain copy- vim /etc/keepalived/keepalived.conf
具體的參數詳情請參考:http://zhumeng8337797.blog.163.com/blog/static/100768914201191762253640/
下面是我配置好的文件內容
[html] view plain copy- ! Configuration File for keepalived
- global_defs {
- notification_email {
- [email protected]
- }
- notification_email_from [email protected]
- smtp_server 127.0.0.1
- smtp_connect_timeout 30
- router_id LVS_MASTER
- }
- vrrp_instance VI_1 {
- state MASTER
- interface eth1
- virtual_router_id 60
- priority 100
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- 192.168.10.100
- }
- }
- virtual_server 192.168.10.100 8080 {
- delay_loop 6
- lb_algo rr
- lb_kind DR
- nat_mask 255.255.255.0
- persistence_timeout 50
- protocol TCP
- real_server 192.168.10.142 8080 {
- weight 1
- TCP_CHECK {
- connect_timeout 3
- nb_get_retry 3
- delay_before_retry 3
- }
- }
- real_server 192.168.10.143 8080 {
- weight 1
- TCP_CHECK {
- connect_timeout 3
- nb_get_retry 3
- delay_before_retry 3
- }
- }
- }
以上就完成了keepAlived的配置,下面進行啟動
[html] view plain copy- chkconfig keepalived on
- service keepalived start
查看進程
[html] view plain copy- ps aux | grep keepalived
結果如圖
Keepalived正常運行時,共啟動3個進程,其中一個進程是父進程,負責監控其子進程;一個是vrrp子進程;另外一個是checkers子進程。
如果此時只看到2個進程,請從安裝keepalived的步驟重新執行。
查看下虛擬IP是否已經加上(重要)
[html] view plain copy- 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- yum -y install vim
- vim /etc/init.d/realserver.sh
在文件中輸入如下腳本:
- #!/bin/bash
- SNS_VIP=192.168.10.100
- . /etc/rc.d/init.d/functions
- case "$1" in
- start)
- ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
- /sbin/route add -host $SNS_VIP dev lo:0
- echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
- echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
- echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
- echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
- sysctl -p >/dev/null 2>&1
- echo "RealServer Start OK"
- ;;
- stop)
- ifconfig lo:0 down
- route del $SNS_VIP >/dev/null 2>&1
- echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
- echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
- echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
- echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
- echo "RealServer Stoped"
- ;;
- *)
- echo "Usage: $0 {start|stop}"
- exit 1
- esac
- exit 0
3)安裝配置TOMCAT
我測試用的是TOMCAT6
[html] view plain copy- yum -y install tomcat6 tomcat6-webapps tomcat6-admin-webapps
- chkconfig tomcat6 on
- service tomcat6 start
啟動後如圖:
關閉防火墻:
[html] view plain copy- service iptables stop
打開瀏覽器:http://192.168.10.142:8080
會看到TOMCAT的熟悉頁面了。
為了測試負載均衡,我們將這個頁面改下,以更好的標識這個網頁是本服務器的
Tomcat6安裝目錄位於/usr/share/tomcat6,所以我們要編輯tomcat下的webapps/ROOT/index.html這個文件。
[html] view plain copy- cd /usr/share/tomcat6/webapps/ROOT/
- cat /dev/null > index.html
- vim index.html
將如下文本寫入index.html,然後打開瀏覽器:http://192.168.10.142:8080,已經改變:
[html] view plain copy- web1 192.168.10.142
4)啟動虛擬IP的腳本
[html] view plain copy- sh /etc/init.d/realserver.sh start
- ifconfig
運行後會看到網絡有了一個虛擬IP,如圖:
5)去LVS_MASTER服務器的終端查看下ipvsadm,查看已經連接上了WEB1服務器,運行命令
[html] view plain copy- ipvsadm -ln
結果如圖:
已經可以看到有服務器加入進來了。
此時我們訪問網頁http://192.168.10.100,出現界面顯示web1 192.168.10.142;或者使用命令行測試轉發情況,如下:
[html] view plain copy- 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- ! Configuration File for keepalived
- global_defs {
- notification_email {
- [email protected]
- }
- notification_email_from [email protected]
- smtp_server 127.0.0.1
- smtp_connect_timeout 30
- router_id LVS_BACKUP
- }
- vrrp_instance VI_1 {
- state BACKUP
- interface eth2
- virtual_router_id 60
- priority 90
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- 192.168.10.100
- }
- }
- virtual_server 192.168.10.100 8080 {
- delay_loop 6
- lb_algo rr
- lb_kind DR
- nat_mask 255.255.255.0
- persistence_timeout 50
- protocol TCP
- real_server 192.168.10.142 8080 {
- weight 1
- TCP_CHECK {
- connect_timeout 3
- nb_get_retry 3
- delay_before_retry 3
- }
- }
- real_server 192.168.10.143 8080 {
- weight 1
- TCP_CHECK {
- connect_timeout 3
- nb_get_retry 3
- delay_before_retry 3
- }
- }
- }
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 搭建 負載均衡 高可用 集群