跳到主要内容

从多个挂载点转换为单个挂载点

在SolOS 9.12之前的版本中,storage-elements通常被外部化到单独的存储卷,并使用单独的挂载点挂载到容器上。在9.12及以后的版本中,这些storage-elements现在被收集在一个称为storage-group的单个对象下,该对象使用单个挂载点。

如果您已从SolOS版本9.11或更早版本升级到SolOS 9.12或更高版本,您可以使用以下程序将您的软件事件代理从使用多个挂载点转换为使用单个挂载点:

  • 独立
  • 高可用性

独立

要更新独立容器镜像以使用单个挂载点而不是多个挂载点,请执行以下操作:

这些步骤假设您正在使用Docker Engine。其他容器运行时也有类似的命令。

  1. 确保所有所需数据都在卷中。要再次检查环境中有哪些卷,请运行以下命令:
docker volume ls

响应应该如下所示:

DRIVER    VOLUME NAME
local adb
local adbBackup
local diagnostics
local spool
local jail
local var
  1. 停止Solace容器:
docker stop --time 1200 solace
  1. 删除容器:
docker rm solace
  1. 在主机操作系统上,在您希望新storage-group所在的位置上创建新目录。您可以为顶级目录使用任何名称,但storage-element目录必须如示例所示(spoolspool-cachevarspool-cache-backupjaildiagnostics)。

以下示例使用/mnt/solace作为顶级目录:

mkdir /mnt/solace/spool
mkdir /mnt/solace/spool-cache
mkdir /mnt/solace/var
mkdir /mnt/solace/spool-cache-backup
mkdir /mnt/solace/jail
mkdir /mnt/solace/diagnostics
  1. 通过运行以下命令,将新目录的所有者和组设置为容器所有者和容器组,替换<container-user><container-group>为实际值:
chown -R <container-user>:<container-group> /mnt/solace/

例如,如果您使用容器所有者(1000001)和组(0)的默认值,请运行以下命令:

chown -R 1000001:0 /mnt/solace/
  1. 要确定旧卷的挂载点是什么,运行以下命令:
docker volume inspect adb

响应应该如下所示。"Mountpoint"字段显示adb卷挂载在哪里:

[
{
"CreatedAt": "0001-01-01T00:00:00Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/adb/_data",
"Name": "adb",
"Options": {},
"Scope": "local"
}
]
  1. 将每个卷对应的文件夹内容复制到新位置(注意旧的和新的storage-element名称之间的差异):
shopt -s dotglob
mv /var/lib/docker/volumes/adb/_data/* /mnt/solace/spool-cache
mv /var/lib/docker/volumes/internalSpool/_data/* /mnt/solace/spool
mv /var/lib/docker/volumes/diagnostics/_data/* /mnt/solace/diagnostics
mv /var/lib/docker/volumes/var/_data/* /mnt/solace/var
mv /var/lib/docker/volumes/adbBackup/_data/* /mnt/solace/spool-cache-backup
mv /var/lib/docker/volumes/jail/_data/* /mnt/solace/jail
  1. 运行以下命令创建一个新容器,该容器挂载新的storage-group目录(/mnt/solace)作为绑定挂载:
docker create --network=host --uts=host --shm-size=1g --ulimit core=-1 \
--ulimit memlock=-1 --ulimit nofile=2448:42192 --env 'username_admin_globalaccesslevel=admin' \
--env 'username_admin_password=admin' --name=solace --mount type=bind,source=/mnt/solace,destination=/var/lib/solace,ro=false \
solace-pubsub-enterprise:<version>
  1. 如果您使用Docker卷API创建了旧的命名卷,现在可以通过运行以下命令删除它们(它们不再使用):
docker volume rm adb adbBackup diagnostics internalSpool jail var

高可用性

要更新高可用性组中的软件事件代理以使用单个挂载点而不是多个挂载点,请执行以下操作:

在以下步骤中,主消息节点被称为solace-primary,备份消息节点被称为solace-backup

  1. 通过在每个消息节点上运行show redundancy命令来验证冗余状态是否正确:
    • 在两个消息节点上,确保Redundancy Configuration StatusEnabledRedundancy StatusUp
    • 节点上,Message Spool Status应为AD-Active
    • 备份节点上,Message Spool Status应为AD-Standby
  2. 备份节点上,执行上述独立镜像的步骤。
  3. 备份节点上,运行show redundancy命令以确保Redundancy StatusUp
solace-backup> show redundancy
Configuration Status : Enabled
Redundancy Status : Up
  1. 备份节点上,如果配置同步处于活动状态,请确保它再次处于活动状态:
solace-backup> show config-sync
Admin Status : Enabled
Oper Status : Up
  1. 节点上,释放活动到备份节点:
solace-primary> enable
solace-primary> configure
solace-primary> redundancy release-activity
  1. 备份节点上,运行show redundancy命令以确保Message Spool Status现在是AD-Active
  2. 节点上,执行上述独立镜像的步骤。
  3. 节点上,重新认领活动:
solace-primary> enable
solace-primary> configure
solace-primary> no redundancy release-activity
  1. 节点上,运行show redundancy命令以确保Redundancy StatusUp
solace-primary> show redundancy
Configuration Status : Enabled
Redundancy Status : Up

此时,备份节点仍在处理消息流量。如果需要,您可以手动强制备份节点将活动释放给主节点。

  1. 节点上,如果配置同步处于活动状态,请确保它再次处于活动状态:
solace-primary> show config-sync
Admin Status : Enabled
Oper Status : Up
  1. 监控节点上,执行上述独立镜像的步骤。