Ceph入门到精通-大流量10GB/s LVS+OSPF 高性能架构

news2025/3/1 4:20:42

 LVS 和 LVS+keepalived 这两种架构在平时听得多了,最近才接触到另外一个架构LVS+OSPF。这个架构实际上是LVS+Keepalived 的升级版本,我们所知道LVS+Keepalived 架构是这样子的:

wKiom1NJKMSw-GPhAADwcASdokw040.jpg

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

       LVS+OSPF架构图如下:

wKiom1NKAJzj7bMKAAE4PO25-Xw866.jpg

      这个架构与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)加权多路径,能够非常灵活地按照比例在链路上传递流量。

wKiom1NKA9rSiD14AAESeOtCGdE361.jpg

       回到前面的那个问题:如何实现对多个Director 的负载均衡?相信看到这里,应该都清楚了,没错,就是利用OSFP的等价多路径来实现。那么新的问题又来了:我们知道Director 是一台LINUX/Unix机器,不是路由器,那它如何跑OSPF协议?如何实现等价多路径?

       实际上就是将调度器模拟成路由器,将多台调度器与真实的路由器组成OSPF网络,需要做的就是为调度器安装quagga这个软件,并进行相关的配置即可。

【实验步骤】

实验平台 :Ubuntu12.04

路由器:使用GNS3桥接网卡模拟真实路由器

GNS3配置

vmnet2、vmnet3网卡配置如下:(vmware 菜单栏 编辑 -- 虚拟网络编辑器)

wKioL1NQ_tXiNSmLAAO0dGOEDF8501.jpg

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

wKioL1NQ_5Cz6hGuAAM11hK_KNo129.jpg

wKiom1NQ_7qj76xyAALKHxfReRY804.jpg

wKioL1NQ_5GiyzopAAMbDA_p4Dw532.jpg

wKiom1NQ_7rxXe-zAAK2xG_5isI043.jpg

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

wKioL1NUiXyT5i_kAACiJHVbZPs707.jpg

#配置真实路由器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

#修改配置文件

root@node1:~# vim /etc/quagga/daemons

zebra=yes

ospfd=yes

root@node1:~# cp /usr/share/doc/quagga/examples/ospfd.conf.sample /etc/quagga/ospfd.conf

root@node1:~# cp /usr/share/doc/quagga/examples/zebra.conf.sample /etc/quagga/zebra.conf

root@node1:~# chown quagga.quagga /etc/quagga/ospfd.conf

root@node1:~# chown quagga.quagga /etc/quagga/zebra.conf

#启动quagga

root@node1:~# /etc/init.d/quagga restart

#查看是否有相应监控端口

root@node1:~# netstat -nultp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 0 127.0.0.1:2601 0.0.0.0:* LISTEN 1737/zebra

tcp 0 0 127.0.0.1:2604 0.0.0.0:* LISTEN 1741/ospfd  

node2上的安装步骤同上

#尝试远程连接quagga、配置quagga

root@node1:~# telnet 127.0.0.1 2604

Trying 127.0.0.1...

Connected to 127.0.0.1.

Escape character is '^]'.

Hello, this is Quagga (version 0.99.20.1).

Copyright 1996-2005 Kunihiro Ishiguro, et al.

User Access Verification

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

wKiom1NUjAKDVsLHAAJS9VD9JxE595.jpg

wKioL1NUi9mDym0DAAG4Xzud-oc620.jpg

至此,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

   ... ...

   }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/924515.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

聚观早报 | 云鲸扫拖机器人J4体验;芯科科技第三代无线开发平台

【聚观365】8月24日消息 云鲸扫拖机器人J4体验 芯科科技推出第三代无线开发平台 英伟达与VMWare宣布扩大合作 万物新生(爱回收)2023年二季度财报 充电桩需求增长带动汽车后服务市场 云鲸扫拖机器人J4体验 家庭卫生清洁是每个人都无法回避的事情&am…

实训笔记8.24

实训笔记8.24 8.24笔记一、Sqoop数据迁移工具1.1 Sqoop的基本概念1.2 Sqoop的基本操作1.2.1 命令语法1.2.2 list-databases1.2.3 list-tables1.2.3 eval1.2.4 import1.2.5 export1.2.6 导入 二、Flume日志采集工具2.1 数据采集的问题2.2 数据采集一般使用的技术2.3 扩展&#x…

Tokenview再度升级:全新Web3开发者APIs数据服务体验!

Tokenview发布全新版本的区块链APIs和数据服务平台,为开发者打造更强大、更便捷的开发体验! 此次升级,我们整合了开发者使用习惯以及Tokenview产品优势。我们深知对于开发者来说,时间是非常宝贵的,因此我们努力提供一…

联合注入步骤

使用场景: 有回显,可以看到某些字段的回显信息 像下面的有具体的回显信息 一、判断注入位点 在原始的id(参数)的输入后面添加额外的条件 如果and 11 有结果,and10没有结果输出, 就说明我们添加的额外条件…

sqlmap安装以及运用

目录 一、sqlmap简介 linux系统安装 windows系统安装 二.sqlmap确定目标 (1) sqlmap直连数据库 (2) sqlmap的URL探测 (3) Sqlmap文件读取目标 (4) Sqlmap Google批量扫注入 一、sqlmap简介 sqlmap是一个开源的渗透测试工具,它可以自动化检测sql注入漏洞利用…

opencv 文档识别+UI界面识别系统

目录 一、实现和完整UI视频效果展示 主界面: 识别结果界面: 查看处理图片过程: 查看历史记录界面: 二、原理介绍: 将图像变换大小->灰度化->高斯滤波->边缘检测 轮廓提取 筛选第三步中的轮廓&#xf…

Unity OnDrawGizmos的简单应用 绘制圆形

编辑器和配置表各有各的好。 卡牌游戏即使再复杂,哪怕是梦幻西游,大话西游那种,甚至wow那种,用配表都完全没问题。但是崩坏3,或者鬼泣,格斗游戏,可视化编辑器是唯一的选择。 开发初期刚开始配技…

2.redis数据结构之Hash

Hash-散列类型:H 为什么选择Hash? 假设有User对象以JSON序列化的形式存储到Redis中,User对象有id,username、password、age、name等属性,存储的过程如下: 保存、更新: User对象 -> json(string) -> redis 如果在…

基于mha+mycat2+gtid的半同步主从复制双vip高可用MySQL集群

目录 项目名称 项目架构图 项目概述 项目准备 项目步骤 一、使用ansible编写palybook实现4台二进制安装MySQL环境的部署,并把master上的基础数据下发到所有slave服务器上 1. 建立免密通道 2.安装ansible在ansible服务器上,并写好主机清单 3.将…

Ubuntu20.04安装软件报错:The following packages have unmet dependencies

Ubuntu20.04更换阿里云源后安装软件都会报错:The following packages have unmet dependencies 查看资料,大概是ubuntu本身的源比较版本较老,而阿里云的源比较新,因此版本不匹配造成依赖的库不匹配,所以只要将阿里云的…

【微服务】03-HttpClientFactory与gRpc

文章目录 1.HttpClientFactory :管理外向请求的最佳实践1.1 核心能力1.2 核心对象1.3 HttpClient创建模式 2.gRPC:内部服务间通讯利器2.1 什么是gRPC2.2 特点gRPC特点2.3.NET生态对gRPC的支持情况2.4 服务端核心包2.5 客户端核心包2.5 .proto文件2.6 gRP…

opencv 水果识别+UI界面识别系统,可训练自定义的水果数据集

目录 一、实现和完整UI视频效果展示 主界面: 测试图片结果界面: 自定义图片结果界面: 二、原理介绍: 图像预处理 HOG特征提取算法 数据准备 SVM支持向量机算法 预测和评估 完整演示视频: 完整代码链接 一、…

redis--集群

redis集群 Redis 集群是一种用于分布式存储和管理数据的解决方案,它允许将多个 Redis 实例组合成一个单一的逻辑数据库,提供更高的性能、容量和可用性。 redis集群的优点 高可用性: Redis集群使用主从复制和分片技术,使得数据可…

提高nodejs中promise的性能

提高nodejs中promise的性能 我们先来看一个常见问题,假设我们有 N 条记录需要处理,或者例如,为每条记录发出 API 请求以获取数据。 通常情况下我们都是使用promise.all方法来实现这一需求: // 记录 const data [{}, {}, {}];/…

Linux网络编程:线程池并发服务器 _UDP客户端和服务器_本地和网络套接字

文章目录: 一:线程池模块分析 threadpool.c 二:UDP通信 1.TCP通信和UDP通信各自的优缺点 2.UDP实现的C/S模型 server.c client.c 三:套接字 1.本地套接字 2.本地套 和 网络套对比 server.c client.c 一:线…

如何使用CSS实现一个3D旋转效果?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 3D效果实现⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域…

有线耳机插入电脑没声音

有线耳机插入电脑没声音 首先确保耳机和电脑都没问题,那就有可能是声音输出设备设置错误 右击任务栏的声音图标-打开声音设置-选择输出设备。

长时间序列的25米全球sar卫星镶嵌数据

数据简介 1992年JAXA(Japan Aerospace Exploration Agency,日本宇宙航空研究开发机构)发射了一颗JERS-1卫星,该卫星携带有18*24m分辨率的SAR传感器。随后,JAXA又在2006年和2014年分别发射了带有SAR传感器的alos卫星和…

拓世科技集团 | “书剑人生”李步云学术思想研讨会暨李步云先生九十华诞志庆

2023年,中国改革开放迎来了45周年,改革春风浩荡,席卷神州大地,45年间,中国特色社会主义伟大事业大步迈入崭新境界,一路上结出了饶为丰硕的果实。中华民族在这45年间的砥砺前行,不仅使中国的经济…

Clion 找不到头文件,无法DEBUG,无法进入断点,断点灰了

文章目录 1. 找不到远程toolchain的头文件2.gdb未安装或版本不对无法debug3.远程debug断点灰了 1. 找不到远程toolchain的头文件 ①检查cmake头文件引入指令include_directories(SYSTEM "/usr/lib/jvm/jdk-17-oracle-x64/include") ②菜单栏Tools->Resyinc with r…