zoukankan      html  css  js  c++  java
  • 部署LVS-DR群集

    一、LVS-DR原理剖析

    (一)LVS-DR数据包流向分析

    1、Client向目标VIP发出请求,Director(负载均衡器)接收。此时IP包头及数据帧头信息为:

    2、Director根据负载均衡算法选择RealServer_1,不修改也不封装IP报文,而是将数据帧的MAC地址改为RealServer_1的MAC地址,然后在局域网上发送。IP包头及数据帧头信息如下:

    3、RealServer_1收到这个帧,解封装后发现目标IP与本机匹配(RealServer事先绑定了VIP),于是处理这个报文。随后重新封装报文,发送到局域网。此时IP包头及数据帧头信息为:

    (二)LVS-DR中的ARP问题

    1、问题阐述

      在LVS-DR负载均衡群集中,负载均衡器与节点服务器都要配置相同的VIP地址,在局域网中具有相同的IP地址,势必会造成各服务器ARP通信的紊乱,当一个ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同的网络上的,他们都会接受到ARP广播,这个时候应该只有前端的负载均衡器进行相应,其他节点服务器不应该响应ARP广播。

    2、处理方法

      对节点服务器进行处理,使其不响应针对VIP的ARP请求

    (1)使用虚接口lo:0承载VIP地址,意思就是我们给每个节点配置的VIP并不是针对网卡而设置的,虚接口里的VIP只是标识这个节点中有这么一个ip地址而已,但不是某一个具体网卡上的

    (2)那么我们还需要设置系统只响应目的IP为本地IP的ARP请求,也就是说让这个VIP不响应ARP请求,这样我们可设置内核参数arp_ignore=1

    3、应答过程分析

      RealServer返回报文(源IP是VIP)经路由器转发,在重新封装报文时,需要先获取路由器的MAC地址,发送ARP请求时,Linux默认使用IP包的源IP地址(即VIP)作为ARP请求包中的源IP地址,而不使用发送接口(例如eth0)的IP地址。路由器收到ARP请求后,将更新ARP表项,原有的VIP对应Director的MAC地址会被更新为VIP对应RealServer的MAC地址

    4、新ARP请求问题

      由于路由器更新了ARP表项,此时新来的请求报文,会将该报文转发给RealServer,从而导致Director的VIP失效!

    5、新问题处理方法

      对节点服务器进行处理,让系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址,设置内核参数arp_announce=2

    6、解决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

    二、LVS-DR配置

    案例环境

     

      一台LVS调度器、四台节点服务器,均配置双网卡:第一块网卡eth0连接至Internet,位于192.168.10.0/24网段,第二块网卡eth1连接至内网,位于192.168.7.0/24网段,共享存储由一台Linux服务器承担,将目录/var/www/html发布为NFS可写共享。只允许LVS调度器、节点服务器访问,以root用户挂载时允许写入,Web群集的地址为192.168.10.70,通过此地址访问公司的Web站点

    部署步骤

    (一)配置LVS调度器
    1、配置IP和VIP
    1)配置IP

    [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 

    2)配置VIP

    [root@localhost ~]#cp /etc/sysconfig/network-scripts/ifcfg-eth0  /etc/sysconfig/networkscripts/ifcfg-eth0:0
    [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0:0
    添加:
    DEVICE=eth0:0
    ONBOOT=yes
    IPADDR=192.168.10.70
    NETMASK=255.255.255.0
    [root@localhost ~]# service network restart

    2、调整响应参数

    [root@localhost ~]# vim /etc/sysctl.conf
    添加:
    net.ipv4.conf.all.send_redirects = 0
    net.ipv4.conf.default.send_redirects = 0
    net.ipv4.conf.eth0.send_redirects = 0
    [root@localhost ~]# sysctl -p

    3、安装并配置ipvsadm

    [root@localhost ~]# rpm -ihv /mnt/Packages/ipvsadm-1.26-2.el6.x86_64.rpm     
    [root@localhost ~]# ipvsadm -A -t 192.168.10.70:80 -s rr #添加虚拟director的vip地址,轮询的调度算法
    [root@localhost ~]# ipvsadm -a -t 192.168.10.70:80 -r 192.168.10.77 -g -w 1 #添加rip,-g代表DR模式
    [root@localhost ~]# ipvsadm -a -t 192.168.10.70:80 -r 192.168.10.78 -g -w 1
    [root@localhost ~]# ipvsadm -L -n    #查询配置                                
    [root@localhost ~]# service ipvsadm save
    [root@localhost ~]# chkconfig --add ipvsadm
    [root@localhost ~]# chkconfig ipvsadm on
    [root@localhost ~]# service ipvsadm start
     vim /etc/sysconfig/ipvsadm 进去可以删除

    (二)配置WEB节点服务器
    1、配置IP地址
    1)设置IP

    [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 

    2)设置VIP

    [root@localhost ~]# cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/networkscripts/ifcfg-lo:0
    [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
    修改项如下:
    DEVICE=lo:0
    IPADDR=192.168.10.70
    NETMASK=255.255.255.255
    ONBOOT=yes

    3)添加路由

    [root@localhost ~]# route add -host 192.168.10.70 dev lo:0  #将vip限制在本机
    [root@localhost ~]# echo "route add -host 192.168.10.70 dev lo:0" >> /etc/rc.local 

    2、调整响应参数

    [root@localhost ~]# vim /etc/sysctl.conf
    添加:
    net.ipv4.conf.all.arp_ignore = 1 
    net.ipv4.conf.all.arp_announce = 2
    net.ipv4.conf.default.arp_ignore = 1
    net.ipv4.conf.default.arp_announce = 2
    net.ipv4.conf.lo.arp_ignore = 1
    net.ipv4.conf.lo.arp_announce = 2
    [root@localhost ~]# sysctl -p
    arp——ignore定义了网卡在响应外部arp请求时候的相应级别,0默认值,不管哪块网卡接收到了arp请求,只要发现本机有这个mac都给响应,1总是使用最合适的网卡来响应,一个主机有多块网卡,其中一块网卡接收到了arp请求,发现所请求的mac是本机的另一块网卡的,这个时候接收到arp请求的这块网卡就一定不响应,只有发现请求的mac是自己的才响应。


     

    3、配置http服务

    [root@localhost ~]# echo "welcome to 192.168.10.78 web server" > /var/www/html/index.html
    [root@localhost ~]# service httpd restart

    (三)验证
    1、客户端访问:

    [root@localhost ~]# http://192.168.10.70/ 或者 while :;do curl 192.168.10.70;sleep 0.1;done

    2、在LVS上查看:

    [root@localhost ~]# ipvsadm -Lnc
  • 相关阅读:
    Html页面添加百度地图
    Redis Sentinel主从高可用方案
    redis分布式锁-SETNX实现
    使用RestTemplate访问restful服务时遇到的问题
    RestTemplate
    webservice服务器端获取request对象的三种方式
    Apache软件基金会项目百度百科链接
    JAX-RPC 与 JAX-WS 的比较
    angular+ionic前后端分离开发项目中的使用
    WebService之soap类型的服务和rest类型的服务
  • 原文地址:https://www.cnblogs.com/mangood/p/6057914.html
Copyright © 2011-2022 走看看