首頁/ 汽車/ 正文

LVS + Keepalived + Nginx安裝及配置

LVS + Keepalived + Nginx安裝及配置

1、概述

上篇文章《架構設計:負載均衡層設計方案(6)——Nginx + Keepalived構建高可用的負載層》我們講解了Nginx的故障切換,並且承諾各位讀者會盡快講解 LVS + Keepalived + Nginx的安裝和配置。在中間由於工作的原因,我又插寫了三篇關於zookeeper的原理使用的文章。今天這邊文章我們迴歸主題,為各位讀者講解 LVS + Keepalived + Nginx的安裝及配置。

2、安裝計劃和準備工作

下圖,我們表示了本篇文章要搭建的整個整合架構的抽象結構:

LVS + Keepalived + Nginx安裝及配置

我們採用兩個LVS節點(141和142),但是一個時間工作的只有一個LVS節點,另一個始終處於熱備standby狀態,由keepalived監控這兩個節點的工作狀態並完成切換。

在LVS節點下,我們採用LVS-DR工作模式掛載了兩個Nginx節點(131、132)。並最終將外網請求交由這兩個節點進行處理。

注意:在實際工作中,Nginx下面一般就是訪問靜態資源、動態資源的配置了。

2-1、準備兩個keepalived節點

首先我們在將要安裝LVS的兩個節點上,先安裝keepalived,並保證這兩個keepalived節點能夠正常工作(監控批次的狀態)。當然,您也可以先準備LVS,在準備keepalived。

我想準備keepalived節點,大家應該輕車熟路了吧,在《架構設計:負載均衡層設計方案(6)——Nginx + Keepalived構建高可用的負載層》這篇文章中詳細介紹了keepalived的最簡配置方式。為了大家閱讀方便,我們在這裡再進行依次簡要說明。準備keepalived的整個過程包括:

安裝必要的支撐元件,原始碼安裝keepalived

將keepalived註冊成節點的服務,以便保證keepalived在節點啟動時就開始工作

更改keepalived的配置檔案,讓其可以正常工作

驗證準備工作

=============安裝keepalived

[root@lvs1 ~]# yum install -y zlib zlib-devel gcc gcc-c++ openssl openssl-devel openssh[root@lvs1 ~]# tar -zxvf keepalived-1。2。17。tar。gz[root@lvs1 ~]# cd keepalived-1。2。17[root@lvs1 ~]# 。/configure ——perfix=/usr/keepalived-1。2。17[root@lvs1 ~]# make & make install

=============將keepalived註冊成服務(如果您使用的預設路徑安裝,就不需要cp命令了)

[root@lvs1 ~]# cp /usr/keepalived-1。2。17/etc/sysconfig/keepalived /etc/sysconfig/keepalived [root@lvs1 ~]# cp /usr/keepalived-1。2。17/sbin/keepalived /usr/sbin/keepalived[root@lvs1 ~]# cp /usr/keepalived-1。2。17/etc/rc。d/init。d/keepalived /etc/rc。d/init。d/keepalived[root@lvs1 ~]# mkdir /etc/keepalived[root@lvs1 ~]# cp /usr/keepalived-1。2。17/etc/keepalived/keepalived。conf /etc/keepalived/keepalived。conf[root@lvs1 ~]# 可以做成服務了(不要複製,沒用的)[root@lvs1 ~]# chkconfig keepalived on

這裡我們先設定浮動ip

設定VIP的資訊

ifconfig eth0:0 192。168。220。140 broadcast 192。168。220。140 netmask 255。255。255。255 up

route add -host 192。168。220。140 dev eth0:0

做成服務後,先不要急著啟動,因為配置檔案還沒有改好。

========配置keepalived(配置檔案在:/etc/keepalived/keepalived。conf)

! Configuration File for keepalivedglobal_defs { #notification_email { # acassen@firewall。loc # failover@firewall。loc # sysadmin@firewall。loc #} #notification_email_from Alexandre。Cassen@firewall。loc #smtp_server 192。168。200。1 #smtp_connect_timeout 30 router_id LVS_DEVEL}vrrp_instance VI_1 { #141節點設定為MASTER,142或者還有其他的節點設定為BACKUP #還記得我們前面文章講到的無搶佔設定嗎?這裡也可以用哦。 state MASTER #網路介面卡名稱 interface eth0 virtual_router_id 51 #所有的SLAVE節點的優先順序都要比這個設定值低 priority 120 advert_int 1 #真實ip,142要改成相應的lvs節點真實ip mcast_src_ip=192。168。220。141 authentication { auth_type PASS auth_pass 1111 } #虛擬/浮動IP virtual_ipaddress { 192。168。220。140 }}

以上配置還是最簡單的keepalived配置,因為我們還沒有加上配合LVS使用的虛擬ip監測設定和下層真實ip監測的設定。最簡配置主要是為了保證keepalived節點是工作正常的。

將以上的配置分別對應到LVS的兩個節點(注意要改動的地方哦)

==========進行keepalived工作狀態的檢查:

[root@lvs1 ~]# /etc/init。d/keepalived start

現在設定為MASTER的keepalived節點(或者在非搶佔模式下,優先順序最高的那個節點),已經綁定了140這個虛擬ip了:

[root@lvs2 ~]# ip addr1: lo: mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127。0。0。1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:39:75:9f brd ff:ff:ff:ff:ff:ff inet 192。168。220。141/24 brd 192。168。220。255 scope global eth0 inet 192。168。220。140/32 scope global eth0 inet6 fe80::20c:29ff:fe39:759f/64 scope link valid_lft forever preferred_lft forever

當然您也可以透過 /var/log/message的日誌進行keepalived是否正常工作的驗證。

2-2、繼續兩個keepalived節點上準備LVS

準備lvs的工作就太簡單了,因為centos6。4、6。5、6。6都已經集成了LVS的核心,我們只需要安裝LVS的管理工具就行了:

(1)如果要原始碼安裝的話:

這裡原始碼安裝ipvsadm

yum install kernel-devel -y

yum -y install popt popt-devel libnl libnl-devel popt-static(我嘗試過要是不安裝的話就會報錯)

ln -s /usr/src/kernels/2。6。32-642。4。2。el6。x86_64/ /usr/src/linux

wget http://www。linuxvirtualserver。org/software/kernel-2。6/ipvsadm-1。26。tar。gz

tar xf ipvsadm-1。25。tar。gz

cd ipvsadm-1。25

make && make install

然後我們檢測一下

ipvsadm 是否有內容輸出

(2)如果yum安裝的話

兩個LVS節點都執行:

yum -y install ipvsadm

還記得lvs管理工具怎麼使用嗎?請參見我介紹LVS單節點安裝的博文:《架構設計:負載均衡層設計方案(5)——LVS單節點安裝》。這裡為了方便閱讀,給出主要引數的含義列表:

-A –add-service 在核心的虛擬伺服器表中新增一條新的虛擬伺服器記錄。也就是增加一臺新的虛擬伺服器。-E –edit-service 編輯核心虛擬伺服器表中的一條虛擬伺服器記錄。-D –delete-service 刪除核心虛擬伺服器表中的一條虛擬伺服器記錄。-C –clear 清除核心虛擬伺服器表中的所有記錄。-R –restore 恢復虛擬伺服器規則-S –save 儲存虛擬伺服器規則,輸出為-R 選項可讀的格式-a –add-server 在核心虛擬伺服器表的一條記錄裡新增一條新的真實伺服器記錄。也就是在一個虛擬伺服器中增加一臺新的真實伺服器-e –edit-server 編輯一條虛擬伺服器記錄中的某條真實伺服器記錄-d –delete-server 刪除一條虛擬伺服器記錄中的某條真實伺服器記錄-L –list 顯示核心虛擬伺服器表-Z –zero 虛擬服務表計數器清零(清空當前的連線數量等)–set tcp tcpfin udp 設定連線超時值–start-daemon 啟動同步守護程序。他後面可以是master 或backup,用來說明LVS Router 是master 或是backup。在這個功能上也可以採用keepalived 的VRRP 功能。–stop-daemon 停止同步守護程序-t –tcp-service service-address 說明虛擬伺服器提供的是tcp 的服務[vip:port] or [real-server-ip:port]-u –udp-service service-address 說明虛擬伺服器提供的是udp 的服務[vip:port] or [real-server-ip:port]-f –fwmark-service fwmark 說明是經過iptables 標記過的服務型別。-s –scheduler scheduler 使用的排程演算法,選項:rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq, 預設的排程演算法是: wlc。-p –persistent [timeout] 持久穩固的服務。這個選項的意思是來自同一個客戶的多次請求,將被同一臺真實的伺服器處理。timeout 的預設值為300 秒。-M –netmask netmask persistent granularity mask-r –real-server server-address 真實的伺服器[Real-Server:port]-g –gatewaying 指定LVS 的工作模式為直接路由模式DR模式(也是LVS預設的模式)-i –ipip 指定LVS 的工作模式為隧道模式-m –masquerading 指定LVS 的工作模式為NAT 模式-w –weight weight 真實伺服器的權值–mcast-interface interface 指定組播的同步介面–connection 顯示LVS 目前的連線 如:ipvsadm -L -c–timeout 顯示tcp tcpfin udp 的timeout 值 如:ipvsadm -L –timeout–daemon 顯示同步守護程序狀態–stats 顯示統計資訊–rate 顯示速率資訊–sort 對虛擬伺服器和真實伺服器排序輸出–numeric -n 輸出IP 地址和埠的數字形式

到後面正式啟動LVS的時候,就不要問我引數含義咯。^_^

2-3、準備兩個Nginx節點並保證可用

在《架構設計:負載均衡層設計方案(5)——LVS單節點安裝》(http://blog。csdn。net/yinwenjie/article/details/47010569) 這篇文章中,我們詳細講解了Nginx節點的準備工作,但是為了方便各位讀者閱讀,這裡我們大致再講一下。

Nginx節點的準備工作主要由以下步驟構成(這個不是本文的重點,點到即可):

安裝Nginx(當然,正式系統中,還涉及到Nginx的引數調優,可以參見《架構設計:負載均衡層設計方案(2)——Nginx安裝》這篇文章)

開啟Nginx所在伺服器的“路由”功能、關閉“ARP查詢”功能

將VIP:192。168。220。140 設定成Nginx所在節點的迴環IP

=============安裝Nginx

[root@vm1 ~]# yum -y install make zlib zlib-devel gcc gcc-c++ ssh libtool pcre*[root@vm1 ~]# 下載nginx(別複製,不能執行的)[root@vm1 ~]# 解壓nginx(別複製,不能執行的)[root@vm1 ~]# 。/configure –prefix=/usr/nginx-1。8。0 [root@vm1 ~]# make && make install [root@vm1 ~]# 設定環境變數(別複製,不能執行的)[root@vm1 ~]# 啟動nginx

=============開啟Nginx所在伺服器的“路由”功能、關閉“ARP查詢”功能

[root@vm1 ~]# echo “1” >/proc/sys/net/ipv4/conf/lo/arp_ignore[root@vm1 ~]# echo “2” >/proc/sys/net/ipv4/conf/lo/arp_announce[root@vm1 ~]# echo “1” >/proc/sys/net/ipv4/conf/all/arp_ignore[root@vm1 ~]# echo “2” >/proc/sys/net/ipv4/conf/all/arp_announce

=============設定迴環IP

[root@vm1 ~]# ifconfig lo:0 192。168。220。140 broadcast 192。168。220。140 netmask 255。255。255。255 up[root@vm1 ~]# route add -host 192。168。220。140 dev lo:0

兩臺Nginx的節點都按照這樣的方法去設定。然後使用瀏覽器,看看這兩個節點的Nginx是否工作正常:

我這裡在做實驗的時候忘了把防火牆和selinux關了,所以瀏覽器訪問不了。不要忘了關哦

我們可以把nginx的首頁改一下以便分辨區別

LVS + Keepalived + Nginx安裝及配置

=====

LVS + Keepalived + Nginx安裝及配置

2-4、其他說明

keepalived和LVS是天生配合完美的一對,

LVS負責進行請求轉發不負責任何節點的健康監測;keepalived負責監控整個環境中,包括虛擬ip,真實ip對應的下層節點的健康狀態監測

3、開始配置:LVS-DR工作模式

3-1、keepalived的更改——健康監測

首先我們要更改之前配置的“最簡keepalived”配置,讓keepalived能夠對結構中所有節點和虛擬ip的健康狀態進行監測。更改配置和含義如下:

! Configuration File for keepalivedglobal_defs { #notification_email { # acassen@firewall。loc # failover@firewall。loc # sysadmin@firewall。loc #} #notification_email_from Alexandre。Cassen@firewall。loc #smtp_server 192。168。200。1 #smtp_connect_timeout 30 router_id LVS_DEVEL}vrrp_instance VI_1 { #141節點設定為MASTER,142或者還有其他的節點設定為BACKUP #還記得我們前面文章講到的無搶佔設定嗎?這裡也可以用哦。 state MASTER #網路介面卡名稱 interface eth0 virtual_router_id 51 #所有的SLAVE節點的優先順序都要比這個設定值低 priority 120 advert_int 1 #真實ip,142要改成相應的lvs節點真實ip mcast_src_ip=192。168。220。141 authentication { auth_type PASS auth_pass 1111 } #虛擬/浮動IP virtual_ipaddress { 192。168。220。140 }}virtual_server 192。168。220。140 80 { #健康時間檢查,單位秒 delay_loop 6 #負載均衡排程演算法wlc|rr,和您將使用的LVS的排程演算法保持原則一致 lb_algo rr #負載均衡轉發規則 DR NAT TUN。和您將啟動的LVS的工作模式設定一致 lb_kind DR #虛擬地址的子網掩碼 nat_mask 255。255。255。0 #會話保持時間,因為我們經常使用的是無狀態的叢集架構,所以這個設定可有可無 #persistence_timeout 50 #轉發協議,當然是TCP protocol TCP #真實的下層Nginx節點的健康監測 real_server 192。168。220。131 80 { #節點權重, weight 10 #設定檢查方式,可以設定HTTP_GET | SSL_GET HTTP_GET { url { path / digest ff20ad2481f97b1754ef3e12ecd3a9cc } #超時時間,秒。如果在這個時間內沒有返回,則說明一次監測失敗 connect_timeout 3 #設定多少次監測失敗,就認為這個真實節點死掉了 nb_get_retry 3 #重試間隔 delay_before_retry 3 } } real_server 192。168。220。132 80 { weight 10 HTTP_GET { url { path / digest 640205b7b0fc66c1ea91c463fac6334d } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } }}

這樣一來,keepalived就可以檢查整個架構中的所有節點狀態了。

另外要說明的是,這個檢查過程並不是必須的,您使用keepalived的最簡配置也是可以的,不過您就需要自己寫監測指令碼了(道理是一樣的)

3-2、啟動兩個LVS節點

啟動LVS的過程就太簡單了(兩個節點都是一樣的啟動方式):

[root@lvs2 ~]# ipvsadm -C[root@lvs2 ~]# ipvsadm -At 192。168。220。140:80 -s rr [root@lvs2 ~]# ipvsadm -at 192。168。220。140:80 -r 192。168。220。131 -g[root@lvs2 ~]# ipvsadm -at 192。168。220。140:80 -r 192。168。220。132 -g[root@lvs2 ~]# 然後我們可以使用ipvsadm 監控目前LVS的狀態[root@lvs2 ~]# ipvsadm

注意:處於standby的lvs1節點也要這樣進行設定。

還有,以上的LVS的設定,和real server上的設定,在重啟後都會消失,所以一定要做成指令碼哦。

4、驗證工作

這樣LVS + Keepalived + Nginx方式的配置就做完了。現在我們進行搭建效果的監測:

4-1、驗證Master-LVS節點的工作

我們使用兩個不同的瀏覽器,驗證Master-LVS節點的工作:

=========瀏覽器1:

LVS + Keepalived + Nginx安裝及配置

=========瀏覽器2:

LVS + Keepalived + Nginx安裝及配置

看來140這個VIP下的LVS工作是正常的。

4-2、驗證Master-LVS節點停止後的效果

下面我們停止Master-LVS1:

[root@lvs2 ~]# service keepalived stop

在經歷了一些訪問停頓後,瀏覽器1顯示的效果如下(這就是為什麼keepalived最好設定為非搶佔模式):

LVS + Keepalived + Nginx安裝及配置

5、後文介紹

好了,到這裡負載均衡層所使用的幾個標準工具就介紹完了。下一篇文章我們將進行總結,然後進入架構設計:業務層設計方案 的系列文章。在下一個系列文章中,我們將介紹至少兩套SOA的實現、至少兩套系統間通訊使用的訊息佇列。哦,應我朋友的要求,我會專門寫幾篇文章,介紹Java中執行緒的基礎知識和進階知識。

如果本文對你有幫助,別忘記給我個3連 ,點贊,轉發,評論,

咱們下期見!學習更多JAVA知識與技巧,關注與私信博主(666)

LVS + Keepalived + Nginx安裝及配置

相關文章

頂部