Vonng / pigsty

Free RDS for PostgreSQL —— Pigsty
https://pigsty.io
GNU Affero General Public License v3.0
3.39k stars 259 forks source link

Allow binding L2 vip for a node cluster #296

Closed Vonng closed 1 year ago

Vonng commented 1 year ago

We can introduce 4 parameters to add the functionality to bind an extra L2 VIP on a node cluster.

  node_vip_enabled: false           # enable a l2 vip among node cluster?
  node_vip_role: master             # node vip role: master,backup
  node_vip_address: 127.0.0.1       # node vip address in `<ipv4>` format, require if node vip is enabled
  node_vip_interface: eth0          # node vip network interface to listen, eth0 by default

To do so, we may have to introduce another vip task in node role

---
- name: install keepalived
  tags: [node_vip, node_vip_install]
  package: name=keepalived state=present

- name: render node vip conf keepalived.conf
  tags: [node_vip, node_vip_config]
  template:
    src: keepalived.conf.j2
    dest: /etc/keepalived/keepalived.conf
    mode: 0644
  vars:
    node_cluster_members_query: "[@.*][0][?node_cluster=='{{ node_cluster }}']"

- name: launch keepalived service unit
  tags: [node_vip, node_vip_launch]
  systemd: name=keepalived enabled=true state=restarted

- name: launch keepalived service unit
  tags: [node_vip, node_vip_reload]
  systemd: name=keepalived enabled=true state=reloaded
...

We must also consider kicking the peer node when removing a node from Pigsty.

We may add ping probe monitoring for node_vip and pg_vip through a dedicated task.

Vonng commented 1 year ago

https://github.com/Vonng/pigsty/commit/e0af465fae997d3317358352544296fcac9c0221