运维之道 | LVS的NAT模式、DR模式搭建

LVS的NAT模式、DR模式搭建

运维之道 | LVS原理详解

lvs工作模式: -m(Nat) | -g(DR)| -i(Tun) | -b(Fullnat)

Nat:网络地址映射
DR:直接路由

LVS工作原理:用户请求LVS VIP,LVS根据转发方式和算法,将请求转发给后端服务器,后端服务器接收到请求,返回给用户。对于用户来说,看不到WEB后端具体的应用。

NAT模式

在这里插入图片描述

DR模式

在这里插入图片描述

一、主机IP规划

需要创建:1台LVS服务器2台Apache服务器1台用户访问虚拟机1个虚拟IP地址(VIP)

服务器说明 IP地址
LVS服务器(DIP) 192.168.182.132
虚拟IP地址(VIP) 192.168.182.111
Apache服务器1(RIP) 192.168.182.130
Apache服务器2(RIP) 192.168.182.131
用户端(CIP) 192.168.182.133
DS LVS调度器
RS WEB服务器

二、LVS服务安装

LVS服务端

LVS可以通过yum命令安装,或者通过源码编译的方式安装,在此选择yum安装。

1、在LVS服务端安装lvs服务
[root@localhost ~]# yum -y install ipvsadm
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
*****自动安装过程略****  
Installed:
  ipvsadm-1.27-7.el7.x86_64                                                                                                                                                
 
Complete!
2、创建软连接

ipvsadm在编译的时候需要使用内核文件

[root@localhost ~]# ln -s /usr/src/kernels/kernels/3.10.0-957.el7.x86_64/ /usr/src/linux
[root@localhost ~]# ll /usr/src/linux
lrwxrwxrwx. 1 root root 39 11 16:01 /usr/src/linux -> /usr/src/kernels/3.10.0-957.el7.x86_64/

注:如果没有/usr/src/kernelskernels/3.10.0-957.el7.x86_64/路径,可能是因为缺少kernels/3.10.0-957.el7.x86_64/软件包,可以通过命令yum -y install kernerl-devel安装。若yum源中没有安装包,可通过获取镜像中的rpm包安装:方法如下:

[root@localhost ~]# mkdir /mnt/abc 
[root@localhost ~]# mount /dev/cdrom /mnt/abc/
 mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ~]# cd /mnt/abc/
[root@localhost abc]# cp Packages/kernel-3.10.0-957.el7.x86_64.rpm /usr/local/src
[root@localhost src]# rpm -ivh kernel-3.10.0-957.el7.x86_64.rpm
3、检测是否安装完毕
[root@localhost ~]# rpm -qa ipvsadm
ipvsadm-1.27-7.el7.x86_64
4、查看内核是否有ip_vs服务运行
[root@localhost ~]# lsmod |grep ip_vs
ip_vs_wrr              12697  1 
ip_vs                 145497  3 ip_vs_wrr
nf_conntrack          133095  1 ip_vs
libcrc32c              12644  3 xfs,ip_vs,nf_conntrack

注:如果没有以上四个输出,可以使用命令ipvsadm或者modprobe ip_vs命令重新加载。


三、Apache服务器搭建

两台服务器均要配置

Apache服务器1-2

1、在两台Apache服务器中部署httpd

Apache服务器搭建步骤

2、修改httpd发布界面
RealServer1:echo ”I am RealServer1 192.168.182.130>/var/www/html/index.html

RealServer2:echo “I am RealServer2 192.168.182.131>/var/www/html/index.html

在这里插入图片描述
在这里插入图片描述


LVS集群配置 - DS端

四、手动配置LVS服务

1、清空以前的旧配置:
[root@localhost ~]# ipvsadm -C
2、为LVS服务器添加一个虚拟IP地址:
[root@localhost ~]# ip addr add 192.168.182.111/24 dev ens33 label ens33:0
[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.182.132  netmask 255.255.255.0  broadcast 192.168.182.255
        inet6 fe80::de64:22e8:c40e:f44b  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:8c:11:61  txqueuelen 1000  (Ethernet)
		......

ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.182.111  netmask 255.255.255.0  broadcast 0.0.0.0
        ether 00:0c:29:8c:11:61  txqueuelen 1000  (Ethernet)
3、添加一个虚拟vserver:

添加一台新的虚拟服务器,并以wrr(加权轮询)的算法调度

[root@localhost ~]# ipvsadm -A -t 192.168.182.111:80 -s wrr
参数说明
  • -A:–add-service,表示添加一个虚拟服务器
  • -t:–tcp-service,指定这是一个tcp的虚拟服务器
  • -u:–udp-service,指定这是一个udp的虚拟服务器
  • 192.168.182.111:80:表示提供服务的ip地址以及端口号
  • -s:–scheduler,指定调度器,“rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq”选择一种,默认是wlc
4、为服务器添加real server:

向虚拟服务上添加一台真实服务器并指向80端口

[root@localhost ~]# ipvsadm -a -t 192.168.182.111:80 -r 192.168.182.130:80 -g -w 1
[root@localhost ~]# ipvsadm -a -t 192.168.182.111:80 -r 192.168.182.131:80 -g -w 1
  • -g:DR模式
  • -w:轮询
  • 若为NAT模式,则将-g设置为-m
[root@localhost ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  localhost.localdomain:http wrr
  -> 192.168.182.130:http         Route   1      0          0         
  -> 192.168.182.131:http         Route   1      0          0 

LVS集群配置 - RS端

两台服务器均要配置

1、绑定LVS服务器的VIP

在网卡lo绑定虚拟IP,该虚拟IP同LVS服务器的虚拟IP,即192.168.182.111/24

[root@localhost ~]# ip addr add 192.168.182.111/32 dev lo label lo:0
[root@localhost ~]# route add -host 192.168.182.111 dev lo
[root@localhost ~]# ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
		......

lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.182.111  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)
2、设置ARP抑制 (NAT模式不需要配置)
[root@localhost ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@localhost ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@localhost ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@localhost ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
3、打开路由转发功能
[root@localhost ~]# vim /etc/sysctl.conf  

net.ipv4.ip_forward = 1

[root@localhost ~]# sysctl -p
注:抑制参数说明
arp_ignore 定义目标地址为本地IP的ARP询问不同的应答模式
0 默认值,回应任何网络接口上对任何本地IP地址的arp查询请求
1 只回答目标IP地址是来访网络接口本地地址的ARP查询请求
2 只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内
3 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应
4-7 保留未使用
8 不回应所有(本地地址)的arp查询
arp_announce 对网络接口上,本地IP地址发出的,ARP回应,作出相应级别的限制。确定不同程序的限制,宣布对来自本地源IP地址发出的ARP请求接口
0 默认值,在任意网络接口(eth0,eth1,lo)上任何本地地址
1 尽量避免不在该网络子网段的地址作出arp回应。当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用,此时会检查来访IP是否为所有接口上的子网段内IP之一。如果该来访者IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理
2 对查询目标使用最适当的本地地址,在此模式下忽略这个IP数据包的源地址并尝试选择能与该地址通信的本地地址,首要是选择所有网络接口的子网中外出访问子网中包目标IP地址的本地地址。如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送,限制了使用本地VIP地址作为优先的网络接口

结果服务验证

五、在用户端(192.168.182.133)访问192.168.182.111:80,查看结果是否轮循。

在这里插入图片描述
在这里插入图片描述


六、LVS拓展

1、LVS配置及规则保存备份、清理、导入恢复(上述四-4步骤)
  • LVS配置及规则保存备份
[root@localhost ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@localhost sysconfig]# cat ipvsadm
-A -t 192.168.182.111:80 -s wrr
-a -t 192.168.182.111:80 -r 192.168.182.130:80 -m -w 1
-a -t 192.168.182.111:80 -r 192.168.182.131:80 -m -w 1
  • 将LVS配置及规则清理
[root@localhost ~]# ipvsadm -C
  • 将上述备份LVS配置及规则进行导入
[root@localhost ~]# ipvsadm-restore </etc/sysconfig/ipvsadm

原ipvs规则存放于:/proc/net/ip_vs
原ipvs连接存放于:/proc/net/ip_vs_conn


2、elinks 测试工具(同curl命令)
[root@localhost ~]# yum install -y elinks  ///安装elinks测试工具
轮询算法
[root@localhost ~]# elinks 192.168.182.111 --dump
   ”I am RealServer2 192.168.182.131[root@localhost ~]# elinks 192.168.182.111 --dump
   ”I am RealServer1 192.168.182.130[root@localhost ~]# elinks 192.168.182.111 --dump
   ”I am RealServer2 192.168.182.131[root@localhost ~]# elinks 192.168.182.111 --dump
   ”I am RealServer1 192.168.182.130
3、ipvsadm常用命令
  • 查看分发情况
[root@localhost ~]# ipvsadm -L -n --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  192.168.182.111:80                140      673      389    69306    53676
  -> 192.168.182.130:80                 70      339      195    34816    27076
  -> 192.168.182.131:80                 70      334      194    34490    26600
  • 查看速率
[root@localhost ~]# ipvsadm -L -n --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port                 CPS    InPPS   OutPPS    InBPS   OutBPS
  -> RemoteAddress:Port
TCP  192.168.182.111:80                  0        0        0        0        0
  -> 192.168.182.130:80                  0        0        0        0        0
  -> 192.168.182.131:80                  0        0        0        0        0
  • 清空IPVS数据
[root@localhost ~]# ipvsadm -Z
  • 清空IPVS规则
[root@localhost ~]# ipvsadm -C
  • 超时时间用ipvsadm --set tcp tcpfin udp设置
[root@localhost ~]# ipvsadm --set 120 20 100

`表示tcp空闲等待时间为120 秒`
`客户端关闭链接等待时间为20秒`
`udp空闲等待为100秒`

ipvsadm--help
ipvsadm命令选项解释:
-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         显示内核虚拟服务器表  
-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 默认的模式)  
-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                               显示统计信息  
--rate                                显示速率信息  
--sort                                对虚拟服务器和真实服务器排序输出  
--numeric -n                          输出IP 地址和端口的数字形式

翻译至:https://blog.51cto.com/13178102/2063272
翻译至:https://ke.qq.com/course/424396?term_id=100506501&taid=3666175494355404
翻译至:https://blog.51cto.com/orzorz/1701270

发布了97 篇原创文章 · 获赞 10 · 访问量 3388

猜你喜欢

转载自blog.csdn.net/VillianTsang/article/details/103795369
今日推荐