一.LVS-DR工作模式原理和特点
1.工作模式
2.模式特点
二.构建环境
1.五台关闭防火墙,关闭selinux,拥有固定IP,部署有http服务的虚拟机,LVS设备下载ipvsadm工具,NFS 设备需要下载rpcbind和nfs-utils
2.实现功能
3.ipvsadm命令部分参数介绍
三.配置和测试
1.LVS设备
(1)配置VIP,并清除原有的虚拟服务规则
(2)为两台web服务器配置算法和服务规则,并启用保存ipvsadm配置
(3)调整proc响应参数,关闭ICMP重定向并重新读取
2.NFS服务器
(1)配置共享目录并写入html内容
(2)调整NFS共享配置,允许两台web服务器所在网段进行共享
3.web服务器1
(1)绑定VIP并开通到达VIP的路由
(2)屏蔽ARP响应
(3)也可以临时设置
(4)进行NFS共享文件夹挂载,挂载到httpd的页面默认目录
4.web服务器2
(1)绑定VIP并开通到达VIP的路由
(2)屏蔽ARP响应
(3)同上,也可以临时设置
(4)进行NFS共享文件夹挂载,挂载到httpd的页面默认目录
5.CIP上测试
一.LVS-DR工作模式原理和特点
1.工作模式
用户通过路由器等网络设备访问VIP向负载均衡调度器发出数据请求;VIP将其发送到内核空间中的PREROUTING链,此链判断目标IP是本机以后将包发给INPUT链;此链中的IPVS会将用户请求与自己定义好的集群服务进行对比,匹配成功将会改变数据包的目标mac地址为RS的mac地址,后发给POSTROUTING链;此链确认目标mac地址与RSmac地址匹配后将包发给RS组;RS组处理完直接将结果返还给用户。
2.模式特点
(1)所有集群节点RS必须和director server位于同一局域网。
(2)所有客户端入站流量由director server首先接收,再判断是否转发给RS。
(3)集群节点RS最好带有外部IP,为便于将数据包直接返还用户,不使用固定机器作为默认网关。
(4)所有集群节点RS必须以环回(lo)网卡设备上绑定VIP,便于验证。
(5)集群节点RS需要进行ARP抑制来把相应VIP的请求交给LVS director server。
(6)LVS-DR不需要开启调度转发器功能。
(7)LVS-DR可以承受比LVS-NAT更多的并发数据请求和服务器数量。
二.构建环境
1.五台关闭防火墙,关闭selinux,拥有固定IP,部署有http服务的虚拟机,LVS设备下载ipvsadm工具,NFS 设备需要下载rpcbind和nfs-utils
[root@localhost ~]# yum install -y ipvsadm.x86_64
[root@localhost ~]# yum install -y rpcbind nfs-utils
2.实现功能
CIP用户通过网络向LVS集群发出数据请求,LVS经过算法将请求分配给web1或web2,这两台web服务器将从nfs共享到的内容返回给用户
3.ipvsadm命令部分参数介绍
-A | 添加一条新的虚拟服务 |
-a | 在一个虚拟服务中添加一个新的真实服务器 |
-E | 编辑虚拟服务 |
-e | 编辑某个真实服务器 |
-D | 删除虚拟服务 |
-d | 删除某个真实服务器 |
-C | 清除所有的虚拟服务规则 |
-c | 显示IPVS中目前存在的连接,分析调度情况 |
-R | 恢复虚拟服务规则 |
-L | 显示内核中的虚拟服务规则 |
-n | 以数字形式显示IP端口 |
-Z | 将转达消息的统计清零 |
-p | 配置持久化时间 |
-t,-u | 配置tcp或udp协议的虚拟服务 |
-g,-m,i | 设置LVS模块为DR,NAT,TUN |
-w | 配置真实服务器的权重 |
-s | 配置负载均衡算法,建议使用rr,wrr,lc,wlc等几个常用的算法 |
--stats | 显示历史转发消息累计统计
Conns表示已经转发过的连接数
InPkts表示入包个数
OutPkts表示出包个数
nBytes表示入流量(字节)
OutBytes表示出流量(字节)
|
--rate | 显示转发速率信息,瞬时值
CPS表示每秒连接数
InPPS表示每秒的入包个数
OutPPS表示每秒的出包个数
InBPS表示每秒入流量(字节)
OutBPS表示每秒入流量(字节)
|
三.配置和测试
1.LVS设备
(1)配置VIP,并清除原有的虚拟服务规则
[root@localhost ~]# ifconfig ens33:188 192.168.2.188 netmask 255.255.255.0 up
[root@localhost ~]# ipvsadm -C
(2)为两台web服务器配置算法和服务规则,并启用保存ipvsadm配置
[root@localhost ~]# ipvsadm -A -t 192.168.2.188:80 -s rr #指定使用tcp协议和rr调度算法
[root@localhost ~]# ipvsadm -a -t 192.168.2.188:80 -r 192.168.2.191 -g #添加真实服务器,指定tcp协议和DR模式
[root@localhost ~]# ipvsadm -a -t 192.168.2.188:80 -r 192.168.2.192 -g
[root@localhost ~]# 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.2.188:80 rr
-> 192.168.2.191:80 Route 1 0 0
-> 192.168.2.192:80 Route 1 0 0
[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 rr
-> 192.168.2.191:http Route 1 0 0
-> 192.168.2.192:http Route 1 0 0
[root@localhost ~]# ipvsadm --save > /etc/sysconfig/ipvsadm
(3)调整proc响应参数,关闭ICMP重定向并重新读取
[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@localhost ~]# sysctl -p
2.NFS服务器
(1)配置共享目录并写入html内容
[root@localhost ~]# systemctl start nfs
[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# mkdir /share/{191,192} -pv
mkdir: created directory ‘/share’
mkdir: created directory ‘/share/191’
mkdir: created directory ‘/share/192’
[root@localhost ~]# cat /share/191/index.html
share191
[root@localhost ~]# cat /share/192/index.html
share192
[root@localhost ~]# chmod -R 777 /share/
(2)调整NFS共享配置,允许两台web服务器所在网段进行共享
[root@localhost ~]# vim /etc/exports
/share/191 192.168.2.0/24(rw,sync)
/share/192 192.168.2.0/24(rw,sync)
[root@localhost ~]# exportfs -rv
exporting 192.168.2.0/24:/share/192
exporting 192.168.2.0/24:/share/191
3.web服务器1
(1)绑定VIP并开通到达VIP的路由
[root@localhost ~]# ifconfig lo:188 192.168.2.188 netmask 255.255.255.255 up
[root@localhost ~]# route add -host 192.168.2.188 dev lo:188
(2)屏蔽ARP响应
[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[root@localhost ~]# sysctl -p
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
(3)也可以临时设置
[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
[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回应,做出相应级别的限制
0 (默认)在任意网络接口(eth0,eth1,lo)上的任何本地地址
1 尽量避免不在该网络接口子网段的本地地址做出arp回应,当发起ARP请求的源IP地址是被设置应该经路由到达此网络接口的时候很有用,此时会检查来访IP是否为所有接口上的子网段内ip之一。如果该来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理。
2 对查询目标是要最适当的本地地址,在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通 信的本地地址。首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址。如果没有合适的地址被发现,将选择当前的网络发送接口或其他的有可能接受到该ARP回应的网络接口来进行发送。限制了使用本地的vip地址作为优先的网络接口。
(4)进行NFS共享文件夹挂载,挂载到httpd的页面默认目录
[root@localhost ~]# mount 192.168.2.193:/share/191 /var/www/html/
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 5.1G 0 5.1G 0% /dev
tmpfs 5.1G 0 5.1G 0% /dev/shm
tmpfs 5.1G 12M 5.1G 1% /run
tmpfs 5.1G 0 5.1G 0% /sys/fs/cgroup
/dev/mapper/centos-root 44G 4.9G 40G 11% /
/dev/sda1 1014M 151M 864M 15% /boot
/dev/sr0 4.4G 4.4G 0 100% /cdrom
tmpfs 1.1G 0 1.1G 0% /run/user/0
192.168.2.193:/share/191 44G 3.2G 41G 8% /var/www/html
#开机自动挂载
[root@localhost ~]# vim /etc/fstab
192.168.2.193:/share/191 /var/www/html nfs defaults,_netdev 0 0
4.web服务器2
(1)绑定VIP并开通到达VIP的路由
[root@localhost ~]# ifconfig lo:188 192.168.2.188 netmask 255.255.255.255 up
[root@localhost ~]# route add -host 192.168.2.188 dev lo:188
(2)屏蔽ARP响应
[root@localhost ~]# vim /etc/sysctl.conf
[root@localhost ~]# sysctl -p
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
(3)同上,也可以临时设置
(4)进行NFS共享文件夹挂载,挂载到httpd的页面默认目录
[root@localhost ~]# mount 192.168.2.193:/share/192 /var/www/html/
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 5.1G 0 5.1G 0% /dev
tmpfs 5.1G 0 5.1G 0% /dev/shm
tmpfs 5.1G 12M 5.1G 1% /run
tmpfs 5.1G 0 5.1G 0% /sys/fs/cgroup
/dev/mapper/centos-root 44G 3.2G 41G 8% /
/dev/sda1 1014M 151M 864M 15% /boot
/dev/sr0 4.4G 4.4G 0 100% /cdrom
tmpfs 1.1G 0 1.1G 0% /run/user/0
192.168.2.193:/share/192 44G 3.2G 41G 8% /var/www/html
#开机自动挂载
[root@localhost ~]# vim /etc/fstab
192.168.2.193:/share/192 /var/www/html nfs defaults,_netdev 0 0
5.CIP上测试
[root@localhost ~]# for ((i=1;i<=10;i++));
> do
> curl 192.168.2.188
> done
share191
share192
share191
share192
share191
share192
share191
share192
share191
share192
#我调度算法设置的是rr,均值轮询也就是服务器一次获得分配任务,交替返回结果,若是需要一些差别,可以设置为wrr权重轮询,那么在添加规则时就要使用-w去指定权重