某 GitLab 实例中存在多个 geo 从站点,因业务线变动其中一个节点将停止使用,因此需要将其彻底移除。
删除某个 geo 站点
登录主站 WebUI,导航至 Admin area → Geo → Sites,将需要移除的从站点删除(标签右侧垃圾桶按钮);
登录需要移除的从站服务器,关闭服务并彻底卸载;
## 卸载并移除守护进程 sudo gitlab-ctl stop sudo gitlab-ctl uninstall ## 卸载软件包 ### Debian/Ubuntu sudo dpkg --remove gitlab-* ### RHEL/CentOS/AlmaLinux sudo rpm --erase gitlab-*
如果服务器另做他用,还需要清理 GitLab 残留数据;
sudo rm -rf /var/opt/gitlab/ sudo rm -rf /etc/gitlab/ sudo rm -rf /var/log/gitlab/
移除从站所属复制槽;
## 登录主站或主集群的数据库节点 sudo gitlab-psql
列出所有复制槽
SELECT slot_name,slot_type,active,active_pid,restart_lsn,wal_status,two_phase FROM pg_replication_slots;
结果类似于(查询结果数量取决于从站数量):
slot_name | slot_type | active | active_pid | restart_lsn | wal_status | two_phase -----------+-----------+--------+------------+-------------+------------+----------- us | physical | t | 1280 | 1E/71945158 | reserved | f jp | physical | t | 1279 | 1E/71945158 | reserved | f (2 rows)
可以看到所有的进程还在进行读写,因此需要先终止流复制进程,查询占用的进程:
SELECT pid, state, application_name, client_addr, backend_start FROM pg_stat_replication;
结果类似于(查询结果数量取决于从站数量):
pid | state | application_name | client_addr | backend_start ------+-----------+------------------+---------------+------------------------------- 1279 | streaming | walreceiver | 10.122.11.193 | 2025-09-17 09:58:44.571168+00 1280 | streaming | walreceiver | 10.122.12.192 | 2025-09-17 09:58:46.441327+00 (2 rows)
状态为 streaming 的复制槽不允许删除,删除时会报错:
ERROR: replication slot "jp" is active for PID 1279
需要先停止其占用:SELECT pg_terminate_backend(pid);
然后移除复制槽:
SELECT pg_drop_replication_slot('slot_name');
复原数据库配置(可选),当移除站点后仅剩一个从站时,可以选择将数据库配置还原;
## 找到下面这行配置并注释(Omnibus 模式中默认只允许创建一个复制槽) postgresql['max_replication_slots'] = 2
检查状态
在所有节点执行命令重新配置,检查是否报错:
sudo gitlab-ctl reconfigure
然后访问 WebUI 查看 geo 状态是否一致即可,无额外报错即已经彻底移除从站点。
附录
参考链接
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2025-10-09 20:57 PM