[高可用系列|LVS]LVS NAT模型详解

背景

 前面一章我们整体介绍了LVS的概念和功能。其中提到了LVS的几个关键的工作模型(NAT,DR,TRUN),这一章我们就针对NAT工作模型来具体介绍,同时通过一套基础架构实验来帮助理解。

上一章:LVS详解

LVS  NAT模型介绍

         Virtual Server via NAT(VS-NAT):用地址翻译实现虚拟服务器。地址转换器有能被外界访问到的合法IP地址,它修改来自专有网络的流出包的地址。外界看起来包是来自地址转换器本身,当外界包送到转换器时,它能判断出应该将包送到内部网的哪个节点。优点是节省IP 地址,能对内部进行伪装;缺点是效率低,因为返回给请求方的数据包经过调度器,导致调度器压力过大。  

 

  数据包流转的过程如上图所示:

(1)当用户请求到达DirectorServer,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP

(2) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链。

(3) IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP ,在这个过程完成了目标IP的转换。

(4) POSTROUTING链通过选路,将数据包发送给Real Server。

(5) Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP 。

(6) Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP。

 补充:

(1)lvs-nat的本质是多目标ip的DNAT,通过将请求报文中的目标地址和目标端口修改为后端real server的ip和port

(2)DIP和Rip建议在同一网段(也可以不在),

(3)请求报文和相应报文必须经过lvs服务器,因此lvs就会成为该架构的瓶颈

(4)支持端口映射可以更改请求报文的目标端口

(5)lvs服务器必须是linux系统,real server可以为任意os系统

LVS-NAT 实验 

 转发流程:

        1.  Client端发送请求到路由器;
        2.  由于是linux系统模拟的路由器,因此路由器节点开启ip转发功能,同时通过iptable设置端口映射,将访问路由器的10.10.10.129的信息映射到后端的LVS的192.168.10.200;
        3.  到达lvs节点之后,通过lvs配置的LVS-NAT模型(四层负载)转发发哦NGinx节点;
        4.  到达Nginx节点之后,通过Nginx的七层负载均衡转发到web节点

 1.     网络规划

设备 ip 网关
Client 10.10.10.128/24 -
Route-link1 10.10.10.129/24 -
Route-link2 192.168.10.10/24 -
LVS-vip 192.168.10.100/24 192.168.10.10
nginx-1 192.168.10.12/24 192.168.10.100
nginx-2 192.168.10.13/24 192.168.10.100
web-1 192.168.10.15/24 -
web-2 192.168.10.16/24 -

 2.    Route节点配置

        配置Route节点的路由转发,以及配置设备ip。结合实际生产环境路由器上面需要开启端口映射。

##  由于是linux模拟的路由器,设置Route节点ip转发功能
root@Route:~# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
root@Route:~# sysctl -p


##开启端口映射
root@Route:~# iptables -t nat -A PREROUTING -d 10.10.10.129 -j DNAT --to 192.168.10.200

 

 3.    LVS 节点配置

         1.   配置路由转发;
        2.  配置IP地址,网关指向路由;
        3.  配置keepalived设置vip。
        4.   配置ipvs转发

3.1        配置路由转发

##  主备节点均配置

root@Lvs-Master:~#echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
root@Lvs-Master:~# sysctl -p

3.2        配置ip和网关

 

 3.3    配置keepalived

###Master节点

root@Lvs-Master:~# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen
   }
   notification_email_from [email protected]
   smtp_server 192.168.65.129
   smtp_connect_timeout 30
   router_id keepalived-MASTER
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    garp_master_delay 10
    smtp_alert
    virtual_router_id 51
    priority 100
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.200
    }
    
}

##Backup节点
root@LVS-Backup:~# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen
   }
   notification_email_from [email protected]
   smtp_server 192.168.65.129
   smtp_connect_timeout 30
   router_id keepalived-MASTER
}


vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    garp_master_delay 10
    smtp_alert
    virtual_router_id 51
    priority 10
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.200
    }
}

 3.4    配置ipvs转发

##  主备节点均要配置
##192.168.10.12和192.168.10.13节点为后端的nginx服务器
##192.168.10.200为VIP

root@Lvs-Master:~# ipvsadm -A -t 192.168.10.200:80 -s rr
root@Lvs-Master:~# ipvsadm -a -t 192.168.10.200:80 -r 192.168.10.12:80 -m
root@Lvs-Master:~# ipvsadm -a -t 192.168.10.200:80 -r 192.168.10.13:80 -m

root@Lvs-Master:~# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.10.200:80 rr
  -> 192.168.10.12:80             Masq    1      0          0         
  -> 192.168.10.13:80             Masq    1      0          0   

4.    Nginx节点配置

         Nginx配置七层负载均衡!

root@proxy-1:/etc/nginx/conf.d# cat web1.conf 
upstream lvsservers {
	server 192.168.10.15:80;
	server 192.168.10.16:80;
}

server {
	listen 80;
	server_name lvs_test.com www.lvs_test.com;
	root /https;

	location / {
		proxy_pass http://lvsservers;
		include proxy_params;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	}

}

 5.  配置web节点

##  web1节点
root@web-1:~# cat /etc/nginx/conf.d/web.conf 
server {
	listen 80;
	server_name lvs_test.com www.lvs_test.com;

	location / {
		root /https;
		index index.html;
	}
}
root@web-1:~# cat /https/index.html 
web1
root@web-1:~#


##web2节点
root@web-2:~# cat /etc/nginx/conf.d/web.conf 
server {
	listen 80;
	server_name lvs_test.com www.lvs_test.com;

	location / {
		root /https;
		index index.html;
	}
}
root@web-2:~# cat /https/index.html 
web2
root@web-2:~#

6.   测试

 前面在介绍keepalived说过,keepalived是为了LVS而生的,因此我们在配置lvs四层转发的时候可以直接通过keepalived的配置文件进行设置,后续我们在说DR模型的时候,在着重通过该方式进行实验配置。

猜你喜欢

转载自blog.csdn.net/qq_43714097/article/details/126767512