出于对架构的兴趣,一有时间我就会了解一下如何搭建一个高并发,高可用,可扩展的服务器运行环境。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. TTradmin v2.1 【2019年12月12日更新】简单好用的临时远程协助软件

        TTradmin 是一款免端口映射可直接穿透任何内网,基于VNC核心的即时远程协助软件.在使用的时候只需要保证“协助端”和“被协助端”使用同一个验证码即可实现安全便捷的远程控制,不需要进入路由 ...

  2. (node:7584) UnhandledPromiseRejectionWarning: MongooseTimeoutError: Server selection timed out after 30000 ms

    记录一次学习node.js犯的低级错误 这里遇到一个这样的问题 express连接mongoose时报错(node:7584) UnhandledPromiseRejectionWarning: Mo ...

  3. 基于单片机的心型LED灯的设计与实现

    #include<reg51.h> #include<intrins.h> #define char unsigned char #define unit unsigned i ...

  4. Java连载75-StringBuffer和StringBuilder

    一.StringBuffer和StringBuilder 1.StringBuffer是什么? 答:是一个字符串缓冲区,工作原理:预先在内存中申请一块空间以容纳字符序列,如果预留的空间,则进行自动扩容 ...

  5. Spring boot项目的打包发布

    Eclipse打包发布项目 打包项目 首先需要将项目编译的文件删除,执行[Run As]->[Maven clean] 如果这个时候项目报错,在pom.xml文件中添加以下代码过滤掉单元测试 & ...

  6. excel给一列数据添加前缀和后缀

    1.选中一列单元格后设置单元格格式,在自定义中输入-----“前缀”@(前缀为需要添加的内容) 输入----@“后缀” 2.字符串拼接:“前缀”&B1,B1&“后缀”

  7. 题解 P5718 【【深基4.例2】找最小值】

    题目传送门 思路 介绍一种新方法--sort排序,它的格式是这样的sort(a+1,a+n+1,cmp);,我们只需要把a数组排好序,然后输出第\(1\)个元素即可. 定义a数组与变量\(n\)并输入 ...

  8. mysql日期函数及重复数据的查询

    -- 日期函数select CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,year(CURRENT_DATE),month(CURRENT_DATE);sel ...

  9. MySQL进阶之存储引擎MyISAM与InnoDB的区别

    一.存储引擎(表类型) 通常意义上,数据库就是数据的集合,具体到计算机数据库可以是存储器上一些文件的集合或一些内存数据的集合.我们通常说的MySQL数据库.sql Server数据库等其实是数据库管理 ...

  10. spring-framework核心接口ApplicationContext

    核心接口(ApplicationContext) 继承关系 继承接口: org.springframework.beans.factory.ListableBeanFactory:用于访问应用程序组件 ...