1、LVS实现nat,dr
-
LVS简介
LVS是Linux Virtual Server的简称,其主要包含VS:Virtual server 和RS:Real server,VS根据请求报文中的目标IP和目标协议及端口通过其调度算法转发至后端的RS,实现四层路由器,四层交换机。 -
LVS的两个组件
- ipvadm:用户空间的命令行工具,规则创建和管理,用于管理集群服务及Real Server
- ipvs:工作于内核空间的netfilter的INPUT钩子之上的框架
-
LVS集群类型中的术语
- VS:Virtual Server ,Director
- RS:Real server,backend server
- CIP:Client IP
- VIP:Virtual Server IP
- DIP:Director IP
- RIP:Real Server IP
-
LVS集群类型
- lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
- lvs-dr:操纵封装新的MAC地址
- lvs-tun:在原请求IP报文之外新加一个IP首部
- lvs-fullnat:修改请求报文的源和目的IP(默认不支持)
-
LVS-NAT搭建
-
NAT集群设计要点
多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发,须满足以下条件
1、RIP和DIP必须在同一个IP网络,且应该使用私网地址,RS的网关要指向DIP
2、请求报文和响应报文都必须由Director转发,Director易于成为系统瓶颈
3、支持端口映射,可修改请求报文的目标端口
4、vs必须是Linux系统,rs可以是任意系统 -
设计TOP
LVS-NAT设计图 -
搭建过程
- 在VS服务器上安装ipvsadm命令行工具(Centos默认开启了ipvs模块)
yum -y install ipvsadm
- 创建集群
ipvsadm -A -t 10.192.1.165:80 -s rr ipvsadm -a -t 10.192.1.165:80 -r 192.168.0.2:80 -m ipvsadm -a -t 10.192.1.165:80 -r 192.168.0.3:80 -m
- 查看集群
[root@ceph-client ~]# ipvsadm -L IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP ceph-client:http rr -> 192.168.0.2:http Masq 1 0 0 -> 192.168.0.3:http Masq 1 0 0 [root@ceph-client ~]#
- 在RS服务器上安装并配置nginx静态test.html页面
- curl测试访问
[root@yum ~]# for i in {1..10};do curl 10.192.1.165/test.html;done <h1> RS1 192.168.0.2 <h1> <h1> RS2 192.168.0.3 <h1> <h1> RS1 192.168.0.2 <h1> <h1> RS2 192.168.0.3 <h1> <h1> RS1 192.168.0.2 <h1> <h1> RS2 192.168.0.3 <h1> <h1> RS1 192.168.0.2 <h1> <h1> RS2 192.168.0.3 <h1> <h1> RS1 192.168.0.2 <h1> <h1> RS2 192.168.0.3 <h1> [root@yum ~]# 在VS查看 [root@ceph-client ~]# ipvsadm -l IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP ceph-client:http rr -> 192.168.0.2:http Masq 1 0 5 -> 192.168.0.3:http Masq 1 0 5
- 在VS服务器上安装ipvsadm命令行工具(Centos默认开启了ipvs模块)
-
-
LVS-DR搭建
- DR集群设计要点
Direct Routing,直接路由
通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均不变
Director和各RS都得配置使用VIP
1、确保前端路由器将目标IP为VIP的请求报文发往Director
a、在前端网关做静态绑定(不建议)
b、在RS上使用arptables(不建议)
c、在RS上修改内核参数以限制arp通告及应答级别(推荐)
arp_announce=2
arp_ignore=1
2、RS的RIP可以使用私网地址,也可以是公网地址,RIP与DIP在同一个IP网络,RIP的网关不能指向DIP,以确保相应报文不会经由Director
3、RS跟Director要在同一个物理网络
4、请求报文要经由Director,但相应不能经由Director,而是由RS直接发往Client
5、不支持端口映射 -
设计TOP
LVS-DR设计图
- DR集群设计要点
* 搭建过程
* 在VS服务器上安装ipvsadm命令行工具(Centos默认开启了ipvs模块)
`yum -y install ipvsadm`
* 创建集群
```
ipvsadm -A -t 10.192.1.170:80 -s rr
ipvsadm -a -t 10.192.1.170:80 -r 10.192.1.163 -g
ipvsadm -a -t 10.192.1.170:80 -r 10.192.1.164 -g
```
* 查看集群
```
[root@vs ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.192.1.170:80 rr
-> 10.192.1.163:80 Route 1 0 0
-> 10.192.1.164:80 Route 1 0 0
[root@vs ~]#
```
* 在RS服务器上安装并配置nginx静态test.html页面
* curl测试访问
```
[root@yum ~]# for i in {1..10};do curl 10.192.1.170/test.html;done
<h1> RS1 10.192.1.164 <h1>
<h1> RS2 10.192.1.163 <h1>
<h1> RS1 10.192.1.164 <h1>
<h1> RS2 10.192.1.163 <h1>
<h1> RS1 10.192.1.164 <h1>
<h1> RS2 10.192.1.163 <h1>
<h1> RS1 10.192.1.164 <h1>
<h1> RS2 10.192.1.163 <h1>
<h1> RS1 10.192.1.164 <h1>
<h1> RS2 10.192.1.163 <h1>
[root@yum ~]#
在VS查看
[root@vs ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.192.1.170:80 rr
-> 10.192.1.163:80 Route 1 0 5
-> 10.192.1.164:80 Route 1 0 5
```
2、nginx反向代理,虚拟主机
- 概念
反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。 -
反向代理工作原理图
反向代理工作原理图
用户终端为互联网用户,被代理服务器是提供应用服务的服务器。
- 实现nginx反向代理虚拟主机
- 环境:
10.192.1.163 nginx反向代理服务器
10.192.1.164 nginx 虚拟机主机(静态页面)
两台服务器均已安装nginx服务 - 配置代理服务器
首先在主配置文件http{}中定义缓存设置 http { ... proxy_cache_path /data/nginx/cache levels=1:1:1 keys_zone=mcache:10m max_size=3g; ... 定义虚拟机主机:conf.d/ilinux.conf } server { listen 80; server_name www.ilinux.com; proxy_cache mcache; proxy_cache_key $request_uri; proxy_cache_methods GET HEAD; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; proxy_cache_use_stale http_502; location / { proxy_pass http://www.index.com; } location ~*.jpg$ { proxy_pass http://10.192.1.164:8081; } } 说明:代理服务器配置了监听80端口基于FQDN的虚拟主机 并定义了缓存配置 将 url中 以.gpg结尾的图片访问代理到http://10.192.1.164:8081这个虚拟主机 将其它的请求代理到http://www.index.com这个虚拟主机
- 配置被代理服务器
cd /etc/nginx/conf.d 分别定义两个虚拟主机: 定义ilinux虚拟主机 server { listen 80; server_name www.index.com; root /data1/; location / { autoindex on; autoindex_exact_size off; autoindex_localtime on; } } vim /data1/index.thml <h1>www.index.com<h1> 定义图片访问虚拟主机 server { listen 8081; server_name _; root /data; location / { autoindex on; autoindex_exact_size off; autoindex_localtime on; } }
-
测试
ilinux测试页
.jpg测试页
- 环境:
网友评论