Centos7 LVS负载均衡集群(DR直接路由模式)

环境:
调度服务器一台: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、原理图

DR模式原理图
二、配置调度服务器
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

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注