LVS TUN 模式

  • LVS 是Linux Virtual Server的简称,在实际环境中经常作为B/S结构的网络应用中的负载均衡器来使用,工作在7层网络模型中的,网络层,也就是通常说的IP层,由于数据的处理是在Linux内核态完成的,所以相对反向代理服务器来说,性能一般会高一些;
  • TUN 是IP Tunneling ,IP隧道的简称,它将调度器收到的IP数据包封装在一个新的IP数据包中,转交给应用服务器,然后实际服务器的返回数据会直接返回给用户。

基本LVS TUN 模式配置

具体设置如下:

 拓扑: 
 调度器:ip :172.25.21.1/24
      VIP :172.25.21.100/32
 RS1: IP:172.25.21.2/24
  Turl0 :172.25.21.100
 RS2:IP:172.25.21.3/24
  Turl0 :172.25.21.100

对调度器进行操作:

 添加VIP
 ip addr add 172.25.21.100/32 dev eth0

这里写图片描述

添加策略:
 ipvsadm -C
 ipvsadm -A -t 172.25.21.100:80 -s rr
 ipvsadm -a -t 172.25.21.100:80 -r 172.25.21.2 -i
 ipvsadm -a -t 172.25.21.100:80 -r 172.25.21.3 -i

这里写图片描述
对真实服务器进行操作:
RS1:
执行:

 modprobe ipip   # 在加载好ipip模块后就会有默认的tunl0隧道。 
 注,如果没有在此处手动加载,那么使用ifconfig tunl0 时,会自动加载ipip隧道模块。 
 使用  ifconfig查看。没有tun0 ,加参数-a 时,查看可以看到tun0 

添加tunl0:

 [root@Server2 network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-tunl0 
 DEVICE=tunl0
 IPADDR=172.25.21.100
 NETMASK=255.255.55.0
 ONBOOT=yes
 NAME=tunl0

编辑/etc/sysctl.conf 进行arp 包的传输选择:

 [root@Server2 network-scripts]# vim /etc/sysctl.conf
 添加如下内容:
 net.ipv4.conf.tunl0.arp_ignore = 1
 net.ipv4.conf.tunl0.arp_announce = 2
 net.ipv4.conf.all.arp_ignore = 1
 net.ipv4.conf.all.arp_announce = 2
 net.ipv4.conf.tunl0.rp_filter = 0
 net.ipv4.conf.all.rp_filter = 0

再执行:

 echo '1' > /proc/sys/net/ipv4/conf/tunl0/arp_ignore 
 echo '2' > /proc/sys/net/ipv4/conf/tunl0/arp_announce
 echo '1' > /proc/sys/net/ipv4/conf/all/arp_ignore
 echo '2' > /proc/sys/net/ipv4/conf/all/arp_announce
 echo '0' > /proc/sys/net/ipv4/conf/tunl0/rp_filter
 echo '0' > /proc/sys/net/ipv4/conf/all/rp_filter 

添加tunl0后
这里写图片描述
启动 http服务:
编辑默认发布文件:

这里写图片描述
RS2 的操作与RS1相同

  • 注:
  • arp_ignore=1 表示对于网络上发来的arp广播包,realserver的lo端口将会丢弃,因为如果做出应答,根据arp协议,相当于通告网络上其它主机VIP对应的Mac地址是realserver的Mac地址,而不是LB的Mac地址,这样客户端上就会绕过lvs,直接与后端的realserver通信,负载调度就失去了意义;
  • arp_announce:
    realserver 一般至少两个端口 两个ip,eth0 有ip,lo:0也绑定了一个vip,根据arp协议,
    arp请求包中必须包含源主机的IP地址和Mac地址,对方收到请求包后,记录下该源地址和Mac地址,建立一对一的映射,那么对于这种多IP的情况,realserver发送arp请求报的时候该如何取舍,将哪个ip作为源地址?
    参数arp_anonunce 正好是用来解决这个问题的,arp_announce=2 官方表述为使用最适当的本地地址,其实就是将eth0上的ip作为源地址,如果将vip作为源地址,对方就会将vip与realserver的mac地址映射起来,导致请求包都发给realserver,而不经过lvs.

在客户端进行测试:
执行如下:
操作成功
这里写图片描述

LVS TUN + keepalived

  • Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

进行keepalived 的安装
先进压缩包的获取,解压后
进入解压后的目录进行安装

 执行:./configure --prefix=/usr/local/keepalived/ --with-init=SYSV
 查看是否报错,然后进行依赖性的解决
 如安装:openssl-devel libnl3-devel  ipset-devel iptables-devel libnfnetlink-devel
 执行如下:
 yum install openssl-devel libnl3-devel ipset-devel iptables-devel  libnfnetlink-devel -y
 获取libnfnetlink-devel 的安装包 进行安装
 安装完成
 执行make
 然后执行 make install
 对文件加可执行权限
  /usr/local/keepalived/etc/rc.d/init.d/keepalived 
  /usr/local/keepalived/etc/sysconfig/keepalived 
  /usr/local/keepalived/sbin/keepalived

 再进行链接的建立
  ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
  ln -s /usr/local/keepalived/etc/keepalived/ /etc
  ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
  ln -s /usr/local/keepalived/sbin/keepalived /sbin/
 至此,安装完成

安装完成配置完成keepalived之后
进行编辑,编辑/etc/keepalived/keepalived.cf

编辑内容如下:

 ! Configuration File for keepalived
  2 
  3 global_defs {      #  # 全局配置
  4    notification_email {
  5         root@localhost     # 邮箱地址
  6    }
  7    notification_email_from keepalived@localhost
  8    smtp_server 127.0.0.1
  9    smtp_connect_timeout 30   # 连接的响应时间
 10    router_id LVS_DEVEL
 11    vrrp_skip_check_adv_addr
 12    # vrrp_strict         # 必须注释此处,否则启动程序后会默认在 iptables的策略中DROP所有的数据包

 13    vrrp_garp_interval 0
 14    vrrp_gna_interval 0
 15 }
 16 
 17 vrrp_instance VI_1 {
 18     state MASTER     # 类型:MASTER 表示为主设备
 19     interface eth0      # 接口
 20     virtual_router_id 21   # 虚拟路由ID 范围:1~255
 21     priority 100     # 优先级,用来决定主备,数字越大优先级越高
 22     advert_int 1
 23     authentication {   # 验证方式
 24         auth_type PASS
 25         auth_pass 1111
 26     }
 27     virtual_ipaddress {    # VIP 虚拟IP 地址,这里不需要在外对设备进行设置
 28         172.25.21.100   # 启动 keepalived 后会自动添加
 29     }
 30 }
 31 
 32 virtual_server 172.25.21.100 80 {   # 虚拟服务器 IP 
 33     delay_loop 6
 34     lb_algo rr                 # 调用的算法 rr round-robin
 35     lb_kind TUN              # LVS 模式 TUN模式,与ipvsadm 的 -i 相对应
 36     # persistence_timeout 50
 37     protocol TCP
 38 
 39     real_server 172.25.21.2 80 {
 40         weight 1              # 权重
 41         TCP_CHECK {
 42             connect_timeout 3
 43             retry 3
 44             delay_before_retry 3
 45         }
 46     }
 47 
 48     real_server 172.25.21.3 80 {
 49         weight 1
 50         TCP_CHECK {
 51             connect_timeout 3
 52             retry 3
 53             delay_before_retry 3
 54         }
 55     }
 56 }

在备用调度器上的编辑与在主调度器上的基本相同,修改主备类型即可:
这里写图片描述
Keepalived 的操作到此完成,启动后会自动生成LVS策略

如主调度器上:
这里写图片描述

在HTTP服务器端与基本NAT模式配置操作一致

在客户端进行测试:

这里写图片描述

成功,可轮流调度后端服务器的内容

若是任主调度器宕机,后被调度器也会第一时间顶替上去,保证用户的体验
示例:
人工down掉主调度器
这里写图片描述

客户端没有反映,只是直接使用了备用的调度器:此处MAC地址,为备用调度器MAC地址
这里写图片描述

注;若是主调度器再次启动,则会与备用调度器争夺主调度器的位置,由于其优先级高,所以会成功,而备用调度器则会再次待机

猜你喜欢

转载自blog.csdn.net/Buster_ZR/article/details/81291737