ipvs和ipvsadm

ipvs和ipvsadm

ipvs:内核中的协议栈上实现

	ipvs是LVS软件核心,是运行在LB上的,这是个基于ip层的负载均衡。
	ipvs的总体结构主要有ip包处理,负载均衡算法,系统配置和管理三个模块以及虚拟服务器与真实服务器链表组成。
	ipvs管理集群服务管理服务上的RS。
	一个ipvs主机可以同时定义多个cluster server,但可能会影响调度性格。
	一个ipvs服务至少应该有一个RS。
	grep -i -C 10 "ipvs" /boot/config-VERSION-RELEASE.x86_64
	支持的协议:TCP,UDP,AH,ESP,AH_ESP,SCTP
	ipvs 规则: /proc/net/ip_vs
	ipvs 连接:/proc/net/ip_vs_conn

ipvsadm:用户空间的集群服务管理工具

	1)程序包:ipvsadm
		rpm -ql ipvsadm 
		/etc/sysconfig/ipvsadm-config
		/usr/lib/systemd/system/ipvsadm.service
		/usr/sbin/ipvsadm
		/usr/sbin/ipvsadm-restore
		/usr/sbin/ipvsadm-save
		/usr/share/doc/ipvsadm-1.27
		/usr/share/doc/ipvsadm-1.27/README
		
		Unit File: ipvsadm.service
		主程序:/usr/sbin/ipvsadm
		规则保存工具:/usr/sbin/ipvsadm-save
		规则重载工具:/usr/sbin/ipvsadm-restore
		配置文件:/etc/sysconfig/ipvsadm-config
	2)命令:ipvsadm
		ipvsadm - Linux Virtual Server administration
		  ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]
		  ipvsadm -D -t|u|f service-address
		  ipvsadm -C
		  ipvsadm -R
		  ipvsadm -S [-n]
		  ipvsadm -a|e -t|u|f service-address -r server-address [options]
		  ipvsadm -d -t|u|f service-address -r server-address
		  ipvsadm -L|l [options]
		  ipvsadm -Z [-t|u|f service-address]
		  ipvsadm --set tcp tcpfin udp
		  ipvsadm --start-daemon state [--mcast-interface interface] [--syncid sid]
		  ipvsadm --stop-daemon state
			-A   ,--add-service      	添加一个集群服务
			-E   ,--edit-service     	修改已添加的集群服务
			-D   ,--delete-service   	删除虚拟服务
			-C   ,--clear            	清空整个表
			-R   ,--restore          	从标准输入重载
			-S   ,--save             	保存值到标准输出。
			-a   ,--add-server       	向指定的Client Server中添加Real Server.
			-e   ,--edit-server      	修改RS
			-d   ,--delete-server    	删除真实服务
			-L|-l,--list             	列出表
			-Z   ,--zero             	清空计数器
			--set tcp tcpfin udp      	设置连接超时值
			--start-daemon            	开启连接同步后台进程
			--stop-daemon             	停止连接同步后台进程
			-t service-address,--tcp-service     	服务地址是 host[:port],tcp协议
			-u service-address,--udp-service     	服务地址是host[:port],udp协议
			-f fwmark,--fwmark-service           	防火墙标记
			-6          ,--ipv6             	fwmark 项使用 IPv6
			-s scheduler,--scheduler        	rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,调度方法其中之一,默认为wlc。
			--pe engine        	备用持久性引擎可能是 sip,默认情况下不设置
			-p [timeout]      ,--persistent       	持续连接
			-M netmask        ,--netmask          	持久粒度掩码
			-r server-address ,--real-server      	服务地址主机和端口,只有支持端口映射的LVS类型才允许此处使用和集群服务中不同的端口
			-g                ,--gatewaying       	gatewaying (direct routing) (default),dr模式
			-i                ,--ipip             	ipip encapsulation (tunneling),tun模式
			-m                ,--masquerading     	masquerading (NAT),nat模式
			-w weight         ,--weight           	实际服务器容量,指定权重
			-x uthreshold     ,--u-threshold      	连接的高等门限
			-y lthreshold     ,--l-threshold      	连接的低等门限
			--mcast-interface interface         	连接同步的多播接口
			--syncid sid                        	syncid 同步连接(default=255)
			-c,--connection                      	显示ipvs连接
			--timeout                           	超时时间输出(tcp tcpfin udp)
			--daemon                            	后台进程信息输出
			--stats                             	统计数据
			--rate                              	速率
			--exact                             	精确值
			--thresholds                        	线程信息输出
			--persistent-conn                   	当前连接信息输出
			--nosort                            	禁用对服务器/服务的排序输出
			--sort                              	不做任何事情,因为后台兼容性
			-o       ,--ops                      	单包调度
			-n       ,--numeric                  	数字格式显示ip和port,注意-n只能写在-L之后。
			-b flags ,--sched-flags              	调度标志(comma-separated)
			
		3)核心功能:
			集群服务管理:增、删、改
			集群服务的RS管理:增、删、改
			查看
		
		4)管理集群服务:增、改、删
			增、改:
				ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
			删除:
				ipvsadm -D -t|u|f service-address
				service-address: 
					-t|u|f: 
						-t: TCP 协议的端口,VIP:TCP_PORT
						-u: TCP 协议的端口,VIP:UDP_PORT
						-f :firewall MARK ,标记,一个数字
				[-s scheduler] :指定集群的调度算法,默认为wl
		
		5)管理集群上的RS :增、改、删
			增、改:
				ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
			删:
				ipvsadm -d -t|u|f service-address -r server-address
				server-address:
					rip[:port] 如省略port ,不作端口映射
			选项:
				lvs类型:
					-g: gateway, dr 类型,默认
					-i: ipip, tun 类型
					-m: masquerade, nat 类型
					-w weight:指定权重
		6)清空定义的所有内容:ipvsadm –C
		
		7)清空计数器:ipvsadm -Z [-t|u|f service-address]
		
		8)查看:
			ipvsadm -L|l [options]
				--numeric, -n :以数字形式输出地址和端口号
				--exact :扩展信息,精确值
				--connection ,-c :当前IPVS 连接输出
				--stats :统计信息
				--rate  :输出速率信息
		9)保存:
			建议保存至/etc/sysconfig/ipvsadm
			ipvsadm-save > /PATH/TO/IPVSADM_FILE
			ipvsadm -S > /PATH/TO/IPVSADM_FILE
			systemctl stop ipvsadm.service
		10)重载:
			ipvsadm-restore < /PATH/FROM/IPVSADM_FILE
			ipvsadm -R < /PATH/FROM/IPVSADM_FILE
			systemctl restart ipvsadm.service

FireWall Mark:FWM

	1)MARK target 可用于给特定的报文打标记,在netfilter上给报文打标记,mangle表
		--set-mark value
		其中:value 为十六进制数字
	
	2)借助于防火墙标记来分类报文,而后基于标记定义集群服务。
		可将多个不同的应用使用同一个集群服务进行调度。
		也就是将http和https统一调度,可以实现无论你访问http和https都给你调度到后面的真实的服务器,不用每一个服务都单独的创建一个集群服务。
		打标记实现方法:
			在Director 主机打标记:
				iptables -t mangle -A PREROUTING -d $vip -p $proto –m multiport --dports $port1,$port2,… -j MARK --set-mark NUMBER
			在Director 主机基于标记定义集群服务:
				ipvsadm -A -f NUMBER [options]++++
		定义集群服务:
			ipvsadm -A -f MARK -s rr -p
			ipvsadm  -a  -f   MARK  -r  ip  -g  -w 1
		查看
			ipvsadm -Ln 
			ipvsadm -Ln --rate
				Forward:转发方法
				Weight:权重
				ActiveConn:活动连接数
				InActiveConn:非活动连接数
				CPS:connections per seconds
				InnPPS:Input packets per seconds
				OutPPS:output packets per seconds
				InBPS:input bytes per seconds
				OutBPS:Output bytes per seconds
	3)作用:
		同一服务不同端口使用一个设置搞定
		 
	4)具体实现
		在VS上进行如下设置
			iptables -t mangle -A PREROUTING -d 192.168.74.88 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 12  
				##无论访问VIP的80还是443端口统一打标签为12
			iptables -t mangle -vnL 
			ipvsadm -A -f 12 -s wrr   -
				##创建一个集群服务,只要标签是12的调度算法都是wrr
			ipvsadm -a -f 12 -r 192.168.74.129 -g -w 3  
				##将RS添加到集群服务里
			ipvsadm -a -f 12 -r 192.168.74.133 -g
			ipvsadm -Ln
		在客户端进行测试
			curl 192.168.74.88
			curl -k https://192.168.74.88/  
				##k表示忽略证书访问
posted @ 2018-02-23 11:12  shenxm  阅读(5299)  评论(0编辑  收藏  举报