LVS-DR数据包流向分析介绍
发表于:2024-11-17 作者:千家信息网编辑
千家信息网最后更新 2024年11月17日,下文给大家带来LVS-DR数据包流向分析介绍,希望能够给大家在实际运用中带来一定的帮助,负载均衡涉及的东西比较多,理论也不多,网上有很多书籍,今天我们就用在行业内累计的经验来做一个解答。LVS-DR数
千家信息网最后更新 2024年11月17日LVS-DR数据包流向分析介绍
下文给大家带来LVS-DR数据包流向分析介绍,希望能够给大家在实际运用中带来一定的帮助,负载均衡涉及的东西比较多,理论也不多,网上有很多书籍,今天我们就用在行业内累计的经验来做一个解答。
LVS-DR数据包流向分析
为方便进行原理分析,将Client与群集机器放在同一网络中,数据包流经的路线为1-2-3-4
- Client向目标VIP发出请求, Director (负载均衡器)接收
- Director根据负载均衡算法选择RealServer 1,不修改也不封装IP报文,而是将数据帧的MAC地址改为RealServer 1的MAC地址,然后在局域网上发送。
- RealServer_ _1收到这个帧,解封装后发现目标IP与本.机匹配(RealServer事先绑定 了VIP),于是处理这个报文。随后重新封装报文,发送到局域网。
- Client将收到回复报文。Client认为得到正常的服务 ,而不会知道是哪一台云服务器处理的
- 注意:如果跨网段,那么报文通过路由器经由Internet返回给用户
LVS-DR中的ARP问题
- 在LVS-DR负载均衡集群中,负载均衡器与节点服务器都要配置相同的VIP地址
- 在局域网中具有相同的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地址,而不使用发送接口(例如ens33) 的IP地址
- 路由器收到ARP请求后,将更新ARP表项
- 原有的VIP对应Director的MAC地址会被更新为VIP对应RealServer的MAC地址
- 此时新来的请求报文,路由器根据ARP表项,会将该报文转发给RealServer,从而导致Director的VIP失效
解决ARP的两个问题的设置方法
- 修改/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
Keepalived
- 在企业应用中,单台服务器承担应用存在单点故障的危险,在企业应用集群中,存在了至少两处单点故障危险,单点故障一旦发生,企业服务将发生中断,造成极大的危害
Keepalived工具介绍
专为LVS和HA设计的一-款健康检查工具
- 支持故障自动切换(Failover)
- 支持节点健康状态检查(Health Checking)
- 官方网站: http://www.keepalived.org/
Keepalived实现原理剖析
- Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能
VRRP,虚拟路由冗余协议,是针对路由器的一-种备份解决方案
- 由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
- 每个热备组内同- -时刻只有一台主路由器提供服务,其他路由器处于冗余状态
- 若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务
Keepalived master服务器的配置
- Keepalived配置目录位于F/etc/keepalived/
- keepalived.conf是主配置文件
- global_ defs ...}区段指定全局参数
- vrp_ instance实例名称{..}区段指定VRRP热备参数
- 注释文字以"!"符号开头
- 目录samples/,提供了许多配置样例作为参考
常用配置选项讲解
- router_id HA_TEST_R1: 本路由器(服务器)的名称
- vrrp_instance VI_1 :定义VRRP热备实例
- state MASTER:热备状态,MASTER表示主服务器
- interface ens33 :承载VIP地址的物理接口
- virtual_router_id 1 :虚拟路由器的ID号每个热备组保持-致
- priority 80:优先级,数值越大优先级越高
- advert_int 1:通告间隔秒数(心跳频率)
- auth_type PASS:认证类型
- auth_pass 123456:密码字串
- virtual_ipaddress {vip}:指定漂移地址(VIP),可以有 多个
Keepalived备份服务器的配置与master的配置有三个选项不同
- router_id:设为自有名称
- state:设为BACKUP
- priority:值低于主服务器
- 其他选项与master相同
负载均衡+高可用群集
- Keepalived的设计目标是构建高可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器、 管理服务器池,而不仅仅用作双机热备
- 使用Keepalived构建LVS群集更加简便易用,主要优势体现在:
- 对LVS负载调度器实现热备切换,提高可用性
- 对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再重新加入
LVS--DR模式+keepalived群集实践
实验环境
- 虚拟ip地址:192.168.100.10
- lvs1调度服务器IP地址:192.168.100.110
- lvs2调度服务器IP地址:192.168.100.111
- web1服务器IP地址:192.168.100.200
- web2服务器IP地址:192.168.100.222
- client测试机IP地址:192.168.100.20
在lvs1调度服务器上安装keepalived,ipvsadm服务
root@lvs1 ~]# yum install keepalived ipvsadm -y[root@lvs1 ~]# vim /etc/sysctl.conf //配置路由转发功能net.ipv4.ip_forward=1 //路由功能net.ipv4.conf.all.send_redirects = 0net.ipv4.conf.default.send_redirects = 0 //proc响应关闭重定向功能net.ipv4.conf.ens33.send_redirects = 0[root@lvs1 ~]# sysctl -p //加载生效[root@lvs1 ~]# cd /etc/sysconfig/network-scripts/[root@lvs1 network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33:0 //复制虚拟网卡的配置文件[root@lvs1 network-scripts]# vim ifcfg-ens33:0DEVICE=ens33:0 //添加配置文件信息,原有的信息删除ONBOOT=yesIPADDR=192.168.100.10NETMASK=255.255.255.0[root@lvs1 network-scripts]# cd /etc/init.d/ //创建脚本便于service使用[root@lvs1 init.d]# vim dr.sh#!/bin/bashGW=192.168.100.1VIP=192.168.100.10 //虚拟ipRIP1=192.168.100.200 //真实web服务器ipRIP2=192.168.100.222case "$1" instart) /sbin/ipvsadm --save > /etc/sysconfig/ipvsadm //保存配置 systemctl start ipvsadm //启动服务 /sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up //设置ens33:0地址,广播地址,子网掩码,并开启 /sbin/route add -host $VIP dev ens33:0 //添加路由网段信息 /sbin/ipvsadm -A -t $VIP:80 -s rr //指定虚拟服务访问入口,指定轮询算法 /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g //指定真实服务器,dr模式 /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g echo "ipvsadm starting --------------------[ok]" ;;stop) /sbin/ipvsadm -C //清空缓存 systemctl stop ipvsadm //关闭服务 ifconfig ens33:0 down //关闭接口 route del $VIP //删除路由信息 echo "ipvsamd stoped----------------------[ok]" ;;status) if [ ! -e /var/lock/subsys/ipvsadm ];then //判断文件存在与否决定状态 echo "ipvsadm stoped---------------" exit 1 else echo "ipvsamd Runing ---------[ok]" fi ;;*) echo "Usage: $0 {start|stop|status}" exit 1esacexit 0[root@lvs1 init.d]# chmod +x dr.sh //给执行权限
修改lvs1服务器为仅主机模式,并修改网卡配置
[root@lvs1 init.d]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 //修改网卡信息BOOTPROTO=staticIPADDR=192.168.100.110NETMASK=255.255.255.0GATEWAY=192.168.100.1[root@lvs1 init.d]# service network restart //重启网络服务[root@lvs1 init.d]# ifup ens33:0 //开启虚拟网卡[root@lvs1 init.d]# service dr.sh start //开启lvs服务ipvsadm starting --------------------[ok][root@lvs1 init.d]# systemctl stop firewalld.service //关闭防火墙[root@lvs1 init.d]# setenforce 0
修改lvs2调度服务器配置
[root@lvs2 ~]# yum install keepalived ipvsadm -y[root@lvs2 ~]# vim /etc/sysctl.conf //配置路由转发功能net.ipv4.ip_forward=1 //路由功能net.ipv4.conf.all.send_redirects = 0net.ipv4.conf.default.send_redirects = 0 //proc响应关闭重定向功能net.ipv4.conf.ens33.send_redirects = 0[root@lvs2 ~]# sysctl -p //加载生效[root@lvs2 ~]# cd /etc/sysconfig/network-scripts/[root@lvs2 network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33:0 //复制虚拟网卡的配置文件[root@lvs2 network-scripts]# vim ifcfg-ens33:0DEVICE=ens33:0 //添加配置文件信息,原有的信息删除ONBOOT=yesIPADDR=192.168.100.10NETMASK=255.255.255.0[root@lvs2 network-scripts]# cd /etc/init.d/ //创建脚本便于service使用[root@lvs2 init.d]# vim dr.sh#!/bin/bashGW=192.168.100.1VIP=192.168.100.10 //虚拟ipRIP1=192.168.100.200 //真实web服务器ipRIP2=192.168.100.222case "$1" instart) /sbin/ipvsadm --save > /etc/sysconfig/ipvsadm //保存配置 systemctl start ipvsadm //启动服务 /sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up //设置ens33:0地址,广播地址,子网掩码,并开启 /sbin/route add -host $VIP dev ens33:0 //添加路由网段信息 /sbin/ipvsadm -A -t $VIP:80 -s rr //指定虚拟服务访问入口,指定轮询算法 /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g //指定真实服务器,dr模式 /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g echo "ipvsadm starting --------------------[ok]" ;;stop) /sbin/ipvsadm -C //清空缓存 systemctl stop ipvsadm //关闭服务 ifconfig ens33:0 down //关闭接口 route del $VIP //删除路由信息 echo "ipvsamd stoped----------------------[ok]" ;;status) if [ ! -e /var/lock/subsys/ipvsadm ];then //判断文件存在与否决定状态 echo "ipvsadm stoped---------------" exit 1 else echo "ipvsamd Runing ---------[ok]" fi ;;*) echo "Usage: $0 {start|stop|status}" exit 1esacexit 0[root@lvs2 init.d]# chmod +x dr.sh //给执行权限[root@lvs2 init.d]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 //修改网卡信息,切换为仅主机模式BOOTPROTO=staticIPADDR=192.168.100.111NETMASK=255.255.255.0GATEWAY=192.168.100.1[root@lvs2 init.d]# service network restart //重启网络服务[root@lvs2 init.d]# ifup ens33:0 //开启虚拟网卡[root@lvs2 init.d]# service dr.sh start //开启lvs服务ipvsadm starting --------------------[ok][root@lvs2 init.d]# systemctl stop firewalld.service ##关闭防火墙[root@lvs2 init.d]# setenforce 0
配置web1节点服务器
[root@web1 ~]# yum install httpd -y //安装web服务[root@web1 ~]# systemctl stop firewalld.service //关闭防火墙[root@web1 ~]# setenforce 0[root@web1 ~]# echo "this is kgc web" > /var/www/html/index.html //创建网站页面[root@web1 ~]# cd /etc/sysconfig/network-scripts/ [root@web1 network-scripts]# cp -p ifcfg-lo ifcfg-lo:0 //修改回环网卡的虚拟网卡[root@web1 network-scripts]# vim ifcfg-lo:0DEVICE=lo:0IPADDR=192.168.100.10NETMASK=255.255.255.0ONBOOT=yes[root@web1 network-scripts]# cd /etc/init.d/[root@web1 init.d]# vim web.sh //编写arp脚本#!/bin/bashVIP=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 //arp忽略 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 //arp开启 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 Stopd" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0[root@web1 init.d]# chmod +x web.sh //给权限
配置web1网卡
[root@web1 init.d]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 //修改网卡,仅主机模式BOOTPROTO=staticIPADDR=192.168.100.200NETMASK=255.255.255.0GATEWAY=192.168.100.1[root@web1 init.d]# service network restart //重启网络服务[root@web1 init.d]# service web.sh start //启动脚本RealServer Start OK [root@web1 init.d]# systemctl start httpd.service //开启web服务[root@web1 init.d]# ifup lo:0 //开启回环虚拟网卡
配置web2节点服务器和web1相同的配置
[root@web2 ~]# yum install httpd -y //安装web服务[root@web2 ~]# systemctl stop firewalld.service //关闭防火墙[root@web2 ~]# setenforce 0[root@web2 ~]# echo "this is accp web" > /var/www/html/index.html //创建网站页面[root@web2 ~]# cd /etc/sysconfig/network-scripts/ [root@web2 network-scripts]# cp -p ifcfg-lo ifcfg-lo:0 //修改回环网卡的虚拟网卡[root@web2 network-scripts]# vim ifcfg-lo:0DEVICE=lo:0IPADDR=192.168.100.10NETMASK=255.255.255.0ONBOOT=yes[root@web2 network-scripts]# cd /etc/init.d/[root@web2 init.d]# vim web.sh //编写arp脚本#!/bin/bashVIP=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 //arp忽略 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 //arp开启 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 Stopd" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0[root@web2 init.d]# chmod +x web.sh //给权限
配置web2网卡
[root@web2 init.d]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 //修改网卡,仅主机模式BOOTPROTO=staticIPADDR=192.168.80.222NETMASK=255.255.255.0GATEWAY=192.168.80.1[root@web2init.d]# service network restart //重启网络服务[root@web2init.d]# service web.sh start //启动脚本RealServer Start OK [root@web2 init.d]# systemctl start httpd.service //开启web服务[root@web2 init.d]# ifup lo:0 //开启回环虚拟网卡
配置lvs1上keepalived部署
[root@lvs1 init.d]# vim /etc/keepalived/keepalived.confglobal_defs { ... smtp_server 127.0.0.1 //指向本地 router_id LVS_01 //指定名称,备份服务器不同名称 ... }vrrp_instance VI_1 { state MASTER //备份服务器是BACKUP virtual_router_id 10 //组号相同 ... auth_pass abc123 //验证密码 priority 100 //优先级备份小于主服务器 ... virtual_ipaddress { 192.168.100.10 } ...virtual_server 192.168.100.10 80 {... real_server 192.168.100.200 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 192.168.100.222 80 { weight 1 TCP_CHECK { //tcp connect_port 80 //添加端口 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }[root@lvs1 init.d]# systemctl start keepalived.service [root@lvs1 init.d]# scp /etc/keepalived/keepalived.conf root@192.168.100.111:/etc/keepalived/ //复制到lvs2服务器上
在lvs2服务器上修改keepalived配置文件
[root@lvs2 init.d]# vim /etc/keepalived/keepalived.conf ##修改keepalive配置文件router_id LVS_02 ##router_id不能相同...state BACKUP ##备服务器...priority 90 ##优先级低于主服务器[root@lvs2 init.d]# systemctl start keepalived.service ##启动keepalive服务
使用client测试机测试(访问不到重启全部服务即可)
看了以上关于LVS-DR数据包流向分析介绍,如果大家还有什么地方需要了解的可以在行业资讯里查找自己感兴趣的或者找我们的专业技术工程师解答的,技术工程师在行业内拥有十几年的经验了。官网链接www.yisu.com
服务
服务器
配置
地址
路由
网卡
路由器
信息
文件
均衡
报文
节点
相同
功能
模式
备份
网络
脚本
数据
优先级
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全职业生涯规划路线选择
dnf黑数据库
优酷网站护苗网络安全
下列关于网络安全法的
不小心把服务器弄冒险模式了
新浪show服务器连接
香港服务器高级配件
怎么画防网络安全绘画
炫熵上海互联网科技有限公司
csgo进入社区服务器怎么准备
教育部本科数据库
数据库有几种范围
网络技术开发的税收分类编码
换电脑 数据库
微信这个软件开发成本
jpa 连接数据库
bios软件开发需要知识
饥荒联机版关闭服务器指令
无锡crm软件开发中心
辽宁网络安全赛
强的深信服网络安全解决方案
离子迁移数据库
保险行业网络安全等级保护
英雄联盟手游咋换服务器
安徽通用软件开发价钱
成都软件开发需要注意哪些
小程序网络安全风险
软件开发活动间排序依据
清华同方服务器默认管理地址
小学网络安全工作自查总结