首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >网络操作系统VyOS应用实践(一)

网络操作系统VyOS应用实践(一)

作者头像
SDNLAB
发布于 2018-04-02 09:20:45
发布于 2018-04-02 09:20:45
6.4K00
代码可运行
举报
文章被收录于专栏:SDNLABSDNLAB
运行总次数:0
代码可运行

前言

本文在前面安装篇的基础上,对其功能进行应用实践。本文先介绍使用中的一些注意事项,后面介绍其网络接口相关的功能。

探索开始

这款操作系统目的是为了在x86平台上,实现交换机、路由防火墙等功能。在Vyatta被博科收购后,社区推出了这个开源的fork。令笔者很好奇的是,似乎Vyatta/VyOS在日本挺受青睐,在日本亚马逊可以看到11年和14年出版的两本介绍Vyatta的书,因为VyOS是一个fork,大概在操作上基本一致。

3000日元折合人民币大概是168-170人民币左右(日本书贵)

分析

为了支持通过串口或usb访问VyOS,VyOS还提供了三种console:

由于笔者环境限制,只能在虚拟机上测试,选择默认的KVM console即可。

登陆到VyOS后,可以输入show configuration查看目前系统的配置信息:

在interfaces中,可以看到目前系统中有三个网络接口,lo、eth0和eth1,eth1并没有配置ip地址。

在service中,我启用了ssh,通过xshell连接到VyOS。

在最底下还可以看到console的信息,主机名和登陆的用户名。

最底下的“:”,输入q即可停止查看信息。

在VyOS中,任何配置都应该通过configure模式进行设置,输入configure以进入该模式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vyos@vyos:~$ configure
[edit]
vyos@vyos# 

进入configure模式之后,每输入一个命令就会echo一个“[edit]”,指明现正处于编辑模式。在完成你想要的设置后,要commit,再save才能保存配置信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vyos@vyos# commit
No configuration changes to commit
[edit]
vyos@vyos# save
Saving configuration to '/config/config.boot'...
Done
[edit]

每次都会保存信息到/config/config.boot,最后我们还要输入exit退出configure模式,变为普通模式:

vyos@vyos# exit

exit

可以查看config.boot文件:

可以输入show configuration commands来查看命令范例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vyos@vyos:~$ show configuration commands
set interfaces ethernet eth0 address 'dhcp'
set interfaces ethernet eth0 description 'OUTSIDE'
set interfaces ethernet eth0 duplex 'auto'
set interfaces ethernet eth0 hw-id '00:0c:29:b1:a5:4b'
set interfaces ethernet eth0 smp_affinity 'auto'
set interfaces ethernet eth0 speed 'auto'
set interfaces ethernet eth1 hw-id '00:0c:29:b1:a5:55'
set interfaces loopback 'lo'
set service ssh port '22'
set system config-management commit-revisions '20'
set system console device ttyS0 speed '9600'
set system host-name 'vyos'
set system login user vyos authentication encrypted-password '$1$G3Gocetw$oOs8fJJcyV1bUXg6Hee4g/'
set system login user vyos authentication plaintext-password ''
set system login user vyos level 'admin'
set system ntp server '0.pool.ntp.org'
set system ntp server '1.pool.ntp.org'
set system ntp server '2.pool.ntp.org'
set system package auto-sync '1'
set system package repository community components 'main'
set system package repository community distribution 'helium'
set system package repository community password ''
set system package repository community url 'http://packages.vyos.net/vyos'
set system package repository community username ''
set system syslog global facility all level 'notice'
set system syslog global facility protocols level 'debug'
set system time-zone 'UTC'

实践

接下来我们通过一个简单的例子来实践一下: 笔者所用的这个VM有两个interface:

网络适配器1是通过vmware的dhcp服务获得IP地址的,而网络适配器2用的是host-only模式,VMnet5的设定可以看下图:

此时VyOS并没有任何IP,无法通过xshell进行操作,我直接在vmware的窗口中操作:

进入configure模式,配置eth0的方法如下:

查看设置是否成功:

可以看到eth0已经通过dhcp获得IP地址了。

尝试用xshell连接,成功了:

如果你想删掉某个配置项,把set改为delete就行,最后commit和save。

其他细节

在configure模式中,由于不允许未保存而exit,一般都要commit、save才能exit:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vyos@vyos:~$ configure
[edit]
vyos@vyos# show interfaces
 ethernet eth0 {
     address dhcp
     description OUTSIDE
     hw-id 00:0c:29:b1:a5:4b
 }
 ethernet eth1 {
     hw-id 00:0c:29:b1:a5:55
 }
 loopback lo {
 }
[edit]
vyos@vyos# set interfaces ethernet eth0 duplex auto
[edit]
vyos@vyos# show interfaces
 ethernet eth0 {
     address dhcp
     description OUTSIDE
     duplex auto
     hw-id 00:0c:29:b1:a5:4b
 }
 ethernet eth1 {
     hw-id 00:0c:29:b1:a5:55
 }
 loopback lo {
 }
[edit]
vyos@vyos# exit
Cannot exit: configuration modified.
Use 'exit discard' to discard the changes and exit.
[edit]
vyos@vyos# 

如果你想强行退出,输入exit discard即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vyos@vyos:~$ show configuration
interfaces {
    ethernet eth0 {
        address dhcp
        description OUTSIDE
        hw-id 00:0c:29:b1:a5:4b
    }
    ethernet eth1 {
        hw-id 00:0c:29:b1:a5:55
    }
    loopback lo {
    }
}
service {
    ssh {
        port 22
    }
}
:

可以看到没有save的话,任何设置都不会变更。

VyOS维护了一份配置变更表,可以通过在configure模式中输入compare [TAB]查看:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vyos@vyos# compare 
Possible completions:
  <Enter>    Compare working & active configurations
  saved        Compare working & saved configurations
  <N>        Compare working with revision N
  <N> <M>    Compare revision N with M
  Revisions:
    0    2016-02-04 14:46:06 vyos by cli
    1    2016-02-04 14:39:34 vyos by cli
    2    2016-02-04 14:37:13 vyos by cli
    3    2016-02-04 14:24:41 vyos by cli
    4    2016-02-04 13:23:07 root by boot-config-loader
    5    2016-02-04 13:02:00 vyos by cli
    6    2016-02-04 12:53:53 root by boot-config-loader
    7    2016-02-04 12:53:53 root by init
[edit]
vyos@vyos# compare 

可以通过指定Revision的编号查看变化信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vyos@vyos# compare 3
[edit interfaces ethernet eth0]
+address dhcp
+description OUTSIDE
[edit]
vyos@vyos# 

以“+”开头的是增加的内容,“-”是删除的内容。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vyos@vyos# compare 2
[edit interfaces ethernet eth0]
+description OUTSIDE
[edit interfaces ethernet eth1]
-description OUTSIDE
[edit]

我们还可以回滚配置,回滚后会重启:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vyos@vyos# rollback 1
Proceed with reboot? [confirm][y]
[edit]
vyos@vyos# 
Broadcast message from root@vyos (pts/0) (Thu Feb  4 15:13:22 2016):
The system is going down for reboot NOW!

由于回滚到了之前没有设置ip地址的配置,所以xshell连不了

在configure模式中,输入save [TAB]可以看到以下内容:

可以通过scp等方式保存数据到远程机器,这大大方便了工程师在自己的电脑上用虚拟机测试好设置后,直接把配置文件发送到远程的当做防火墙或路由的VyOS设备上。

至于关机,要输入poweroff而不是shutdown:

网络接口

在VyOS中可以通过show interfaces查看系统所有的接口:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vyos@vyos:~$ show interfaces
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface        IP Address                        S/L  Description
---------        ----------                        ---  -----------
eth0             172.16.77.184/24                  u/u  OUTSIDE 
eth1             -                                 u/u  
lo               127.0.0.1/8                       u/u  
             ::1/128

可以看到目前系统中的三个接口,其中eth1没有设置ip地址。

如果想查看单独一个接口的详细信息,可以在show interface后制定类型和接口名:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vyos@vyos:~$ show interfaces ethernet eth0
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:b1:a5:4b brd ff:ff:ff:ff:ff:ff
    inet 172.16.77.184/24 brd 172.16.77.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:feb1:a54b/64 scope link 
       valid_lft forever preferred_lft forever
    Description: OUTSIDE
    RX:  bytes    packets     errors    dropped    overrun      mcast
         22372        233          0          0          0          0
    TX:  bytes    packets     errors    dropped    carrier collisions
         24067        208          0          0          0          0

每个接口都可以配置一个描述信息和地址:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set interfaces ethernet eth0 address dhcp
set interfaces ethernet eth0 description 'OUTSIDE'

以太网接口

以太网配置的内容有: 1.speed 2.duplex 3.MAC地址 4.IP地址 5.描述信息

下面根据上面show interfaces的环境,配置一个静态地址:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vyos@vyos:~$ configure 
[edit]
vyos@vyos# set interfaces ethernet eth1 address '10.20.10.55/24'
[edit]
vyos@vyos# set interfaces ethernet eth1 description 'INSIDE'
[edit]
vyos@vyos# set interfaces ethernet eth1 duplex 'auto' 
  Configuration path: [interfaces ethernet eth1 duplex auto] already exists
[edit]
vyos@vyos# set interfaces ethernet eth1 duplex 'speed'
  duplex must be auto, half or full
  Value validation failed
  Set failed
[edit]
vyos@vyos# set interfaces ethernet eth1 speed 'auto'
  Configuration path: [interfaces ethernet eth1 speed auto] already exists
[edit]
vyos@vyos# commit 
[edit]
vyos@vyos# save
Saving configuration to '/config/config.boot'...
Done
[edit]

查看是否配置成功:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vyos@vyos# show interfaces ethernet eth1
 address 10.20.10.55/24
 description INSIDE
 duplex auto
 hw-id 00:0c:29:b1:a5:55
 smp_affinity auto
 speed auto
[edit]
vyos@vyos# exit
exit

可以看到我们已经成功设置eth1了,如果配置的内容已经存在,则提示配置已存在。

检查网络配置文件,其实接口信息并没有设置在这里,而是在VyOS启动时自动从config.boot加载设置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vyos@vyos:~$ cat /etc/network/interfaces 
# Used by ifup(8) and ifdown(8). See the interfaces(5) manpage or
# /usr/share/doc/ifupdown/examples for more information.
# The loopback network interface
auto lo
iface lo inet loopback

VyOS还提供了额外的命令用来查看接口的物理信息(这是vmware虚拟网卡的信息):

如果想看接口的统计信息,可以输入show interfaces ethernet <接口> statistics

VLAN接口

在VyOS中提供了对802.1q VLAN的支持,通过输入set interfaces ethernet vif 实现。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vyos@vyos:~$ configure
[edit]
vyos@vyos# set interfaces ethernet eth1 vif 100 description 'VLAN 100'
[edit]
vyos@vyos# set interfaces ethernet eth1 vif 100 address '10.20.10.100/24'
[edit]

可以看到将会增加下面的设置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vyos@vyos# show interfaces ethernet eth1
 address 10.20.10.55/24
 description INSIDE
 duplex auto
 hw-id 00:0c:29:b1:a5:55
 smp_affinity auto
 speed auto
+vif 100 {
+    address 10.20.10.100/24
+    description "VLAN 100"
+}
[edit]

保存退出configure模式后,查看接口信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vyos@vyos:~$ show interfaces
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface        IP Address                        S/L  Description
---------        ----------                        ---  -----------
eth0             172.16.77.184/24                  u/u  OUTSIDE 
eth1             10.20.10.55/24                    u/u  INSIDE 
eth1.100         10.20.10.100/24                   u/u  VLAN 100 
lo               127.0.0.1/8                       u/u  
             ::1/128

在VyOS中,VLAN接口会以name.vlan_id的格式显示。

Bridge

VyOS提供了Bridge,可以让两个接口桥接实现二层交换,下面会创建一个bridge,同时设置VLAN(备注,如果按照前面的设置了VLAN接口,需要删除才能做下面的实验)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vyos@vyos:~$ configure
[edit]
vyos@vyos# set interfaces bridge 'br100'
[edit]
vyos@vyos# set interfaces ethernet eth1 vif 100 bridge-group bridge br100
[edit]
vyos@vyos# set interfaces bridge br100 address '10.20.10.100/24'
[edit]

bridge可以设IP地址

启用STP:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vyos@vyos# set interfaces bridge br100 stp true
[edit]

保存退出后,可以看到这个bridge的信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vyos@vyos:~$ show bridge                      
bridge name     bridge id               STP enabled     interfaces
br100           0000.000c29b1a555       no              eth1.100

输入show bridge spanning-tree查看STP的设置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vyos@vyos:~$ show bridge br100 spanning-tree
br100
 bridge id              0000.000c29b1a555
 designated root        0000.000c29b1a555
 root port                 0                    path cost                  0
 max age                  20.00                 bridge max age            20.00
 hello time                2.00                 bridge hello time          2.00
 forward delay             0.00                 bridge forward delay       0.00
 ageing time             300.00
 hello timer               0.21                 tcn timer                  0.00
 topology change timer     0.00                 gc timer                  21.01
 flags                  
eth1.100 (1)
 port id                8001                    state                forwarding
 designated root        0000.000c29b1a555       path cost                  4
 designated bridge      0000.000c29b1a555       message age timer          0.00
 designated port        8001                    forward delay timer        0.00
 designated cost           0                    hold timer                 0.00
 flags                  
想查看网桥上MAC地址的记录,可以输入show bridge macs:

vyos@vyos:~$ show bridge br100 macs 
port no mac addr                is local?       ageing timer
  1     00:0c:29:b1:a5:55       yes                0.00

端口Bonding

通过bonding,可以让多个物理接口变为一个逻辑接口,以提高网络性能。

先设定一个新的bond接口:

vyos@vyos# set interfaces bonding bond0 description '0bond'

设定hash_policy,VyOS有三种policy: 1.layer2:用MAC地址生成hash 2.layer2+3:用MAC和IP地址生成hash 3.layer3+4:用IP地址和端口生成hash

这里直接用layer2:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vyos@vyos# set interfaces bonding bond0 hash-policy 'layer2'
设定bond mode,有多种mode:
vyos@vyos# set interfaces bonding bond0 mode &lt;TAB&gt;
Possible completions:
  802.3ad      IEEE 802.3ad Dynamic link aggregation (Default)
  active-backup
               Fault tolerant: only one slave in the bond is active
  broadcast    Fault tolerant: transmits everything on all slave interfaces
  round-robin  Load balance: transmit packets in sequential order
  transmit-load-balance
               Load balance: adapts based on transmit load and speed
  adaptive-load-balance
               Load balance: adapts based on transmit and receive plus ARP
  xor-hash     Load balance: distribute based on MAC address

最后把接口加到我们的bond0中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vyos@vyos# set interfaces ethernet eth0 bond-group 'bond0'
[edit]
vyos@vyos# set interfaces ethernet eth0 description 'member of bond0'
[edit]
vyos@vyos# set interfaces ethernet eth1 bond-group 'bond0'
[edit]
vyos@vyos# set interfaces ethernet eth1 description 'member of bond0'
[edit]

保存退出configure模式之后就可以通过下面的命令查看详细信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vyos@vyos:~$ show interfaces bonding

你无法修改这个bond0的duplex等参数,但是可以进行设定IP地址等操作。

结语

本文通过实践,先详细地介绍了VyOS的使用方面的细节。实际上,VyOS和Cisco IOS等系统其实也差不多,熟悉传统设备的人员应该也能快速上手。后面的内容对 VyOS中几个常用的interfaces进行了介绍,希望能对那些对VyOS有兴趣的研究者有所帮助。在后面的文章中,会通过实验对VyOS的功能进行应用,进一步体验VyOS的魅力。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-02-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SDNLAB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
10 张图告诉你 RocketMQ 是怎样保存消息的
首先,在 RocketMQ 集群中创建一个 Topic,叫做 MyTestTopic,配置如下图:
jinjunzhu
2022/12/20
9340
10 张图告诉你 RocketMQ 是怎样保存消息的
从源码剖析RocketMQ如何高效且持久化处理消息
RocketMQ作为消息队列的典型代表,其在高并发状况下处理消息又很不错的性能,同时又能够通过将消息持久化到磁盘确保消息不会丢失,本文旨在从RocketMQ的源码剖析为何它能够高效处理消息,并且又如何高效组织消息并写入磁盘
潋湄
2025/01/09
2550
从源码剖析RocketMQ如何高效且持久化处理消息
RocketMQ 源码分析 —— Message 存储
本文接《RocketMQ 源码分析 —— Message 发送与接收》。主要解析 CommitLog 存储消息部分。
芋道源码
2020/04/28
7280
消息队列中间件 RocketMQ 源码分析 —— Message 存储
1、概述 2、CommitLog 结构 3、CommitLog 存储消息 MappedFile#落盘 FlushRealTimeService CommitRealTimeService GroupCommitService CommitLog#putMessage(...) MappedFileQueue#getLastMappedFile(...) MappedFile#appendMessage(...) DefaultAppendMessageCallback#doAppend(...) Flus
芋道源码
2018/03/02
1.1K0
消息队列中间件 RocketMQ 源码分析 —— Message 存储
源码分析 RocketMQ DLedger(多副本) 之日志追加流程
上一篇我们详细分析了 源码分析RocketMQ多副本之Leader选主,本文将详细分析日志复制的实现。
丁威
2019/09/17
5910
源码分析 RocketMQ DLedger(多副本) 之日志追加流程
RocketMQ 整合 DLedger(多副本)即主从切换实现平滑升级的设计技巧
源码分析 RocketMQ DLedger 多副本即主从切换系列已经进行到第8篇了,前面的章节主要是介绍了基于 raft 协议的选主与日志复制,从本篇开始将开始关注如何将 DLedger 应用到 RocketMQ中。
丁威
2019/10/08
1.1K0
RocketMQ 整合 DLedger(多副本)即主从切换实现平滑升级的设计技巧
消息中间件—RocketMQ消息存储(二)一、RocketMQ存储整体设计架构回顾二、RocketMQ存储关键技术—再谈Mmap与PageCache三、RocketMQ存储优化技术四、RocketMQ
文章摘要:上篇中主要介绍了RocketMQ存储部分的整体架构设计,本篇将深入分析RocketMQ存储部分的细节内容 在本篇文章中,小编将继续深入分析与介绍RocketMQ消息存储部分中的关键技术—Mmap与PageCache、几种RocketMQ存储优化技术(包括预先创建分配MappedFile、文件预热和mlock系统调用)、RocketMQ内部封装类—CommitLog/MappedFile/MappedFileQueue/ConsumeQueue的简析。然后,再简要介绍下RocketMQ消息刷盘两种主要方式。在读完本篇幅后,希望读者能够对RocketMQ消息存储部分有一个更为深刻和全面的认识。
用户2991389
2018/10/10
5.1K3
RocketMQ 存储机制源码解析
producer 发送消息后,broker端开始存储消息,会调用 store 模块的 DefaultMessageStore.putMessage 进行存储消息。
java404
2018/12/28
1.8K0
3分钟白话RocketMQ系列—— 如何存储消息
RocketMQ使用了一种基于日志的存储方式,将消息以顺序写入的方式追加到文件中,从而实现高性能的消息存储和读取。
阿丸笔记
2023/10/22
6190
3分钟白话RocketMQ系列—— 如何存储消息
RocketMQ(三):面对高并发请求,如何高效持久化消息?
上篇文章我们分析完RocketMQ发送消息的原理,得到结果客户端会通过RPC组件向Broker进行通信
菜菜的后端私房菜
2024/09/18
1.3K0
消息的存储-RocketMQ知识体系3
上一篇了解了RocketMQ消息发送,本文开始聊聊消息发送到Broker端后,消息存储相关的逻辑。
DougWang
2021/07/21
5850
RocketMQ存储--日志文件创建与映射流程【源码笔记】
日志目录(可配置)/data/rocketmq/store/commitlog会有20位长度的日志文件。 1.日志文件什么时候创建的? 2.日志文件创建流程是什么? 3.日志文件和内存映射是怎么样的?
瓜农老梁
2019/08/08
1.7K0
RocketMQ存储--日志文件创建与映射流程【源码笔记】
rocketmq原理与实战解析_rocketmq底层原理
Namesrv接收Broker注册的topic信息, namesrv只存内存,但是broker有任务定时推送
全栈程序员站长
2022/09/19
6960
rocketmq原理与实战解析_rocketmq底层原理
RocketMQ
系统的耦合性越高,容错性就越低。以电商应用为例,用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障或者因为升级等原因暂时不可用,都会造成下单操作异常,影响用户使用体验。
JokerDJ
2023/11/27
1.8K0
RocketMQ
深入剖析 RocketMQ 源码 - 消息存储模块
RocketMQ 是阿里巴巴开源的分布式消息中间件,它借鉴了 Kafka 实现,支持消息订阅与发布、顺序消息、事务消息、定时消息、消息回溯、死信队列等功能。RocketMQ 架构上主要分为四部分,如下图所示:
2020labs小助手
2021/11/09
1.5K0
RocketMQ存储--消息追加【源码笔记】
commitLog内存(ByteBuffer)写入位点,标记消息写到哪了,下次从该位置开始写。
瓜农老梁
2019/08/20
1K0
RocketMQ存储--消息追加【源码笔记】
RocketMQ--ConsumeQueue文件与Index文件【源码笔记】
消息消费时先从ConsumeQueue中获取物理偏移量,再根据物理偏移量从commitLog中获取具体消息;消息检索时会用到索引文件,其中值得思考的问题: 1.ConsumeQueue构建流程是怎样的? 2.ConsumeQueue数据结构是怎样的? 3.Index索引文件构建流程怎样的? 4.Index数据结构时怎么样的?
瓜农老梁
2019/08/18
1.5K0
深度解析 RocketMQ 核心组件:ConsumeQueue 的设计与实现
在分布式消息队列 RocketMQ 中,ConsumeQueue(消费队列) 是消息消费的核心组件之一。它作为  CommitLog 的索引机制,帮助消费者快速定位并拉取消息。如果没有 ConsumeQueue,消费者将无法高效地从海量消息中筛选出自己订阅的数据。
腾讯云中间件团队
2025/06/09
970
深度解析 RocketMQ 核心组件:ConsumeQueue 的设计与实现
RocketMQ给broker发送消息确定Commitlog的写入的位置
有一个疑问,当client给broker发送消息的时候,怎么知道在commitlog的第几个字节开始写呢?
CBeann
2023/12/25
2150
RocketMQ给broker发送消息确定Commitlog的写入的位置
云原生中间件RocketMQ-核心原理之消息存储结构解析
从主流的几种MQ消息队列采用的存储方式来看,主要会有三种 分布式KV存储:这种存储方式对于消息读写能力要求不高的情况可以使用,比如ActiveMQ中采用的levelDB。 文件系统存储:这种方案适合对于有高吞吐量要求的消息中间件,因为消息刷盘是一种高效率,高可靠、高性能的持久化方式,除非磁盘出现故障,否则一般是不会出现无法持久化的问题。常见的比如kafka、RocketMQ、RabbitMQ都是采用消息刷盘到所部署的机器上的文件系统来做持久化。 关系型数据库:关系型数据库在单表数据量达到千万级的情况下IO性能会出现瓶颈,比如ActiveMQ可以采用mysql作为消息存储,所以ActiveMQ并不适合于高吞吐量的消息队列场景。 总的来说,对于存储效率,文件系统要优于分布式KV存储,分布式KV存储要优于关系型数据库。
共饮一杯无
2022/11/28
4100
云原生中间件RocketMQ-核心原理之消息存储结构解析
推荐阅读
相关推荐
10 张图告诉你 RocketMQ 是怎样保存消息的
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档