NAT模式
实验环境
LVS1 VIP 192.168.31.66 DIP 192.168.121.128
WEB1 192.168.121.129
WEB2 192.168.121.130
安装与配置
后端服务器
[root@WEB2 ~]# yum install -y epel* #先安装扩展源
[root@WEB2 ~]# yum install -y nginx
[root@WEB2 ~]#service iptables stop
[root@WEB2 ~]#setrnforce 0 #临时生效,永久请修改配置文件/etc/sysconfig/selinux
[root@WEB2 ~]# cd /usr/share/nginx/html/ #yum安装nginx的默认页面目录 [root@WEB2 html]# mv index.html index.html.bak #修改默认的首页目录 [root@WEB2 html]# echo "111111" >index.html [root@WEB2 html]# service nginx start [root@WEB2 html]# chkconfig nginx on [root@WEB2 html]# service iptables stop [root@WEB2 html]# chkconfig iptables off
#在/etc/sysctl.conf 加入以下内容
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
############将DIP作为后端服务器的路由
即192.168.121.132是192.168.121.129和130的网关
[root@WEB2 html]# route add default gw 192.168.121.132
或者直接在网卡中设置哦
WEB1也是一样操作,除了首页面需要修改为222222即可
yum -y install ipvsadm #安装ipvsadm管理工具
[root@MiWiFi-R1CM-srv ~]# ipvsadm -A -t 192.168.31.42:80 -s rr
[root@MiWiFi-R1CM-srv ~]# 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.31.42:80 rr
[root@MiWiFi-R1CM-srv ~]# ipvsadm -a -t 192.168.31.42:80 -r 192.168.121.133 -m #-m指定lvs 为nat模式 -r 跟上真实服务器的地址 -a增加一台新的真实服务器 -t 虚拟服务器提供tcp服务
[root@MiWiFi-R1CM-srv ~]# ipvsadm -a -t 192.168.31.42:80 -r 192.168.121.130 -m
[root@MiWiFi-R1CM-srv ~]# 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.31.42:80 rr
-> 192.168.121.130:80 Masq 1 0 0
-> 192.168.121.133:80 Masq 1 0 0
# director服务器上开启路由转发功能:
[root@MiWiFi-R1CM-srv ~]#echo 1 > /proc/sys/net/ipv4/ip_forward
或者:sysctl -w net.ipv4.ip_forward=1 临时生效
或者:vim /etc/sysctl.conf 追加net.ipv4.ip_forward=1
然后 sysctl -p
[root@MiWiFi-R1CM-srv ~]# service iptables stop
#################################下面可有可无####################
# 关闭 icmp 的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects #eth0-VIP的重定向
echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects #eth1-DIP的重定向
结果测试
客户端
[root@#quan#Better ~]$curl 192.168.31.42
222222222
[root@#quan#Better ~]$curl 192.168.31.42
111111
[root@#quan#Better ~]$curl 192.168.31.42
222222222
[root@#quan#Better ~]$curl 192.168.31.42
111111
[root@#quan#Better ~]$
LVS调度器端
查看访问集群服务的统计数据
[root@MiWiFi-R1CM-srv ~]# ipvsadm -L --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 192.168.31.42:http 14 91 56 8563 13701
-> 192.168.121.130:http 7 42 23 3288 6267
-> 192.168.121.133:http 7 49 33 5275 7434
可以修改调度算法
[root@MiWiFi-R1CM-srv ~]# ipvsadm -E -t 192.168.31.42:80 -s wrr #修改为权重轮询算法
[root@MiWiFi-R1CM-srv ~]# 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.31.42:80 wrr
-> 192.168.121.130:80 Masq 1 0 0
-> 192.168.121.133:80 Masq 1 0 0
[root@MiWiFi-R1CM-srv ~]# ipvsadm -e -t 192.168.31.42:80 -r 192.168.121.130:80 -m -w 2 #为后端服务器添加权重比列
[root@MiWiFi-R1CM-srv ~]# 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.31.42:80 wrr
-> 192.168.121.130:80 Masq 2 0 0
-> 192.168.121.133:80 Masq 1 0 0
[root@MiWiFi-R1CM-srv ~]#
客户端测试结果
[root@#quan#Better ~]$curl 192.168.31.42
222222222
[root@#quan#Better ~]$curl 192.168.31.42
222222222
[root@#quan#Better ~]$curl 192.168.31.42
111111
[root@#quan#Better ~]$curl 192.168.31.42
222222222
[root@#quan#Better ~]$curl 192.168.31.42
222222222
[root@#quan#Better ~]$curl 192.168.31.42
111111
[root@#quan#Better ~]$curl 192.168.31.42
222222222
ipvsadm 用法说明如下
ipvsadm是LVS在应用层的管理命令,我们可以通过这个命令去管理LVS的配置。需要使用yum单独安装。
基本用法:
ipvsadm COMMAND [protocol] service-address
[scheduling-method] [persistence options]
ipvsadm command [protocol] service-address
server-address [packet-forwarding-method]
[weight options]
第一条命令用于向LVS系统中添加一个用于负载均衡的virtual server(VS);第二条命令用来修改已经存在的VS的配置,service address用来指定涉及的虚拟服务即虚拟地址,server-address指定涉及的真实地址。
命令:
-A, --add-service:为ipvs虚拟服务器添加一个虚拟服务,即添加一个需要被负载均衡的虚拟地址。虚拟地址需要是ip地址,端口号,协议的形式。
-E, --edit-service:修改一个虚拟服务。
-D, --delete-service:删除一个虚拟服务。
-C, --clear:清除所有虚拟服务。
-R, --restore:从标准输入获取ipvsadm命令。一般结合下边的-S使用。
-S, --save:从标准输出输出虚拟服务器的规则。可以将虚拟服务器的规则保存,在以后通过-R直接读入,以实现自动化配置。
-a, --add-server:为虚拟服务添加一个real server(RS)
-e, --edit-server:修改RS
-d, --delete-server:删除
-L, -l, --list:列出虚拟服务表中的所有虚拟服务。可以指定地址。添加-c显示连接表。
-Z, --zero:将所有数据相关的记录清零。这些记录一般用于调度策略。
--set tcp tcpfin udp:修改协议的超时时间。
--start-daemon state:设置虚拟服务器的备服务器,用来实现主备服务器冗余。(注:该功能只支持ipv4)
--stop-daemon:停止备服务器。
-h, --help:帮助。
参数:
以下参数可以接在上边的命令后边。
-t, --tcp-service service-address:指定虚拟服务为tcp服务。service-address要是host[:port]的形式。端口是0表示任意端口。如果需要将端口设置为0,还需要加上-p选项(持久连接)。
-u, --udp-service service-address:使用udp服务,其他同上。
-f, --fwmark-service integer:用firewall mark取代虚拟地址来指定要被负载均衡的数据包,可以通过这个命令实现把不同地址、端口的虚拟地址整合成一个虚拟服务,可以让虚拟服务器同时截获处理去往多个不同地址的数据包。fwmark可以通过iptables命令指定。如果用在ipv6需要加上-6。
-s, --scheduler scheduling-method:指定调度算法。调度算法可以指定以下8种:rr(轮询),wrr(权重),lc(最后连接),wlc(权重),lblc(本地最后连接),lblcr(带复制的本地最后连接),dh(目的地址哈希),sh(源地址哈希),sed(最小期望延迟),nq(永不排队)
-p, --persistent [timeout]:设置持久连接,这个模式可以使来自客户的多个请求被送到同一个真实服务器,通常用于ftp或者ssl中。
-M, --netmask netmask:指定客户地址的子网掩码。用于将同属一个子网的客户的请求转发到相同服务器。
-r, --real-server server-address:为虚拟服务指定数据可以转发到的真实服务器的地址。可以添加端口号。如果没有指定端口号,则等效于使用虚拟地址的端口号。
[packet-forwarding-method]:此选项指定某个真实服务器所使用的数据转发模式。需要对每个真实服务器分别指定模式。
-g, --gatewaying:使用网关(即直接路由),此模式是默认模式。
-i, --ipip:使用ipip隧道模式。
-m, --masquerading:使用NAT模式。
-w, --weight weight:设置权重。权重是0~65535的整数。如果将某个真实服务器的权重设置为0,那么它不会收到新的连接,但是已有连接还会继续维持(这点和直接把某个真实服务器删除时不同的)。
-x, --u-threshold uthreshold:设置一个服务器可以维持的连接上限。0~65535。设置为0表示没有上限。
-y, --l-threshold lthreshold:设置一个服务器的连接下限。当服务器的连接数低于此值的时候服务器才可以重新接收连接。如果此值未设置,则当服务器的连接数连续三次低于uthreshold时服务器才可以接收到新的连接。(PS:笔者以为此设定可能是为了防止服务器在能否接收连接这两个状态上频繁变换)
--mcast-interface interface:指定使用备服务器时候的广播接口。
--syncid syncid:指定syncid,同样用于主备服务器的同步。
以下选项用于list命令:
-c, --connection:列出当前的IPVS连接。
--timeout:列出超时
--daemon:
--stats:状态信息
--rate:传输速率
--thresholds:列出阈值
--persistent-conn:坚持连接
--sor:把列表排序。
--nosort:不排序
-n, --numeric:不对ip地址进行dns查询
--exact:单位
-6:如果fwmark用的是ipv6地址需要指定此选项。
其他注意事项
如果使用IPv6地址,需要在地址两端加上”【】“。例如:ipvsadm -A -t [2001:db8::80]:80 -s rr
可以通过设置以下虚拟文件的值来防御DoS攻击:/proc/sys/net/ipv4/vs/drop_entry /proc/sys/net/ipv4/vs/drop_packet /proc/sys/net/ipv4/vs/secure_tcp
例子:
1.使用NAT模式
添加地址为207.175.44.110:80的虚拟服务,指定调度算法为轮转。
ipvsadm -A -t 207.175.44.110:80 -s rr
添加真实服务器,指定传输模式为NAT
ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.1:80 -m
ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.2:80 -m
ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.3:80 -m
NAT模式是lvs的三种模式中最简单的一种。此种模式下只需要保证调度服务器与真实服务器互通就可以运行。
2.使用DR模式
对于DR模式首先要配置真实服务器:
对于每台真实服务器要进行以下操作:
1、设置真实服务器的lo接口不做ARP应答
echo 1 > /proc/sys/net/ipv4/conf/all/arg_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arg_ignore
设置这个选项可以使得各个接口只对本接口上的地址进行响应
还需要设置arp_announce选项为2,设置方法同上
2、在真实服务器上添加虚拟IP
ifconfig lo:0 192.168.10.10 boradcast 207.175.44.110 netmask 255.255.255.255
ip r add 192.168.10.10 dev lo
接着添加ipvs规则:
添加地址为192.168.10.10:80的虚拟服务,指定调度算法为轮转。
ipvsadm -A -t 192.168.10.10:80 -s rr
添加真实服务器,指定传输模式为DR
ipvsadm -a -t 192.168.10.10:80 -r 192.168.10.1:80 -g
ipvsadm -a -t 192.168.10.10:80 -r 192.168.10.2:80 -g
ipvsadm -a -t 192.168.10.10:80 -r 192.168.10.3:80 -g
注意:此处的例子中客户、调度服务器、真实服务器都是位于同一网段的
固定调度
rr:论调
wrr:加权论调
weight,加权
sh:source hash ,源地址hash
动态调度
lc:最少链接
active*256+inactive
wlc:加权最少链接
(active*256+inactive)/weight
sed:最短期望延迟
(active+1)*256/weight
nq:never queue (永不排队)
LBLC:基于本地的最少链接
LBLCR:基于本地的带复制功能的最少链接
————
lvs
ipvsadm:管理集群服务的命令行工具
管理集群服务
添加:-A -t|u|f service-address[-s sheduler ]
{ -t:TCP协议集群
-u:UDP协议集群} service-address: IP:PORT(套接字)
-f:FWM:防火墙标记
service-address : Mark Number
修改: -E
删除: -D -t|u|f service-address
管理机器服务中心的RS
添加:-a -t|u|f service-address -r server-address [-g|i|m] [-w weight ]
-t|u|f service-address:事前定义好的某集群服务
-r server-address :某RS的地址,在NAT模型中;可使用IP:PORT实现端口映射:
[-g|i|m]:lvs类型
-g:DR
-i:TUN
-m:NAT
[-w weight ]:定义权重
修改:-e
删除:-d -t|u|f serrvice address -r service-add
查看
-L|l
-n:数字格式显示IP地址和端口号
--stats:统计信息
--rate:速率
--timeout:显示TCP/TCPFIN/UDP的会话超时时长
--sort:排序
-c:显示当前IPVS的链接状态
-Z:清空计数器
-C:清空ipvs规则
-S:使用输出重定向进行规则保存
-R:使用输入重定向载入规则
说明:
Conns (connections scheduled) 已经转发过的连接数
InPkts (incoming packets) 入包个数
OutPkts (outgoing packets) 出包个数
InBytes (incoming bytes) 入流量(字节)
OutBytes (outgoing bytes) 出流量(字节)
查看lvs速率 :ipvsadm -l --rate
说明:
由于LVS像iptable一样是工作在内核层,所以只需要安装模块ip_vs就可以了,并没有后台进程在跑。对应lvs主机三种方式分别用参数-m, -i, -g来实现。以下列举几种链接方式的配置方法:
1.NAT方式:
NAT配置方式最简单,只需要在LVS主机上配置就可以了,如下例子:
设置VIP主机:
ipvsadm -A -t 202.103.106.5:80 -s wlc
ipvsadm -A -t 202.103.106.5:21 -s wrr
ipvsadm -a -t 202.103.106.5:80 -r 172.16.0.2:80 -m
ipvsadm -a -t 202.103.106.5:80 -r 172.16.0.3:8000 -m -w 2
ipvsadm -a -t 202.103.106.5:21 -r 172.16.0.2:21 -m
2.TUN方式:
对LVS主机设置:
设置VIP主机:
ipvsadm -A -t 172.26.20.110:23 -s wlc ipvsadm -a -t 172.26.20.110:23 -r 172.26.20.112 -i
对每台real主机的设置:
echo 1 > /proc/sys/net/ipv4/ip_forward
#加载ipip模块
modprobe ipip
ifconfig tunl0 0.0.0.0 up
echo 1 > /proc/sys/net/ipv4/conf/all/hidden
echo 1 > /proc/sys/net/ipv4/conf/tunl0/hidden
ifconfig tunl0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up
DR模式
WEB-RIP1: eth2 192.168.121.133 VIP lo:0 192.168.121.222
WEB-RIP1: eth2 192.168.121.130 VIP lo:0 192.168.121.222
LVS-DIP:eth0 192.168.121.128 VIP eth0:0 192.168.121.222
web_RS 配置
#WEB1和WEB2都是要执行的语句,页面保持以前的模式就行
VIP=192.168.121.222
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP 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@WEB1 ~]# ifconfig
eth2 Link encap:Ethernet HWaddr 00:50:56:33:B7:53
inet addr:192.168.121.133 Bcast:192.168.121.255 Mask:255.255.255.0
inet6 addr: fe80::250:56ff:fe33:b753/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2303 errors:0 dropped:0 overruns:0 frame:0
TX packets:2443 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:214516 (209.4 KiB) TX bytes:244898 (239.1 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:14 errors:0 dropped:0 overruns:0 frame:0
TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1193 (1.1 KiB) TX bytes:1193 (1.1 KiB)
lo:0 Link encap:Local Loopback
inet addr:192.168.121.222 Mask:255.255.255.255
UP LOOPBACK RUNNING MTU:65536 Metric:1
测试两个WEB端的正常:
[root@WEB2 ~]# curl 192.168.121.130
222222222
[root@WEB1 ~]# curl 192.168.121.133
111111
LVS的配置
#配置VIP网络
VIP=192.168.121.222
/sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
#配置路由
/sbin/route add -host $VIP dev eth0:0
##############################
结果如下
[root@LVS ~]# ifconfig eth0:0
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:30:61:2E
inet addr:192.168.121.222 Bcast:192.168.121.222 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
[root@LVS ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.121.222 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
###############################
#配置lvs DR 模式
[root@LVS ~]# ipvsadm -C
[root@LVS ~]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@LVS ~]# ipvsadm -A -t 192.168.121.222:80 -s rr
[root@LVS ~]# ipvsadm -a -t 192.168.121.222:80 -r 192.168.121.133:80 -g
[root@LVS ~]# ipvsadm -a -t 192.168.121.222:80 -r 192.168.121.130:80 -g
[root@LVS ~]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.121.222:http rr
-> 192.168.121.130:http Route 1 0 0
-> 192.168.121.133:http Route 1 0 0
#保存规则
[root@LVS ~]# ipvsadm -S > /etc/sysconfig/ipvsadm
[root@LVS ~]# cat /etc/sysconfig/ipvsadm
-A -t 192.168.121.222:http -s rr
-a -t 192.168.121.222:http -r 192.168.121.130:http -g -w 1
-a -t 192.168.121.222:http -r 192.168.121.133:http -g -w 1
DR模式结果测试:
脚本脚本
[root@LVS ~]# vim DR.DS.sh
VIP=192.168.121.222
dev=eth0:0
port=80
RS_WEB1=192.168.121.133
RS_WEB2=192.168.121.130
algorithm=rr
model="-g"
case $1 in
start)
#
/sbin/ifconfig $dev $VIP/32 broadcast $VIP up
/sbin/route add -host $VIP dev $dev
ipvsadm -A -t $VIP:$port -s $algorithm
ipvsadm -a -t $VIP:$port -r $RS_WEB1 $model
ipvsadm -a -t $VIP:$port -r $RS_WEB2 $model
ipvsadm -L -n
# Since this is the Director we must be able to forward packets
echo 1 > /proc/sys/net/ipv4/ip_forward
;;
stop)
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/ipvsadm -C
/sbin/ifconfig eth0:1 down
/sbin/route del $VIP
if `service ipvsadm status|wc -l` -eq 1;then
echo "ipvsadm is stoped"
fi
;;
status)
if `service ipvsadm status|wc -l` -eq 1;then
echo "ipvsadm is stoped"
else
echo "ipvsadm is running"
ipvsadm -Ln
fi
;;
*)
echo "Usage: $0 {start|stop|status}"
;;
esac
#LVS_RS_WEB
[root@WEB1 ~]# vim DR.RS.sh
#!/bin/bash
VIP=192.168.121.222
dev=lo:0
case $1 in
start)
/sbin/ifconfig $dev $VIP/32 broadcast $VIP up
/sbin/route add -host $VIP dev $dev
#配置抑制ARP
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
/sbin/route -n
;;
stop)
/sbin/ifconfig $dev down
echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage: $0 {start|stop}"
关于ARP:
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
dr模型中,各主机上均需要配置VIP,解决地址冲突的方式有三种:
(1) 在前端网关做静态绑定
(2) 在各RS使用 arptables
(3) 在各RS修改内核参数,来限制arp响应和通告的级别
限制响应级别:arp_ignore
0:默认值,表示可使用本地任意接口上配置的任意地址进行响应
1: 仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应
限制通告级别:arp_announce
0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告
1:尽量避免将接口信息向非直接连接网络进行通告
2:必须避免将接口信息向非本网络进行通告
/proc/sys/net/ipv4/conf/ #所有网卡的设置都在这个目录下
ikernel-doc #这些文件由这个软件包生成
手机扫一扫
移动阅读更方便
你可能感兴趣的文章