8.13 NAT模式搭建实战
ds01服务器配置
(1)安装ipvsadm
[root@ds01 ~]# yum -y install ipvsadm.x86_64
查看所有规则,如果语句配置好规则,重启之后也就没有了
[root@ds01 ~]# ipvsadm -L -n
(2)额外添加一张网卡,选择对外提供服务的桥接模式或者nat模式,选 择桥接模式(ip不同)
(3)配置网卡
[root@ds01 ~]# uuidgen
bdb8b43b-5f66-478c-9401-93aa80333cff
[root@ds01 ~]# cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens36
[root@ds01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens36
TYPE=Ethernet
BOOTPROTO=none
NAME=ens36
UUID=5d4dbbba-38b2-41d0-a5be-1d2c30dba649
DEVICE=ens36
ONBOOT=yes
IPADDR=192.168.1.164
[root@ds01 ~]# systemctl restart network
(4)清空以往的规则
[root@ds01 ~]# ipvsadm -C
(5)查看规则
[root@ds01 ~]# ipvsadm -L -n
(6)配置规则
ipvsadm -A -t 192.168.1.164 -s rr //-A添加虚拟服务,-t添加主机
ipvsadm -Ln
(7)添加规则
ipvsadm -a -t 192.168.1.164:80 -r 192.168.2.200:80 -m
ipvsadm -a -t 192.168.1.164:80 -r 192.168.2.201:80 -m
ipvsadm -Ln
[root@ds01 ~]# ipvsadm -A -t 192.168.1.164:80 -s rr
[root@ds01 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.164:80 rr
[root@ds01 ~]# ipvsadm -a -t 192.168.1.164:80 -r 192.168.2.200:80 -m
[root@ds01 ~]# ipvsadm -a -t 192.168.1.164:80 -r 192.168.2.201:80 -m
[root@ds01 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.164:80 rr
-> 192.168.2.200:80 Masq 1 0 0
-> 192.168.2.201:80 Masq 1 0 0
(8)vim /etc/sysctl.conf
net.ipv4.ip_forward=1 //在最后一行添加
[root@ds01 ~]# sysctl -p
net.ipv4.ip_forward = 1 //让立即生效-----能够正常显示就可以了
6.Web01主机:
临时修改web01的网关,网管必须指向dip----对内的ip
[root@web01 ~]# route del default
[root@web01 ~]# route add default gw 192.168.2.177
7.Web02主机:
临时修改web02的网关
[root@web02 ~]# route del default
[root@web02 ~]# route add default gw 192.168.2.177
lvs-nat模式的优点是配置简单,缺点是请求和响应都必须经过ds,容易成为性能瓶颈
希望有这样一个模式,请求的时候使用input链进行负载均衡,响应的时候就不要经过ds,直接rs响应客户端
在nat模式,请求vip,就是vip的响应
构想请求vip,接受rip响应,这是不允许lvs-dr模式
8.nat模式脚本
# ds脚本
#!/bin/bash
#配置网卡
echo TYPE="Ethernet" >> /etc/sysconfig/networkscripts/ifcfg-ens36 echo BOOTPROTO="none" >> /etc/sysconfig/networkscripts/ifcfg-ens36 read -p "router name:" router_name
echo NAME='"$rount_name"' >>/etc/sysconfig/networkscripts/ifcfg-ens36 uuidkey=$( uuidgen )
echo UUID='"$uuidkey"' >>/etc/sysconfig/networkscripts/ifcfg-ens36 >> /etc/sysconfig/networkscripts/ifcfg-ens36
echo DEVICE='"$rount_name"' >>/etc/sysconfig/networkscripts/ifcfg-ens36 echo ONBOOT="yes" >> /etc/sysconfig/network-scripts/ifcfgens36
echo IPADDR=192.168.1.164 >>/etc/sysconfig/networkscripts/ifcfg-ens36 systemctl restart network
#安装ipvsadm
yum list installed|grep ipvsadm
if[ $? -ne 0 ];then
yum -y install ipvsadm
fi
#配置规则
read -p "vip:" vip
read -p "port:" port
read -p "rule:" s
ipvsadm -A -t $vip:$port -s $s
# ip forward
echo "net.ipv4.ip_forward=1" >/etc/sysctl.conf
sysctl -p
# rs脚本
#!/bin/bash
read -p "dip:" dip
# 设置网关
route del default
route add defualt gw $dip
三.DR模式
- 性能更优,回路不经过ds
- ds和rs为了保证用户的响应,都要求配置统一的vip
- 由于rs是直接响应client,网关一定不能设置为ds的dip
- 对rs的vip进行抑制,让ds的vip接受请求,rs的vip不接受请求
1.ds03上的ens33上挂一个vip192.168.2.102
[root@ds03 ~]# ifconfig ens33:0 192.168.2.102 broadcast 192.168.2.102 netmask 255.255.255.255 up
route add -host 192.168.2.102 dev ens33:0
#192.168.2.101 dip
#192.168.2.102 vip 在rs上的vip和这个vip相同
2.安装ipvsadm
yum -y install ipvsadm.x86_64
3.设置规则
ipvsadm -C
ipvsadm -A -t 192.168.2.102:80 -s rr
ipvsadm -a -t 192.168.2.102:80 -r 192.168.2.200 -g
ipvsadm -a -t 192.168.2.102:80 -r 192.168.2.201 -g
#rs不在需要指定端口,dr不支持端口映射,vip上是80端口,最终就是80端口
#-m nat -g gateway
4.在rs(web01,web02)上配置
(1)在lo接口上挂载一个vip192.168.2.102
[root@web01 ~]# ifconfig lo:0 192.168.2.102 broadcast 192.168.2.102 netmask 255.255.255.255 up
(2)配置主机路由
[root@web01 ~]# route add -host 192.168.2.102 dev lo:0
[root@web01 ~]# ifconfig
[root@web01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet 192.168.2.102/32 brd 192.168.2.102 scope global lo:0
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:13:76:e2 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.200/24 brd 192.168.2.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::4e57:f3b5:85eb:4fb1/64 scope link noprefixroute
valid_lft forever preferred_lft forever
inet6 fe80::fc42:faf3:7cd0:dbf1/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
(3)抑制rs的vip接受请求
[root@web01 ~]# vim arp.sh
ifconfig lo:0 192.168.2.102 broadcast 192.168.2.102 netmask 255.255.255.255 up
route add -host 192.168.2.102 dev lo:0 //可以把这个也加进来,前面配置了可以不用写进来
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@web01 ~]# source arp.sh
SIOCADDRT: 文件已存在
[root@web01 ~]# ls
anaconda-ks.cfg arp.sh
(4)将web01这个里面的arp.sh这个文件传到web02上面
[root@web01 ~]# scp arp.sh root@192.168.2.201:~
[root@web02 ~]# ls
anaconda-ks.cfg arp.sh
测试使用,查看状态
在浏览器用vip访问
运行web02里面的arp.sh这个脚本
[root@web02 ~]# source arp.sh
在浏览器里面刷新访问
在ds03上面查看连接状态与信息
[root@ds03 ~]# ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 192.168.2.102:80 8 52 0 6692 0
-> 192.168.2.200:80 4 31 0 5080 0
-> 192.168.2.201:80 4 21 0 1612 0
5.dr模式的脚本
(1)ds脚本
#!/bin/bash
#在ens33上挂载一个ip地址
read -p "vip:" vip
read -p "mac:" mac
read -p "num" num
ifconfig $mac:$num $vip broadcast $vip netmask
255.255.255.255
# 主机路由
route add -host $vip dev $mac:$num#安装ipvsadm
yum list installed|grep ipvsadm
if [ $? -ne 0 ] ; then
yum -y install ipvsadm
fi
#配置规则(不需要设置ip_forword)
ipvsadm -C
read -p "rule:" rule
read -p "port:" port
ipvsadm -A -t $vip:$port -s $rule
read -p "rip1:" rip1
ipvsadm -a -t $vip:$port -r $rip1 -g
read -p "rip2:" rip2
ipvsadm -a -t $vip:$port -r $rip2 -g
(2)rs脚本
#!/bin/bash
#在ens33上挂载一个ip地址
read -p "vip:" vip
read -p "mac:" mac
read -p "num" num
ifconfig $mac:$num $vip broadcast $vip netmask
255.255.255.255
# 主机路由
route add -host $vip dev $mac:$num
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce