前言:html
集羣特色:
1)高性能
2)經濟
3)高可用
4)可伸縮node
集羣的分類
1)負載均衡集羣,LBC或者LB。
2)高可用性集羣,HAC
3)高性能計算集羣,HPC
4)LB和HAC是主流python
負載均衡集羣的做用:
1)分擔用戶訪問請求或數據流量(負載均衡)
2)保持業務持續性7*24服務(高可用性)
3)負載均衡集羣典型的開源軟件:lvs,nginx,haproxy,lighttpdlinux
高可用集羣做用:
1)當一臺機器宕機後另外一臺機器接管(ip資源和服務資源)nginx
1、LVS理解算法
1)參考文檔vim
http://www.linuxvirtualserver.org/zh/lvs1.html http://www.linuxvirtualserver.org/zh/lvs2.html http://www.linuxvirtualserver.org/zh/lvs3.html http://www.linuxvirtualserver.org/zh/lvs4.html
2)LVS層次
一、實現調度的工具IPVS(在內核中)。
二、管理工具ipvsadm。
三、keepalived實現管理及高可用。服務器
3)LVS術語網絡
一、虛擬ip地址 VIP-->VIP 爲Director用於向客戶端計算機提供服務的ip地址,好比,www.baidu.com域名就要解析到VIP上提供服務。
二、真實ip地址 RIP -->在集羣下面節點上使用的ip地址,物理ip地址
三、Director的ip地址 DIP--> Director用於鏈接內外網絡的ip地址,物理網卡上的ip地址。是負載均衡器上的ip。
四、客戶端主機ip地址 CIP -->客戶端用戶計算機請求集羣服務器的ip地址,該地址用做發送給集羣的請求的源ip地址。負載均衡
4)LVS幾種工做模式
NAT ,TUN ,DR,FULLNAT
DR模式:
直接路由模式(熟練),,,這個用的最多,,,,別的用的不多
根據本地的DR原理圖解釋,,
客戶端發送請求,目的地址vip,客戶端地址cip,,當請求消息到了LVS負載均衡服務器時,服務器不會改變客戶端發送的原地址和目的地址,,,只會將vip對應的MAC改爲RMAC,此時是以二層的方式通訊,此時數據傳遞到真實的服務器上,由於真實的服務器上沒有相應的ip,虛擬的ip,因此這個虛擬的ip要綁定到環回端口,由於此時有廣播包的傳遞,因此要抑制ARP的影響。
上面是本身理解,下面是大牛理解。
VS/DR模式是經過改寫請求報文的目標MAC地址,將請求發給真實服務器的,而真實服務器將相應後的處理結果直接返回給客戶端用戶。同VS/TUN技術同樣,VS/DR技術可極大地提升集羣系統的伸縮性。並且,這種DR模式沒有IP隧道的開銷,對集羣中的真實服務器也沒有必須支持ip隧道協議的要求,可是要求調度器LB與真實服務器RS都有一塊網卡連在同一物理網段上,即必須在同一個局域網環境。
5)LVS的有十種調度算法
主要的有三種:
靜態:rr,wrr
動態:wlc
6)LVS的調度算法的生產環境選型:
通常的網絡服務,如http,MAIL,MySQL等,經常使用的LVS調度算法爲:
a.基本輪叫調度rr算法
b.加權最小鏈接調度wlc
c.加權輪叫調度wrr算法
2、LVS安裝
1)查看有沒有LVS調度器,ipvs是在內核中工做的,因此要將它加載到內核中。
lsmod | grep ip_vs
2)建立一個軟鏈接,此ln命令的連接路徑要和uname -r輸出的結果內核版本對應,若是沒有路徑極可能是缺乏kernels軟件包,,能夠經過yum install -y kernel-devel安裝,ln這個命令也能夠不執行,直接指定內核參數編譯。
[root@aliyun ~]# ln -s /usr/src/kernels/2.6.32-696.1.1.el6.x86_64/ /usr/src/linux
3)下載LVS
[root@aliyun tools]# wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz [root@aliyun tools]# tar -zxf ipvsadm-1.26.tar.gz [root@aliyun tools]# cd ipvsadm-1.26 [root@aliyun ipvsadm-1.26]# make && make install //不要config
此時若是報錯了,極可能就是缺乏下面的包,安裝就好
[root@aliyun ipvsadm-1.26]# yum install libnl* popt* -y
[root@aliyun ipvsadm-1.26]# lsmod | grep ip_vs
此時仍是沒有相應的內核模塊,,,,此時有兩種方法能夠將這兩個模塊加入內核中
1)[root@aliyun ipvsadm-1.26]# /sbin/ipvsadm IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn [root@aliyun ipvsadm-1.26]# lsmod | grep ip_vs ip_vs 126705 0 libcrc32c 1246 1 ip_vs ipv6 336368 3 ip_vs,ib_ipoib,ib_addr 2)modprobe ip_vs
4)手工添加LVS轉發
4.1)用戶訪問www.etiantian.org而後被DNS解析到VIP 10.0.0.1,這個步驟是在DNS裏配置的。
若是是自建的DNS,etiantian域的DNS記錄設置以下。
www IN A 10.0.0.1
4.2)配置LVS虛擬ip(VIP)
[root@aliyun ~]# ifconfig eth0:0 172.19.125.33/24 up 添加個主機路由,也能夠不加 route add -host 172.19.125.33 dev eth0
4.3)檢查結果
[root@aliyun ~]# ifconfig eth0:0 eth0:0 Link encap:Ethernet HWaddr 00:16:3E:1A:11:E6 inet addr:172.19.125.33 Bcast:172.19.125.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
4.4)LB配置,,初始的配置
清空原來的配置 [root@aliyun ~]# ipvsadm -C 設置超時時間 --set tcp tcpfin udp set connection timeout values [root@aliyun ~]# ipvsadm --set 30 5 60 ####添加一個虛擬的服務器,,,這個就是一個VIP,,,,並指定它的算法和持續服務的超時時間 [root@aliyun ~]# ipvsadm -A -t 172.19.125.33:80 -s rr -p 20 指定這個vip對應的真實ip,,工做模式 DR,,,,權重 [root@aliyun ~]# ipvsadm -a -t 172.19.125.33:80 -r 172.19.125.35 -g -w 1 [root@aliyun ~]# ipvsadm -a -t 172.19.125.33:80 -r 172.19.125.36 -g -w 1 [root@aliyun ~]# ipvsadm -a -t 172.19.125.33:80 -r 172.19.125.37 -g -w 1 此時訪問172.19.123.33是不能夠訪問的,,,只能夠訪問真實的主機
4.5)手工在RS端綁定
每臺real server端 ifconfig lo:0 172.19.125.33 netmask 255.255.255.255 up #注意;子網掩碼的特殊 route add -host 172.19.125.33 dev lo 每一個集羣節點上的環回接口(lo)設備上被綁定VIP地址(其廣播地址是其自己,子網掩碼是255.255.255.255)
4.6)RS上抑制ARP響應
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
4.7)ARP廣播而進行新的地址解析.......若是此時換機器了,能夠就要用此命令,,經過arping命令來通知全部網絡內機器,,,適合用在腳本中
清除其本地的ARP table cache,從而使得客戶機訪問時從新廣播獲取MAC地址。,,這個在開發腳本實現服務器的高可用時是要必須考慮的問題之一,幾乎全部的高可用軟件都會考慮這個問題。 /sbin/arping -I eth0 -c 3 -s 10.0.0.1 10.0.0.2 /sbin/arping -U -I eth0 10.0.0.1 #####清空局域網的ARP表,,前面是VIP ,後面是網關,,,,高可用時出效果 arping -c 1 -I eth0 -s $VIP 10.0.0.254 >/dev/null 2>&1
4.8)參考資源,,內含裂腦問題的解決方案
http://oldboy.blog.51cto.com/2561410/1240412
3、Keepalived原理
1)keepalived高可用集羣介紹
keepalived起初是專門爲LVS設計的,專門用來監控LVS集羣系統中各個服務節點的狀態,後來又加入VRRP的功能,所以除了配合LVS服務外,也能夠做爲其餘服務的高可用軟件,VRRP出現的目的就是爲了解決靜態路由出現的單點故障問題,它可以保證網絡的不間斷、穩定的運行。因此keepalived一方面具備LVS cluster nodes healthchecks功能,另外一方面也具備LVS directors failover功能。
2)keepalive服務兩大用途:healthcheck & failover
a、ha failover功能:實現LB Master主機和Backup主機之間故障轉移和自動切換。
這是針對有兩個負載均衡器Director同時工做而採起的故障轉移措施。當主負載均衡器失效或出現故障時,備份負載均衡器將自動接管主負載均衡器的全部工做(VIP資源及相應服務),一旦主負載均衡器故障修復,主負載均衡器又會接管回它原來處理的工做,而備份負載均衡器會釋放主負載均衡器失效時它接管的工做,此時兩者將恢復到最初各自的角色狀態。
b、rs healthcheck功能:負載均衡按期檢查RS的可用性決定是否給其分發請求。
當虛擬服務器中的某一個甚至是幾個真實服務器同時發生故障沒法提供服務時,負載均衡器會自動將失效的RS服務器從轉發隊列中清除出去。從而保證用戶的訪問不受影響;當故障的RS服務器被修復後,系統又會自動地把它們加入轉發隊列,分發請求提供正常服務。
3)keepalived故障切換轉移原理介紹
keepalived directors之間的故障切換轉移,是經過VRRP(虛擬路由器冗餘協議)來實現的。在keepalived Directors正常工做時,主Director節點會不斷的向備節點廣播心跳消息,用以告訴備節點本身還活着,當主節點發生故障時,備節點就沒法繼續檢測到主節點的心跳,進而調用自身的接管程序,接管主節點的ip資源及服務。而當主節點恢復故障時,備節點會釋放主節點故障時自身接管的ip資源及服務,恢復到原來的自身的備用角色。
4、Keepalived安裝
1)下載和安裝keepalived
[root@aliyun tools]# wget http://www.keepalived.org/software/keepalived-1.1.19.tar.gz 下面這個在LVS解釋過 [root@aliyun ~]# ln -s /usr/src/kernels/2.6.32-696.1.1.el6.x86_64/ /usr/src/linux //若是此處不ln,,,換個辦法就是--with-kernel-dir=/usr/src/kernels/2.6.18內核版本 yum install -y kernel-devel [root@aliyun tools]# tar -zxf keepalived-1.1.19.tar.gz [root@aliyun tools]# cd keepalived-1.1.19 [root@aliyun keepalived-1.1.19]# ./configure 要看到3個yes Use IPVS Framework : Yes IPVS sync daemon support : Yes Use VRRP Framework : Yes [root@aliyun keepalived-1.1.19]# make && make install
2)改配置文件目錄
[root@aliyun ~]# cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/ #生成啓動腳本命令 [root@aliyun ~]# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ #配置啓動腳本的參數 [root@aliyun ~]# mkdir -p /etc/keepalived #建立默認的keepalived配置文件路徑 [root@aliyun ~]# cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ #把keepalived.conf模板拷貝到目錄下 [root@aliyun ~]# cp /usr/local/sbin/keepalived /usr/sbin/ [root@aliyun ~]# /etc/init.d/keepalived start [root@aliyun ~]# /etc/init.d/keepalived stop
3)對於配置文件的幫助
[root@aliyun ~]# man keepalived.conf
4)配置keepalive
需求,兩個服務器,一個配置爲master,一個爲backup,單實例
此時當作兩個keepalive都以安裝完畢,,,兩個機器都作以下配置,一個配置文件是master,一個是backup,,,添加配置文件,,若是有須要能夠聯繫我
[root@aliyun ~]# cd /etc/keepalived/ [root@aliyun ]# mv keepalived.conf keepalived.conf.bak [root@aliyun ]# mv keepalived.conf.1-dan keepalived.conf [root@aliyun keepalived]# /etc/init.d/keepalived restart
5)查看
ifconfig是看不到,,,ip add看
此時若是查看到兩個機器上都有虛擬ip,,此時就出現了裂腦的問題了,,,,查看http://oldboy.blog.51cto.com/2561410/1240412
個人問題就是由於備份服務器的防火牆沒有關,沒法進行心跳檢測,,因此正常狀況下只有MASTER會顯示ip,而備份時不顯示的,當MASTER掛了以後,SLAVE起來。
自動切換。
多實例跟單實例差很少,就是配置文件的更改問題
6)優化設置,,日誌文件
日誌的默認路徑: cat /var/log/messages 修改日誌的路徑: vim /etc/sysconfig/keepalived KEEPALIVED_OPTIONS="-D -d -S 0" //默認0 vim /etc/rsyslog.conf local0.* /var/log/keepalived.log //local0.*,全部的狀態都打印 /etc/init.d/rsyslog restart /etc/init.d/keepalived restart
7)keepalived+LVS配置文件
! Configuration File for keepalived #註釋 global_defs { #全局定義 notification_email { #通知的郵件,當有問題的時候通知,能夠不配,用處不大,,收件人 } notification_email_from Alexandre.Cassen@firewall.loc #發件人 smtp_server 10.0.0.1 smtp_connect_timeout 30 router_id LVS_7 } vrrp_instance VI_1 { #一個實例 state MASTER interface eth0 virtual_router_id 55 priority 150 advert_int 1 #接管的間隔 authentication { #受權 auth_type PASS auth_pass 1111 } virtual_ipaddress { #VIP 10.0.0.10/24 } } ########################LVS+Keepalived,,,因此二者一塊兒使用的時候,只要在這個配置文件裏配置LVS的功能,不用經過Ipvsadm來配置,,配置好後,能夠經過ipvsadm -L -n來查看 virtual_server 10.0.0.10 80 { delay_loop 6 #健康檢查時間間隔 lb_algo rr #負載均衡調度算法 lb_kind DR #負載均衡轉發規則 persistence_timeout 300 #設置會話保持時間,對bbs等頗有用 protocol TCP #協議 #ipvsadm -A -t 10.0.0.10:80 -s rr -p 300 real_server 10.0.0.1 80 { weight 3 #設置權重 TCP_CHECK { #健康檢查 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 10.0.0.2 80 { weight 3 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } #ipvsadm -a -t 10.0.0.10:80 -r 10.0.0.1 -g -w 1 #ipvsadm -a -t 10.0.0.10:80 -r 10.0.0.2 -g -w 2 最後客戶端仍是要作,VIP綁定和ARP抑制,,能夠參考LVS裏面的
5、LVS負載均衡代碼平滑上線發佈思路
發佈代碼:
開發人員本地測試--》辦公室內部測試--》(配置管理員)--》IDC機房測試環境(測試人員)--》正式服務器
在真實服務器上通常都是下一半服務器,在不提供的服務的服務器上先測試服務,另外一半服務器提供原來的代碼服務,,
讓真實服務器暫時不提供服務
ipvsadm -d -t 10.0.0.10:80 -r 10.0.0.8