【一起学Rust | 进阶篇 | RMQTT库】RMQTT消息服务器——安装与集群配置

简介: 【一起学Rust | 进阶篇 | RMQTT库】RMQTT消息服务器——安装与集群配置



RMQTT Broker 简介

RMQTT 是一款完全开源,高度可伸缩,高可用的分布式 MQTT 消息服务器,适用于 IoT、M2M 和移动应用程序,可以在单个服务节点上处理百万级别的并发客户端。

RMQTT 目前支持的操作系统:

  • Linux
  • macOS
  • Windows Server

安装

安装分为zip解压安装和源码编译安装,我们分开介绍。

ZIP 压缩包安装(Linux、MacOS、Windows)

需从 GitHub Release 页面获取相应操作系统的二进制软件包。

  1. GitHub Release 下载zip包。
$ wget "https://github.com/rmqtt/rmqtt/releases/download/v0.2.3/rmqtt-0.2.3-x86_64-unknown-linux-musl.zip"
  1. 解压从GitHub Release 下载的zip包。
$ unzip rmqtt-0.2.3-x86_64-unknown-linux-musl.zip -d /app/
  1. 修改权限
$ cd /app/rmqtt
$ chmod +x bin/rmqttd
  1. 启动服务
$ cd /app/rmqtt
$ sh start.sh
  1. 查看服务
$ netstat -tlnp|grep 1883
tcp        0      0 0.0.0.0:1883            0.0.0.0:*               LISTEN      3312/./bin/rmqttd
tcp        0      0 0.0.0.0:11883           0.0.0.0:*               LISTEN      3312/./bin/rmqttd

创建static集群

基于RAFT分布式一致性算法的集群
  1. 准备三个服务节点,将压缩包解压到程序目录,比如:/app/rmqtt
  2. 修改配置文件(rmqtt.toml)
  • 设置节点ID, node.id值设置为:1、2或3
  • 配置RPC服务端监听端口,rpc.server_addr = “0.0.0.0:5363”
  • 服务启动时同时启动"rmqtt-cluster-raft"插件
$ cd /app/rmqtt
$ vi etc/rmqtt.toml
##--------------------------------------------------------------------
## Node
##--------------------------------------------------------------------
#Node id
node.id = 1
##--------------------------------------------------------------------
## RPC
##--------------------------------------------------------------------
rpc.server_addr = "0.0.0.0:5363"
##--------------------------------------------------------------------
## Plugins
##--------------------------------------------------------------------
#Plug in configuration file directory
plugins.dir = "./etc/plugins"
#Plug in started by default, when the mqtt server is started
plugins.default_startups = [
    "rmqtt-cluster-raft"
#    "rmqtt-auth-http",
#    "rmqtt-web-hook"
]
  1. 修改插件配置
$ vi etc/plugins/rmqtt-cluster-raft.toml
##--------------------------------------------------------------------
## rmqtt-cluster-raft
##--------------------------------------------------------------------
#grpc message type
message_type = 198
#Node GRPC service address list
node_grpc_addrs = ["1@10.0.2.11:5363", "2@10.0.2.12:5363", "3@10.0.2.13:5363"]
#Raft peer address list
raft_peer_addrs = ["1@10.0.2.11:6363", "2@10.0.2.12:6363", "3@10.0.2.13:6363"]
  1. 修改权限&启动服务
$ cd /app/rmqtt
$ chmod +x bin/rmqttd
$ sh start.sh

源码编译安装

安装rust编译环境

以Centos7为例,如果编译环境已经存在跳过此过程。注意:工具链需要1.56及之后版本,1.59及之后版本如果报连接错误需要升级系统开发环境。

  1. 安装 Rustup
    先打开 Rustup 的官网:https://rustup.rs ,然后根据提示下载或运行命令。
    Linux 下执行:
$ curl https://sh.rustup.rs -sSf | sh

执行source $HOME/.cargo/env 让环境变量生效

$ source $HOME/.cargo/env
  1. 配置crate.io镜像

可以在$HOME/.cargo/下建立一个config文件,加入如下配置:

$ vi $HOME/.cargo/config
[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"
replace-with = 'tuna'
[source.tuna]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"
[source.sjtu]
registry = "https://mirrors.sjtug.sjtu.edu.cn/git/crates.io-index"
[source.rustcc]
registry = "git://crates.rustcc.cn/crates.io-index"
[net]
git-fetch-with-cli = true

如果tuna也太慢可以使用sjtu或ustc替换重试

  1. 安装openssl开发包
    确保已经安装了openssl的开发包,如果已经安装跳过
    For example, libssl-dev on Ubuntu or openssl-devel on Fedora.

CentOS:

$ yum install openssl-devel -y

Ubuntu:

$ apt install pkg-config -y
$ apt-get install libssl-dev -y
编译
  1. 获取源码
$ git clone https://github.com/rmqtt/rmqtt.git
  1. 切换到最近的 Tag
$ cd rmqtt
$ git checkout $(git describe --tags $(git rev-list --tags --max-count=1))
  1. 构建
$ cargo build --release
启动RMQTT Broker
  1. 复制程序和配置文件
$ mkdir -p /app/rmqtt/bin && mkdir -p /app/rmqtt/etc/plugins
$ cp target/release/rmqttd /app/rmqtt/bin/
$ cp rmqtt.toml /app/rmqtt/etc/
$ cp rmqtt-plugins/*.toml /app/rmqtt/etc/plugins/
$ cp rmqtt-bin/rmqtt.pem  /app/rmqtt/etc/
$ cp rmqtt-bin/rmqtt.key  /app/rmqtt/etc/
  1. 修改配置(rmqtt.toml)
  • 将plugins.dir = “rmqtt-plugins/” 改为 plugins.dir = “/app/rmqtt/etc/plugins”
  • 根据需要打开插件,如果启用插件,可在/etc/plugins/下修改插件配置
  • 如果需要启动TLS,可修改listener.tls.external配置
vi /app/rmqtt/etc/rmqtt.toml
##--------------------------------------------------------------------
## Plugins
##--------------------------------------------------------------------
#Plug in configuration file directory
plugins.dir = "/app/rmqtt/etc/plugins"
#Plug in started by default, when the mqtt server is started
plugins.default_startups = [
    #    "rmqtt-cluster-raft"
    #    "rmqtt-cluster-broadcast",
    #    "rmqtt-auth-http",
    #    "rmqtt-web-hook"
]
##--------------------------------------------------------------------
## MQTT/TLS - External TLS Listener for MQTT Protocol
listener.tls.external.addr = "0.0.0.0:8883"
listener.tls.external.cert = "/app/rmqtt/etc/rmqtt.pem"
listener.tls.external.key = "/app/rmqtt/etc/rmqtt.key"
  1. 启动服务
$ cd /app/rmqtt
./bin/rmqttd "./etc/rmqtt.toml"
解决编译失败问题

如果使用1.59版及之后工具链,可能会存在依赖库版本太低导致链接失败问题,解决办法:

  • 使用1.58版工具链
#安装1.58版本工具链
$ rustup install 1.58
#将当前工具链切换到1.58
$ rustup default 1.58
#重新编译
$ cargo build --release
相关实践学习
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
15天前
|
弹性计算 缓存 安全
阿里云服务器ECS收费标准参考,2核4G配置ECS实例规格整理
阿里云提供多种2核4G ECS实例,如计算型c7、经济型e、u1等,价格不等,从68.0元/月到203.0元/月。ECS通用算力型u1实例采用高性能Intel处理器,网络收发包能力达30万PPS。经济型e实例基于Intel Xeon Platinum,适合入门级需求。2核4G服务器支持的并发访问人数依赖于软件效率、带宽、应用架构和用户行为等因素。更多信息请查看阿里云ECS产品页。
113 1
|
12天前
|
NoSQL 关系型数据库 MySQL
多机部署:打造内网服务器集群
在多机部署教程中,了解如何配置分布式应用如Laravel以使用Redis同步用户状态。关键步骤包括:修改MySQL的`bind-address`至内网IP,重启服务;同样修改Redis的`bind`,重启服务;以及调整Elasticsearch的`network.host`和`discovery.seed_hosts`,并重启。通过这些步骤,确保服务间能内网通信,实现多服务器状态同步。
27 2
|
16天前
|
存储 缓存 运维
云计算中的服务器选型与配置:技术深度解析
【6月更文挑战第29天】云计算服务器选型与配置深度解析:关注业务需求、技术要求及成本效益。重点包括CPU、内存、存储和网络配置的优化,结合负载均衡、缓存、虚拟化和自动化运维策略,以提升性能和效率,确保云服务的稳定与高效。
|
18天前
|
前端开发 小程序 应用服务中间件
在服务器上正确配置域名https证书(ssl)及为什么不推荐使用宝塔申请免费ssl证书
在服务器上正确配置域名https证书(ssl)及为什么不推荐使用宝塔申请免费ssl证书
72 4
|
17天前
|
Rust Shell 索引
使用阿里云镜像加速Rust与Cargo安装及更新
使用阿里云镜像加速Rust与Cargo安装及更新
47 0
|
2天前
|
网络协议 安全 Python
我们将使用Python的内置库`http.server`来创建一个简单的Web服务器。虽然这个示例相对简单,但我们可以围绕它展开许多讨论,包括HTTP协议、网络编程、异常处理、多线程等。
我们将使用Python的内置库`http.server`来创建一个简单的Web服务器。虽然这个示例相对简单,但我们可以围绕它展开许多讨论,包括HTTP协议、网络编程、异常处理、多线程等。
5 0
支付系统35-----支付成功异步通知----数据锁,微信那边是有一个服务器集群的,不单单是有一个通知发送过来,有可能有两台更多台的服务器发送过来,把锁加到我们处理通知里面,在对业务数据进行状态检查和
支付系统35-----支付成功异步通知----数据锁,微信那边是有一个服务器集群的,不单单是有一个通知发送过来,有可能有两台更多台的服务器发送过来,把锁加到我们处理通知里面,在对业务数据进行状态检查和
|
12天前
|
网络协议 网络安全
使用NetAssist网络调试助手在单台计算机上配置TCP服务器和客户端
使用NetAssist网络调试助手在单台计算机上配置TCP服务器和客户端
27 0
|
13天前
|
存储 NoSQL 关系型数据库
MongoDB的配置服务器和复制机制
【7月更文挑战第2天】MongoDB配置服务器存储分片和权限元数据,支持在主节点故障时保持读服务。关键组件,性能影响显著。复制集包含Primary和Secondary,通过oplog实现数据同步,类似MySQL binlog。oplog的幂等性可能导致大量set操作,且大小受限,可能导致从节点需全量同步。读写分离提升效率,主从切换确保高可用。
11 0
|
5天前
|
存储 关系型数据库 数据库
给阿里云的建议和意见 一个云服务器架构是否可行
摘要(Markdown格式): 在修复阿里云服务器IPv4设置错误时遇到困难,导致服务器远程登录失败及外网访问受阻,耗时三天解决。建议阿里云更新文档,确保设置指导与实际情况一致,例如只需在路由表添加条目关联IPv4。此外,建议优化帮助页面,如采用折叠式设计减少干扰。服务器主要任务是数据分析、存储和分发,文中提出简化服务器框架,消除硬件软件复杂配置,利于初学者和独立开发者快速上手,降低时间成本。该设计旨在减少无用组件,节省资源,同时降低云服务商的人力和支持成本。期望云服务商考虑此类架构创新。目前未知是否有类似产品,期待业界反馈。
214 0
给阿里云的建议和意见 一个云服务器架构是否可行