LVS-DR模式搭建
出于对架构的兴趣,一有时间我就会了解一下如何搭建一个高并发,高可用,可扩展的服务器运行环境。LVS-DR究竟现在的企业运用频率有多高其实我也不清楚,本文是下班之余断断续续研究搭建笔录,并且仅仅在virtual box虚拟机实践,没有实际生产实践。但是在搭建过程中确实学到了许多理论知识,这里只记录我的搭建历程和在搭建中遇到的疑惑,至于lvs是什么,dr又是什么这些已经有足够多的帖子,不再阐述。
环境搭建过程
1. 使用virtual box,我这里开了3台虚拟机,network使用了桥接模式,开启后IP分别如下:
- server1: 192.168.0.112(direct server,eth0网卡)
- server2: 192.168.0.113(real server1,eth0网卡)
- 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应答策略修改原理:
- arp_ignore决定了当一个arp请求报文到达主机的时候,接收网卡的应答规则:0表示不论该网卡是否绑定了请求的IP地址,只要本机上有网卡绑定了该请求IP就会应答,并返回应答网卡的mac地址;1表示一个请求过来,如果网卡没有绑定该ip则忽略该arp请求。(解释:如果arp_ignore规则为默认值0,则当一个请求过来的时候,路由进行arp请求目的主机mac地址的时候就会有无数台机子回复这个arp,这样会造成混乱,所以将该值改为1,限制了rs的arp答复)
- 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,所以就不会冲突了)
- 至于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模式搭建的更多相关文章
- LVS DR模式搭建、keepalived+lvs
1.LVS DR模式搭建 条件: 即三台机器,在同一内网. 编辑脚本文件:/usr/local/sbin/lvs_dr.sh #! /bin/bashecho 1 > /proc/sys/net ...
- LVS DR模式搭建 keepalived lvs
LVS DR模式搭建• 三台机器 • 分发器,也叫调度器(简写为dir)172.16.161.130 • rs1 172.16.161.131 • rs2 172.16.161.132 • vip 1 ...
- Linux centosVMware Linux集群架构LVS DR模式搭建、keepalived + LVS
一.LVS DR模式搭建 三台机器 分发器,也叫调度器(简写为dir) davery :1.101 rs1 davery01:1.106 rs2 davery02:11.107 vip 133.200 ...
- LVS DR模式搭建、keepalived+LVS搭建介绍
参考文献 http://blog.51cto.com/taoxie/2066993 疑问: 1.为什么要修改RealServer的返回arp响应和发送arp请求参数 echo "1&quo ...
- LVS DR模式 负载均衡服务搭建
LVS 负载均衡 最近在研究服务器负载均衡,阅读了网上的一些资料,发现主要的软件负载均衡方案有nginx(针对HTTP服务的负载均衡),LVS(针对IP层,MAC层的负载均衡).LVS模式工作在网络层 ...
- LVS基于DR模式搭建负载均衡群集
LVS -DR模式集群架构原理图
- 虚拟集群LVS及DR模式搭建笔记
LVS(虚拟集群Linux Virtual Server) LVS-NAT:地址转换,数据包来回都要经过NAT转换,所以Director Server(即LVS服务器)将成为系统瓶颈.使用NAT模式将 ...
- 负载均衡集群相关、LVS介绍、LVS调度算法、LVS NAT模式搭建
1.负载均衡集群相关 2.LVS的三种模式:NAT.DR .IP tunnel 3. LVS的调度算法(共有8种) 4.LVS NAT模式搭建准备条件: 在分发服务器上安装:yum install ...
- 负载均衡集群介绍、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 ...
- Linux centosVMware 负载均衡集群介绍、LVS介绍、LVS调度算法、LVS NAT模式搭建
一.负载均衡集群介绍 主流开源软件LVS.keepalived.haproxy.nginx等 其中LVS属于4层(网络OSI 7层模型),nginx属于7层,haproxy既可以认为是4层,也可以当做 ...
随机推荐
- MySQL 8 服务器组件
MySQL 服务器包含了一个基于组件的架构,用于扩展服务器功能.服务器和其他组件可以使用组件提供的服务.(在使用服务方面,服务器也是一个组件,等同于其他组件).组件之间交互仅通过他们各自提供的服务. ...
- python下timer定时器常用的两种实现方法
方法一,使用线程中现成的: 这种一般比较常用,特别是在线程中的使用方法,下面是一个例子能够很清楚的说明它的具体使用方法: #! /usr/bin/python3 #! -*- conding: u ...
- Python 变量&列表 初学者笔记
变量 消除空白后该变量需要存储一下(此操作常用于“储存用户输入并对其进行清理”) strip()消除两端空白 lstrip()消除前部空白 rstrip()消除末尾空白 upper()全部字母大写 ...
- 剑指offer-面试题6-从头到尾打印链表-链表
/* 题目: 输入一个链表的头节点,从尾到头反过来打印每个节点的值 */ /* 思路: 解法一:利用栈后进先出的特性. 解法二:利用递归函数的性质. */ void PrintListReversin ...
- js替换时,空格被替换为双引号
替换代码 str.replace(/\"/g, "'") 将双引号替换为单引号,如果字符串中,存在space(空格)时,使用以上语句将会导致空格被替换为双引号,可以使用如 ...
- Jungle Roads HDU - 1301 prim
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; ; int ...
- Android Studio 安装问题。
安装时,这里要选Cancel 安装AS时因为选择了Setup Proxy, 后面带来很多问题. --------------------------------------------- 参考这个安装 ...
- 【算法】用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer&g ...
- 2级搭建类204-Oracle 12cR2 SI ASM 图形化搭建(RHEL7.6)
红帽RHEL 7.6上搭建Oracle 12cR2 ASM单实例 我给你们说,不是自家的产品,那贼麻烦,你是不是觉得在 红帽 7.6 上搞 12c ASM 觉得应该/好像/可能/或许/貌似/大概/也许 ...
- 141.内置上下文处理器debug、request、auth、messages、media、static、csrf
上下文处理器 上下文处理器可以返回一些数据,在全局模板中都可以使用,比如登录后的用户数据,在很多页面中都需要使用,那么我们就可以方在上下文处理器中,就没有必要在每个视图中返回这个对象了. 在setti ...