如何彻底移除 GitLab Geo 子节点
后知后觉 暂无评论

某 GitLab 实例中存在多个 geo 从站点,因业务线变动其中一个节点将停止使用,因此需要将其彻底移除。

删除某个 geo 站点

  1. 登录主站 WebUI,导航至 Admin area → Geo → Sites,将需要移除的从站点删除(标签右侧垃圾桶按钮);

    Geo-sites

  2. 登录需要移除的从站服务器,关闭服务并彻底卸载;

    ## 卸载并移除守护进程
    sudo gitlab-ctl stop
    sudo gitlab-ctl uninstall
    
    ## 卸载软件包
    ### Debian/Ubuntu
    sudo dpkg --remove gitlab-*
    ### RHEL/CentOS/AlmaLinux
    sudo rpm --erase gitlab-*
  3. 如果服务器另做他用,还需要清理 GitLab 残留数据;

    sudo rm -rf /var/opt/gitlab/
    sudo rm -rf /etc/gitlab/
    sudo rm -rf /var/log/gitlab/
  4. 移除从站所属复制槽;

    ## 登录主站或主集群的数据库节点
    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');
  5. 复原数据库配置(可选),当移除站点后仅剩一个从站时,可以选择将数据库配置还原;

    ## 找到下面这行配置并注释(Omnibus 模式中默认只允许创建一个复制槽)
    postgresql['max_replication_slots'] = 2

检查状态

在所有节点执行命令重新配置,检查是否报错:

sudo gitlab-ctl reconfigure

然后访问 WebUI 查看 geo 状态是否一致即可,无额外报错即已经彻底移除从站点。


附录

参考链接

如果遇到问题或者对文章内容存疑,请在下方留言,博主看到后将及时回复,谢谢!
回复 / 查看「历史评论
回答13+36=