feat: 纳管共享 etcd 与 k3s 外 PostgreSQL 高可用及备份
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
---
|
||||
# 单独 HAProxy 实例复用 VyOS 的二进制与 HA 承载,避免修改发行版生成的全局模板。
|
||||
- name: 发布已经有唯一可写主库的生产入口
|
||||
hosts: pg_proxy
|
||||
become: true
|
||||
gather_facts: false
|
||||
vars:
|
||||
pg_proxy_bind: 192.168.10.2:5432
|
||||
pg_proxy_members:
|
||||
- {name: laptop, address: '192.168.10.127', port: 5432, api_port: 8008}
|
||||
- {name: pve1, address: '10.60.0.20', port: 5432, api_port: 8008}
|
||||
tasks:
|
||||
- name: 前置核对角色端点,不为未就绪实例发布入口
|
||||
ansible.builtin.uri:
|
||||
url: "http://{{ item.address }}:{{ item.api_port }}/primary"
|
||||
status_code: [200, 503]
|
||||
loop: "{{ pg_proxy_members }}"
|
||||
register: pg_proxy_primary
|
||||
check_mode: false
|
||||
- name: 必须有且只有一个 primary
|
||||
ansible.builtin.assert:
|
||||
that: pg_proxy_primary.results | selectattr('status', 'equalto', 200) | list | length == 1
|
||||
- name: 创建跨 VyOS 镜像升级保留的配置目录
|
||||
ansible.builtin.file:
|
||||
path: /config/homelab-pg
|
||||
state: directory
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0755'
|
||||
- name: 写入并校验角色感知 HAProxy 配置
|
||||
ansible.builtin.template:
|
||||
src: roles/pg_instance/templates/haproxy.cfg.j2
|
||||
dest: /config/homelab-pg/haproxy.cfg
|
||||
mode: '0644'
|
||||
validate: /usr/sbin/haproxy -c -f %s
|
||||
notify: 重载数据库代理
|
||||
- name: 保存独立服务定义
|
||||
ansible.builtin.copy:
|
||||
dest: /config/homelab-pg/homelab-pg-proxy.service
|
||||
mode: '0644'
|
||||
content: |
|
||||
[Unit]
|
||||
Description=Shared PostgreSQL role-aware TCP entry point
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
[Service]
|
||||
Type=simple
|
||||
DynamicUser=true
|
||||
ExecStart=/usr/sbin/haproxy -W -db -f /config/homelab-pg/haproxy.cfg
|
||||
ExecReload=/bin/kill -USR2 $MAINPID
|
||||
Restart=on-failure
|
||||
RestartSec=3
|
||||
MemoryMax=64M
|
||||
LimitNOFILE=2048
|
||||
NoNewPrivileges=true
|
||||
PrivateTmp=true
|
||||
ProtectSystem=strict
|
||||
ProtectHome=true
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
notify: 重载数据库代理
|
||||
- name: 安装服务链接
|
||||
ansible.builtin.file:
|
||||
src: /config/homelab-pg/homelab-pg-proxy.service
|
||||
dest: /etc/systemd/system/homelab-pg-proxy.service
|
||||
state: link
|
||||
- name: 通过既有 postconfig hook 在系统升级后恢复服务链接
|
||||
ansible.builtin.blockinfile:
|
||||
path: /config/scripts/vyos-postconfig-bootup.script
|
||||
marker: '# {mark} ANSIBLE HOMELAB PG PROXY'
|
||||
insertbefore: '^exit 0'
|
||||
block: |
|
||||
ln -sfn /config/homelab-pg/homelab-pg-proxy.service /etc/systemd/system/homelab-pg-proxy.service
|
||||
systemctl daemon-reload
|
||||
systemctl enable --now homelab-pg-proxy.service
|
||||
- name: 启动独立入口
|
||||
ansible.builtin.systemd_service:
|
||||
name: homelab-pg-proxy
|
||||
daemon_reload: true
|
||||
enabled: true
|
||||
state: started
|
||||
handlers:
|
||||
- name: 重载数据库代理
|
||||
ansible.builtin.systemd_service:
|
||||
name: homelab-pg-proxy
|
||||
daemon_reload: true
|
||||
state: reloaded
|
||||
Reference in New Issue
Block a user