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表示忽略证书访问