FMO服务器集群配置方法
本教程适用于异名FMO服务器的集群,即各服务器在APRS网络上仍然是独立显示的。
当前跨服务器通讯无法记录QSO,待FMO更新后将移除此提示~

FMO的一大特点就是分布式、节点式的,除了初始的实名认证,后续不需要任何中心服务器就可以使用。但这也可能带来一个问题,如果服务器数量很多,爱好者分散,反而可能降低使用体验。但反过来,如果将多个服务器组合成集群实现分布式节点,既能缓解单个服务器的压力,也可以让更多服务器活跃起来。本文将介绍使用EMQX服务器实现集群的方法。

首先简单了解一下集群的工作原理。EMQX的手册上有一张图,很形象的描述了这个过程:

现在有三台FMO服务器组成集群,如果BG5ESN加入了服务器1并呼叫CQ,而BG6HFD位于服务器2上,那服务器1在自身广播的同时将信息发送给服务器2、3,服务器2、3再进行广播,所有连接到集群里任意服务器的爱好者都能听到BG5ESN的CQ呼叫。随后BG6HFD回应,这时服务器2在自身广播的同时,还会将信息发送到服务器1、3,所有连接到集群里任意服务器的爱好者都能听到BG6HFD的回应。

具体的技术细节若感兴趣,可以点此查看官方手册。

环境:以Linux为例(博主使用Ubuntu24.04),已经搭建了可用的EMQX服务器。

网络:在1883通讯端口与面板控制18083的基础上,还需要开放EMQX 节点通信端口:4370 与RPC 监听端口:5370 。

经过研究,对于FMO这样多核心节点的情况,使用手动模式集群是既能满足要求又方便快捷的。

零 过程理解

集群在组队过程时,是分为主要服务器与其它服务器的,这个分类主要体现在:在主要服务器上配置好所有参数,再让其它服务器加入,加入时会使用主要服务器的配置覆盖自身配置。

为便于理解,我们假设有三台服务器要配置成集群,分别是主要服务器:服务器1,和其它服务器:服务器2、服务器3。

一 统一Cookie

1.Cookie生成

集群要求服务器Cookie值一致。首先创建Cookie,先生成一串字符,在任意一台服务器上打开终端,运行:

openssl rand -hex 16

2.应用到所有服务器

复制生成的字符串,即作为Cookie值,在所有服务器的终端上依次执行以下命令:

echo "生成的Cookie值" | sudo tee /var/lib/emqx/.erlang.cookie
sudo chmod 600 /var/lib/emqx/.erlang.cookie
sudo chown emqx:emqx /var/lib/emqx/.erlang.cookie
sudo systemctl restart emqx

以上命令,第一行是创建并写入Cookie文件,第二行是设置文件权限为仅所有者可读写,第三行是设置所有者为EMQX,第四行是重启EMQX服务使配置生效。

等服务运行后,可以在各服务器终端运行以下命令,确保所有服务器能够获取Cookie且值相同:

sudo cat /var/lib/emqx/.erlang.cookie

二 节点名配置

提示:若您在参考FMO语音服务器搭建教程开服时已经按要求修改过节点名称,则无需再进行此配置。
警告!修改节点名后之前的配置将会消失,面板登录也会变成默认账密:admin/public

登录EMQX面板,若之前未进行过修改,查看节点信息,会发现节点名称是emqx@127.0.0.1。

集群要求各服务器节点名称不能一致,而且最好是emqx@域名 或 emqx@IP 的形式,域名与IP均需要是EMQX服务器的真实地址。节点名的需要修改emqx.conf文件,这里可以用终端修改。

在终端里可以用vim修改文件,运行以下指令:

sudo vim /etc/emqx/emqx.conf

显示文件内容后,用方向键移动光标,找到以下内容:

node {
  name = "emqx@127.0.0.1"
  cookie = "emqxsecretcookie"
  data_dir = "/var/lib/emqx"
}

按下i键,进入编辑模式,配合光标移动,修改emqx@127.0.0.1为emqx@fmo服务器真实地址:

node {
  name = "emqx@fmo.tylk.cc服务器地址"
  cookie = "emqxsecretcookie"
  data_dir = "/var/lib/emqx"
}

修改好后先按esc键,再输入 :wq! 并回车(即强制保存退出),文件就保存好了。

随后运行重启EMQX命令:

sudo systemctl restart emqx

重启后再登录面板,注意面板的用户名密码已变成默认的admin/public了,请参考服务器搭建文章重新设置。此时节点名称就变为刚刚修改的内容了。

三 服务器原参数备份

除非您的FMO服务器没有独立运行的需求,不然博主建议您加入集群前一定备份一下原参数,这些参数包括面板用户名与密码,客户端认证与授权数据,黑名单数据等;若不备份,在退出集群后就需要作为一台新服务器重新配置了。

在EMQX服务运行时,在终端运行以下命令:

/usr/lib/emqx/bin/emqx_ctl data export

稍等片刻,备份就能完成,需要关注的是最后一行信息:

Data has been successfully exported to /var/lib/emqx/backup/emqx-export-2026-01-07-10-55-01.912.tar.gz.

很显然,/var/lib/emqx/backup/emqx-export-2026-01-07-10-55-01.912.tar.gz 就是备份文件的路径与名称,可以按需将文件复制或备份到别处。如果需要恢复备份,则在终端运行:

/usr/lib/emqx/bin/emqx_ctl data import /var/lib/emqx/backup/emqx-export-2026-01-07-10-55-01.912.tar.gz(文件名按实际修改)

文件名与路径请按实际更改。恢复完成后会有提示:

Data has been imported successfully.

四 加入集群

警告!加入集群后服务器会将主服务器的配置覆盖自身配置,包括面板的用户名与密码,博主建议服务器管理员组件集群时互相告知面板管理的用户名和密码,保障服务器管理权限。

1.主服务器填写同步信息

将其它服务器的FMO服务器凭证填写至客户端认证的内置数据库里,并给其它FMO服务器管理员的FMO客户端授权,以上步骤请参考FMO语音服务器搭建教程里的“用户名密码配置-数据源创建”部分与“服务器安全配置-管理员配置”部分。

2.其它服务器加入集群

在服务器2、3(其他服务器)的终端里运行以下命令,加入服务器1的节点:

/usr/lib/emqx/bin/emqx_ctl cluster join emqx@fmo.tylk.cc服务器1地址

若加入成功,会返回以下信息:

Join the cluster successfully.
Cluster status: #{running_nodes => ['emqx@fmo.tylk.cc服务器1地址','emqx@fmo2.tylk.cc服务器2地址','emqx@fmo3.tylk.cc服务器3地址'],stopped_nodes => []}

五 集群状态检查

查看服务器有没有加入集群,以及各服务器节点在线状态如何,可以在任意一台服务器终端运行以下命令:

/usr/lib/emqx/bin/emqx_ctl cluster status

如果配置正常,可以得到以下回复:

Cluster status: #{running_nodes => ['emqx@fmo.tylk.cc服务器1地址','emqx@fmo2.tylk.cc服务器2地址','emqx@fmo3.tylk.cc服务器3地址'],stopped_nodes => []}

如果有服务器节点在stopped_nodes里,可以尝试重启该服务器的EMQX服务。

六 退出集群

若服务器3想要退出集群,变为独立节点,在服务器3上的终端运行以下命令:

/usr/lib/emqx/bin/emqx_ctl cluster leave

也可以在其它服务器上运行以下命令移除服务器3:

/usr/lib/emqx/bin/emqx_ctl cluster force-leave emqx@fmo3.tylk.cc服务器3地址

即可退出集群。当然,退出集群的服务器会恢复初始状态:用户名密码恢复为admin/public,之前配置的客户端认证与授权条目也将消失,需要恢复备份或重新配置。

参考上文备份相关内容,终端运行以下命令可以恢复备份(文件名与路径请按实际更改):

/usr/lib/emqx/bin/emqx_ctl data import /var/lib/emqx/backup/emqx-export-2026-01-07-10-55-01.912.tar.gz(文件名按实际修改)

恢复提示成功后,无需重启就可以作为独立服务器正常使用了。

当前页面URL: https://tylk.cc/archives/1068
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
颜文字
洛天依9周年
洛天依夜航星
洛天依8周年
上一篇
下一篇