一、使用Nat模式的LVS的构建
1.配置分发器。
#配置网卡
ifconfig eth0 10.1.1.250
ifconfig eth1 192.168.10.250
#打开网卡转发
#echo '1' > /proc/sys/net/ipv4/ip_forward //临时启用网卡转发
#编辑/etc/sysctl.conf文件可以永久启用网卡转发
#vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
#安装ipvsadm软件包并增加新的ipvsadm服务
#安转ipvsadm软件包
mount /dev/cdrom /media
cd /media/Cluster
rpm -Uvh ipvsadm-1.24-12.el5.i386.rpm
#增加一个新的服务
ipvsadm -A -t 10.1.1.250:80 -s rr
#-A 添加新的服务
#-t 指定服务所使用的虚拟ip地址:端口
#-s 指定服务使用的算法(rr算法是将数据包依次分发给服务中的主机)
#把服务和服务池(server pool)进行关联
ipvsadm -a -t 10.1.1.250:80 -r 192.168.10.1 -m
ipvsadm -a -t 10.1.1.250:80 -r 192.168.10.2 -m
#-a 添加real server
#-r 指定real server的ip
#-m 指定使用nat模式
#查看建立的服务
ipvsadm -ln
##结果如下
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.1.1.250:80 rr
-> 192.168.10.1:80 Masq 1 0 0
-> 192.168.10.2:80 Masq 1 0 0
2.配置server pool下的真实主机(real server)
#配置服务器ip
ifconfig eth0 192.168.10.1
#配置服务器的默认网关
route add default gw 192.168.10.250
#安装apache服务
yum install httpd
#ifconfig eth0 > /var/www/html/index.html //生成一个页面用于测试
#启动apache服务
/etc/init.d/httpd restart
3.同理配置其他真实主机
4.使用客户端访问http://10.1.1.250测试服务器
在这个过程中,首先,用户向分发器发送请求,该请求的目的IP地址为分发器的对外IP(10.1.1.250)、源IP为用户IP(10.1.1.1);当数据包到达分发器时,分发器对该数据包进行目的地址转换,将用户请求数据包的目的地址(10.1.1.250)转换为服务器池中的某台主机的ip(192.168.10.1),然后将数据包从对内网卡转发出来;该真实主机在接受到用户请求时,将对用户的请求进行处理,并将应答请求数据包返回给分发器,此时该应答数据包的目的IP为用户的IP地址(10.1.1.1),而其源IP地址为该真实主机的IP地址(192.168.10.1),其目的MAC为分发器的MAC地址;当分发器接受到该数据包时,将对此数据包进行源地址转换,将该数据包的源IP地址(192.168.10.1)转换成为分发器的对外IP地址(10.1.1.1),并将该数据包从分发器的对外网卡传送出去。
使用NAT模式构建LVS时,当同时进行的并发很大时,大量的数据包流经分发器,容易造成分发器出现问题。
二、使用DR模式构建LVS
1.配置路由器
ifconfig eth0 10.1.1.254
ifconfig eth1 192.168.10.254
echo 1 > /proc/sys/net/ipv4/ip_forward
2.配置分发器IP地址
#配置eth0的IP
ifconfig eth0 192.168.10.11
#配置默认网关
route add default gw 192.168.10.254
#添加一个虚拟ip,并使其不对外进行广播
ifconfig eth0:0 192.168.10.250 netmask 255.255.255.255 broadcast 192.168.19.250 up
#配置默认路由
route add 192.168.10.250/32 dev eth0:0
#设定分发规则
yum install ipvsadm -y
ipvsadm -A -t 192.168.10.250:80 -s rr
ipvsadm -a -t 192.168.10.250:80 -r 192.168.10.1 -g
ipvsadm -a -t 192.168.10.250:80 -r 192.168.10.2 -g
# -g 指定LVS使用的分发使用DR模式
3.real server的配置
#配置服务器IP
ifconfig eth0 192.168.10.1
#绑定vip
ifconfig lo:0 192.168.10.250 netmask 255.255.255.255 broadcast 192.168.19.250 up
#设置到主机的路由
route add -host 192.168.19.250 dev lo:0
#设置默认路由
route add default gw 192.168.10.254
#禁止真实主机将192.168.10.250进行arp广播
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
================arp_announce=============
对网络接口上,本地IP地址的发出的,ARP回应,作出相应级别的限制: 确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口
0 - (默认) 在任意网络接口(eth0,eth1,lo)上的任何本地地址
1 -尽量避免不在该网络接口子网段的本地地址做出arp回应. 当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内ip之一.如果改来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理.
2 - 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址. 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.
================arp_ignore=============
定义对目标地址为本地IP的ARP询问不同的应答模式
0 - (默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求
1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求
2 -只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内
3 - 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应
4-7 - 保留未使用
8 -不回应所有(本地地址)的arp查询
#重启apache服务
/etc/init.d/httpd restart
4.配置其他真实主机并测试服务器
在DR模式中,首先,用户向分发器发送请求,请求数据包在封装时,目的ip使用虚拟IP地址(192.168.10.250),源IP地址使用客户机IP。数据包在到达真实服务器途中,只改变源目MAC,源目IP始终不变。当请求数据包到达分发器时,分发器仅进行数据包的分配,此时只更改请求数据包源目MAC。当真实服务器接受到数据包,此时真实服务器则进行数据包的处理,应答用户请求,应答数据包的源IP为虚拟IP(192.168.18.250),目的地址为用户IP地址(10.1.1.100),并直接将数据包传递给路由器的内网接口,此时数据包不经过分发器,不会受到分发器瓶颈的影响。