不同架构间的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*
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
暂无评论内容