跳到主要内容

在生产环境中部署 PubSub+ 软件事件代理

以下部分旨在帮助您成功地在生产环境中部署高度可用(HA)的PubSub+软件事件代理实例。

虚拟机部署注意事项

PubSub+软件事件代理通常部署在虚拟机(VM)环境中。在这些情况下,您会根据公司标准创建一个Linux虚拟机,使用基于主要发行版之一(Red Hat Enterprise Linux或Ubuntu很常见)的标准镜像。虚拟机使用虚拟化程序(VMware最常见,但虚拟化程序的选择不重要,只要它能运行Linux虚拟机)。企业IT团队有管理这些类型系统的经验。

PubSub+事件代理规模

在部署虚拟机之前,您必须考虑将要部署到其中的事件代理实例的资源需求。HA部署需要三个实例(主节点、备份节点和监控节点)。主节点和备份节点是处理事件的消息路由节点,应该完全相同,因为它们中的任何一个都可能在任何时候处于活动状态。监控节点的功能是提供多数票,以决定在消息路由节点无法相互通信时(防止脑裂故障,即两个节点都变为活动状态)应该激活哪个消息路由节点。有关更多信息,请参见软件事件代理的高可用性。监控节点需要的资源比消息路由节点少。

要确定虚拟机将需要的资源,Solace提供了系统资源计算器工具。使用这个工具,您可以创建一个事件代理配置,工具会输出虚拟机必须为PubSub+事件代理实例提供的一组资源需求。一旦您创建了一个符合部署需求的事件代理配置,必须记录以下几项内容以备后用。从工具的输出中记录以下内容:

系统资源计算器输出描述消息路由节点容器(消息)监控节点容器(监控)
CPUsPubSub+事件代理实例所需的CPU核心数。这些可以与主机操作系统共享。
主机虚拟内存必须在主机系统中可用的内存量。这个量是除了主机操作系统需求之外的(其中2GB可能是交换空间)。
内存CGroup限制这是分配给容器的主机虚拟内存量。
Posix共享内存(/dev/shm必须分配给/dev/shm的内存量。这在前两个内存限制中有所考虑,但在创建容器时必须指定。
容器运行时后端存储这是必须分配给容器运行时以存储容器镜像和容器实例的读写层的存储。
存储分配给事件代理的存储组的存储。它包含与事件代理实例相关的所有状态。通常分配在不是虚拟机根文件系统的存储卷上。
Docker Compose环境变量环境变量用于在首次启动时为新实例提供引导配置。系统资源计算器的输出包含一些用于配置存储元素大小和系统缩放参数的环境变量。

从上述内容中,您可以确定要部署的虚拟机的特性。在部署虚拟机时必须分配的关键资源是CPU核心数、内存量和额外的存储卷。分配给虚拟机的CPU核心数必须至少等于系统资源计算器的输出。分配给虚拟机的内存量必须至少是计算器输出的主机虚拟内存加上主机操作系统所需的量。最佳实践是将PubSub+使用的存储组分配在与主机根文件系统不同的存储卷上。分配给存储组的存储必须至少等于计算器输出的大小。

用于托管存储组的存储的特性将对事件代理性能产生重大影响。存储组必须托管在由固态存储支持的卷上。延迟、吞吐量和IOPS都将影响PubSub+能够实现的性能。

两个消息路由节点对CPU、内存和存储的资源需求相同。监控节点的资源需求较低。有关详细信息,请参见计算器的容器(监控)输出。

配置虚拟机主机

现在虚拟机已经部署,您必须在主机操作系统(OS)中执行一些配置,以使它们准备好部署PubSub+事件代理。

配置容器运行时

容器运行时是一个软件组件,它使用Linux内核的特性(cgroups和命名空间)提供应用程序之间的隔离。由容器运行时管理的应用程序被打包为容器。容器镜像包含与应用程序二进制文件一起打包的Linux用户空间环境。镜像存储在本地的联合文件系统中(作为容器运行时的一部分安装和配置)。联合文件系统是一种写时复制文件系统(有几种选项;每个主机发行版/容器运行时都有一个首选选项)。当创建一个新的容器时,容器运行时会在容器镜像之上创建一个新的读写层,这成为容器内运行的进程的根文件系统。容器运行时配置cgroups和命名空间以提供容器之间的隔离。

所有主要的Linux发行版都在它们的标准仓库中提供了容器运行时的软件包。安装这些软件包可以配置运行容器所需的一切。Podman是大多数主要Linux发行版支持的容器运行时的一个好选择。容器运行时不需要额外配置;软件包安装程序为主机操作系统配置它们做得很好。容器运行时提供了配置文件以输入任何非默认配置。

时间源

主机操作系统必须为PubSub+软件提供准确的时间源。在连接到网络的主机之间配置时间同步有多种方法。主机必须与网络的其余部分同步,以确保PubSub+正常运行。您可以根据公司范围的标准进行配置。

保护主机

使用旨在符合公司安全政策的虚拟机镜像,可以更容易地配置主机,以符合公司安全政策。这意味着它可以像网络中的任何其他主机一样进行管理。虚拟机预期已经预先硬化。您可以使用标准操作程序部署安全漏洞补丁(不需要依赖Solace提供补丁)。您还可以根据公司政策管理主机上的用户账户。PubSub+事件代理容器的安全特性以及如何保护其部署的详细信息在后续部分中介绍。

配置存储

使用本地包管理器安装容器运行时会配置用于存储容器镜像和任何容器实例的读写层的联合文件系统。与PubSub+事件代理实例相关的州应该使用文件系统挂载进行性能和将来管理实例的便利性(因为其中一些数据是长期存在的)。挂载允许访问主机中的文件或目录在容器实例内的位置(绕过联合文件系统)。通常使用与操作系统根文件系统不同的设备。如果为此目的将专用设备附加到虚拟机,则它必须在主机的文件系统中具有文件系统和挂载位置。PubSub+要求托管存储组的文件系统使用XFS构建。验证文件系统及其在主机中的挂载位置,以便可以在后续步骤中将其挂载到PubSub+事件代理容器中。

其他主机注意事项

核心文件是容器内运行的PubSub+事件代理进程崩溃时的重要调试工具。核心文件可能很大,达到几个吉字节。核心文件写入的位置在主机上配置。当设置容器的ulimits时,建议设置–ulimits core=-1以取消对可以生成的核心文件大小的限制。您可以将核心文件的位置配置为文件系统上的位置或脚本。如果配置脚本,核心文件的内容可以压缩以节省文件系统上的空间。有关如何配置主机的核心模式的详细信息,请参见容器镜像的核心文件管理。

创建PubSub+事件代理容器

本节概述了创建PubSub+事件代理容器的步骤。它详细介绍了如何定义可以使用容器运行时创建生产就绪的PubSub+实例的命令行。Podman和Docker是两个最受欢迎的容器运行时,它们的命令行语法大致兼容。本节创建的命令行预计可以与两者一起工作。

有关包含Podman示例命令行的systemd单元文件的示例,请参见示例systemd单元文件。以下部分描述了这些示例中使用的所有命令行选项的关注点。

Podman(以及最新版本的Docker)支持所谓的无根模式。虽然PubSub+事件代理容器不需要任何root权限即可运行,但使用sudo创建容器有一些优势(特别是与网络相关)。本节假设使用rootful容器(使用sudo podman创建的rootful容器)。需要注意的重要一点是,无根或rootful容器与容器内运行的进程的权限无关。这些术语指的是创建容器的进程的权限。可以有一个rootful容器在没有任何root权限的情况下运行。PubSub+事件代理容器就是这样一个可以在这种模式下运行的容器的例子。有关无根容器相关问题的更多信息,请参见无根容器。

分配资源锚点

在部署虚拟机时,您使用系统资源计算器检查了PubSub+事件代理的资源需求,并记录了工具的输出。如果PubSub+事件代理是唯一将在实例上运行的容器,那么资源竞争不是一个大问题。如果虚拟机上有多个容器在运行,那么建议限制分配给每个容器的资源。目标是防止资源竞争,这可能会对PubSub+的功能产生不利影响。

您可以使用以下命令行选项与容器运行时一起限制PubSub+可以访问的资源。如果未指定,容器可以使用虚拟机上所有可用的资源。

资源命令行选项注释
**内存:**PubSub+内存消耗主要是静态的。根据系统资源计算器的输出,您可以在用于创建容器的命令行中指定Memory CGroup Limit
--memory=xxG 和 –memory-swap=xxG- 可用于限制容器内进程允许使用的内存量。- 这两个数字必须至少等于系统资源计算器输出中的Memory CGroup Limit指定的内存量。- 如果PubSub+是虚拟机上唯一要运行的容器,则无需设置这些限制。
**Shm:**PubSub+需要一些共享内存用于容器内进程之间的通信。这个量在系统资源计算器的输出中指定。--shm-size=xxG- 必须指定;默认值不足,导致事件代理无法启动(由于POST失败)。- 这个量在系统资源计算器的Posix Shared Memory输出中指示。
**CPU:**PubSub+需要访问最少数量的CPU核心才能启动。系统资源计算器的输出指定了给定事件代理配置的最小CPU核心数。您可以指定容器可以访问的CPU或CPU数量。--cpus=x 或 –cpuset-cpus w,z,y,z- 必须指定至少与系统资源计算器输出中的CPUs一样多的CPU。- 如果PubSub+是虚拟机上唯一要运行的容器,则无需设置这些限制。
**Ulimits:**用于设置PubSub+容器内的其他资源限制。建议设置非标准的文件打开数量限制,并取消对核心文件大小的限制。系统资源计算器的输出中推荐了这些限制的值。--ulimit nofile=xxx:yyy<br>--ulimit cores=-1
**用户:**PubSub+容器的默认UID:GID1000001:0。这是您在创建容器时使用的命令行上未另行指定的情况下,容器内进程使用的UID。PubSub+容器可以使用任何user-id运行。最佳实践是使用主机上未配置的user-id。如果使用无根容器(带有用户命名空间重映射),选择用户时有其他考虑因素。--user UID:GID您为容器指定的UID:GID值也是设置存储组权限时所需的。如果运行无根容器,选择UID:GID时有特殊考虑因素,详见无根容器详细信息。

存储

在前面的步骤中,考虑了分配给存储组的存储量和在主机文件系统中的位置。这个目录被挂载到PubSub+容器的/var/lib/solace中。此目录必须由前面步骤中指定的用户写入。有关更多信息,请参见管理容器镜像存储。

以下命令行选项可用于将主机位置挂载到容器的/var/lib/solace中。这是存储组的位置,存储所有事件代理的状态。

--mount type=bind,source=<vm上的目录路径>,target=/var/lib/solace

网络

部署容器时有两种常见的网络选项,主机网络和桥接网络。

使用主机网络时,容器被部署在主机的网络命名空间中;容器内运行的进程看到的网络与主机上运行的任何进程相同。如果容器是主机上唯一要部署的容器,主机网络是一个很好的选择。如果主机上要部署多个容器,端口冲突就成为一个问题(在这种情况下,某种形式的桥接网络更合适)。主机网络有一些安全问题,但只要在主机网络命名空间中部署的容器来自可信来源,风险就很低(风险是容器内进程可以访问系统资源)。

使用桥接网络时,容器被部署在与主机不同的网络命名空间中。容器运行时配置转发规则,将主机和容器命名空间之间的流量桥接。使用桥接网络时,容器内进程监听的端口必须配置,以便容器运行时可以创建规则,将流量定向到这些端口的容器。桥接网络对无根容器提出了一些问题,因为非特权用户无法创建转发规则。有关更多信息,请参见容器网络。

以下命令行选项指定容器连接的网络:

--net=host 或 –net=bridge(如果使用无根容器,则为 –net=slirp4netns)

如果您使用桥接网络,必须指定哪些主机端口映射到某些容器端口:

--publish host_port:container_port

有关PubSub+事件代理默认侦听的端口列表,请参见默认端口号。

部署事件代理后,您还可以配置一些端口。创建容器时要考虑这些端口,因为创建容器后无法发布端口(但是可以在不丢失配置的情况下重新创建容器)。

日志

在PubSub+容器中配置日志记录有多种方式。大多数用户配置PubSub+事件代理通过Solace CLI将日志数据转发到远程syslog服务器。PubSub+也可以将日志数据直接输出到stdout以兼容容器运行时的本地日志记录设施(参见配置容器日志记录)。

主机名和DNS

最佳实践是为PubSub+实例分配一个独特的主机名(即使它解析为主机的IP地址)。PubSub+实例的独特主机名将有助于将来(如果需要)将容器移动到新的主机虚拟机(通过更新DNS条目指向新主机的IP地址)。

以下命令行选项指定容器内可用的主机名。要指定主机名,容器必须在UTS命名空间内。

--hostname=name

系统缩放参数

系统缩放参数是影响事件代理缩放限制的PubSub+设置。增加缩放参数需要为容器分配更多资源。缩放参数的配置通常是使用系统资源计算器开发的(如前几步所述)。

在前面的步骤中,您记录了系统资源计算器的docker-compose输出中环境变量。这些环境变量将用于配置事件代理实例的系统缩放参数。您可以在用于创建PubSub+容器的命令行上指定环境变量。PubSub+可以在首次启动时检测这些变量,并使用它们为新的PubSub+实例创建引导配置。对于系统资源计算器的docker-compose输出中的每个变量,在命令行上添加一个项目。

以下命令行选项在容器内创建环境变量:

--env variable-name=value

配置键

配置键的工作方式与系统缩放参数非常相似。这些键用于在首次启动时为事件代理实例创建引导配置。您可以像系统缩放参数一样使用环境变量设置它们。配置键的完整列表可以在此处找到。

创建默认帐户

PubSub+事件代理需要配置一个默认的管理员帐户。您可以使用配置键配置此默认帐户。

用于配置用户帐户的以下键:

username/<name>/encryptedpassword

此配置键创建用户<name>,并允许您指定用户密码的SHA-512加盐哈希。

username/<name>/globalaccesslevel

此配置键指定用户<name>的全局访问级别,至少需要一个管理员级别的用户。

服务器证书

为了建立与事件代理的安全连接,您必须配置服务器证书。配置服务器证书是引导配置的重要部分,因为需要通过HTTPS访问PubSub+ Broker Manager(以安全地完成事件代理的配置),并保护HA组节点之间的通信。

您可以使用配置键配置服务器证书。最佳实践是安全地将证书文件(包括私钥)传输到tmpfs(ram支持的,以便证书不会被写入存储)文件,并在容器内挂载该文件。

与设置服务器证书相关的两个配置键:

tls/servercertificate/filepath
tls/servercertificate/passphrasefilepath
  • 这些键旨在与将敏感配置注入容器的常见方法兼容(通常称为机密)。可以使用机密将证书放入容器,然后配置键告诉PubSub+软件在哪里访问它。

  • 如果证书文件受密码保护,则仅需要第二个配置键。

冗余配置

您可以使用配置键配置冗余,以便作为引导配置的一部分配置PubSub+事件代理的HA组。完成后,您可以使用PubSub+ Broker Manager安全地完成事件代理的配置,并使用Config-Sync在两个消息路由节点之间同步配置。

用于配置冗余的以下配置键:

nodetype
redundancy/activestandbyrole
redundancy/group/node/<name>/nodetype
redundancy/group/node/<name>/connectvia
redundancy/authentication/presharedkey/keyfilepath
redundancy/matelink/tls/enable
configsync/enable
configsync/tls/enable
redundancy/enable

创建您的命令行

您可以通过收集前几节中的所有选项来组装创建容器的命令行。带注释的systemd单元文件在示例systemd单元文件中提供了上述选项。在后续部分中,此单元文件将由systemd部署以创建PubSub+事件代理容器实例。

现在已生成用于创建容器的命令行,您可以使用容器运行时创建容器。请注意,如果此PubSub+实例是从最初创建的机器映像包迁移过来的,则需要额外的步骤来迁移旧系统的数据,并将此系统添加到正在运行的PubSub+事件代理HA组中。有关详细信息,请参见迁移机器映像部署。

配置容器自动启动

对于PubSub+的生产实例来说,在崩溃或主机重新启动的情况下自动重新启动非常重要。需要考虑两种情况:

  • 当主机启动时。

  • 当容器停止时。

systemd是启动容器的最佳工具。必须为此创建并安装systemd单元文件(您可以使用示例单元文件中的示例单元文件)。

当容器停止时,可以由systemd或容器运行时重新启动。选择通常取决于容器运行时的选择。Podman旨在与systemd集成,通常使用systemd服务启动容器(当主机启动时)并在容器停止的任何原因下重新启动容器。

使用Docker时,需要systemd服务在主机启动时自动启动容器,但如果容器停止,可以使用docker守护进程通过为容器设置的重启策略(--restart)来重新启动容器。在这种情况下,systemd服务可能使用docker compose来创建和启动容器。

Podman内置了对systemd的支持。从4.4版本开始的Podman版本包括一个名为Quadlet的工具。Quadlet定义了一个模板格式,您可以使用它来生成systemd单元文件。容器单元文件存储在/etc/containers/systemd(如果使用rootful容器)或$HOME/.config/containers/system(如果使用无根容器)。单元文件的[Container]部分可以轻松地从否则会用于创建容器的命令行选项生成(有关详细信息,请参见podman-systemd.unit)。

调试容器

需要考虑两种常见的调试场景:

  • 容器可能无法正确启动。这些问题发生在容器的日志设施启动之前。

  • 容器启动成功后可能会出现问题。调试容器启动后出现的问题通常通过检查事件代理日志(默认情况下存储在容器内的/var/lib/solace/jail/logs)或在Solace支持的帮助下使用gather-diagnostics进行。

要调试阻止PubSub+事件代理容器启动的问题,请检查容器运行时收集的日志。这些日志由PubSub+事件代理容器在日志设施启动之前生成,事件代理无法记录到其通常配置的位置。事件代理无法启动的常见原因包括资源问题;posix共享内存、容器可用的内存、CPU核心数(根据系统缩放参数的值,事件代理可能需要分配更多资源)。

容器启动后出现的问题通常通过检查事件代理日志(默认情况下存储在容器内的/var/lib/solace/jail/logs)进行调试。PubSub+容器还包括一个脚本来收集调试PubSub+实例所需的所有信息。您可以从Solace CLI或主机运行此脚本。如果从Solace CLI运行,脚本无法收集到与主机一样多的数据,因为容器内运行的进程对主机的访问有限。如果您从主机运行gather-diagnostics,则主机需要安装python。有关更多信息,请参见从软件事件代理容器收集诊断信息。

升级容器

将来某个时候,PubSub+事件代理实例将需要升级以使用新的PubSub+版本或安装维护版本。以将来可以升级的方式创建实例非常重要。

创建可升级实例时需要考虑的因素包括存储元素的主机位置以及事件代理在升级前干净地关闭。与PubSub+实例相关的所有状态应该在存储组中。存储组将在新的容器实例中挂载。基于目标PubSub+容器镜像的新容器将从存储组获取其配置、消息池和消息传递状态。

升级PubSub+事件代理实例所需的许多工作是在关闭过程中完成的。根据配置的复杂性,这可能需要几分钟。当使用podmandocker stop关闭容器时,最佳实践是设置容器运行时将强制停止容器的时间。您可以使用stop命令的–time选项指定这个时间,建议的时间是1200秒,以确保容器有足够的时间干净地关闭。例如:

podman stop solace –-time 1200

有关如何升级PubSub+事件代理容器实例的详细说明,请参见Docker升级。

示例systemd单元文件

以下是一个systemd单元文件的示例,您可以使用它来创建PubSub+事件代理容器实例:

# 示例systemd单元文件模板,用于PubSub+事件代理
# 此模板是HA组的生产就绪节点的示例。
# 此模板适用于主节点,备份节点需要类似的容器。
# 监控节点不需要相同的资源。
# 编辑配置以配置实例。

[Unit]
Description=PubSub+容器
After=local-fs.target
SourcePath=/etc/systemd/system/solace.service
RequiresMountsFor=%t/containers
# 这是存储组的位置
RequiresMountsFor=/opt/solace/storage-group

[Install]
# 启动时默认启动
WantedBy=multi-user.target default.target

[Service]
EnvironmentFile=/etc/solace/solace.conf
Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=always
ExecStop=/usr/bin/podman stop solace --time 1200
ExecStopPost=-/usr/bin/podman rm -f -i --cidfile=%t/%N.cid
ExecStopPost=-rm -f %t/%N.cid
Delegate=yes
Type=notify
NotifyAccess=all
SyslogIdentifier=%N
ExecStart=/usr/bin/podman run \
--env-file=/etc/solace/solace.env \
${PSP_COMMON_ARGS} \
${PSP_NAME} \
${PSP_CPUS} \
${PSP_MEMORY} \
${PSP_SHM_SIZE} \
${PSP_ULIMITS} \
${PSP_HOSTNAME} \
${PSP_USER} \
${PSP_MOUNT} \
${PSP_ROUTER_NAME} \
${PSP_ADMIN_USER} \
${PSP_ADMIN_PSWD} \
${PSP_NETWORK} \
${PSP_SSH_PORT} \
${PSP_MANAGER_HTTP} \
${PSP_MANAGER_HTTPS} \
${PSP_WEB_TRANSPORT_PLAIN} \
${PSP_WEB_TRANSPORT_TLS} \
${PSP_AMQP_TLS} \
${PSP_AMQP_PLAIN} \
${PSP_MQTT_PLAIN} \
${PSP_MQTT_WSPLAIN} \
${PSP_MQTT_WSTLS} \
${PSP_MQTT_TLS} \
${PSP_RESTPRODUCER_PLAIN} \
${PSP_RESTPRODUCER_TLS} \
${PSP_SMF_PLAIN} \
${PSP_SMF_COMPRESSED} \
${PSP_SMF_TLS} \
${PSP_SMF_ROUTING} \
${PSP_HA_MATELINK} \
${PSP_HA_SYNC0_UDP} \
${PSP_HA_SYNC1_UDP} \
${PSP_HA_SYNC2_UDP} \
${PSP_HA_SYNC0_TCP} \
${PSP_HA_SYNC1_TCP} \
${PSP_HA_SYNC2_TCP} \
${PSP_IMAGE}

以上是示例配置文件,用于上述单元文件:

# Solace PubSub+配置
##############################################################
#
#. 需要修改
#
##############################################################
PSP_COMMON_ARGS=--cidfile=%t/%N.cid --replace --rm --log-driver passthrough --runtime /usr/bin/crun --cgroups=split --sdnotify=conmon -d

#容器实例的名称
PSP_NAME=--name=solace

#指定容器的资源限制;
#这些是系统资源计算器的输出

PSP_CPUS=--cpus=2
#或cpusets

#PSP_MEMORY=--memory=6g
#如果主机上只运行容器,则不需要

#--shm-size必须指定;系统资源计算器的输出
PSP_SHM_SIZE=--shm_size=1g

#ulimits设置其他类型的操作系统资源限制
#取消对核心文件大小的限制
#nofile限制容器可以打开的文件数量
# --ulimit nofile=2448:10192
PSP_ULIMITS=--ulimits core=-1 --ulimit nofile=2448:10192

#设置容器的主机名
PSP_HOSTNAME=--hostname=primary

#设置容器内的用户UID;默认1000001:0
#PSP_USER=--user UID:GID
#用户必须能够写入/var/lib/solace挂载

#存储组推荐的大小是系统资源计算器的输出
#注意存储组在主机上的位置
PSP_MOUNT=--mount type=bind,src=/mnt/solace/storage-group,target=/var/lib/solace:Z
#容器内的环境变量
#PubSub+从这里接收其引导配置

PSP_ROUTER_NAME=--env 'routername=primary'

#创建默认管理员帐户
#access-level for user "admin"
PSP_ADMIN_USER=--env 'username_admin_globalaccesslevel=admin'

#为用户设置密码,格式为SHA512加盐哈希,<salted-hash>
PSP_ADMIN_PSWD=--env 'username_admin_encryptedpassword=<salted-hash>'

#网络配置
#如果主机上只有一个容器,则使用主机网络
PSP_NETWORK=--network=host
#如果使用主机网络,则不需要端口映射
#默认网络配置(桥接)需要端口映射

#通过SSH访问CLI
#PSP_SSH_PORT=-p '2222:2222'

#通过HTTP访问PubSub+ Broker Manager
#PSP_MANAGER_HTTP=-p 8080:8080

#通过HTTPS访问PubSub+ Manager
#PSP_MANAGER_HTTPS=-p '1943:1943'

#SMF web-transport plain text
#PSP_WEB_TRANSPORT_PLAIN=-p '8008:8008'

#SMF web-transport over TLS
#PSP_WEB_TRANSPORT_TLS=-p '1443:1443'

#AMQP over TLS (default message-vpn)
#PSP_AMQP_TLS=-p '5671:5671'

#AMQP plain text (default message-vpn)
#PSP_AMQP_PLAIN=-p '5672:5672'

#MQTT plain text (default message-vpn)
#PSP_MQTT_PLAIN=-p '1883:1883'

#MQTT over websockets plain text (default message-vpn)
#PSP_MQTT_WSPLAIN=-p '8000:8000'

#MQTT over websockets TLS (default message-vpn)
#PSP_MQTT_WSTLS=-p '8443:8443'

#MQTT over TLS (default message-vpn)
#PSP_MQTT_TLS=-p '8883:8883'

#REST producer plain text (default message-vpn)
#PSP_RESTPRODUCER_PLAIN=-p '9000:9000'

#REST producer over TLS (default message-vpn)
#PSP_RESTPRODUCER_TLS=-p '9443:9443'

#SMF plain text port
#PSP_SMF_PLAIN=-p '55555:55555'

#SMF compressed port
#PSP_SMF_COMPRESSED=-p '55003:55003'

#SMF over TLS with or without compression
#PSP_SMF_TLS=-p '55443:55443'

#SMF routing
#PSP_SMF_ROUTING=-p '55556:55556'

#High Availability Mate-Link
#PSP_HA_MATELINK=-p '8741:8741'

#HA synchronization
#PSP_HA_SYNC0_UDP=-p '8300:8300/udp'
#PSP_HA_SYNC1_UDP=-p '8301:8301/udp'
#PSP_HA_SYNC2_UDP=-p '8302:8302/udp'
#PSP_HA_SYNC0_TCP=-p '8300:8300/tcp'
#PSP_HA_SYNC1_TCP=-p '8301:8301/tcp'
#PSP_HA_SYNC2_TCP=-p '8302:8302/tcp'

#容器镜像的位置
PSP_IMAGE=solace/solace-pubsub-standard:production

用于配置容器的配置键存储在环境文件中。例如:

#Solace PubSub+ Config-Key Configuration
##############################################################
#
#. 需要修改
#
##############################################################
#存储服务器证书的文件路径
#如果使用机密,/run/secrets或/var/run/secrets是常见的默认值
tls_servercertificate_filepath=/run/secrets/cert.pem

#存储保护服务器证书的密码短语的文件路径
tls_servercertificate_passphrasefilepath=/run/secrets/pass-phrase

#设置事件代理的大小;检查许可条款
#PubSub+标准支持100, 1000 \
#PubSub+企业支持100, 1000, 10000, 100000, 200000
system_scaling_maxconnectioncount=1000

#系统缩放参数(系统资源计算器的输出)
#Max-QueueMssages 100, 240或3000(百万)
system_scaling_maxqueuemessagecount=240

#基于spool存储元素大小的消息负载池容量
messagespool_maxspoolusage=10000

#冗余配置
redundancy_enable=yes
configsync_enable=yes
configsync_tls_enable=yes

#备份事件代理的DNS名称
redundancy_matelink_connectvia=backup
redundancy_matelink_tls_enable=yes

#主或备份
redundancy_activestandbyrole=primary

#用于认证mate-link的主密钥,主和备份必须有相同的密钥
redundancy_authentication_presharedkey_keyfilepath=/run/secrets/keyfile

#主事件代理详细信息
#通过主的DNS名称连接
redundancy_group_node_primary_connectvia=primary
redundancy_group_node_primary_nodetype=message_routing

#备份事件代理详细信息
#通过备份的DNS名称连接
redundancy_group_node_backup_connectvia=backup
redundancy_group_node_backup_nodetype=message_routing

#监控事件代理详细信息
#通过监控的DNS名称连接
redundancy_group_node_monitoring_connectvia=monitoring
redundancy_group_node_monitoring_nodetype=monitoring