一.配置NAT模型过程
NAT模型的工作原理:即将源IP地址改为Director自身的IP地址,然后发送给Real Server。Real Server处理完请求后,将响应发回给Director,Director再将响应的数据包的源IP地址改回客户端的IP地址,最后将响应发送给客户端
此处以四台Linux为例:客户机*1,调度器*1,web服务器*2
1.配置基础:systemctl stop firewalld
getenforce 0
配置本地yum源 等
2. 配置ip地址
客户机:110.110.110.1
调度器ens33:110.110.110.254
ens36:192.168.110.254
Web服务器1(需要配置网关192.168.100.254):192.168.100.1
web服务器2(需要配置网关192.168.100.254):192.168.100.2
3.调度器开启路由功能
Vim /etc/sysctl.conf
net.Ipv4.ip_forward = 1
Sysctl -p 查看一下是否开启
4.在两台web服务器上安装httpd 开启服务
yum -y install httpd
在/var/www/html目录中新建index.html文件
Echo web1或者web2 > index.html 用于轮询测试
在调度器上curl web1和web2的IP地址查看是否能接通
5.在调度器上下载ipvsadm
如果软件无法正常启动,可查看Vim /usr/lib/systemd/system/ipvsadm.service ipvsadm启动文件
在/etc/sysconfig下创建一个ipvsadm空文件,ipvsadm启动时会去此文件读取配置,停止时会将配置保存在此文件中,所以若没有必须touch /etc/sysconfig/ipvsadm 创建一个
再次启动
6.调度器:ipvsadm -A -t 110.110.110.254:80 -s rr
添加虚拟服务节点,指定虚拟服务器IP地址,指定调度算法为rr(轮询)
Ipvsadm -Ln 查看一下
ipvsadm -a -t 110.110.110.254:80 -r 192.168.100.1:80 -m
ipvsadm -a -t 110.110.110.254:80 -r 192.168.100.2:80 -m
Ipvsadm -Ln
查看一下
添加真实服务节点,指定虚拟服务器IP,指定真实服务器IP,指定NAT模式
7.调度器:
ipvsadm-save > /etc/sysconfig/ipvsadm
将配置保存到启动文件中
cat /etc/sysconfig/ipvsadm查看一下
8.客户机访问测试 curl 110.110.110.254
查看是否轮询,多测试几次,然后去调度器上ipvsadm -Ln查看InActConn是否有进程
二.实现DR模型搭建
DR(Direct Routing)模型,也称为直接路由模式,是LVS(Linux Virtual Server,Linux虚拟服务器)的一种工作模式。在DR模式下,Director节点通过ARP欺骗将自己伪装成服务提供者,负载均衡器作为一个透明的代理,将客户端请求的IP包转发给后端的真实服务器,而真实服务器直接响应客户端。DR模式更节省流量和时间
调度器:vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
(这个参数设定了所有接口(包括未来可能添加的新接口)发送ICMP重定向消息的开关。当值为0时,禁用所有接口发送ICMP重定向消息)
net.ipv4.conf.default.send_redirects=0
(设定了默认情况下新添加接口发送ICMP重定向消息的开关。当值为0时,禁止所有新添加的接口发送ICMP重定向消息。)
net.ipv4.conf.ens33.send_redirects = 0
(这个参数设定的是指定接口是否应该发送ICMP重定向消息。当值为0时,该接口将被配置为不发送ICMP重定向消息。)
Sysctl -p /etc/sysctl.d/99-sysctl.conf
使内核参数生效 (99-sysctl.conf是sysctl.d的映射文件,若有其他内核参数添加,可在sysctl.d目录下创建内核文件,使用绝对路径启动)
Ipvsadm -Ln 查看一下是否有连接
Cat /etc/sysconfig/ipvsadm
查看一下是否有配置
Echo > /etc/sysconfig/ipvsadm
清空文件中的配置,再查看一下是否清空
systemctl start ipvsadm
启动ipvsadm
2.配置客户机,调度器,和服务器的ip地址 (将四台机器的网卡全部配置成VMnet1模式,如果已经做了上一个实验,可以将调度器上多余的ens34网卡删除)
调度器:
Web1:110.110.110.252 (不需要dns和网关)
Web2:110.110.110.253 (不需要dns和网关)
调度器:110.110.110.254
客户机:110.110.110.1
3.配置web内核参数(ARP参数)
Web1: vim /etc/ssysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
Sysctl -p 使内核参数生效
Web2:同上
4.配置VIP(VIP承载在真实网卡上,在现实环境下一定要使其永久生效)
调度器:cd /etc/sysconfig/network-scripts
Ls 查看一下,如果有ens34文件,可以rm -rf ifcfg-ens34 删除
Cp ifcfg-ens33 ifcfg-ens33:0
复制一个ens33文件,使其成为一个ens33的子接口
配置ens33:0这个子接口的IP地址
Vim ifcfg-ens33:0
:%s/ens33/ens33:0 末行模式下修改ens33:0的名字
IPADDR=110.110.110.251
Lsmod | grep ip_vs
查看一下模块是否加载(lsmod 是列出已加载内核模块的命令。如果系统中加载了任何与 IPVS 相关的内核模块,那么它们的名字中通常会包含 "ip_vs",因为这是 IPVS 模块命名约定的一部分)
(注:若您使用的是CentOS6及以上的linux系统,请先加载模块再启动ipvsadm)
5.web节点配置
Web1:cd /etc/sysconfig/network-scripts/
Ls 查看一下是否有ifcfg-lo本地回环接口
Cp ifcfg-lo ifcfg-lo:0
Vim ifcfg-lo:0 进入ifcfg-lo:0进行如下配置
DEVICE=lo:0
IPADDR=110.110.110.251
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback:0
Systemctl restart network 重启网卡
Web2:操作同上,但将ifcfg-lo:0的IP地址更改为110.110.110.251
DEVICE=lo:0
IPADDR=110.110.110.251
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback:0
6.添加回环路由
Web1:route add -host 110.110.110.251/32 dev lo:0 (非永久添加,重启则消失)
Web2:route add -host 110.110.110.251/32 dev lo:0
Route -n 查看是否已经添加上了回环路由
永久添加: vim /etc/profile (此文件是一个启动脚本,包含了系统级别的环境变量设置、用户定义的函数以及一些启动命令,当用户登录时,系统会读取并执行这个文件中的命令, 通常用于设置对所有用户都通用的环境变量)
将route add -host 110.110.110.251/32 dev lo:0复制到文件最末尾
7.添加节点
web服务器:systemctl start httpd 启动一下httpd服务
调度器:
ipvsadm -A -t 110.110.110.251:80 -s rr
(创建一个新的虚拟服务,监听在 110.110.110.251的TCP端口 80 上,并设置了轮询调度算法 rr)
ipvsadm -a -t 110.110.110.251:80 -r 110.110.110.252:80 -g
(将真实服务器 110.110.110.252 添加到了刚才创建的虚拟服务中,-g指定为直接路由模式)
ipvsadm -a -t 110.110.110.251:80 -r 110.110.110.253:80 -g
ipvsadm -Ln 查看一下是否添加成功
保存当前系统的 IPVS(IP Virtual Server)配置到 /etc/sysconfig/ipvsadm 文件中:
ipvsadm-save > /etc/sysconfig/ipvsadm
(注:备份下当前的 IPVS 配置,以便在系统重启后能够恢复设置)
8.测试
在web服务器中使用tcpdump -i ens33 -vv抓包工具查看广播
在客户机中curl110.110.110.251查看是否可以轮询到两台web服务器
也可在调度器上ipvsadm -Ln 查看是否有进程