如何在Linux系统上将Postgres的数据与配置部署到可移动存储卷
Postgres热插拔存储部署迁移方案
这个方案完全可行,是生产环境中实现Postgres快速实例迁移、节点容灾的常用成熟方案,只要做好前置配置即可实现无异常迁移。
前置要求
- 两台虚拟机的Postgres大版本必须完全一致,小版本尽量保持相同,避免跨版本启动不兼容
- 两台虚拟机的
postgres系统用户的UID、GID必须完全相同,这是避免权限报错的核心前提:- 原机器执行
id postgres查询UID和GID数值 - 新机器执行
usermod -u [原UID] postgres、groupmod -g [原GID] postgres修改即可
- 原机器执行
- 热插拔磁盘使用ext4、XFS等主流Linux文件系统,保证两台虚拟机均支持挂载
部署配置流程
假设热插拔磁盘统一挂载到/mnt/postgres-volume路径,按以下步骤操作:
- 挂载热插拔磁盘到原机器对应路径,配置
/etc/fstab保证开机自动挂载,修改挂载目录权限:chown postgres:postgres /mnt/postgres-volume chmod 700 /mnt/postgres-volume - 停止原机器Postgres服务:
systemctl stop postgresql - 在热插拔盘下创建数据、配置目录,将原Postgres的默认数据、配置文件全部迁移到热插拔盘对应目录:
# 示例为Debian/Ubuntu系Postgres 14版本路径,RHEL/CentOS系可对应修改 mv /var/lib/postgresql/14/main/* /mnt/postgres-volume/data/ mv /etc/postgresql/14/main/* /mnt/postgres-volume/conf/ - 修改Postgres启动参数,指定数据、配置路径均指向热插拔盘:
- 若使用systemd管理,可编辑Postgres的service文件或添加override配置,修改ExecStart行的参数:
ExecStart=/usr/lib/postgresql/14/bin/postgres --config-file=/mnt/postgres-volume/conf/postgresql.conf --data-directory=/mnt/postgres-volume/data - 也可直接在postgresql.conf中修改data_directory参数指向热插拔盘数据路径
- 若使用systemd管理,可编辑Postgres的service文件或添加override配置,修改ExecStart行的参数:
- 启动原机器Postgres,验证服务、数据、配置均正常生效
迁移操作流程
需要跨机器迁移时按以下步骤操作即可:
- 停止原机器Postgres服务,确认无Postgres相关进程残留:
ps aux | grep postgres - 卸载原机器热插拔磁盘:
umount /mnt/postgres-volume - 将热插拔磁盘挂载到新机器的相同路径
/mnt/postgres-volume,配置新机器的/etc/fstab自动挂载 - 启动新机器Postgres服务,验证数据、配置、权限完全和原机器一致即可正常使用
其他注意事项
- 若需要日志文件也随存储迁移,可在postgresql.conf中修改
log_directory参数指向热插拔盘下的日志目录 - 迁移前务必确保原机器Postgres完全停止,禁止热迁移过程中对磁盘有写入操作,避免数据文件损坏
- 不要跨大版本迁移,若需要升级版本可在迁移完成后单独执行版本升级操作
内容的提问来源于stack exchange,提问作者Eric Mutta
相关产品推荐
相关产品推荐

