记录一次将matrix从arm服务器迁移到x86服务器

不同架构间的PostgreSQL数据不兼容,因此不能直接复制完整的/matrix目录进行跨架构迁移。本文基于我使用的matrix部署项目https://github.com/spantaleev/matrix-docker-ansible-deploy

1. 升级

首先检查 更新日志 ,确保没有需要手动更改的项目。

在Ansible服务器,更新剧本和 Ansible 角色

cd matrix-docker-ansible-deploy

just update

重新运行剧本设置

ansible-playbook -i inventory/hosts setup.yml --tags=install-all,start

不再默认安装某些组件/自动创建机器人帐户,则需要使用setup-all(单纯迁移无需使用):

ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,ensure-matrix-users-created,start

2. 升级PostgreSQL

just run-tags upgrade-postgres

我去年安装的,已经是最新版本了

TASK [galaxy/postgres : Abort, if already at latest Postgres version] *************************************************************************
fatal: [matrix.example.com]: FAILED! => {"changed": false, "msg": "You are already running the latest Postgres version supported (docker.io/postgres:17.5-alpine). Nothing to do"}

旧的 Postgres 数据目录会自动备份,方法是将其重命名为/matrix/postgres/data-auto-upgrade-backup。要重命名为其他路径,请向上述命令传递一些额外的标志,如下所示:--extra-vars="postgres_auto_upgrade_backup_data_path=/another/disk/matrix-postgres-before-upgrade"

自动升级备份目录将永远保留,直到您手动决定删除它

作为升级的一部分,数据库会被转储到/tmp,然后启动一个升级后的空 Postgres 服务器,并将转储内容恢复到新服务器。要使用不同的目录来存储转储,请在上述命令中传递一些额外的参数,如下所示:--extra-vars="postgres_dump_dir=/directory/to/dump/here"

为了节省磁盘空间/tmp,转储文件会即时进行 gzip 压缩,但会占用 CPU 空间。如果您有足够的空间/tmp,并且不想进行 gzip 压缩,可以显式传递一个不以 结尾的转储文件名.gz。例如:--extra-vars="postgres_dump_name=matrix-postgres-dump.sql"

Postgres 服务器上的所有数据库、角色等均已迁移。但是,依赖于特定 Postgres 版本的其他组件(例如Postgres 备份服务)可能需要在升级后使用以下命令进行更新:just install-all

3. 迁移步骤

3.1 在原服务器打包

降低 matrix.example.com 的ttl值,减少停机时间

备份PostgreSQL数据库

/usr/bin/docker exec \
--env-file=/matrix/postgres/env-postgres-psql \
matrix-postgres \
/usr/local/bin/pg_dumpall -h matrix-postgres \
| gzip -c \
> /matrix/postgres.sql.gz

停止旧服务器上的所有服务

cd /etc/systemd/system/ && systemctl disable --now matrix*

打包配置文件,保留所有权和权限,排除PostgreSQL数据目录,已包含数据库导出

cd /matrix
tar --exclude='postgres/data' \
    --exclude='postgres/data-auto-upgrade-backup' \
    -cpzf matrix_config_backup.tar.gz .

备份媒体文件

tar -cpzf /matrix/media_store_backup.tar.gz /matrix/synapse/storage/media-store/

3.2 修改ansible连接信息

将DNS记录指向新服务器的IP地址

inventory/hosts文件中将旧服务器IP替换为新服务器IP

创建matrix用户和组

just run-tags setup-system-user

3.3 在新服务器恢复数据

在新服务器wget 媒体文件备份和配置文件 matrix_config_backup.tar.gz media_store_backup.tar.gz

在新服务器上创建/matrix目录并调整文件所有权

mkdir /matrix
chown -R matrix:matrix /matrix

解压

tar -xpzf matrix_config_backup.tar.gz -C /matrix
tar -xpzf media_store_backup.tar.gz -C /matrix
# 检查目录结构
ls -la /matrix/
# 应该包含:synapse/, traefik/, nginx/, postgres/ 等

# 检查媒体文件
ls -la /matrix/synapse/storage/media-store/
# 应该包含您的媒体文件

# 检查权限(解压后需要调整)
ls -la /matrix/synapse/

3.4 安装和启动服务

just run-tags install-all

恢复数据库

just run-tags import-postgres \
--extra-vars=server_path_postgres_dump=/matrix/postgres.sql.gz \
--extra-vars=postgres_default_import_database=matrix

优化查询规划器

just run-tags run-postgres-vacuum -e postgres_vacuum_preset=analyze

上面已经打包、解压了这些文件,理论上不需要进行此操作。此步骤需要新服务器apt install -y rsync

ansible-playbook -i inventory/hosts setup.yml --extra-vars='server_path_media_store=/matrix/synapse/storage/media-store/' --tags=import-synapse-media-store

启动所有服务

just run-tags start

3.5 验证迁移

在新服务器检查服务状态

sudo systemctl status matrix-synapse

ansible运行自检

just run-tags self-check
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!无需注册,过短或乱码评论会被屏蔽。
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容