linux 負載均衡配置 keepalive lvs 使用nginx轉發 CentOS7 搭建LVS+keepalived負載均衡


最近希望能夠配置一下負載均衡,在虛擬機上面,但是網上找了很多資料很零散,對於不了解的人,很多不夠詳細,最近終於做好了,把具體的步驟寫下來,方便各位網友查閱學習

 

這個實驗需要安裝nginx如果沒有安裝過,請參考:

linux安裝nginx:http://www.cnblogs.com/aspirant/p/6714548.html

如果安裝了Centos系統之后,發現無法上網,其實很簡單,只需要做一個小小的配置,

使用root用戶進入 /etc/sysconfig/network-script/ifcfg-ens33 里面有一項是 onboot =no  改成 onboot =yes 然后重啟一下機器,命令:reboot now(你的網卡可能不是ens33只需要 只需要進入目錄network-script/  然后 執行ifcfg-e 按一下TAB鍵,看一下你網卡是什么名字就可以)

這種配置最重要的還是腳本的編寫,為了各位更方便的查詢問題所在,我將腳本文檔上傳,以便查閱

 

 http://files.cnblogs.com/files/aspirant/loadbalance.rar

里面包含了兩個文件,

(a)一個是keepalived.conf, 用於 director server 和backup server 的keepalived配置;

 (b)一個是realServer.sh 用於  Realserver1 和 realserver2 的配置

 

(1) 我們的系統是CentOS7 目前需要四台機器,分別為 Director機器 兩台:master,slave

真實機器realserver1,realserver2;搭建的系統架構圖如下:

這里寫圖片描述 
 
所用系統:CentOS7 
真實web服務器(RS1):192.168.137.5 
真實web服務器(RS2):192.168.137.6 
Master負載均衡服務器:192.168.137.101 
backup負載均衡服務器:192.168.137.102 
系統對外虛擬IP:192.168.137.100

 

從架構可以看出來,從用戶的角度來說,會直接訪問192.168.137.100,也就是說不管系統如何設計要保證此ip的可用性,

從架構師的角度考慮:

   用戶訪問192。168.137.100位VIP:Virtual IP,虛擬iP,用戶不關心內部如何協調,我們使用 

192.168.137.101 作為主機 Master機器,然后使用keepalived 技術配置 HA(high avilable)配置高可用行,也就是說如果 分發的機器Master宕機了,keepalive會自動轉到 backup機器,

這就是HA配置,保證master即使宕機了,也不影響轉發;

master機器負責把用戶的請求轉發到  真實的機器, RS1和RS2,他們會按照一定的輪訓機制,訪問,如果RS1宕機,master會自動轉發到RS2;

我們在兩台負載均衡的機器上面,配置keepalived保證分發機器的高可用行HA;

系統的 IP配置如下:

服務器名   IP地址 虛擬設備名 虛擬IP
Director Server  192.168.137.101  ens33:0  192.168.137.100
Backup Server  192.168.137.102 ens33:0 192.168.137.100
Real Server1 192.168.137.5 lo:0  192.168.137.100
Real Server2 192.168.137.6  lo:0  192.168.137.100

 

二、Keepalived的安裝配置過程

兩台負載均衡服務器上均需要安裝、配置Keepalived,ipvsadm 

(1)keepalived 作用: 保證每個服務器都是正常的,如果有宕機情況會自動切換;

(2) ipvsadm ==>用來管理負載均衡的機器,

2.1 安裝 ipvsadm

 

 (1) 執行yum install -y ipvsadm;


安裝IPVS后,就可以配置LVS集群了,首先在Director Server上綁定一個虛擬IP(也叫VIP),此IP用於對外提供服務,執行如下命令:
[root@localhost ~]#ifconfig ens33:0 192.168.137.100 broadcast 192.168.137.100 netmask 255.255.255.255 up

如果此處出現錯誤:SIOCSIFFLAGS: 無法指定被請求的地址

需要把網卡重啟一下使用命令:

/etc/init.d/network restart

 


此處在ens33設備上綁定了一個虛擬設備ens:33,同時設置了一個虛擬IP是192.168.137.100,也就是上面我們規划的IP地址,然后指定廣播地址也為192.168.137.100,需要特別注意的是,這里的子網掩碼為255.255.255.255。
然后給設備ens:33指定一條路由,執行如下指令:
[root@localhost ~]#route add -host 192.168.137.100 dev ens33:0 
接着啟用系統的包轉發功能,從而使系統充當路由器,執行如下指令:
[root@localhost ~]#echo "1" >/proc/sys/net/ipv4/ip_forward
指令中,參數值為1時啟用ip轉發,為0時禁止ip轉發。其實在DR模式中,開啟系統的包轉發功能不是必須的,而在NAT模式下此操作是必須的。
然后開始配置ipvs,執行如下操作:
[root@localhost ~]#ipvsadm -C
[root@localhost ~]#ipvsadm -A -t 192.168.137.100:80 -s rr -p 600
[root@localhost ~]#ipvsadm -a -t 192.168.137.100:80 -r 192.168.137.5:80 -g
[root@localhost ~]#ipvsadm -a -t 192.168.137.100:80 -r 192.168.137.6:80 -g
上面操作中,第一行是清除內核虛擬服務器列表中的所有記錄,第二行是添加一條新的虛擬IP記錄。這個新的IP是192.168.137.100,同時指定持續服務時間為600秒。第三、四行是在新加虛擬IP記錄中添加兩條新的Real Server記錄,並且指定LVS 的工作模式為直接路由模式。
最后,啟動LVS服務,執行如下操作:
[root@localhost ~]#ipvsadm

在backup server上面也要這么配置ipvsadm; 

這樣,LVS在Director Server上的配置就完成了。

 

2.1 安裝Keepalived

$ yum -y install keepalived

2.2 配置Keepalived

$ vim /etc/keepalived/keepalived.conf

配置信息如下

! Configuration File for keepalived

global_defs {
    notification_email {
        acassen@firewall.loc     #設置報警郵件地址,可以設置多個,每行一個。
        failover@firewall.loc    #需開啟本機的sendmail服務
        sysadmin@firewall.loc
    }
    notification_email_from Alexandre.Cassen@firewall.loc  #設置郵件的發送地址
    smtp_server 127.0.0.1      #設置smtp server地址
    smtp_connect_timeout 30    #設置連接smtp server的超時時間
    router_id LVS_DEVEL        #表示運行keepalived服務器的一個標識。發郵件時顯示在郵件主題的信息
}

vrrp_instance VI_1 {
    state MASTER              #指定keepalived的角色,MASTER表示此主機是主服務器,BACKUP表示此主機是備用服務器
    interface ens33     #指定HA監測網絡的接口
    virtual_router_id 51      #虛擬路由標識,這個標識是一個數字,同一個vrrp實例使用唯一的標識。即同一vrrp_instance下,MASTER和BACKUP必須是一致的
    priority 100              #定義優先級,數字越大,優先級越高,在同一個vrrp_instance下,MASTER的優先級必須大於BACKUP的優先級
    advert_int 1              #設定MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位是秒
    authentication {          #設置驗證類型和密碼
        auth_type PASS        #設置驗證類型,主要有PASS和AH兩種
        auth_pass 1111        #設置驗證密碼,在同一個vrrp_instance下,MASTER與BACKUP必須使用相同的密碼才能正常通信
    }
    virtual_ipaddress {       #設置虛擬IP地址,可以設置多個虛擬IP地址,每行一個
        192.168.137.100 
    }
}

virtual_server 192.168.137.100 80 {  #設置虛擬服務器,需要指定虛擬IP地址和服務端口,IP與端口之間用空格隔開
    delay_loop 6              #設置運行情況檢查時間,單位是秒
    lb_algo rr                #設置負載調度算法,這里設置為rr,即輪詢算法
    lb_kind DR                #設置LVS實現負載均衡的機制,有NAT、TUN、DR三個模式可選
    nat_mask 255.255.255.0 
    persistence_timeout 0    #會話保持時間,單位是秒。這個選項對動態網頁是非常有用的,為集群系統中的session共享提供了一個很好的解決方案。
                              #有了這個會話保持功能,用戶的請求會被一直分發到某個服務節點,直到超過這個會話的保持時間。
                              #需要注意的是,這個會話保持時間是最大無響應超時時間,也就是說,用戶在操作動態頁面時,如果50秒內沒有執行任何操作
                              #那么接下來的操作會被分發到另外的節點,但是如果用戶一直在操作動態頁面,則不受50秒的時間限制
    protocol TCP              #指定轉發協議類型,有TCP和UDP兩種

    real_server 192.168.137.5 80 { #配置服務節點1,需要指定real server的真實IP地址和端口,IP與端口之間用空格隔開
        weight 1              #配置服務節點的權值,權值大小用數字表示,數字越大,權值越高,設置權值大小可以為不同性能的服務器
                              #分配不同的負載,可以為性能高的服務器設置較高的權值,而為性能較低的服務器設置相對較低的權值,這樣才能合理地利用和分配系統資源
        TCP_CHECK {           #realserver的狀態檢測設置部分,單位是秒
            connect_timeout 3    #表示3秒無響應超時
            nb_get_retry 3       #表示重試次數
            delay_before_retry 3 #表示重試間隔
            connect_port 8066
        } 
    }
    real_server 192.168.137.6 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 8066
        }
    }
}
  
要注意的地方:

    (1)此處可以直接復制過去,注意兩個問題,里面是中文因此 ,需要設置一下vi的配置進入 /etc/virc ,在底部輸入

set fileencodings=utf-8,gbk,ucs-bom,cp936

     即可讓中文正常顯示,

    (2)如果使用了XShell 命令中不能正常顯示中文,那么請點擊File ==>Properties==>Terminal ==>Encoding ==>選擇UTF-8 點擊確定;即可正常顯示中文;

    (3)可以直接把上面的代碼復制下來放到新建文件放到自己的機器上面,但是別忘了需要轉換一下格式,因為我們使用window機器拷貝的,所以在linux上面我們需要轉化一下轉成linux可以使用的腳本,因為window的回車跟linux的回車是不同的,使用dos2unix轉化,

  • 我們使用 (a) yum install dos2unix
  •                (b) dos2unix keepalived.conf   
    • 轉換完了,就可以用了;
(4)interface ens33:這里的enp0s3是我的網卡名稱,想要查看自己網卡名稱的話,在/etc/sysconfig/network-scripts/ifcfg-e(敲下TAB)這個每個系統可能都不同,

       我們可以輸入ifconfig,一般會出現兩個網卡,一個是ens33還有一個是回環地址lo,對於分發機器master 和backup 我們需要在添加 ens33:0網卡,對於真實機器realserver1,realserver2,我們需要添加lo:0網卡,下一步就能看到這是不同的;

  (5)persistence_timeout 0:指的是在一定的時間內來自同一IP的連接將會被轉發到同一realserver中。而不是嚴格意義上的輪詢。默認為50s,因此在測試負載均衡是否可以正常輪詢時,最好先把值設置為0,方便查看

(6)TCP_CHECK { :注意TCK_CHECK和 {之間有一個空格,忘記打這個空格的話,可能會出現后面用ipvsadm查看時,某個RS查看不到

(7) 執行 sh realServer.sh start 后報錯:realServer.sh:行6: /etc/rc.d/init.d/functions: 權限不夠

需要把functions的權限修改一下 使用 chmod 777 /etc/rc.d/init.d/functions ; 即可

(8)另外一個台備用服務器上Keepavlied的配置類似,只是把MASTER改為backup,把priority設置為比MASTER低,設置為90;

keepalived的2個節點執行如下命令,開啟轉發功能:

# echo 1 > /proc/sys/net/ipv4/ip_forward

 

2.3 兩台RS上為lo:0綁定VIP地址、抑制ARP廣播

 

 兩台 RS機器上面都要安裝 nginx:

linux安裝nginx:http://www.cnblogs.com/aspirant/p/6714548.html

然后我們在nginx的訪問目錄:我的是這個: /home/zkpk/nginx-1.8.0/html/index.html中

RS1的 index.html 修改一下,這樣方便測試,比如輸入 我是 RS1;

RS2的 index.html 修改一下,這樣方便測試,比如輸入 我是 RS2;

在兩台RS上編寫以下腳本文件realserver.sh

#!/bin/bash
#description: Config realserver

VIP=192.168.137.100

/etc/rc.d/init.d/functions

case "$1" in
start)
       /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
       /sbin/route add -host $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)
       /sbin/ifconfig lo:0 down
       /sbin/route del $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

 

在兩台RS上分別執行腳本

$ sh realserver.sh start

   執行完了之后,驗證一下 使用ifconfig 你會發現 回環地址的網卡會多出一個lo:0的 網卡;

2.4 啟用Keepavlied

 

$ service keepalived start

 

 
之后通過ipvsadm -L命令可以查看VIP是否已經成功映射到兩台RS,如果發現有問題,可以通過/var/log/message查看錯誤原因,注意此處的192.168.137:100 你的可能不是,而是localhost之類的,也沒有錯;

這里寫圖片描述

接下來就可以測試可用性了

2.4.1 測試負載均衡

2.4.2測試keepalived的監控檢測

停掉RS1的nginx,然后在MASTER負載均衡服務器上可以到看VIP映射關系中已經剔除了192.168.137.5 
(1)停掉RS1的nginx 
     使用 pkill -9 nginx 殺死進程

     如果需要開啟nginx使用: /usr/local/nginx/sbin/nginx 啟動nginx進程;

    然后 ps -ef |grep nginx 可以查看nginx是否啟動成功;

(2)實驗測試1

瀏覽器訪問 http://192.168.137.100  看看是否啟動成功,nginx是否顯示;

 

實驗2

手動關閉192.168.137.5 節點的nginx,service nginx stop 在客戶端上去測試訪問 http://192.168.137.100 結果正常,不會出現訪問失敗的情況,

實驗3

手動重新開啟 192.168.137.5 節點的nginx, service nginx start 在客戶端上去測試訪問 http://192.168.137.100 結果正常,按照 rr 調度算法訪問5節點和6節點。

實驗4

測試 keepalived 的HA特性,首先在master上執行命令 ip addr ,可以看到100的vip在master節點上的;這時如果在master上執行 service keepalived stop 命令,這時vip已經不再master上,在slave節點上執行 ip addr 命令可以看到 vip 已經正確漂到slave節點,這時客戶端去訪問 http://192.168.137.100 訪問依然正常,驗證了 keepalived的HA特性。

 

至此實驗結束;

 

 



 

 

 

 

參考資料:

逐條配置:

http://ixdba.blog.51cto.com/2895551/554799

http://blog.csdn.net/u012852986/article/details/52412174

 http://www.jb51.net/article/38368.htm

http://www.cnblogs.com/llhua/p/4195330.html

具體部署:

http://www.cnblogs.com/liwei0526vip/p/6370103.html

nginx啟動停止:

http://www.cnblogs.com/codingcloud/p/5095066.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM