上篇文章《架構設計:負載均衡層設計方案(6)——Nginx + Keepalived構建高可用的負載層》(http://blog.csdn.net/yinwenjie/article/details/47130609) 咱們講解了Nginx的故障切換,而且承諾各位讀者會盡快講解 LVS + Keepalived + Nginx的安裝和配置。在中間因爲工做的緣由,我又插寫了三篇關於zookeeper的原理使用的文章。今天這邊文章咱們迴歸主題,爲各位讀者講解 LVS + Keepalived + Nginx的安裝及配置。linux
下圖,咱們表示了本篇文章要搭建的整個集成架構的抽象結構:nginx
咱們採用兩個LVS節點(141和142),可是一個時間工做的只有一個LVS節點,另外一個始終處於熱備standby狀態,由keepalived監控這兩個節點的工做狀態並完成切換。c++
在LVS節點下,咱們採用LVS-DR工做模式掛載了兩個Nginx節點(13一、132)。並最終將外網請求交由這兩個節點進行處理。注意:在實際工做中,Nginx下面通常就是訪問靜態資源、動態資源的配置了。算法
首先咱們在將要安裝LVS的兩個節點上,先安裝keepalived,並保證這兩個keepalived節點可以正常工做(監控批次的狀態)。固然,您也能夠先準備LVS,在準備keepalived。centos
我想準備keepalived節點,你們應該輕車熟路了吧,在《架構設計:負載均衡層設計方案(6)——Nginx + Keepalived構建高可用的負載層》這篇文章中詳細介紹了keepalived的最簡配置方式。爲了你們閱讀方便,咱們在這裏再進行依次簡要說明。準備keepalived的整個過程包括:瀏覽器
=============安裝keepalivedruby
[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的信息架構
作成服務後,先不要急着啓動,由於配置文件尚未改好。
========配置keepalived(配置文件在:/etc/keepalived/keepalived.conf)
! Configuration File for keepalived global_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 addr 1: lo: <LOOPBACK,UP,LOWER_UP> 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 forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> 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是否正常工做的驗證。
準備lvs的工做就太簡單了,由於centos6.四、6.五、6.6都已經集成了LVS的核心,咱們只須要安裝LVS的管理工具就好了:
(1)若是要源碼安裝的話:
這裏源碼安裝ipvsadm(http://www.linuxidc.com/Linux/2016-03/129232.htm)
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的時候,就不要問我參數含義咯。^_^
在《架構設計:負載均衡層設計方案(5)——LVS單節點安裝》(http://blog.csdn.net/yinwenjie/article/details/47010569) 這篇文章中,咱們詳細講解了Nginx節點的準備工做,可是爲了方便各位讀者閱讀,這裏咱們大體再講一下。
Nginx節點的準備工做主要由如下步驟構成(這個不是本文的重點,點到便可):
=============安裝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的首頁改一下以便分辨區別
=====
keepalived和LVS是天生配合完美的一對,LVS負責進行請求轉發不負責任何節點的健康監測;keepalived負責監控整個環境中,包括虛擬ip,真實ip對應的下層節點的健康狀態監測。
首先咱們要更改以前配置的「最簡keepalived」配置,讓keepalived可以對結構中全部節點和虛擬ip的健康狀態進行監測。更改配置和含義以下:
! Configuration File for keepalived global_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的最簡配置也是能夠的,不過您就須要本身寫監測腳本了(道理是同樣的)。
啓動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上的設置,在重啓後都會消失,因此必定要作成腳本哦。
這樣LVS + Keepalived + Nginx方式的配置就作完了。如今咱們進行搭建效果的監測:
咱們使用兩個不一樣的瀏覽器,驗證Master-LVS節點的工做:
=========瀏覽器1:
=========瀏覽器2:
看來140這個VIP下的LVS工做是正常的。
下面咱們中止Master-LVS1:
[root@lvs2 ~]# service keepalived stop
在經歷了一些訪問停頓後,瀏覽器1顯示的效果以下(這就是爲何keepalived最好設置爲非搶佔模式):
好了,到這裏負載均衡層所使用的幾個標準工具就介紹完了。下一篇文章咱們將進行總結,而後進入架構設計:業務層設計方案 的系列文章。在下一個系列文章中,咱們將介紹至少兩套SOA的實現、至少兩套系統間通訊使用的消息隊列。哦,應我朋友的要求,我會專門寫幾篇文章,介紹Java中線程的基礎知識和進階知識。
文章轉自:http://blog.csdn.net/yinwenjie/article/details/47211551
多謝原做者的分享