Skip to content

vibhorkum/efm_extension

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A EPAS/PostgreSQL (version >=10) extension to enable execution of EFM commands through the normal database connection

Overview

The extension provides following functions and views:

-- functions --
 efm_extension | efm_allow_node        | integer          | text                | normal
 efm_extension | efm_cluster_status    | SETOF text       | text                | normal
 efm_extension | efm_disallow_node     | integer          | text                | normal
 efm_extension | efm_failover          | integer          |                     | normal
 efm_extension | efm_list_properties   | SETOF text       |                     | normal
 efm_extension | efm_resume_monitoring | integer          |                     | normal
 efm_extension | efm_set_priority      | integer          | text, text          | normal
 efm_extension | efm_switchover        | integer          |                     | normal

--Views--
 efm_extension | efm_local_properties | view | enterprisedb
 efm_extension | efm_nodes_details    | view | enterprisedb

Pre-requisite

To use this module, user has to have following:

  1. EFM is installed and configures at database node. For more information on installing and configuring EFM use the EDB document
  2. Following sudo rule is defined for enterprisedb/postgres system user
cat /etc/sudoers.d/enterprisedb 

# Copyright EnterpriseDB Corporation, 2019-2020. All Rights Reserved.
#
# Do not edit this file. Changes to the file may be overwritten
# during an upgrade.
#
# This file assumes you are running your efm cluster as user 'efm'.  If not,
# then you will need to copy this file.

# Allow user 'enterprisedb' to sudo /usr/edb/efm-3.10/bin/efm  as efm.

enterprisedb    ALL=(efm)           NOPASSWD:/usr/edb/efm-3.10/bin/efm

  1. User has to set the following GUC in EDB Postgres postgresql.conf or they can also set at database/user level too:
edb=# select name, setting from pg_settings where name ~* '^efm.';
          name           |          setting
-------------------------+---------------------------
 efm.cluster_name        | efm
 efm.command_path        | /usr/edb/efm-3.10/bin/efm
 efm.edb_sudo            | sudo -u efm
 efm.properties_location | /etc/edb/efm-3.10
  1. For setting above parameters user can use following ALTER SYSTEM command
    ALTER SYSTEM SET efm.cluster_name TO 'efm';
    ALTER SYSTEM SET efm.command_path TO '/usr/edb/efm-3.10/bin/efm';
    ALTER SYSTEM SET efm.edb_sudo TO 'sudo -u efm';
    ALTER SYSTEM SET efm.properties_location TO '/usr/edb/efm-3.10';
    SELECT pg_reload_conf();

Installation

# pg_config needs to be on the path!
# if non-default pg_config location is needed one can specify it similar to USE_PGXS i.e. PG_CONFIG=/path/...
git clone https://github.com/vibhorkum/efm_extension
cd efm_extension
make
sudo make install

Usage

CREATE EXTENSION efm_extension;    -- needs to be done by a superuser

edb=# select efm_extension.efm_cluster_status('text');
                           efm_cluster_status                           
------------------------------------------------------------------------
 Cluster Status: efm
 VIP: 
 
         Agent Type  Address              Agent  DB       Info
         --------------------------------------------------------------
         Idle        172.17.0.2           UP     UNKNOWN   
 
 Allowed node host list:
         172.17.0.2
 
 Membership coordinator: 172.17.0.2
 
 Standby priority host list:
         (List is empty.)
 
 Promote Status:
 
 
 Idle Node Status (idle nodes ignored in XLog location comparisons):
 
         Address              XLog Loc         Info
         --------------------------------------------------------------
         172.17.0.2           0/35BFC10        DB is not in recovery.
(23 rows)

edb=# select efm_extension.efm_cluster_status('json');
                                                                                                                                                       efm_cluster_status                                   
                                                                                                                     
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------
 {"nodes":{"172.17.0.2":{"type":"Idle","agent":"UP","db":"UNKNOWN","info":" ","xlog":"0\/35BFC10","xloginfo":"DB is not in recovery."}},"allowednodes":["172.17.0.2"],"membershipcoordinator":"172.17.0.2","
failoverpriority":[],"VIP":"","minimumstandbys":0,"messages":["Did not find XLog location for any non-idle nodes."]}
(1 row)

edb=# select efm_extension.efm_allow_node('172.17.0.2');
 efm_allow_node 
----------------
              0
(1 row)

edb=# select efm_extension.efm_disallow_node('172.17.0.2');
 efm_disallow_node 
-------------------
                 0
(1 row)


edb=# select * from efm_extension.efm_nodes_details ;
  node_ip   | property |          value           
------------+----------+--------------------------
 172.17.0.2 | db       | "UNKNOWN"
 172.17.0.2 | info     | " "
 172.17.0.2 | type     | "Idle"
 172.17.0.2 | xlog     | "0/35BC388"
 172.17.0.2 | agent    | "UP"
 172.17.0.2 | xloginfo | "DB is not in recovery."
(6 rows)

edb=# select * from efm_extension.efm_local_properties ;
           name            |              value               
---------------------------+----------------------------------
 efm.license               | 
 db.user                   | efm
 db.password.encrypted     | 074b627bf50168881d246c5dd32fd8d0
 db.port                   | 5444
 db.database               | edb
 db.service.owner          | enterprisedb
 db.service.name           | edb-as-10
 db.bin                    | /usr/edb/as10/bin
 db.recovery.conf.dir      | /pgdata
 jdbc.ssl                  | false
 jdbc.ssl.mode             | verify-ca
 user.email                | unknow@gmail.com
 script.notification       | 
 bind.address              | 172.17.0.2:5430
 admin.port                | 5431
 is.witness                | false
 local.period              | 10
 local.timeout             | 60
 local.timeout.final       | 10
 remote.timeout            | 10
 node.timeout              | 50
 pingServerIp              | 8.8.8.8
 pingServerCommand         | /bin/ping -q -c3 -w5
 auto.allow.hosts          | true
 db.reuse.connection.count | 0
 auto.failover             | true
 auto.reconfigure          | true
 promotable                | true
 minimum.standbys          | 0
 recovery.check.period     | 2
 auto.resume.period        | 0
 virtualIp                 | 
 virtualIp.interface       | 
 virtualIp.netmask         | 
 script.fence              | 
 script.post.promotion     | 
 script.resumed            | 
 script.db.failure         | 
 script.master.isolated    | 
 sudo.command              | sudo
 sudo.user.command         | sudo -u %u
 jgroups.loglevel          | INFO
 efm.loglevel              | INFO
 jvm.options               | -Xmx32m
(44 rows)


About

EFM extension for EPAS

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages