lvs+keepalived要点详解二

一.nat模式

nat模式原理中的要点:
请求到达调度器,ipvs对比数据包请求是否为集群服务,若是,修改数据包的目标ip地址为后端服务器ip,然后将数据包发至POSTROUTING链。此时报文的源ip为cip(客户端),目标ip为Rip(后端真实)
返回时:
调度器将源ip修改为自己的vip,然后相应给客户端。此时报文的源ip为vip,目标ip为cip。

  • 要点一:icmp重定向
    icmp重定向报文是icmp控制报文中的一种。在特定的情况下,当路由器检测到一台机器使用非优化路由的时候,它会向该主机发送一个icmp重定向报文,请求主机改变路由。路由器也会把初始数据报向它的目的地转发。
    nat模式是指定网关的静态路由,但是万一不是最优化的,如果icmp重定向开启,路由器就会改变路由方式,从而造成nat模式失败。
    关闭icmp重定向(重启后失效):
    ipv4:
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects

echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects

echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
 

ipv6:

echo 0 > /proc/sys/net/ipv6/conf/all/accept_redirects

echo 0 > /proc/sys/net/ipv6/conf/default/accept_redirects

echo 0 > /proc/sys/net/ipv6/conf/eth0/accept_redirects

永久生效
在/etc/sysctl.conf中增加,或者修改:

net.ipv4.conf.eth0.send_redirects= 0
net.ipv4.conf.eth1.send_redirects= 0
net.ipv4.conf.lo.send_redirects= 0
net.ipv4.conf.default.send_redirects= 0
net.ipv4.conf.all.send_redirects= 0

ipv6:

net.ipv4.conf.eth0.accept_redirects= 0
net.ipv4.conf.eth1.accept_redirects= 0
net.ipv4.conf.lo.accept_redirects= 0
net.ipv4.conf.default.accept_redirects= 0
net.ipv4.conf.all.accept_redirects= 0

执行:

sysctl -p

立即生效。

  • 要点二:MASQUERADE
    MASQUERADE:地址伪装,可以实现自动化的snat。
    例如:
iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -o eth0 -j MASQUERADE

使用MASQUERADE可以不用指定snat的ip了,它会随着eth0的出口的ip的变化,自动读取eth0变化后的ip,做出相应调整。

  • 要点三:ipvsadm的使用方法
ipvsadm -C //清除内核虚拟服务器中的所有记录
ipvsadm -A //在内核的虚拟服务器中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器
ipvsadm -a //在内核虚拟服务器表的一条记录里添加一条新的真实服务器
ipvsadm -t //说明提供的是tcp的服务 [vip:port]
ipvsadm -u //提供的是udp的服务 [vip:port]
ipvsadm -r //真实的服务器[Real-server:port]
-m //指定lvs的工作模式为nat模式
-w //真实服务器的权值
-s //使用调度算法,默认wlc
-g //指定lvs的工作模式为直接路由模式,Dr模式

二.DR模式

  • 要点一.原理要点:
    ipvs比对数据包请求的服务是否为集群服务,若是,将请求报文中的源mac地址修改为调度器的mac地址,将目标mac地址修改为Rip的mac地址,将数据包发至POSTROUTING链。此时的源ip和目的ip均为修改,也就是说DR模式中,调度器和rip都是vip,怎么不会ip冲突呢?跟要点二有关。
  • 要点二:虚拟ip地址的广播地址是它本身,子网掩码是255.255.255.255
    调度器上需要配置一行:
ifconfig eth0 $vip broadcast $vip netmask 255.255.255.255

在lvs中,虚拟ip地址与网络接口地址大大不同,这点需要特别注意。虚拟ip地址的广播地址是它本身,子网掩码是255.255.255.255,因为有若干个机器要使用同一个IP地址,用本身做广播地址和把子网掩码设置成4个255就不会造成IP地址冲突了,否则lvs将不能正常访问请求。
当子网掩码是255.255.255.255时,表示这个地址为受限广播,是不被路由发送,但是会送到相同物理网段上的所有主机,用于主机配置过程中ip数据包的目的地址。

  • 要点三:arp_ignore和arp_announce
    在rs上需要配置脚本,脚本中包含下面几条:
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

以上是临时性的。先说参数意义:
arp_ignore参数的作用是控制系统在收到外部的arp请求时,是否返回arp响应。
arp_ignore主要取值有0,1,2:
0:响应任意网卡上接收到的对本机ip地址的arp请求(包括lo换回地址)
lvs+keepalived要点详解二_第1张图片
1:只响应目的IP地址在接收网卡上的本地地址的arp请求:
lvs+keepalived要点详解二_第2张图片
2:只响应目的地址为接收网卡上的本地地址的arp请求,并且arp请求的源ip必须和接收网卡同网段。

arp_announce:
控制系统在对外发送arp请求时,如何选择arp请求数据包的源IP地址。
0:允许使用任意网卡上的IP地址作为arp请求的源IP,通常就是使用数据包a的源Ip:
lvs+keepalived要点详解二_第3张图片
2:当arp_announce参数配置为2时,eth2网卡发起arp请求时,源IP地址会选择eth2网卡自身的IP地址:
lvs+keepalived要点详解二_第4张图片
永久生效:
编辑配置文件:

vim /etc/sysctl.conf

增加:

net.ipv4.conf.all.arp_ignore=1
 net.ipv4.conf.lo.arp_ignore=1
 net.ipv4.conf.all.arp_announce=2
 net.ipv4.conf.lo.arp_announce=2

立即生效:

sysctl -p

三.lvs结合keepalived

lvs可以实现负载均衡,但是不能够实现健康检查,当一个rs出现故障,lvs仍会发送数据包给它,但是有了keepalived,keepalived会进行健康检查,还可以解决lvs调度器单点故障的问题,实现高可用。

配置文件可以看我写的第一篇:
https://blog.csdn.net/qq_37369726/article/details/91127148

你可能感兴趣的:(运维linux,运维)