当前位置: 首页 > news >正文

LVS负载均衡机制之LVS-DR模式工作原理以及简单配置

本博文主要简单介绍一下LVS负载均衡集群的一个基本负载均衡机制:LVS-DR;如有汇总不当之处,请各位在评论中多多指出。

 

LVS-DR原理:

  LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器。它是我们国家的章文嵩博士的一个开源项目。在linux内存2.6中,它已经成为内核的一部分,在此之前的内核版本则需要重新编译内核。我们都知道LVS有LVS-DR,LVS-NAT,LVS-TUN三种模式,其中DR模式意为Direct Routing(直接路由),是调度器与实际服务器都有一块网卡连在同一物理网段上的情况。

  而LVS-DR的工作原理就是:通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址,源IP/PORT,以及目标IP/PORT均保持不变

 

LVS-DR:直接路由的特点

   Director和各RS上都配置使用VIP

     (1)确保前端路由将目标IP为VIP的请求报文发往Director

        (a)在前端网关做静态绑定

        (b)在RS上使用arptables

        (c)在RS上修改内核参数以限制ARP通告和应答级别

           arp_announce

           arp-ignore

     (2)RS的RIP可以使用私网地址,也可以是公网地址,RIP与DIP在同一IP网络,RIP的网关不能指向DIP,以确保响应报文不会经由Director

     (3)RS跟Director要在同一个物理网络

     (4)请求报文要经由Director,但响应不能经由Director,而是由RS直接发往Client

     (5)不支持端口映射

 

 

 

LVS-DR部署简单步骤介绍:

下图为LVS-DR的拓扑配置图:

lvs-dr.png

 

 

1.服务器IP分配:

  IP分配.png

2.在RS服务器端安装nginx,并配置好RS的测试页面文件(test.html)

  ~]#yum install -y nginx 

  ~]#vim /usr/share/nginx/html/test.html

 

  RS1设置:

 ~]# cat /usr/share/nginx/html/test.html 

 <h1>RS1-192.168.73.142</h1>

  RS2设置:

~]# cat /usr/share/nginx/html/test.html 

 <h1>RS2-192.168.73.143</h1>

 

 

注意:RS1与RS2配置步骤一致,但在配置测试页面文件时,为了显示测试效果,会显示实际RS的hostname以及对于IP地址

 

3.配置RS1网卡的VIP,添加本地route限定并修改arp_announce和arp_ignore的设置

  ~]#ifconfig lo:0 192.168.73.160 netmask 255.255.255.255 broadcast 192.168.73.160 up

  ~]#route add -host 192.168.73.160 dev lo:0

  ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

  ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

  ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

  ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

 

注:配置RS2服务器,步骤跟RS1配置一致即可

 

4.在Director安装ipvsadm,并配置网卡设置,添加ipvsadm规则

  ~]#yum install -y ipvsadm

  ~]#ifconfig ens33:0 192.168.73.160 netmask 255.255.255.255 broadcast 192.168.73.160 up

  ~]#route add -host 192.168.73.160 dev ens33:0

 

  ~]# ipvsadm -At 192.168.73.160 -s rr

  Zero port specified for non-persistent service

  ~]# ipvsadm -At 192.168.73.160:80 -s rr

  ~]# ipvsadm -a -t 192.168.73.160:80 -r 192.168.73.142 -g 

  ~]# ipvsadm -a -t 192.168.73.160:80 -r 192.168.73.143 -g 

  ~]# ipvsadm -ln

  IP Virtual Server version 1.2.1 (size=4096)

  Prot LocalAddress:Port Scheduler Flags

    -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

  TCP  192.168.73.160:80 rr

    -> 192.168.73.142:80            Route   1      0          0         

    -> 192.168.73.143:80            Route   1      0          0 

 

5.启动各服务器的nginx服务,同时为了简便,关闭所有服务器的firewalld

  ~]#systemctl start nginx

  ~]#systemctl stop firewalld

  ~]#setenforce 0  

 

6.在客户端测试访问,http://192.168.73.160/test.html

test.png

test1.png

test2.png

 

 

 

 

 

注意:LVS-DR模式其实可以通过脚本来直接实现,下面为各服务器的简单脚本,建议为了熟悉配置,前期还是自己手动设置比较好,

此脚本较简单,请大神勿喷!

 

 

#!/bin/bash

#lvs-dr模式部署脚本

 

vip=192.168.73.160

mask=255.255.255.255

iface='lo:0'

 

case $1 in

 

start)

   ifconfig $iface $vip netmask $mask broadcast $vip up

   route add -host $vip dev $iface

   echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

   echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

   echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

   echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

   ;;

 

stop)

   ifconfig $iface down

 

   echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore

   echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore

   echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce

   echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce

   ;;

 

*)

   echo "Usage:$(basename $0) start|stop"

   exit 2

   ;;

 

esac



 同步博客地址:https://blog.51cto.com/12068974

 

转载于:https://www.cnblogs.com/1210-listen/p/10748328.html

相关文章:

  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • axios 或 ajax 请求文件
  • 重磅课程|《CNCF x Alibaba 云原生技术公开课》正式开讲!
  • proxy
  • java String补足
  • Kafka
  • 【嗅探底层】你知道Synchronized作用是同步加锁,可你知道它在JVM中是如何实现的吗?...
  • Android App性能优化技能,看这篇就够了
  • 花费上万转行当程序员,却找不到工作,程序员吐槽:这技术白学了
  • [PHP]实体类基类和序列化__sleep问题
  • Loj #2570. 「ZJOI2017」线段树
  • 我理解的CLH
  • Java并发——结合CountDownLatch源码、Semaphore源码及ReentrantLock源码来看AQS原理
  • 走进 JDK 之 LinkedList
  • Python Day19
  • 【Leetcode】101. 对称二叉树
  • 《深入 React 技术栈》
  • 2018一半小结一波
  • 2019.2.20 c++ 知识梳理
  • Android交互
  • CSS实用技巧
  • HashMap ConcurrentHashMap
  • Js基础知识(四) - js运行原理与机制
  • Laravel Telescope:优雅的应用调试工具
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Python_OOP
  • vagrant 添加本地 box 安装 laravel homestead
  • 对超线程几个不同角度的解释
  • 经典排序算法及其 Java 实现
  • 精彩代码 vue.js
  • 前端面试之CSS3新特性
  • 线性表及其算法(java实现)
  • elasticsearch-head插件安装
  • 数据库巡检项
  • 整理一些计算机基础知识!
  • #include
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • $refs 、$nextTic、动态组件、name的使用
  • (1)Android开发优化---------UI优化
  • (2.2w字)前端单元测试之Jest详解篇
  • (C#)一个最简单的链表类
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (剑指Offer)面试题34:丑数
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET 分布式技术比较
  • .NET关于 跳过SSL中遇到的问题
  • .pyc文件是什么?
  • /usr/bin/env: node: No such file or directory
  • [20190113]四校联考
  • [2023年]-hadoop面试真题(一)
  • [Android实例] 保持屏幕长亮的两种方法 [转]