出于对架构的兴趣,一有时间我就会了解一下如何搭建一个高并发,高可用,可扩展的服务器运行环境。LVS-DR究竟现在的企业运用频率有多高其实我也不清楚,本文是下班之余断断续续研究搭建笔录,并且仅仅在virtual box虚拟机实践,没有实际生产实践。但是在搭建过程中确实学到了许多理论知识,这里只记录我的搭建历程和在搭建中遇到的疑惑,至于lvs是什么,dr又是什么这些已经有足够多的帖子,不再阐述。

环境搭建过程

1. 使用virtual box,我这里开了3台虚拟机,network使用了桥接模式,开启后IP分别如下:

  1. server1: 192.168.0.112(direct server,eth0网卡)
  2. server2: 192.168.0.113(real server1,eth0网卡)
  3. server3: 192.168.0.114(real server2,eth0网卡)

  DR模式要求direct server(ds)和real server(rs)要部署在一个不分段网络,也就是说ip要在同一个网段上,我这里使用三个同一个局域网的内网IP来搭建,生产环境据说最好是分别有一个同网段公网IP比较好,但也可以使用一个公网IP来搭建的(没怎么细究,估计就是使用nat转发到局域网,但是这种方式貌似nat转发服务器会有问题吧?)

2. real server添加虚拟IP(VIP),并修改arp接收和回答规则,这里我统一写到一个shell脚本里面:

#!/bin/bash

#这里的VIP是direct server的访问ip
ifconfig eth0:0 192.168.0.112 netmask 255.255.255.255 #修改arp应答策略
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

  vip绑定在real server的lo回环网卡上

  关于vip的原理是:当一个请求到达direct server后,ds上的lvs服务(ipvsadm)会将报文的目的mac地址改为某台rs的mac地址,其他的原封不动的广播到网络,由于real server绑定了该虚拟ip并且mac也匹配上了所以就会被接收处理。处理完以后数据报文是直接返回给客户端的,并没有经过direct server。

  关于arp应答策略修改原理:

  1. arp_ignore决定了当一个arp请求报文到达主机的时候,接收网卡的应答规则:0表示不论该网卡是否绑定了请求的IP地址,只要本机上有网卡绑定了该请求IP就会应答,并返回应答网卡的mac地址;1表示一个请求过来,如果网卡没有绑定该ip则忽略该arp请求。(解释:如果arp_ignore规则为默认值0,则当一个请求过来的时候,路由进行arp请求目的主机mac地址的时候就会有无数台机子回复这个arp,这样会造成混乱,所以将该值改为1,限制了rs的arp答复)
  2. arp_announce决定了当一个机子要为一个IP数据报发送一个arp请求报文的时候,发送的arp报文的源mac地址填写规则:0表示arp报文从哪个网卡发出的,arp的源mac地址选择该网络mac地址,arp的源IP地址保留IP 报文的源IP;2表示arp报文从哪个网卡发出的,arp的源mac地址和源IP地址都使用该网卡的。(解释:real server在处理完后要把处理好的数据返回给客户端,这时他会从eth0网卡广播一个arp,arp_anncounce默认值是0,那么arp的源mac是eth0的mac地址,源ip地址是vip,这个时候路由会回复这个arp并且更改路由表的映射,请注意这里!更改了路由表映射以后,客户端以后的请求将会直接转给real server,而不会给direct server,这样达不到负载的作用了;所以要改成1,real server在广播arp的时候源mac地址是eth0,源ip也将会是eth0的ip,所以就不会冲突了)
  3. 至于vip为什么要绑定在lo上,以我的理解应该就是想利用arp_announce的规则绕过路由器修改操作。

3. 在direct server上安装ipvadm服务并添加转发规则:

yum -y install ipvsadm

systemctl start ipvsadm
#先清楚原来的配置
ipvsadm -C
#指定调度算法。调度算法可以指定以下8种:rr(轮询),wrr(权重),lc(最后连接),wlc(权重),lblc(本地最后连接),lblcr(带复制的本地最后连接),dh(目的地址哈希),sh(源地址哈希),sed(最小期望延迟),nq(永不排队)
ipvsadm -A -t 192.168.0.112:80 -s rr #添加转发规则, -g表示直接路由模式
ipvsadm -A -t 192.168.0.112:80 -r 192.168.0.113 -g
ipvsadm -A -t 192.168.0.112:80 -r 192.168.0.114 -g

  到此,环境已经搭建好了,我们客户端访问的时候是直接访问112的,但是请求会转发给配置好的主机。在搭建过程中其实有很多理论知识是不懂的,开始很疑惑,看了别人的解释也一知半解,不过每天思考一点点,现在算是懂一些了,不过还有很多知识漏洞需要慢慢补充,加油吧

LVS-DR模式搭建的更多相关文章

  1. LVS DR模式搭建、keepalived+lvs

    1.LVS DR模式搭建 条件: 即三台机器,在同一内网. 编辑脚本文件:/usr/local/sbin/lvs_dr.sh #! /bin/bashecho 1 > /proc/sys/net ...

  2. LVS DR模式搭建 keepalived lvs

    LVS DR模式搭建• 三台机器 • 分发器,也叫调度器(简写为dir)172.16.161.130 • rs1 172.16.161.131 • rs2 172.16.161.132 • vip 1 ...

  3. Linux centosVMware Linux集群架构LVS DR模式搭建、keepalived + LVS

    一.LVS DR模式搭建 三台机器 分发器,也叫调度器(简写为dir) davery :1.101 rs1 davery01:1.106 rs2 davery02:11.107 vip 133.200 ...

  4. LVS DR模式搭建、keepalived+LVS搭建介绍

    参考文献 http://blog.51cto.com/taoxie/2066993 疑问: 1.为什么要修改RealServer的返回arp响应和发送arp请求参数  echo "1&quo ...

  5. LVS DR模式 负载均衡服务搭建

    LVS 负载均衡 最近在研究服务器负载均衡,阅读了网上的一些资料,发现主要的软件负载均衡方案有nginx(针对HTTP服务的负载均衡),LVS(针对IP层,MAC层的负载均衡).LVS模式工作在网络层 ...

  6. LVS基于DR模式搭建负载均衡群集

    LVS -DR模式集群架构原理图

  7. 虚拟集群LVS及DR模式搭建笔记

    LVS(虚拟集群Linux Virtual Server) LVS-NAT:地址转换,数据包来回都要经过NAT转换,所以Director Server(即LVS服务器)将成为系统瓶颈.使用NAT模式将 ...

  8. 负载均衡集群相关、LVS介绍、LVS调度算法、LVS NAT模式搭建

    1.负载均衡集群相关 2.LVS的三种模式:NAT.DR .IP tunnel 3. LVS的调度算法(共有8种) 4.LVS NAT模式搭建准备条件:   在分发服务器上安装:yum install ...

  9. 负载均衡集群介绍、LVS介绍、LVS调度算法、LVS NAT模式搭建

    7月4日任务 18.6 负载均衡集群介绍18.7 LVS介绍18.8 LVS调度算法18.9/18.10 LVS NAT模式搭建 扩展lvs 三种模式详解 http://www.it165.net/a ...

  10. Linux centosVMware 负载均衡集群介绍、LVS介绍、LVS调度算法、LVS NAT模式搭建

    一.负载均衡集群介绍 主流开源软件LVS.keepalived.haproxy.nginx等 其中LVS属于4层(网络OSI 7层模型),nginx属于7层,haproxy既可以认为是4层,也可以当做 ...

随机推荐

  1. c++多线程编程——初探

    c++多线程并发可以帮助我们挖掘CPU的性能,在我们的思想中,似乎程序都是顺序执行的.这样的结论是建立在:程序是单线程程序.(比如我们平时写的hello world程序). 但是如果程序是多线程的.那 ...

  2. Dynamics CRM 365中结合注释和WebApi实现图片上传

    首先需要在实体上使用注释,然后在窗体上引用WebResource. WebResource的代码: <!DOCTYPE html> <html> <head> &l ...

  3. shelll高级编程【实战】(1)

    shell优势在于处理操作系统底层业务,2000多个命令都是shell的支持. 一键安装,报警脚本,常规业务操作,shell开发更简单快速. 1- 常用操作系统默认shell linux: Bourn ...

  4. appium 爬取微信的相册内容(不知什么时候能写完)

    # crowl wechat through appium from appium import webdriver from selenium.webdriver.support.ui import ...

  5. Thymeleaf的基本用法

    俗话说,不会前端的后端工程师不是一个合格的程序员.因为在项目中经常要和前端工程师打交道,并且偶尔也会涉及前端的简单开发,因此在闲暇之余学习了一点前端的知识,今天首先总结归纳一下 Thymeleaf 模 ...

  6. 你这是virus吧?

    谁在我的vps上跑了这个?我的备份终于起一定作用了. GO declare @sql varchar(8000) while (select count(*) from sysobjects wher ...

  7. unity ui中使用onmouseover

    unity ui中鼠标移进或者移出的触发方式与2d.3d的不同,2d.3d物体使用的是onmouseover,ui使用的是OnPointerEnter.需要实现以下两个接口. public class ...

  8. Common Subsequence POJ - 1458 最长公共子序列 线性DP

    #include <iostream> #include <algorithm> #include <string> #include <cstring> ...

  9. SVM-支持向量机(三)SVM回归与原理

    SVM回归 我们之前提到过,SVM算法功能非常强大:不仅支持线性与非线性的分类,也支持线性与非线性回归.它的主要思想是逆转目标:在分类问题中,是要在两个类别中拟合最大可能的街道(间隔),同时限制间隔侵 ...

  10. ueditor使用本地保存,自动恢复上次编辑的内容

    个人博客 地址:http://www.wenhaofan.com/article/20180912212800 ueditor默认开启了自动保存至本地的功能,但是依然需要在初始化的时候额外添加代码该功 ...