环境:
调度服务器一台:Linux—CentOS7.5
真实IP:192.168.100.150
虚拟IP地址:192.168.100.100
Web服务器两台:Linux—CentOS7.5
IP地址:192.168.100.151(SERVER AA)
IP地址:192.168.100.152(SERVER BB)
一、简介
1、LVS(DR模式)原理
客户端向目标vip发出请求,lvs接收 ,LVS根据负载均衡算法选择一台活跃的的节点,将此节点的ip所在网卡的mac地址作为目标mac地址,发送到局域网里
节点在局域网中收到这个帧,拆开后发现目标IP(VIP)与本地匹配,于是处理这个报文.随后重新封装报文,发送到局域网.此时IP包的目标ip是客户端,源ip是自己的vip地址。
2、DR模式
1)通过在调度器LB上修改数据包的目的MAC地址实现转发。注意源地址仍然是CIP,目的地址仍然是VIP地址。
2)请求的报文经过调度器,而RS响应处理后的报文无需经过调度器LB,因此并发访问量大时使用效率很高(和NAT模式比)
3)因为DR模式是通过MAC地址改写机制实现转发,因此所有RS节点和调度器LB只能在一个局域网里面
4)RS主机需要绑定VIP地址在LO接口上,并且需要配置ARP抑制。
5)RS节点的默认网关不需要配置成LB,而是直接配置为上级路由的网关,能让RS直接出网就可以。
6)由于DR模式的调度器仅做MAC地址的改写,所以调度器LB就不能改写目标端口,那么RS服务器就得使用和VIP相同的端口提供服务。
3、原理图
二、配置调度服务器
1、加载LVS内核模块
modprobe ip_vs
cat /proc/net/ip_vs
2、安装管理软件ipvsadm,不需要启动
yum install -y ipvsadm
3、编写调度器配置脚本
vim dr.sh
#!/bin/bash
ifconfig ens33:0 192.168.100.100 broadcast 192.168.100.100 netmask 255.255.255.255 up
route add -host 192.168.100.100 dev ens33:0
ipvsadm -C #清除内核虚拟服务器表中的所有记录
ipvsadm -A -t 192.168.100.100:80 -s rr #创建虚拟服务器
ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.151:80 -g #添加服务器节点
ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.152:80 -g #添加服务器节点
ipvsadm -Ln #查看节点状态,加个“-n”将以数字形式显示地址、端口信息
//选项注释:
“-A”表示添加虚拟服务器,
“-a”表示添加真实服务器
“-t”用来指定VIP地址及TCP端口
“-r”用来指定RIP地址及TCP端口
“-s”用来指定负载调度算法——rr(轮询)、wrr(加权轮询)、lc(最少连接)、wlc(加权最少连接)
“-m”表示使用NAT群集模式(”-g”是DR模式,”-i”是TUN模式)
4、执行脚本
sh dr.sh
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.100.100:80 rr
-> 192.168.100.151:80 Route 1 0 0
-> 192.168.100.152:80 Route 1 0 0
5、查看虚拟接口
ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.100.150 netmask 255.255.255.0 broadcast 192.168.100.255
inet6 fe80::e2bd:4cc9:d907:7629 prefixlen 64 scopeid 0x20
ether 00:0c:29:bb:10:57 txqueuelen 1000 (Ethernet)
RX packets 1678 bytes 237492 (231.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 951 bytes 192120 (187.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.100.100 netmask 255.255.255.255 broadcast 192.168.100.100
ether 00:0c:29:bb:10:57 txqueuelen 1000 (Ethernet)
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 32 bytes 2592 (2.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 32 bytes 2592 (2.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
三、配置两台Web服务器
1、在两台master节点安装nginx
#编辑yum文件
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
2、装最新版nginx
yum install nginx -y
3、编写测试页面
rs1:
vim /usr/share/nginx/html/index.html
SERVER rs1
rs2:
vim /usr/share/nginx/html/index.html
SERVER rs2
4、配置DR模式
vim web.sh
#!/bin/bash
#haha
ifconfig lo:0 192.168.100.100 broadcast 192.168.100.100 netmask 255.255.255.255 up
route add -host 192.168.100.100 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
sysctl -p &>/dev/null
5、执行脚本
sh web.sh
6、查看虚拟接口
ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.100.151 netmask 255.255.255.0 broadcast 192.168.100.255
inet6 fe80::7e11:4fb1:3140:c479 prefixlen 64 scopeid 0x20
inet6 fe80::6595:3459:3b38:bbfd prefixlen 64 scopeid 0x20
ether 00:0c:29:a8:98:84 txqueuelen 1000 (Ethernet)
RX packets 3024 bytes 342506 (334.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1077 bytes 150611 (147.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 32 bytes 2592 (2.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 32 bytes 2592 (2.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 192.168.100.100 netmask 255.255.255.255
loop txqueuelen 1000 (Local Loopback)
7、测试访问,多用几个设备浏览器访问 http://192.168.100.100
暂无评论内容