DR模式和Keepalived

DR模式和Keepalived

lvs的三种模式:nat(地址转换)、DR(直接路由模式)、tun(隧道模式)

一、DR模式

1.1 DR模式

调度器依然负责接收请求,同时也根据负载均衡算法转发流量到RS,响应直接由RS响应给客户端

调度器在整个lvs集群当中是最重要的,在nat模式下,即负责接受请求,同时根据负载均衡的算法转发流量,响应发送给客户端

1.2 直接路由

直接路由(Direct Routing)是一种二层转发模式,二层转发的是数据帧,根据源mac地址和目的mac地址进行转发。不会修改数据包的源ip和目的ip,根据数据包mac地址进行转发

DR模式下,lvs也是维护一个虚拟的ip地址,所有请求都是发送到这个vip,既然是走二层转发,当客户端请求到达调度之后,根据负载均衡的算法选择一个RS,修改vip服务器的目的mac变成RS的mac地址,RS处理完请求之后,根据报文当中,客户端的源mac地址直接把响应发送到客户端即可,不需要走调度器

1.3 数据流向

在这里插入图片描述

1.4 特点

1、调度器的ip地址和RS的ip要在同一网段,数据才能进行二层转发

2、RS是一个公网地址,互联网可以直接访问RS的地址(不用)

3、DR模式是走内核转发,内核来判断数据包的地址,根据RS的地址把数据包重新封装(直接修改mac地址)

4、调度器的地址只可以作为集群访问的接口,不可以作为网关

5、所有的RS上的lo(本地回环地址)都要配置vip地址

1.5 调度器配置

1、调度器配置了vip,RS上也配置了vip地址,vip地址冲突,调度器的RS都在同一网段,ARP通信紊乱,因为是整个局域网广播,所有的设备都收到了,怎么把lo这个回环的响应屏蔽掉?只有本机的物理ip响应

答:修改内核参数:arp_ignore=1

作用:系统的物理ip地址才会响应ARP请求,lo不会响应ARP请求

2、返回报文时,vip地址还在,怎么样能让客户端来接收到响应?

答:arp_announce=2

作用:系统不使用ip数据包的源地址来响应arp请求,直发送物理接口的ip地址

1.6 节点服务器的配置

1.7 DR模式的实现

nginx1 RS1 192.168.100.11

nginx2 RS2 192.168.100.12

vip 192.168.100.100

test1 调度器 192.168.100.13

test2 客户端 192.168.100.14

#test1#
modprobe ip_vs
cat /proc/net/ip_vs
yum -y install ipvsadm* -y

2、创建vip网卡
cd /etc/sysconfig/network-scripts
vim ifcfg-ens33:0
添加
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.100.100
NETMASK=255.255.255.255
wq!

ifup ens33:0

vim /etc/sysctl.conf
添加
net.ipv4.ip_forward=0
# 关闭数据包转发功能
net.ipv4.conf.all.send_redirects=0
# 禁止系统发送icmp重定向的消息
net.ipv4.conf.default.send_redirects=0
# 禁止默认网络接口发送icmp重定向消息
net.ipv4.conf.ens33.send_redirects=0
# 针对ens33设备,禁止发送icmp重定向消息
wq!

sysctl -p

cd /opt
ipvsadm -C
ipvsadm -ln
ipvsadm-save > /etc/sysconfig/ipvsadm
ipvsadm -A -t 192.168.100.100:80 -s rr
ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.11:80 -g
ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.12:80 -g
systemctl restart ipvsadm


#nginx1和nginx2#
vim /usr/local/nginx/html/index.html
this is nginx1
wq!
systemctl restart nginx

#nginx1和nginx2#
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
# DEVICE=lo:0  IPADDR=192.168.100.100  NETMASK=255.255.255.255
ifup lo:0
ifconfig

route add -host 192.168.100.100 dev lo:0

vim /etc/sysctl.conf
添加
net.ipv4.conf.lo.arp_ignore = 1
# 设置回环接口忽略来自任何接口的ARP请求
net.ipv4.conf.lo.arp_announce = 2
#设置回环地址仅仅公共本地的ip地址,但是不响应ARP请求
net.ipv4.conf.all.arp_ignore = 1
# 设置所有接口忽略来自任何接口的ARP请求
net.ipv4.conf.all.arp_announce = 2
#设置所有接口仅仅公告本地的ip地址,但是响应ARP请求
wq!

sysctl -p

#test2客户端#
curl 192.168.100.100
this is nginx1和this is nginx2交替出现

#nginx1和nginx2的访问日志#
tail -f /usr/local/nginx/logs/access.log
route add-host 192.168.100.100 dev lo:0
# 设置ip地址为192.168.100.100的添加到回环接口,作为lvs的vip,通过路由的模式转发到RS(能让vip地址识别到)

1.8 lvs三种工作模式

NATDR(最重要)TUN
优点地址转换、配置简单性能最好WAN,可以实现较远距离的数据包传送
缺点性能瓶颈不支持跨网段专用的通道,需要开通vpn(花钱)
RS的要求无限制必须要禁止非物理接口的ARP响应要支持隧道模式
RS的数量10~20台100台100台

1.9 修改vip的轮巡算法

ipvsadm -ln
ipvsadm -E -t 192.168.100.100:80 -s -wrr
ipvsadm -e -t 192.168.100.100:80 -r 1921.68.100.11:80 -w 3
ipvsadm -ln

面试题:

1、简述lvs的三种模式和他们的区别

2、Keepalive的脑裂怎么解决

二、Keepalived

1.1 lvs集群当中的高可用架构

只是针对调度器的高可用,基于vrrp来实现调度器的主和备

1.2 高可用的HA架构

主调度器和备调度器(多台)

在主调度器正常工作的时候,备完全处于冗余状态(待命)不参与集群的运转,只有当主调度器出现故障时,备才会承担主调度器的工作,主调度器恢复功能1之后,主又会成为主,主继续作为集群的入口,备继续处于冗余状态(取决于优先级)

1.3 keepalive基于vrrp协议来实现lvs高可用的方案

1、组播地址:

224.0.0.18根据组播地址来进行通信,主和备直接发送报文,确定对方是否存活

2、根据优先级的大小来确定主和备的位置

3、故障切换,主挂了,备来继续工作,主恢复了,备继续等待

4、主和备之间的切换是vip地址的切换,

keepalive专门为了lvs而出现的,但是不是lvs专用的

1.4 实验2

要求:

lvs和nginx做负载均衡的区别:
lvs 四层代理 也可以是七层代理

lvs(DR模式)+nginx+tomcat

lvs实现四层转发+nginx实现七层转发(动态)

访问lvs的vip地址可以实现动静分离

在这里插入图片描述

test1 调度器 192.168.100.11

vip 192.168.100.100

nginx1 192.168.100.12

nginx2 192.168.100.13

tomcat1 192.168.100.15

tomcat2 192.168.100.16

客户机 192.168.100.14

yum -y install ipvs

keep

core模块:keepalived的核心模块,负责主进程的启动,维护以及全局配置文件的加载

vrrp模块:实现vrrp协议的模块,也就是主功能模块

check模块:负责健康检查,也可以负责检查后台真实服务器的情况

修改global修改为
smtp_server 127.0.0.1
#第十二行 主和备的router_id 不可以一样
#第十四行vrrp strict如果是注释的需要取消掉
#22行,主备id必须要保持一致
#23行,优先级,主的要比备高
#29行 是集群的vip地址,使用192.168.100.100
#34行,修改为192.168.100.100 80
#37行 改成大写的DR
#41行 修改为 192.168.100.11 80
#32行weight 1下添加
TCP_CHECK {
    connect_port 80
    connect_timeout 3
    nb_get_retry 3
    delay_befroe_retry 4
}

wq!
systemctl restart keepalived
ip addr #查看网卡命令


0.100
#34行,修改为192.168.100.100 80
#37行 改成大写的DR
#41行 修改为 192.168.100.11 80
#32行weight 1下添加
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_befroe_retry 4
}

wq!
systemctl restart keepalived
ip addr #查看网卡命令


  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值