1:cirector Server作为群集的访问入口,但不作为网关使用,
2:户端发送请求至VIP,也就是访问服务,请求报文源地址是CIP,目标地址为VIP;
3:服务端经过调度算法,衡策略选择某台后端RS,并将目标MAC地址修改RIP的MAC地址
4:后端节点处理请求,将响应直接发往客户端,此时源IP地址为VIP,目标IP为CIP
这里vip是协商出来的是客户端唯一接口
客户端》》》服务器vip(虚拟地址)》》服务端经过调度算法》》后端服务器池》》》后端节点处理请求》》直接回应客户端
Client向目标VIP发出请求,Director(负载均衡器)接收
IP包头及数据帧头信息
Src macDst mactype…source ip(源ip)src portdst ip目标dsc pot…CRC…………192.168.57.13555014192.168.57.12680…… source MACdest MAC00:18:82:3c:e8:9600:0c:29:6a:8d:5dDirector根据负载均衡算法选择RealServer_1,不修改也不封装IP报文,而是将数据帧的MAC地址改为RealServer_1的MAC地址,然后在局域网上发送(ip不变,变的是MAC)
Src macDst mactype…source ip(源ip)src portdst ipdsc pot…CRC…………192.168.57.13555014192.168.57.12680…… source MACdest MAC00:0c:29:6a:8d:5d00:0c:29:b1:97:82RealServer_1收到这个帧,解封装后发现目标IP与本机匹配(RealServer事先绑定了VIP),于是处理这个报文,随后重新封装报文,发送到局域网
IP包头及数据帧头信息 Src macDst mactype…source ipsrc portdst ip(目标ip)dsc pot…CRC…………192.168.57.12680192.168.57.13555014…… source MACdest MAC00:0c:29:b1:97:8200:18:82:3c:e8:961:在LVS-DR负载均衡集群中
负载均衡与节点服务器都要配置相同的VIP地址LVS-DR中ARP问题
在局域网中具有相同的IP地址,势必会造成各服务器ARP通信的紊乱 当ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同的网络上,它们都会接收到ARP广播只有前端的负载均衡器进行响应,其他节点服务器不应该响应ARP广播 对节点服务器进行处理,使其不响应针对VIP的ARP请求 使用虚接口lo:0承载VIP地址设置内核参数arp_ignore=1:系统只响应目的IP为本地IP的ARP请求 RealServer返回报文(源IP是VIP)经路由器转发,重新封装报文时,需要先获取路由器的MAC地址发送ARP请求时,Linux默认使用IP包的源IP地址(即VIP)作为ARP请求包中的源IP地址,而不使用发送接口的IP地址(如:ens33接口) 源IPVIP源MACRealServer的MAC目的IP路由器的IP目的MAC? 路由器收到ARP请求后,将更新ARP表项原有的VIP对应Director的MAC地址会被更新为VIP对应RealServer的MAC地址 IPMACVIPDirector的MAC IPMACVIPRealServer的MAC问题:路由器根据ARP表项,会将新来的请求报文转发给RealServer,导致Director的VIP失效
解决方法:对节点服务器进行处理,设置内核参数arp_announce=2:系统不使用IP包的源地址来
设置ARP请求的源地址,而选择发送接口的IP地址
节点服务配置抑制ARP请求 修改letclsysctl.conf文件
net.ipv4.conf.lo.arp_ignore = 1 过滤本地arp net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2
企业应用中,单台服务器承载应用存在单点故障的危险 单点故障一旦发生,企业服务将发生中断,造成极大的危害, Keepalived是专为LVS和HA设计的一款健康检查工具
实验软件环境:VMware Workstation 15.5、Xshell 6、Centos7.6
设备IP地址职责LVS+Keepalived(1)192.168.100.128/192.168.100.10(VIP)LVS-DR(主)LVS+Keepalived(2)192.168.100.129/192.168.100.10(VIP)LVS-DR(备)Web节点1192.168.100.201提供web页面Web节点2192.168.100.202提供web页面客户端(Win10)192.168.100.66测试访问Keepalived配置目录位于letc/keepalivedl/ keepalived.conf是主配置文件一
global_defs {…}区段指定全局参数vrrp_instance 实例名称{…}区段指定VRRP热备参数注释文字以"!"”符号开头目录samples,提供了许多配置样例作为参考实验前准备,在两台LV上安装keepalived和ipvsadm工具;在两台Web服务器上安装http服务
yum -y install keepalived ipvsadm yum -y install httpd将以上工具下载安装完成后,将所有服务器节点及客户机网卡均设置为仅主机模式
3、分别在两台VLS调度器上进行如下配置 节点服务配置抑制ARP请求
[root@localhost ~]# vim /etc/sysctl.conf net.ipv4.ip_forward=1 #开启转发功能 #proc响应关闭重定向功能 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 生效分别在两台VLS调度器上配置网卡及VIP
[root@localhost ~]# cd /etc/sysconfig/network-scripts/ [root@localhost network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33:0 [root@localhost network-scripts]# vim ifcfg-ens33:0 DEVICE=ens33:0 ONBOOT=yes IPADDR=192.168.100.10 NETMASK=255.255.225.0 [root@localhost network-scripts]# vim ifcfg-ens33 下面简写 192.168.100.129 GATEWAY=192.168.100.1配置DR模式启动脚本
[root@localhost network-scripts]# cd /etc/init.d/ [root@localhost init.d]# vim dr.sh 直接复制下面 #!/bin/bash GW=192.168.100.1 VIP=192.168.100.10 RIP1=192.168.100.201 RIP2=192.168.100.202 case "$1" in start) /sbin/ipvsadm --save > /etc/sysconfig/ipvsadm #先保存 systemctl start ipvsadm #先开启服务 /sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 $VIP up #开启ens33:0网卡,ip地址,广播地址,子网掩码 /sbin/route add -host $VIP dev ens33:0 #添加路由网段信息 /sbin/ipvsadm -A -t $VIP:80 -s rr #添加LVS设置,访问80端口,使用轮询算法 /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g #-g 代表使用DR,上一次使用的是-m ,代表使用nat(此处为个人理解) /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g echo "ipvsadm starting ____________________[ok]" ;; stop) /sbin/ipvsadm -C #清除缓存 systemctl stop ipvsadm #关闭LVS ifconfig ens33:0 down #关掉虚拟IP route del $VIP #删掉路由条目 echo "ipvsadm stoped _______________________[ok]" ;; status) if [ ! -e /var/lock/subsys/ipvsadm ];then #如果文件不存在,则 echo "ipvsadm stoped _______________________" exit 1 else echo "ipvsadm Runing____________________[ok]" fi ;; *) echo "Usage: $0 {start|stop|status}" exit 1 esac exit 0 [root@localhost init.d]# chmod +x dr.sh [root@localhost init.d]# service network restart [root@localhost init.d]# service dr.sh start ipvsadm starting ____________________[ok]另一台LVS-DR的操作步骤同上,不需要更改任何内容,ens33网卡信息改为192.168.100.128
安装apache服务
[root@localhost init.d]# yum -y install httpd配置两台Web节点服务器
cd /etc/sysconfig/network-scripts/ cp -p ifcfg-lo ifcfg-lo:0 ## 复制配置文件作为VIP的配置 vim ifcfg-lo:0 添加如下内容: DEVICE=lo:0 IPADDR=192.168.100.10 NETMASK=255.255.255.0 ONBOOT=yes配置本地网卡信息
[root@localhost network-scripts]# vim ifcfg-ens33 IPADDR=192.168.100.201 GATEWAY=192.168.100.1分别在两台Web节点服务器上创建配置服务管理脚本
cd /etc/init.d/ [root@localhost init.d]# vim web.sh #!/bin/bash VIP=192.168.100.10 case "$1" in start) ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP /sbin/route add -host $VIP 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 2>&1 echo "RealServer Start OK" ;; stop) ifconfig lo:0 down route del $VIP /dev/null 2>&1 echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce echo "RealServer Stoped" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0启动脚本
[root@localhost init.d]# chmod +x web.sh [root@localhost init.d]# service web.sh start [root@localhost init.d]# service network restart [root@localhost html]# systemctl restart httpd配置网页
[root@localhost ~]# cd /var/www/html/ [root@localhost ~]# vi index.html <h1>this is benet web </h1>另一台web的操作步骤同上,不需要更改任何内容,ens33网卡信息改为192.168.100.202
配置网页
[root@localhost ~]# cd /var/www/html/ [root@localhost ~]# vi index.html <h1>this is benet web </h1>验证一下apache服务
在LVS-DR(1)上配置完成后,直接使用scp命令上传到LVS-DR(2)上即可:
[root@localhost keepalived]# scp /etc/keepalived/keepalived.conf root@192.168.100.129:/etc/keepalived/在LVS+Keepalived(2)上继续进行调整
root@localhost ~]# vim /etc/keepalived/keepalived.conf 12 router_id LVS_02 ## 主为01,备就是02,不一样即可 20 state BACKUP ## 角色身份不能一样,要改为BACKUP 32 priority 90 ## 优先级要改为90在两台LVS上分别启动Keepalived服务
systemctl start keepalived刷新一下