LVS的持久連接、會話保持和高可用介紹


持續連接

	1)持久連接(lvs persistence)模板:
		實現無論使用任何調度算法,在一段時間內(默認360s),能夠實現將來自同一個地址的請求始終發往同一個RS
			ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
				-p # :定義持久時長
	
	2)持久連接實現方式:
		每端口持久(PPC):每個端口對應定義為一個集群服務,每個集群服務單獨調度,同一服務持久
		每防火牆標記持久(PFWMC ):基於防火牆標記定義集群服務,可實現將多個端口上的應用統一調度,即所謂的port Affinity,同一防火牆標記持久
		每客戶端持久(PCC ):基於0端口(表示所有服務)定義集群服務,即將客戶端對所有應用的請求都調度至后端主機,必須定義為持久模式,所有服務持久將vip的端口定義為0,則表示所有請求都將發送后台服務器。
		
	3)具體實現
		在VS上進行如下操作
			[root@centos7 ~]#ipvsadm -E -f 12 -s rr -p 300   
			[root@centos7 ~]#ipvsadm -Ln
				IP Virtual Server version 1.2.1 (size=4096)
				Prot LocalAddress:Port Scheduler Flags
				  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn      
				FWM  12 rr persistent 300
				  -> 192.168.74.129:0             Route   1      0          0         
				  -> 192.168.74.133:0             Route   1      0          0

session保存機制(會話機制)

	session綁定(session sticky)
		始終將同一個請求者的請求發送到同一台RS(第一次請求由算法調度)
		缺陷:沒有容錯能力,若此RS宕機,則會話丟失,並且將同一請求發送到同一RS有損均衡效果。
	session復制(session cluster)
		在RS之間同步session,因此每個RS都保持集群中的所有session
		缺陷:增加了RS的負擔,對大規模的集群不適用
	session服務器(session server),redis:
		用單獨一組服務器來管理session

LVS的高可用

	1.Director 不可用,整個系統將不可用,SPoF Single Point of  Failure
		解決方案:高可用
			keepalived heartbeat/corosync
	
	2.某RS不可用時,Director 依然會調度請求至此RS
		解決方案:由Director 對各RS健康狀態進行檢查,失敗時禁用,成功時啟用
			keepalived heartbeat/corosync, ldirectord
		檢測方式:
			(a) 網絡層檢測,icmp
			(b) 傳輸層檢測,端口探測
			(c) 應用層檢測,請求某關鍵資源
			RS 全不用時:back server, sorry server
			
		ldirectord
			ldirectord :監控和控制LVS 守護進程,可管理LVS 規則
			包名:ldirectord-3.9.6-0rc1.1.1.x86_64.rpm
			文件:
				/etc/ha.d/ldirectord.cf 	主配置文件
				/usr/share/doc/ldirectord-3.9.6/ldirectord.cf	 配置模版
				/usr/lib/systemd/system/ldirectord.service 	服務
				/usr/sbin/ldirectord 	主程序
				/var/log/ldirectord.log  	日志
				/var/run/ldirectord.ldirectord.pid 	pid 文件
			
			ldirectord 配置文件示例
				checktimeout=3	如果3秒沒有反應就認為是有故障了
				checkinterval=1	表示一秒檢查一次后端的服務器
				autoreload=yes	自動加載配置文件,不用重啟就可以生效
				logfile=“/var/log/ldirectord.log“	日志文件
				quiescent=no  	down 時yes權重為0 ,no為刪除
				virtual=5                            	指定VS的FWM或IP:port
				real=172.16.0.7:80 gate 2	gate表示dr模式,2表示權重為2
				real=172.16.0.8:80 gate 1	權重為1
				fallback=127.0.0.1:80 gate #sorry server	定義后面的VS全部宕機了,由誰來提供服務
				service=http	服務類型
				scheduler=wrr	調度算法
				checktype=negotiate	定義檢查的類型為協商模式
				checkport=80	檢查的端口
				request="index.html"	
				receive=“Test Ldirectord"	表示檢查的時候看到什么字樣就可以說是健康的,是index.html中的,注意大小寫敏感
		
	3.由VS對各RS進行健康狀態檢查的實現
		1)編寫腳本來實現
			#!/bin/bash
			while true;do
			     curl 192.168.74.133 &> /dev/null && ipvsadm -a -f 12 -r 192.168.74.133 &>/dev/null || ipvsadm -d -f 12 -r 192.168.74.133 &>/dev/null
			     sleep 1
			done
		2)通過ldirectord來實現
			1、
				yum install ldirectord-3.9.5-5.1.x86_64.rpm 
				rpm -ql ldirectord
				cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/  ###把模板拷貝到配置文件的目錄當做配置文件
			2、
				ipvsadm -C   ##清空之前的集群服務,在配置文件里可以定義集群服務,並對RS進行實時監控
				ipvsadm -Ln
			3、
				vim /etc/ha.d/ldirectord.cf
					checktimeout=3
					checkinterval=1
					autoreload=yes
					quiescent=no
					# Sample for an http virtual service
					virtual=192.168.74.88:80
					real=192.168.74.133:80 gate
			        real=192.168.74.129:80 gate
			        fallback=127.0.0.1:80  ##表示兩台VS都有故障了就由本機來代替,這樣本機也得裝一個httpd服務
			        service=http
			        scheduler=rr
			        #persistent=600
			        #netmask=255.255.255.255
			        protocol=tcp
			        checktype=negotiate
			        checkport=80
			        request="index.html"
			        receive="welcom"    ##表示收到index.html里有welcom字樣就認為機器是好的
				在本機也安裝一個httpd服務
					vim /var/www/html/index.html  ##這樣兩台RS都盪機了就有本機提供服務顯示sorry server字樣
						sorry server
			4、測試
				分別宕機一台和兩台RS
				[root@centos7 resource.d]#ipvsadm -Ln    ##這是兩台都宕機的顯示,有本機提供服務
				IP Virtual Server version 1.2.1 (size=4096)
				Prot LocalAddress:Port Scheduler Flags
				  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
				TCP  192.168.74.88:80 rr
				  -> 127.0.0.1:80                 Route   1      0          0        
				此時在客戶端
					[root@redhat7 ~]#curl 192.168.74.88
					sorry server


免責聲明!

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



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