简介前端
[root@salt-node01 ~]# lsmod | grep ip_vs ip_vs_rr 12600 0 ip_vs 141092 2 ip_vs_rr nf_conntrack 111302 7 ip_vs,nf_nat,nf_nat_ipv4,nf_nat_ipv6,xt_conntrack,nf_conntrack_ipv4,nf_conntrack_ipv6 libcrc32c 12644 2 xfs,ip_vs You have new mail in /var/spool/mail/root
管理工具(都可经过yum来安装):node
ipvsadm、keepalived、 Piranha(RedHat提供的)python
术语:算法
CIP、VIP、DIP、RIP后端
集群组成:缓存
利用LVS搭建的集群系统由3部分组成:最前端的是负载均衡层,中间层是服务器集群层,最后层是共享存储层。共字存储层是为全部Real Server提供共亨存储空问和内容一致性的存储区域,通常由磁盘阵列设备组成。为了提俱内容的一致性,通常能够经过NFS网络义件系统共 亨数据,可是NFS在繁忙的业务系统中,性能并非很好,此时能够采用集群文件 系统,例如Red Hat的GFS文件系统,Oracle提供的OS2文件系统等。此文章不对共享存储层作详细介绍,详情可参照后边的文章。以下图所示
服务器
模式:网络
A.NAT 做用于4层,传输层并发
流程:初始是CIP:VIP 通过LB时,LB根据调度算法选择合适的后端RealServer,并将数据包的vip修改成realserver的ip地址,并写到hash记录表中;此时数据包变为了CIP:RIP。将数据包发送给RIP,RIP进行处理后将数据包(RIP:CIP)发送给LB,LB根据hash记录表,将RIP修改成VIP,而后将数据包发送给CIP。来访问是DNAT的过程,返回是SNAT的过程。负载均衡
LB:须要在指定网卡绑定vip
RS:须要将网关设置为LB的IP地址
优势:可对指定后端rs的端口,便可以更改端口
缺点:进出数据包都会通过LB,LB的网卡流量会是瓶颈
适用场景:非高并发请求场景,10个RS之内;可隐藏内部的DIP和RIP地址;
B.DR 做用于二层,数据链路层
流程:初始数据包目标MAC地址是LB的MAC,通过LB时,LB根据调度算法选择合适的后端RealServer,并将数据包的目标MAC地址修改成realserver的MAC地址,此时数据包的目标地址是RS的MAC,数据包在LB通过泛洪,发送到RS,RS处理时,发现数据IP是本身Lo的IP地址,因此能够进行处理不会丢弃;RS处理数据包后,将数据包VIP:CIP直接发送给CIP
LB:须要在指定网卡绑定VIP
RS:须要抑制ARP,且LB和RS要在一个广播域
缺点:不能更改端口,LB和RS必须在一个广播域,须要关闭RS的arp解析,绑定vip
优势:负载能力比NAT强,LB流量不会是瓶颈
场景:由于响应报文不通过Director,极大的减轻了Director的负载压力,故Director能够支持更大的并发访问,通常RS在100台之内;
C.IP TUN
D.FULLNAT
调度算法:
--scheduler -s scheduler one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq, the default scheduler is wlc.
rr:Round Robin # 即轮询 wrr:Weighted RR # 即加权轮询 sh:Source Hashing # 即来源IP地址hash dh:Destination Hashing # 即目标地址hash(不经常使用,仅用于前端多防火墙的场景,保证防火墙的链接追踪功能有效)
动态算法:
lc:Least Connection # 评判标准:Overhead=Active*256+Inactive # Overhead最小者胜出 wlc:Weighted LC # 评判标准:Overhead=(Active*256+Inactive)/weight # Overhead最小者胜出 sed:Shortest Expect Delay # 评判标准:Overhead=(Active+1)*256/weight # Overhead最小者胜出 nq:Never Queue # 集群开始时工做时,每台服务器都至少分配一个链接请求,而后再根据sed算法调度; lblc:Locality-based Least Connection # 相似于dh+lc lblcr:Relicated and Locality-based Least Connection # 主要用于后端服务器是缓存服务器时
IPVSADM命令参数详解:
ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p [timeout]] [-M netmask] ipvsadm -D -t|u|f virtual-service-address ipvsadm -C ipvsadm -R ipvsadm -S [-n] ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port [-g|i|m] [-w weight] 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] ipvsadm --stop-daemon ipvsadm -h 命令选项解释: 有两种命令选项格式,长的和短的,具备相同的意思。在实际使用时,两种均可以。 -A --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增长一台新的虚拟服务器。 -E --edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。 修改定义过的集群服务 -D --delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。 -C --clear 清除内核虚拟服务器表中的全部记录。 -R --restore 恢复虚拟服务器规则 -S --save 保存虚拟服务器规则,输出为-R 选项可读的格式 -a --add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增长一台新的真实服务器 -e --edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录 -d --delete-server 删除一条虚拟服务器记录中的某条真实服务器记录 -L|-l --list 显示内核虚拟服务器表 userver 列表; -Z --zero 虚拟服务表计数器清零(清空当前的链接数量等) --set tcp tcpfin udp 设置链接超时值 --start-daemon 启动同步守护进程。他后面能够是master 或backup,用来讲明LVS Router 是master 或是backup。在这个功能上也能够采用keepalived 的VRRP 功能。 --stop-daemon 中止同步守护进程 -h --help 显示帮助信息 其余的选项: -t --tcp-service service-address 说明虚拟服务器提供的是tcp 的服务[vip:port] or [real-server-ip:port] -u --udp-service service-address 说明虚拟服务器提供的是udp 的服务[vip:port] or [real-server-ip:port] -f --fwmark-service fwmark 说明是通过iptables 标记过的服务类型。一般用于将两个或两个以上的服务绑定为一个服务进行处理时使用; -s --scheduler scheduler 使用的调度算法,有这样几个选项 rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是:wlc. -p --persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客户的屡次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。 持久链接; -M --netmask netmask persistent granularity mask -r --real-server server-address 真实的服务器[Real-Server:port] -g --gatewaying 指定LVS 的工做模式为直接路由模式(也是LVS 默认的模式) DR模型 -i --ipip 指定LVS 的工做模式为隧道模式 -m --masquerading 指定LVS 的工做模式为NAT 模式 -w --weight weight 真实服务器的权值 --mcast-interface interface 指定组播的同步接口 -c --connection 显示LVS 目前的链接 如:ipvsadm -L -c --timeout 显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout --daemon 显示同步守护进程状态 --stats 显示统计信息 ipvsadm –Ln --state 总共的数量 --rate 显示速率信息 ipvsadm –Ln --rete 平均值 --sort 对虚拟服务器和真实服务器排序输出 --numeric -n 输出IP 地址和端口的数字形式
集群相关参数:
-A --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增长一台新的虚拟服务器。 -t --tcp-service service-address 说明虚拟服务器提供的是tcp 的服务[vip:port] or [real-server-ip:port] -u --udp-service service-address 说明虚拟服务器提供的是udp 的服务[vip:port] or [real-server-ip:port] -s --scheduler scheduler 使用的调度算法,有这样几个选项 rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是:wlc. -p --persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客户的屡次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。 持久链接; -E --edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。 修改定义过的集群服务 -D :删除指定集群服务
RS相关参数:
-a --add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增长一台新的真实服务器 向指定的CS中添加RS -r --real-server server-address 真实的服务器[Real-Server:port],只有支持端口映射的LVS类型才容许此处使用跟集群服务中不一样的端口 LVS 类型: -g : gateway,DR # 指定集群类型为LVS/DR -i ipip,TUN # 指定集群类型为LVS/TUN -m:masquerade,NAT # 指定集群类型为 NAT -w:指定RS权重: -e:修改指定的RS属性 -d :从指定的集群服务中删除某RS
DR模式配置实例:
LB:lvs服务端启停脚本
[root@salt-node01 sbin]# cat ipvs ##CONSTANT VIP=192.168.142.140 INTERFACE=ens33 SUBINTERFACE=$INTERFACE:`echo ${VIP} | awk -F "." '{print $4}'` PORT=80 METHOD=rr RETVAR=0 RIPS=( 192.168.68.150 192.168.68.152 ) ##COMMAND OF ABS PATH IP=/usr/sbin/ip IPVSADM=/usr/sbin/ipvsadm . /etc/init.d/functions function Usage(){ echo "Usage: $0 {start|stop|status|restart}" return 1 } function ipvsStart(){ $IP addr add $VIP/24 dev ${INTERFACE} label $SUBINTERFACE $IPVSADM -C #add vip instance $IPVSADM -A -t $VIP:$PORT -s $METHOD #echo ${#RIPS[*]} for((i=0;i<`echo ${#RIPS[*]}`;i++)) do $IPVSADM -a -t $VIP:$PORT -r ${RIPS[$i]}:$PORT -g done RETVAR=$? if [ $RETVAR -eq 0 ] then action "Ipvsadm started sucessed" /bin/true else action "Ipvsadm started failed" /bin/false fi } function ipvsStop(){ #clear virtual server $IPVSADM -C #clear number of connection $IPVSADM -Z $IP addr del $VIP/24 dev ${INTERFACE} label $SUBINTERFACE &>/dev/null RETVAR=$? if [ $RETVAR -eq 0 ] then action "Ipvsadm stopped" /bin/true else action "Ipvsadm stopped" /bin/false fi return $RETVAR } main(){ #Judge argv num if [ $# -ne 1 ]; then Usage $0 fi echo $1 case "$1" in start) ipvsStart ;; restart) ipvsStop ipvsStart ;; *) Usage $0 ;; esac } main $*
健康检查:
Q:lvs rr算法,可是请求不均,
调整会话保持时间:lvs会话保持时间和后端RS的会话保持时间Q: 更换防火墙IP,形成旧节点没法访问IDC机房刷新arp缓存表时间较长Q:LVS RS下架,用做其余服务用;lo口绑定vip完善下线机制