• 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
    
  • 相关阅读:
    [转贴] 2016一月12日起.NET 4, 4.5 and 4.5.1 停止安全更新、技术支持 or hotfix
    Windows Azure 入门 -- VS 2015部署 ASP.NET网站(项目) 与 数据库
    [职场]工作多久才能换工作?下一个工作年薪该多高?
    [转贴] ASP.NET -- Web Service (.asmx) & JSON
    ADO.NET #3-1 (GridView + DataReader + SqlCommand)完全手写Code Behind
    File 与 Log #3--动态加入控件,[图片版]访客计数器(用.txt档案来记录)
    小图示优化
    GridView的 PreRender事件与范例--GridView + CheckBox,点选多列资料(复选删除)
    [习题] FindControl 简单练习--GridView + CheckBox,点选多列数据(复选删除)#3 List或数组
    GridView的 PreRender事件与 RowCreated、RowDataBound事件大乱斗
  • 原文地址:https://www.cnblogs.com/shenxm/p/8461303.html
Copyright © 2020-2023  润新知