Skip to content
Snippets Groups Projects
Commit c4b50917 authored by Baptiste DE RENZO's avatar Baptiste DE RENZO
Browse files

pgsql: fix failback operation refs #33389

repmgr v4.2 (on debian 10) has a bug, it doesn't detect role change after back to normal state: https://github.com/2ndQuadrant/repmgr/issues/524#issuecomment-459230305. The impact is after 1st successful switchover and failback repmgr will do no more switchover until restarted. This commit adds a restart operation to repmgrd (automatically executed on standby-to-primary tag).
parent 0a2e6450
No related branches found
No related tags found
No related merge requests found
......@@ -70,7 +70,7 @@
- name: REPMGRD RESTART
hosts: postgres
tags: [ 'never', 'restart-repmgrd' ]
tags: [ 'never', 'restart-repmgrd', 'standby-to-primary' ]
tasks:
- name: kill repmgrd
command: "pkill repmgrd"
......
#!/usr/bin/env python3
"""
event_notification_command='/usr/local/bin/repmgr_event.py %n %e %s "%t" "%d"'
"""
import argparse
import json
import logging
import logging.handlers
import sys
PARSER = argparse.ArgumentParser()
PARSER.add_argument("node_id")
PARSER.add_argument("event_type")
PARSER.add_argument("success")
PARSER.add_argument("timestamp")
PARSER.add_argument("details")
ARGS = PARSER.parse_args()
MONIT_EVENTS = (
"standby_promote",
"repmgrd_failover_promote",
"repmgrd_failover_follow",
)
LOG_DATA = (ARGS.timestamp, ARGS.node_id, ARGS.event_type, ARGS.success, ARGS.details)
def main():
"""Log repmgrd events."""
# do not process unwanted events
if ARGS.event_type not in MONIT_EVENTS:
sys.exit(0)
# load config if exists
try:
with open("/etc/postgresql/{{ repmgr_pg_version }}/{{ repmgr_pg_cluster }}/repmgr-event.json") as data_file:
data = json.load(data_file)
except EnvironmentError:
data = {}
# get config, fallback on defaults
log_file = data.get("log", "/var/log/repmgr-event.log")
mail = data.get("mail", None)
if mail:
host = mail.get("host", "localhost")
sender = mail.get("sender", "root@localhost")
recipients = mail.get("recipients", ["root@localhost"])
credentials = mail.get("credentials", None)
secure = mail.get("secure", None)
# from args
subject = "repmgr event: {}".format(ARGS.event_type)
# logging conf
logger = logging.getLogger("repmgr_event")
logger.setLevel(logging.INFO)
# log to stream
stream_handler = logging.StreamHandler(sys.stdout)
logger.addHandler(stream_handler)
# log to file
file_handler = logging.handlers.RotatingFileHandler(
log_file, maxBytes=102400, backupCount=7
)
logger.addHandler(file_handler)
# log to mail
if mail:
mail_handler = logging.handlers.SMTPHandler(
host, sender, recipients, subject, credentials, secure
)
logger.addHandler(mail_handler)
# write log
logger.info("%s - %s:%s:%s - %s", *LOG_DATA)
sys.exit(0)
if __name__ == "__main__":
main()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment