lvs集群基础及lvs-natdrfwm实践
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lvs集群基础及lvs-natdrfwm实践相关的知识,希望对你有一定的参考价值。
集群基础知识点:
集群类型:LB、HA、HP、DS
LB:load balance,负载均衡集群,director:负载均衡器或者调度器,上游服务(upstream server),后端服务器称为real server;
HA:high avalilability,高可用集群,评估高可用性能Availability = 平均无故障时间/(平均无故障时间+平均修复时间)
HP:high performance 超级计算机类型
LB集群的实现:硬件、软件(lvs: Linux Virtual Server、haproxy、nginx、ats (apache traffic server)、perlbal、
基于工作的协议层次划分:
传输层:(工作于内核)可以突破socket 可用端口的限制一共6W多个;lvs, haproxy (mode tcp)
应用层:(用户空间):haproxy (mode http), nginx, ats, perlbal
lvs的实现基于传输层:类型有四种nat、dr(direct routing)、tun、fullnat
lvs-nat:多目标的DNAT:通过将请求报文的目标地址和目标端口修改为挑选出某RS的RIP和PORT来实现;
(1) RIP和DIP应该使用私网地址,RS的网络应该指向DIP;
(2) 请求和响应报文都要经由director转发;极高负载的场景中,Director可能会成为系统瓶颈;
(3) 支持端口映射;
(4) VS必须为Linux,RS可以是任意的OS;
(5) RS的RIP与Director的DIP必须在同一IP网络;
lvs-dr:direct routing通过修改请求报文的MAC地址进行转发;IP首部不会发生变化(源IP为CIP,目标IP始终为VIP);
(1) 确保前端路由器将目标IP为VIP的请求报文一定会发送给Director;
解决方案:
静态绑定;在路由器上静态绑定VIP和director的Mac地址,禁止RS响应VIP的ARP请求;
(a) arptables;
(b) 修改各RS的内核参数,并把VIP配置在特定的接口上实现禁止其响应;
(2) RS的RIP可以使用私有地址,也可以使用公网地址;
(3) RS跟Director必须在同一物理网络中;
(4) 请求报文必须由Director调度,但响应报文必须不能经由Director;
(5) 不支持端口映射;
(6) 各RS可以使用大多数的OS;
lvs-tun:ip tunneling,ip隧道;转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是在原有的IP首部这外
再次封装一个IP首部(源IP为DIP,目标IP为RIP);
(1) RIP,DIP,VIP全得是公网地址;
(2) RS的网关不能也不可能指向DIP;
(3) 请求报文经由Director调度,但响应报文将直接发给CIP;
(4) 不支持端口映射;
(5) RS的OS必须支持IP隧道功能;
lvs-fullnat:(非标准模型)通过同时修改请求报文的源IP地址(cip-->dip)和目标IP地址(vip --> rip)实现转发;
(1) VIP是公网地址;RIP和DIP是私网地址,且可以不在同一IP网络中,但需要通过路由互相通信;
(2) RS收到的请求报文的源IP为DIP,因此其响应报文将发送给DIP;
(3) 请求报文和响应报文都必须经由director;
(4) 支持端口映射;
(5) RS可使用任意OS;
集群服务管理命令:需要检查内核是否支持ipvs:grep -A 11 -i 'IPVS' /boot/config-3.10.0-327.el7.x86_64
安装服务程序:yum install -y ipvsadm
ipvsadm命令的用法: (大写用于服务,小写用于RS)
管理集群服务命令:
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
ipvsadm -D -t|u|f service-address
-A:添加
-E:修改
-D:删除
service-address:
-t, tcp, vip:port
-u, udp, vip:port
-f, fwm, MARK Firewalls mask
-s scheduler:默认为wlc;加权最少连接
管理real server命令:
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
-a:添加一个RS
-e:修改一个RS 修改属性,修改IP地址要先删除再添加
-d:删除一个RS
-r server-address:RS地址 rip[:port]
-g:GATEWAY (默认) dr模型
-i: IPIP tun隧道模型
-m: MASQUERADE nat模型
查看命令:
ipvsadm -L|l [options]
-n:numeric,数字格式显示地址和端口,名称解析
-c:connection,显示ipvs连接;
--stats:统计数据;
--rate:速率
--exact:精确值
清空规则:ipvsadm -C
规则保存和重载:
保存:ipvsadm -S > /PATH/TO/SOME_RULE_FILE
ipvsadm-save > /PATH/TO/SOME_RULE_FILE
若重启生效:保存至默认路径/etc/sysconfig/ipvsadm
ipvsadm-save > /etc/sysconfig/ipvsadm
开机生效:systemctl enable ipvsadm
重载:ipvsadm -R < /PATH/FROM/SOME_RULE_FILE
ipvsadm-restore < /PATH/FROM/SOME_RULE_FILE
lvs-nat
实验环境:centos7x86虚拟机
nat模型
搭建环境配置
1、director核心转发功能设置,打开核心转发功能:两个网卡间,若永久有效编辑配置文件
vim /etc/sysctl.d/*conf 添加net.iPv4.ip_forward=1
确保RS网关指向director内网地址(内网基于host-only通信),测试是否能通信:
2、配置RSweb服务启动
3、director请求服务是否正常
4、director添加集群服务规则
5、lvs集群实现调度的效果
总结要点:
1.DIP与RIP要在同一网段,RIP网关指向dip
2.支持端口映射
3.是否用到共享存储 取决于业务要求:
lvs-dr
在各主机director,RS均需要配置VIP,因此,要解决地址冲突问题,目标是让各个RS上的VIP不可见,
仅用接收目标地址为VIP报文,同时又可以作为响应报文的源地址;
方案:1.在前端的网关接口上静态绑定
2.在RS上使用arptables
3.在各RS上修改内核参数,来限制arp响应和通告;
限制响应级别:arp_ignore
0:使用本地任意接口上配置地址进行响应;
1:仅在请求的目标IP配置在本地主机的接入报文的接口上时,才给予响应;
限制通告级别:arp_announce
0:默认,把本机所有接口向每一个接口通告;
1:尽量避免向本网络通告
2:总是避免;
模型:
调整网络director、rs在同一网络192.168.1,配置IP、vip
配置director添加vip方法:
1.IP addr add命令实现
2.ifconfig interface:alias ip netmask方法:
3.rs-vip配置并设置内核参数
4.给director添加集群服务规则
5.通过本地访问服务:
设计要点:
(1):各主机一个接口即可,但需要在同一网络
(2):rip的网关不能指向dip;rip和dip通常应该在同一 网段,但二者未必会与VIP在同一网段;
(3):各rs需先设置内核参数,在设置VIP和路由
fwm:在netfilter上实现给报文打记;mangle 需要在PREROUTNG链上打标,mangle可用于所有的链上
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
-t, -u: service-address
ip:port
-f: service-address
firewall mark $
基于fwm定义集群服务的步骤:
(1) 打标
# iptables -t mangle -A PREROUTING -d $vip -p $protocol --dport $serviceport -j MARK --set-mark #
mangle:
target: MARK
--set-mark value[/mask]16进制整数
可以实现多个端口标记:-m multiport
(2) 定义集群服务
# ipvsadm -A -f # [-s scheduler] [-p [timeout]] 默认300s
(3) 定义real server
lvs persistence:持久连接
功能:无论ipvs使用何种scheduler,其都能够实现在指定时间范围内始终将来自同一个ip地址的请求发往同一个RS;此功能是通过lvs持久连接模板实现,其与调度方法无关;
ipvs持久连接的模式:
每端口持久(PPC):per port,一个server可以有多个集群服务指向的端口不一80,8080,只对单个服务集群持久
每客户端持久(PCC):定义tcp或udp协议的0号端口为集群服务端口;对所有服务进行持久,无论访问任何访问,都是同一台服务主机
每FWM持久(PFWMC):只对同一防火墙标记进行持久如http, https绑定
eg:pfwmc https ca
iptables -t mangle -A PREROUTING -d 192.168.1.111 -p tcp -m multiport --dport 80,443 -j MARK --set-mark 10
ipvsadm -A -f 10 -s rr -p
ipvsadm -a -f 10 -r 192.168.1.201 -g
ipvsadm -a -f 10 -r 192.168.1.202 -g
pcc: 没有添加iptables打标记
ipvsadm -A -t 192.168.1.200:0 -s rr -p
ipvsadm -a -t 192.168.1.200:0 -r 192.168.1.201 -g -w 1
ipvsadm -a -t 192.168.1.200:0 -r 192.168.1.202 -g -w 2
以上是关于lvs集群基础及lvs-natdrfwm实践的主要内容,如果未能解决你的问题,请参考以下文章