配置Edge Server - 预览
在此页面上
在 中创建Edge Server Atlas实例后,您必须配置运行Edge Server 实例的硬件。对于大多数使用案例,您需要在本地预配硬件来托管Edge Server实例。 在开发Edge Server应用程序时,为方便起见,您可以将其托管在云服务器上。
本地客户端设备连接到Edge Server实例。 您的实例连接到 Edge Server Service 或 Device Sync Service,具体取决于创建方式。 客户端不直接连接到 MongoDB Atlas。
本页详细介绍如何配置Edge Server实例并对其执行操作。
先决条件
每个Edge Server实例都连接到Atlas项目中的一项服务。 在使用Edge Server实例之前,必须创建相关服务,并为Edge Server实例配置身份验证提供程序和权限。
有关详细信息,请参阅为Edge Server创建服务。
边缘服务器主机要求
运行Edge Server实例的主机可以是 EC2 实例或其他云服务器,或者是您现场预配的硬件。
提示
对于概念验证测试,您可以启动运行 Ubuntu 服务器 18.x 的 EC2 实例。在“网络设置”下,添加规则以允许通过 HTTP/端口 80 进行访问。对于小型 PoC 项目,免费套餐设置已足够。
所需硬件
当前运行Edge Server实例的最低硬件要求为:
CPU: 64位、四核处理器
RAM: 8 GB 内存
存储: 32 GB 磁盘空间
Edge Server基准测试完成后,这些要求可能会发生变化。
操作系统兼容性
Edge Server已经过验证,可使用以下操作系统:
在 M1 或 Intel 2018+ MacBook Pro 上运行的 macOS 11.x 及更高版本
Raspberry Pi OS 12
Ubuntu 服务器 18 及更高版本
其他操作系统也可能是可行的,但尚未得到验证。
所需软件
为方便起见,您可以在开发过程中使用Edge Server Docker以 Swarm 模式管理 实例。在生产环境中,使用Kubernetes管理Edge Server容器。
如果您未安装Docker且未启用 Swarm,系统会在运行Edge Server之前提示您解决这些依赖关系。
所需的网络访问权限
要接受来自同步客户端的连接或使用MongoDB URI 的连接,运行Edge Server的主机必须允许访问传入连接。
如果您在自己的基础架构上运行Edge Server ,则无需向通用互联网开放该实例。 您只需确保客户端设备可以访问它即可。
对于云基础架构,例如在 EC2 上运行开发环境,您必须打开端口以接受传入连接:
开发:在端口 80 上使用 HTTP,以简化开发并加快开发速度。
生产:使用带有端口 443 的 SSL 来保护对生产数据的访问。
Edge Server支持 TLS。
我们建议通过 Kubernetes 控制器为 HTTP 访问(包括 Device SDK 流量)设置 TLS 终止。
通过 MongoDB URI 的连接可以通过 edgectl
配置 TLS。
安装和配置Edge Server实例
创建Edge Server服务或Device Sync服务后,必须创建Edge Server实例。 每个服务可能有许多Edge Server实例。 创建Edge Server实例时,您会获得一个安装脚本,该脚本可用于下载用于安装和管理Edge Server实例 edgectl
的工具。 您还会获得一个可用于注册Edge Server实例的令牌。 有关详细信息,请参阅创建Edge Server实例。
使用安装脚本在主机上设置并运行Edge Server实例。
重要
在不使用时停止边缘服务器
启动Edge Server实例后,即使未连接任何客户端应用程序,它也会尝试与Atlas保持 Websocket 连接以保持同步。 如果您正在运行演示或以其他方式处理 PoC,请记住在使用完毕后使用 edgectl stop
停止Edge Server实例。 否则,您将继续使用主机的计算时间和 Device Sync 时间。
初始化Edge Server实例
使用 edgectl
设置Edge Server实例。
edgectl init --app-id="<INSERT-YOUR-APP-ID-HERE>" --platform=compose
所需的最少参数为app-id
和platform
。
--app-id
:提供Edge Server应用程序ID 。 示例,--app-id="edge-server-vtoyh"
。 有关更多信息,请参阅查找应用程序ID。--platform
:您可以使用Docker Compose 在开发环境中安装和管理Edge Server实例,或Kubernetes管理生产环境中的实例。 有效值为compose
或kubernetes
。
您可以提供以下可选标志来指定其他配置详细信息:
字段名称 | 类型 | 值 |
---|---|---|
--edge-root-dir | 字符串 | 磁盘上用于存储配置文件的位置。 默认为 ~/.mongodb-edge/ 。 如果指定备用位置,则必须在后续发出的每个edgectl 命令中将此标志与备用位置一起传递。 |
--query | 字符串 | 该查询定义了要在Edge Server实例和Atlas之间同步哪些数据。 如果不提供查询,该实例将同步其有权访问权限的所有数据。 有关填充查询的信息,请参阅 指定Edge Server的查询。 |
--global-query | 字符串 | 适用于关联数据源中所有集合的查询。 有关详细信息,请参阅指定Edge Server的查询。 |
--query-file | 字符串 | 将路径传递给 JSON 文件,该文件包含对关联数据源中集合的查询。 有关详细信息,请参阅指定Edge Server的查询。 |
--http-port | Int | 实例侦听 HTTP 连接的端口。 默认值为 80 。 |
--wire-protocol-port | Int | 实例侦听 MongoDB 传输协议连接的端口,例如来自 MongoDB 驱动程序的连接。 默认值为 27021 。 |
--insecure-disable-auth | 布尔 | 如果 true ,则用户可以通过传输协议或 Atlas Device SDK 客户端匿名连接到实例。 默认为false 。 |
--skip-user-prompt | 布尔 | 如果为 true ,则Edge Server不会提示创建用户。 如果为 false ,则Edge Server连接到Atlas以检查服务中是否存在电子邮件/密码用户。 如果相应的电子邮件/密码用户不存在,则会以交互方式提示输入用户名和密码以创建用户。 默认为false 。 |
--disable-local-ui | 布尔 | 如果为 true ,则Edge Server实例不在注册的 http-port 上运行用户界面。 默认为false 。 |
--profile | 字符串 | 执行给定 edgectl 命令时要使用的配置文件的名称。 如果您不提供名称,则配置文件名称默认为app-id ,并附加一个递增的数字,从-01 开始。 如果您不提供配置文件标志, edgectl 将在执行命令时使用默认配置文件。 有关详细信息,请参阅在主机上运行多个Edge Server实例。 |
--registration-token | 字符串 | Edge Server实例的一次性注册令牌。 如果不将此标志与令牌一起传递,则 edgectl 会在初始设置期间以交互方式提示输入令牌。 |
提供Edge Server令牌
首次配置Edge Server实例时,系统会提示您提供Edge Server令牌。 这是您将实例添加到服务时获得的令牌。
如果您不再拥有令牌,则可以从服务中的“ Edge Server实例详细信息”生成新令牌。
Edge Server实例将此令牌交换为密钥。 它在同步数据时使用该密钥向 Atlas 进行身份验证。
(可选)创建新用户
如果您想使用Edge Server MongoDB驱动程序或工具连接到 实例,则必须拥有用户名/密码凭证,否则必须绕过身份验证。如果您已有用户名/密码凭证,或者不打算使用Edge Server MongoDB驱动程序或工具连接到 实例,则可以跳过此步骤。
有关详细信息,请参阅 使用Edge Server MongoDB驱动程序和工具连接到 。
如果您还没有用户名/密码凭证,可以在edgectl init
过程中按照提示创建一个用户名/密码凭证。
否则,您可以稍后使用 Atlas App Services用户界面、App Services CLI 或 手动 创建电子邮件/密码用户App Services Admin API 。
或者,如果计划稍后实施授权流程,则可以使用以下命令和标志绕过授权:
edgectl config --insecure-disable-auth=true
启动和停止边缘服务器
使用 edgectl
启动和停止Edge Server实例。
要启动所有Edge Server实例容器,请使用 start
命令:
edgectl start
要停止所有Edge Server实例容器,请使用 stop
命令:
edgectl stop
重要
在不使用时停止边缘服务器
启动Edge Server实例后,即使未连接任何客户端应用程序,它也会尝试与Atlas保持 Websocket 连接以保持同步。 如果您正在运行演示或以其他方式处理 PoC,请记住在使用完毕后使用 edgectl stop
停止Edge Server实例。 否则,您将继续使用主机的计算时间和 Device Sync 时间。
检查边缘服务器状态
当Edge Server实例正在运行时,您可以使用以下命令查看实例的状态:
edgectl status
这将为您提供有关Edge Server容器状态的信息,以及同步服务器的详细状态以及重要信息的细分。 它可能看起来类似于以下内容:
{ "mongoContainerStatus": { "message": "running" }, "mongoDBStatus": { "message": "ready" }, "syncServerContainerStatus": { "message": "running" }, "syncServerStatus": { "message": "ACTIVE" }, "syncServerDetailedStatus": { "version": "v0.22.3", "status": "ACTIVE", "cloud_connected": true, "num_local_clients": 0, "query": { "Item": "truepredicate" } } }
syncServerDetailedStatus
包含有关Edge Server实例状态的信息。 这包括有关与 Atlas 的连接以及连接的客户端的详细信息,如下所示:
字段名称 | 类型 | 值 |
---|---|---|
version | 字符串 | 实例运行的Edge Server代码的当前版本。 如果Edge Server实例的主要版本落后于最新可用版本一个以上,则无法连接到Atlas ,必须进行擦除和更新。 有关详细信息,请参阅升级Edge Server版本。 |
status | 字符串 | Edge Server实例的当前状态。 可能的值包括:
|
cloud_connected | 布尔 | 如果为 true ,则Edge Server实例当前已连接到Atlas 。 如果为 false ,则Edge Server实例未连接到Atlas 。 当实例未连接 Atlas 时,仍可接收本地连接并与本地客户端同步数据。 当它与 Atlas 重新连接时,它会尝试同步在未连接时更改的数据。 |
num_local_clients | Int | 当前通过 连接到Edge Server 实例的客户端数量。Atlas Device SDK这不包括通过传输协议进行的连接。 |
query | 对象 | Edge Server实例同步查询,以JSON对象形式呈现。 有关详细信息,请参阅指定Edge Server的查询。 |
更新Edge Server实例配置
您可以使用 edgectl
对现有Edge Server实例进行更改。 更改配置后,重新启动实例以应用更新。
更新Edge Server配置
使用带有适当标志的edgectl config
命令来更新实例:
edgectl config --YOUR-FLAG-HERE
字段名称 | 类型 | 值 |
---|---|---|
--edge-root-dir | 字符串 | 磁盘上用于存储配置文件的位置。 默认为 ~/.mongodb-edge/ 。 如果在初始设置期间提供了备用位置,则必须在发出的每个edgectl 命令中将此标志与备用命令一起传递。 |
--query | 字符串 | 该查询定义了要在Edge Server实例和Atlas之间同步哪些数据。 如果您不提供查询,该实例将同步其有权访问的所有数据。 有关填充查询的信息,请参阅指定Edge Server的查询。 |
--global-query | 字符串 | 适用于关联数据源中所有集合的查询。 有关详细信息,请参阅指定Edge Server的查询。 |
--query-file | 字符串 | 将路径传递给 JSON 文件,该文件包含对关联数据源中集合的查询。 有关详细信息,请参阅指定Edge Server的查询。 |
--http-port | Int | 实例侦听 HTTP 连接的端口。 默认值为 80 。 |
--wire-protocol-port | Int | 实例侦听 MongoDB 传输协议连接的端口,例如来自 MongoDB 驱动程序的连接。 默认值为 27021 。 |
--insecure-disable-auth | 布尔 | 如果 true ,则用户可以通过传输协议或 Atlas Device SDK 客户端匿名连接到实例。 默认为false 。 |
--skip-user-prompt | 布尔 | 如果为 true ,则Edge Server不会提示创建用户。 如果为 false ,则Edge Server连接到Atlas以检查服务中是否存在电子邮件/密码用户。 如果相应的电子邮件/密码用户不存在,则会以交互方式提示输入用户名和密码以创建用户。 默认为false 。 |
--disable-local-ui | 布尔 | 如果为 true ,则Edge Server实例不在注册的 http-port 上运行用户界面。 默认为false 。 |
--profile | 字符串 | 执行给定 edgectl 命令时要使用的配置文件的名称。 如果您不提供名称,则配置文件名称默认为app-id ,并附加一个递增的数字,从-01 开始。 如果您不提供配置文件标志, edgectl 将在执行命令时使用默认配置文件。 有关详细信息,请参阅在主机上运行多个Edge Server实例。 |
--registration-token | 字符串 | Edge Server实例的一次性注册令牌。 您可以传递带有此令牌的标志,以提示Edge Server实例更新其API密钥。 |
--update-registration-token | 布尔 | 提示 edgectl 以交互方式请求新的一次性使用注册令牌。 提供新令牌时, Edge Server实例会更新其API密钥。 |
升级边缘服务器版本
随着Edge Server的发展,您可能需要升级Edge Server版本以利用新功能。 此外, Edge Server实例的主要版本不得比最新可用版本晚一个以上,否则将进入 FAILED
状态并且无法连接到Atlas 。
重要
所需的网络访问权限
要升级Edge Server版本,edgectl
必须具有网络访问权限。 如果 edgectl
不在线,则无法升级Edge Server版本。
循环使用Edge Server API密钥
要循环使用Edge Server API密钥,请执行以下操作:
在 Atlas 中生成新令牌
您可以从“Edge Server Edge Server实例详细信息 ”生成新的 令牌。使用 Regenerate Token按钮获取并复制新令牌。 您将无法再次看到此令牌,如果不复制它,则必须生成新令牌。
指定Edge Server的查询
如果未指定查询,则Edge Server实例默认为 "*"
的全局查询,这会自动同步链接的数据源中所有集合中的所有数据。
您可以在 edgectl config
命令中使用一些参数来指定Edge Server实例同步查询:
传递一个简单的string查询:
edgectl config --query="Store: store_id == 42" 传递多个查询标志以提供多个集合的查询:
edgectl config --query="Person: age > 10" --query "Pet: type = 'cat'" 将路径传递到包含映射更复杂查询的 JSON 对象的文件:
edgectl config --query-file="/Users/my.user/edge-server/query.json" 传递全局查询以对所有集合使用相同的查询:
edgectl config --global-query="shouldSync == true"
除非使用全局查询,否则Edge Server查询采用 YOUR-SCHEMA-TITLE: YOUR-QUERY
的形式:
YOUR-SCHEMA-TITLE
:模式的title
字段,通常与数据库中集合的名称匹配。 如果不同数据库中存在两个同名的集合,我们会在集合名称前加上数据库名称;例如,databaseName_collectionName
。链接的 Atlas 数据源可能包含许多集合,每个集合都有一个匹配的模式。 如果不使用默认的Edge Server查询
"*"
或同步所有内容的全局查询,则要同步的每个模式都必须有自己的查询。如果您使用的是模板应用,则为
Item
集合。YOUR-QUERY
:该查询确定Edge Server可以与集合同步哪些文档。 您可以使用RQL来定义此查询,并对Flexible Sync RQL限制使用相同的注意事项。
注意
可查询字段
由于边缘服务器使用Device Sync与Atlas同步数据,因此在Edge Server实例上使用的查询必须使用可查询字段。 如果您使用Edge Server服务,我们会自动将您在Edge Server实例查询中使用的字段添加到可查询字段中。 如果您将 Device Sync 服务与边缘服务器一起使用,我们仅在启用开发模式时添加可查询字段。
有关更多信息,请参阅可查询字段。
Edge Server查询示例
同步所有文档
您可以同步Edge Server实例和Atlas之间的所有文档。 这会使用truepredicate
或"*"
查询。 由于这是全局查询,因此您可以将其作为带有 edgectl --global-query
参数的string传递。
如果在配置Edge Server实例时未提供查询,则这是默认查询。
edgectl config --global-query="truepredicate"
同步所有集合中的文档子集
您可能只想与Edge Server实例同步文档的子集。 例如,对于位于特定商店的实例,您可能只想仅同步与该商店相关的文档。 其 RQL 查询可能如下所示:
edgectl config --global-query="store_id == 42"
同步一个集合中的文档子集
如果链接到边缘服务器兼容服务的数据源包含多个集合,并且您想要为特定集合定义查询,则可以提供该集合的模式标题映射以及相关查询。
在此示例中,我们为Inventory
集合设置查询,其模式标题也是Inventory
。 Edge Server实例仅同步 store_id
与 42
( Edge Server实例所在的商店编号)匹配的集合中的文档。
edgectl config --query="Inventory: store_id == 42"
链接的数据源还包含Customers
集合。 但由于Edge Server实例没有针对该集合的查询,因此集合中的任何文档都不会同步到Edge Server实例,即使它们包含 store_id
字段,其值与Edge Server查询中的 42
匹配。
为多个集合指定不同查询
对于更复杂的查询,您想为多个集合传递不同的查询,有两种选择:
传递多个
--query
标志,每个集合一个标志将路径传递给您在其中定义查询的文件,格式为 JSON
在这些示例中,我们有三个集合: Project
、 Item
和Team
,它们的集合名称与其模式标题相匹配。 这些查询与其中两个集合同步数据: Item
和Project
。 Project
集合有一个列表属性,表示与Item
集合的多对多关系。 我们不想将 Team
集合同步到Edge Server实例。 通过从查询中省略此模式标题,我们不会将其任何数据同步到实例。
通过这些查询,我们仅同步设施42的Project
文档。 此外,我们仅同步Item
priority
字段的值大于或等于 的3
文档。通过这种方式,您可以组合查询以仅同步与给定Edge Server实例相关的文档。
传递多个查询标志
您可以使用edgectl config
传递多个查询标志,以提供对多个集合的查询。
edgectl config --query="Project: facility_id == 42" --query "Item: priority >= 3"
以 JSON 文件形式传递查询
您可以将路径传递给定义许多不同查询的 JSON 文件。 例如:
edgectl config --query-file="/Users/my.user/edge-server/query.json"
其中 JSON 文件包含:
{ "Project": "facility_id == 42", "Item": "priority >= 3" }
模拟离线连接
Edge Server提供了一个演示模式,您可以使用它来模拟与Edge Server 失去连接的Atlas 实例。当Edge Server 实例处于离线演示模式时,您可以使用CRUD MongoDB驱动程序或工具或 应用程序继续对实例执行Atlas Device SDK 操作。
您可以使用连接到Edge Server实例的客户端在本地查看数据更改,但看不到Atlas中反映的更改。 同样,当 实例处于离线状态时,您在Atlas Edge Server中所做的更改不会同步到Edge Server 并反映在本地客户端上。
当您将Edge Server实例退出离线演示模式时,它会自动恢复与Atlas同步。 您可以看到Edge Server 中反映了Atlas 实例的数据,并且Atlas 中更改的数据对该实例和连接的客户端可见。
设置离线演示模式
将以下edgectl
标志与init
命令或config
命令一起使用以设置离线演示功能:
edgectl config --insecure-enable-offline-demo
如果使用 edgectl config
命令发出此标志,则必须重新启动Edge Server实例才能使更改生效。
启用离线演示模式
在模拟离线连接之前, Edge Server实例必须成功连接到Atlas 。 您无法将此功能用于从未与Edge Server 执行初始同步的Atlas 实例。
设置离线演示模式并成功连接到 Atlas 后,发出以下edgectl
命令来模拟离线连接:
edgectl offline-demo disable-connection
您将收到一条消息,指示已成功禁用互联网连接。 如果您检查Edge Server实例状态,则会发现 cloud_connected
布尔值从 true
更改为 false
。
CRUDEdge Server现在,您可以在本地使用 实例执行 改查操作,并且应该不会在Atlas 中看到更改。
禁用离线演示模式
要模拟重新连接到网络,请发出以下edgectl
命令:
edgectl offline-demo enable-connection
您将收到一条消息,指示已成功启用互联网连接。 如果您检查Edge Server实例状态,则会发现 cloud_connected
布尔值从 false
更改为 true
。
等待任何更改同步片刻后,您可以看到Atlas 中反映的本地更改,以及Atlas Edge Server实例上反映的 更改。
在主机上运行多个Edge Server实例
在开发Edge Server架构时,您可能希望在单个主机(例如本地计算机)上运行多个Edge Server实例。 您可以使用edgectl
配置文件功能来执行此操作。
创建Edge Server实例时,edgectl
会自动为您创建默认配置文件。 该配置文件将命令映射到特定的Edge Server实例。
在同一计算机上创建新的Edge Server实例时,edgectl
会将新配置文件设置为默认配置文件。 要发出使用默认配置文件以外的配置文件的命令,请为每个命令添加--profile
标志。
edgectl start --profile=YOUR-PROFILE-NAME
您可以在以下位置查看配置文件及其关联的配置文件:
~/.mongodb-edge/profiles/
为配置文件命名
发出edgectl init
命令时,可以使用--profile
标志命名配置文件:
edgectl init --app-id="YOUR-APP-ID" --platform=compose --profile=YOUR-PROFILE-NAME
列出配置文件
您可以使用以下edgectl
命令列出所有配置文件,并查看当前将哪个配置文件设置为默认值:
edgectl profile list
获取个人资料详情
您可以使用以下edgectl
命令获取有关配置文件的详细信息:
edgectl profile inspect YOUR-PROFILE-NAME
这提供了与配置文件关联的 App ID 和平台的相关信息:
{ "appId" : "YOUR-APP-ID", "platform" : "compose" }
设置默认配置文件
创建新的配置文件后,它将成为默认配置文件。 您可以使用以下edgectl
命令设置不同的默认配置文件:
edgectl profile set-default YOUR-PROFILE-NAME
如果再次列出所有配置文件,则可以看到新的默认值。
删除配置文件
您可以使用以下edgectl
命令删除配置文件:
edgectl profile delete YOUR-PROFILE-NAME
如果删除默认配置文件,则必须设置新的默认配置文件,或在发出的每个命令中传递--profile
标志。