LVS+OSPF 架构(转)
http://blog.51cto.com/pmghong/1399385
LVS 和 LVS+keepalived 这两种架构在平时听得多了,最近才接触到另外一个架构LVS+OSPF。这个架构实际上是LVS+Keepalived 的升级版本,我们所知道LVS+Keepalived 架构是这样子的:

随着业务的扩展,我们可以对web服务器做水平扩展,以此来提高系统的处理能力。但是我们会发现,两台Director间始终只有一台是处于工作状态,而另一台处于不工作的备份状态,即使访问的流量再大,同时也只能由一台Director 去应对。换句话说,Director在这个架构里面没办法像web服务器那样做水平扩展,实现负载均衡。那么是否有办法让两台Director都处于工作的状态呢?答案是肯定的,LVS+OSPF 架构就是用来解决这个问题的。
LVS+OSPF架构图如下:

这个架构与LVS+keepalived 最明显的区别在于,两台Director都是Master 状态,而不是Master-Backup,如此一来,两台Director 地位就平等了。剩下的问题,就是看如何在这两台Director 间实现负载均衡了。这里会涉及路由器领域的一个概念:等价多路径
ECMP(等价多路径)
ECMP(Equal-CostMultipathRouting)等价多路径,存在多条不同链路到达同一目的地址的网络环境中,如果使用传统的路由技术,发往该目的地址的数据包只能利用其中的一条链路,其它链路处于备份状态或无效状态,并且在动态路由环境下相互的切换需要一定时间,而等值多路径路由协议可以在该网络环境下同时使用多条链路,不仅增加了传输带宽,并且可以无时延无丢包地备份失效链路的数据传输。
ECMP最大的特点是实现了等值情况下,多路径负载均衡和链路备份的目的,在静态路由和OSPF中基本上都支持ECMP功能。
例如下图中的路径A、路径B、路径C 3条路径的COST值相同,既是等价路径。在路由器选路的时候,便可以同时使用这3条路径,从而实现负载均衡。
注:虽然链路COST值相同,但是实际情况是,各路径的带宽、时延和可靠性等不一样,把Cost认可成一样,不能很好地利用带宽,尤其在路径间差异大时,效果会非常不理想。这时可以使用
WCMP(Weight-CostMultipathRouting)加权多路径,能够非常灵活地按照比例在链路上传递流量。

回到前面的那个问题:如何实现对多个Director 的负载均衡?相信看到这里,应该都清楚了,没错,就是利用OSFP的等价多路径来实现。那么新的问题又来了:我们知道Director 是一台LINUX/Unix机器,不是路由器,那它如何跑OSPF协议?如何实现等价多路径?
实际上就是将调度器模拟成路由器,将多台调度器与真实的路由器组成OSPF网络,需要做的就是为调度器安装quagga这个软件,并进行相关的配置即可。
【实验步骤】
实验平台 :Ubuntu12.04
路由器:使用GNS3桥接网卡模拟真实路由器
GNS3配置
vmnet2、vmnet3网卡配置如下:(vmware 菜单栏 编辑 -- 虚拟网络编辑器)

GNS3桥接vmware网卡,e1/0 桥接vmware的vmnet2网卡,e1/1 桥接vmware的vmnet3网卡。GNS3总共需要3个设备:两个云设备(用于桥接网卡)和一台路由器(模拟真实路由器)




完成后GNS3 的拓扑是这样的:

#配置真实路由器R1
R1#conf t
R1(config)#int lo1
R1(config-if)#ip addr 2.2.2.2 255.255.255.0
R1(config-if)#int e1/0
R1(config-if)#ip add 192.168.20.120 255.255.255.0
R1(config-if)#no shut
R1(config-if)#int e1/1
R1(config-if)#ip add 192.168.30.120 255.255.255.0
R1(config-if)#no shut
R1(config-if)#int e1/0
R1(config-if)#ip ospf hello-interval 1
R1(config-if)#ip ospf dead-interval 3
R1(config-if)#ip ospf network point-to-point
R1(config-if)#ip ospf priority 100
R1(config-if)#int e1/1
R1(config-if)#ip ospf hello-interval 1
R1(config-if)#ip ospf dead-interval 3
R1(config-if)#ip ospf network point-to-point
R1(config-if)#ip ospf priority 99
R1(config-if)#exit
R1(config)#router ospf 1
R1(config-router)#network 192.168.20.0 0.0.0.255 area 0
R1(config-router)#network 192.168.30.0 0.0.0.255 area 0
R1(config-router)#network 2.2.2.2 0.0.0.0 area 0
调度器上配置quagga,模拟路由器
#安装quagga
root@node1:~# apt-get install quagga -y
#修改配置文件
ospfd=yes
root@node1:~# chown quagga.quagga /etc/quagga/zebra.conf
#启动quagga
root@node1:~# /etc/init.d/quagga restart
#查看是否有相应监控端口
tcp 0 0 127.0.0.1:2604 0.0.0.0:* LISTEN 1741/ospfd
node2上的安装步骤同上
#尝试远程连接quagga、配置quagga
Password: #默认密码为zebra
#估计看到这,学过网络的童鞋都已经很熟悉了,可以大展身手了。闲话少说,继续配置:
node1 配置如下
ospfd> en
ospfd# configure terminal
ospfd(config)# router ospf
ospfd(config-router)# router-id 192.168.20.101
ospfd(config-router)# network 192.168.20.0/24 area 0
ospfd(config-router)# network 1.1.1.1/24 area 0
ospfd(config-router)# exit
ospfd(config)# interface eth0
ospfd(config-if)# ospf hello-interval 1
ospfd(config-if)# ospf dead-interval 3
ospfd(config-if)# ip ospf network point-to-point
ospfd(config-if)# end
ospfd# wr
Configuration saved to /etc/quagga/ospfd.conf
ospfd# exit
Connection closed by foreign host.
node2配置如下
ospfd> en
ospfd# configure terminal
ospfd(config)# router ospf
ospfd(config-router)# router-id 192.168.30.100
ospfd(config-router)# network 192.168.30.0/24 area 0
ospfd(config-router)# network 3.3.3.3/24 area 0
ospfd(config-router)# exit
ospfd(config)# interface eth0
ospfd(config-if)# ospf hello-interval 1
ospfd(config-if)# ospf dead-interval 3
ospfd(config-if)# ip ospf network point-to-point
ospfd(config-if)# end
ospfd# wr
Configuration saved to /etc/quagga/ospfd.conf
ospfd# exit
Connection closed by foreign host.
#在node1和node2上分别启用一个loopback口,用于测试
root@node1:~# ifconfig lo:1 1.1.1.1 netmask 255.255.255.0
root@node2:~# ifconfig lo:1 3.3.3.3 netmask 255.255.255.0
测试
在路由器R1 上执行show ip ospf neighor 可以看到OSPF的邻居
R1#show ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
192.168.30.100 0 FULL/ - 00:00:02 192.168.30.100 Ethernet1/1
192.168.20.101 0 FULL/ - 00:00:02 192.168.20.101 Ethernet1/0
在node1上面ping node2


至此,ospf的配置完成!
至于LVS的配置,基本上同LVS+Keepalived 架构,在配置的过程中,应注意的地方有以下几点:
1、配置router_id 的时候,为了区分开,可用ip地址作为router_id ,例如:
global_defs {
router_id 192.168.30.102
}
2、因为两台调度器都是要提供服务的,因此两台调度器应都处于Master的状态,那么这里有3个方面要注意:
(1)首先是状态那里,两台调度器都要是MASTER
vrrp_instance VI_1 {
state MASTER
... ...
}
(2)其次,要以双主的模式启动,需要使调度器处于不同的域中。(一山不容二虎么... ...)
node1
vrrp_instance VI_1 {
... ...
virtual_router_id 51
... ...
}
node2
vrrp_instance VI_1 {
... ...
virtual_router_id 52
... ...
}
(3)这里的优先级应一致,统一由真实路由器R1进行调度。
node1
vrrp_instance VI_1 {
... ...
priority 110
... ...
}
node2
vrrp_instance VI_1 {
... ...
priority 110
... ...
}
LVS+OSPF 架构(转)的更多相关文章
- [原创]lvs+ospf+nginx实现高可用大流量web架构
lvs+ospf+nginx实现高可用大流量web架构配置总概述 架构图: 配置如下: .quagga之zebra配置: # cat /etc/quagga/zebra.conf ! ! Zebra ...
- LVS+OSPF+FULLNAT集群架构
OSPF:OSPF(Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(aut ...
- lvs之 lvs原理架构介绍
一. 概念 lvs的术语: Router:GWIP vs:virtual server,director rs:real server CIP:client IP VIP:virtual server ...
- OSPF + LVS ,突破LVS瓶颈 (转)
突破LVS瓶颈,LVS Cluster部署(OSPF + LVS) 前言 架构简图 架构优势 部署方法 1.硬件资源准备 2.三层设备OSPF配置 3.LVS调度机的OSPF配置 a.安装软路由软件q ...
- Linux centosVMware Linux集群架构LVS DR模式搭建、keepalived + LVS
一.LVS DR模式搭建 三台机器 分发器,也叫调度器(简写为dir) davery :1.101 rs1 davery01:1.106 rs2 davery02:11.107 vip 133.200 ...
- keepalived给LVS带来了什么
LVS+Keepalived 1>Keepalived简介 Keepalived是Linux下一个轻量级别的高可用解决方案,高可用(High Avalilability,HA),其实两种不同的 ...
- OSPF笔记
OSPF:现实情况中99%的网络运行的是这种路由协议 OSPF有三张表:邻居表,链路状态数据库(LSDB),路由表 SPF算法 OSPF架构为花瓣形(不同area组成花瓣)就是为了防环,因为骨干区域运 ...
- LVS 介绍
LVS 介绍 说明: LVS是Linux Virtual Server的简称 LVS是一个实现负载均衡的开源软件项目 LVS效率要高于Nginx LVS工作在ISO的第4层(传输层) LVS架构有三层 ...
- 【容器云】传统金融企业的 Docker 实践
基于 Docker 的容器云-Padis 目前市面上基于容器云的产品有很多,对于平安而言,则是基于 Docker 的 Padis 平台.所谓 Padis,全称是 PingAn Distribution ...
随机推荐
- 机器学习:调整kNN的超参数
一.评测标准 模型的测评标准:分类的准确度(accuracy): 预测准确度 = 预测成功的样本个数/预测数据集样本总数: 二.超参数 超参数:运行机器学习算法前需要指定的参数: kNN算法中的超参数 ...
- Oracle RMAN 学习
Oracle RMAN 学习:三思笔记 1 进入rman Rman--物理备份(结构/数据) 1 本地db Cmd set oracle_sid=orcl 1 rman target / Rman&g ...
- 2015.3.5 VS2005调用VC6 dll 时结构参数的传递
结构只能以地址方式进行传递,dll只能传递结构不能传递类 VS端: [DllImport(@"D:\程序\VC程序\MfcDllspace\Debug\space.dll")] p ...
- 部署和调优 1.1 nfs部署和优化-1
NFS服务会经常用到,用于在网络上共享存储.举一个例子来说明一下 NFS .假如有三台机器 A.B.C,它们需要访问同一个目录,目录中都是图片,传统的做法是把这些图片分别放到 A.B.C.但是,若使用 ...
- linux命令-fdisk分区
fdisk -l 查看分区状况,也可查看指定分区 Disk /dev/sda: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 26 ...
- 【转】Android下面打印进程函数调用堆栈(dump backtrace)的方法
1. 为什么要打印函数调用堆栈? 打印调用堆栈可以直接把问题发生时的函数调用关系打出来,非常有利于理解函数调用关系.比如函数A可能被B/C/D调用,如果只看代码,B/C/D谁调用A都有可能,如果打印出 ...
- eclipse java 注释模板配置详解
设置注释模板的入口: Window->Preference->Java->Code Style->Code Template 然后展开Comments节点就是所有需设置注释的元 ...
- ES01 数据类型、正则表达式、身份证校验
1 基本数据类型 参见W3C的教程即可 2 正则表达式 参考博文:点击前往 3 身份证校验 参考博文:点击前往 <div class="panel panel-primary" ...
- linux ftp、sftp、telnet服务开通、更改Orale最大连接数
1 ftp服务开通 1.1 检测vsftpd是否安装及启动 先用service vsftpd status 来查看ftp是否开启.也可以使用ps -ef | grep ftp 来查看本地是否含有包含f ...
- delete请求,删除不成功?
因为,在数据库底层,其实并没有删除该数据,只是将数据的标识设置为is_deleted.因此,最后即使删除了,查询的时候还是会显示在界面. 故,需要重写get请求.