lvs集群基础及lvs-nat、dr、fwm实践

集群基础知识点:

集群类型: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模型

image.png

搭建环境配置

1、director核心转发功能设置,打开核心转发功能:两个网卡间,若永久有效编辑配置文件

vim /etc/sysctl.d/*conf 添加net.iPv4.ip_forward=1

确保RS网关指向director内网地址(内网基于host-only通信),测试是否能通信:

image.png

image.png

2、配置RSweb服务启动

image.png

3、director请求服务是否正常

image.png

4、director添加集群服务规则

image.png

5、lvs集群实现调度的效果

image.png

总结要点:

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:总是避免;

模型:

image.png


调整网络director、rs在同一网络192.168.1,配置IP、vip

配置director添加vip方法:

1.IP addr add命令实现

image.png

2.ifconfig interface:alias ip netmask方法:

image.png

3.rs-vip配置并设置内核参数

image.png

image.png

4.给director添加集群服务规则

image.png

5.通过本地访问服务:

image.png

image.png

设计要点:

(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



猜你喜欢

转载自blog.51cto.com/12580678/2132721