Pgpool-watchdog
Sommaire
Introduction
Watchdog est un service directement implémenté dans pgpool afin de permettre une haute disponibilité de Pgpool et donc des serveurs postgresql.
Il se base sur une IP virtuelle et le protocole ping et arp pour tester et réaliser le basculement de cette IP partagé entre les différentes instances Pgpool renseignée.
Configuration
Pour cette exemple :
- Premier serveur pgpool : 192.168.100.6
- Deuxième serveur pgpool : 192.168.100.7
- IP virtuelle partagée : 192.168.100.8
Configuration sur le premier serveur Pgpool :
#------------------------------------------------------------------------------
# WATCHDOG
#------------------------------------------------------------------------------
use_watchdog = on
# Activates watchdog
trusted_servers = ''
# trusted server list which are used
# to confirm network connection
# (hostA,hostB,hostC,...)
delegate_IP = '192.168.100.8'
# delegate IP address
wd_hostname = ''
# Host name or IP address of this watchdog
wd_port = 9000
# port number for watchdog service
wd_interval = 1
# lifecheck interval (sec) > 0
ping_path = '/bin'
# ping command path
ifconfig_path = '/sbin'
# ifconfig command path
if_up_cmd = 'ifconfig eth0:0 inet $_IP_$ netmask 255.255.255.0'
# startup delegate IP command
if_down_cmd = 'ifconfig eth0:0 down'
# shutdown delegate IP command
arping_path = '/usr/sbin' # arping command path
arping_cmd = 'arping -U $_IP_$ -w 1'
# arping command
wd_life_point = 3
wd_lifecheck_query = 'SELECT 1'
# lifecheck query to pgpool from watchdog
# Other pgpool Connection Settings
other_pgpool_hostname0 = '192.168.100.7'
# Host name or IP address to connect to for other pgpool 0
other_pgpool_port0 = 9999
# Port number for othet pgpool 0
other_wd_port0 = 9000
# Port number for othet watchdog 0
Configuration sur le deuxième serveur pgpool
#------------------------------------------------------------------------------
# WATCHDOG
#------------------------------------------------------------------------------
use_watchdog = on
# Activates watchdog
trusted_servers = ''
# trusted server list which are used
# to confirm network connection
# (hostA,hostB,hostC,...)
delegate_IP = '192.168.100.8'
# delegate IP address
wd_hostname = ''
# Host name or IP address of this watchdog
wd_port = 9000
# port number for watchdog service
wd_interval = 1
# lifecheck interval (sec) > 0
ping_path = '/bin'
# ping command path
ifconfig_path = '/sbin'
# ifconfig command path
if_up_cmd = 'ifconfig eth0:0 inet $_IP_$ netmask 255.255.255.0'
# startup delegate IP command
if_down_cmd = 'ifconfig eth0:0 down'
# shutdown delegate IP command
arping_path = '/usr/sbin' # arping command path
arping_cmd = 'arping -U $_IP_$ -w 1'
# arping command
wd_life_point = 3
wd_lifecheck_query = 'SELECT 1'
# lifecheck query to pgpool from watchdog
# Other pgpool Connection Settings
other_pgpool_hostname0 = '192.168.100.6'
# Host name or IP address to connect to for other pgpool 0
other_pgpool_port0 = 9999
# Port number for othet pgpool 0
other_wd_port0 = 9000
# Port number for othet watchdog 0
Pensez a vérifier si la commande arping est bien installé sur les serveurs hébergeant les instances pgpool
Tests
Connection à l'IP virtuelle
On essaye de pinger l'IP virtuelle
[user@local]$ ping 192.168.100.8 PING 192.168.100.8 (192.168.100.8) 56(84) bytes of data. 64 bytes from 192.168.100.8: icmp_seq=1 ttl=64 time=0.328 ms 64 bytes from 192.168.100.8: icmp_seq=2 ttl=64 time=0.264 ms 64 bytes from 192.168.100.8: icmp_seq=3 ttl=64 time=0.412 ms
On vérifie que le serveur Actif a bien démarré avec l'IP virtuelle
[root@pgPool-I]# ifconfig eth0 ... eth0:0 inet addr:192.168.100.8 ... lo ...
On vérifie que le serveur en Standby n'a pas démarré avec l'IP virtuelle.
[root@pgPoll-II]# ifconfig eth0 ... lo ...
On essaie de se connecter à Postgresql "psql -h IP_Virtuelle -p port".
[user@local]$ psql -h 192.168.100.8 -p 9999 -l
Basculement de l'IP Virtuelle
On test que le serveur en Standby prend bien le relais lorsque le serveur Actif rencontre un soucis.
On arrête pgpool sur le serveur Actif.
[root@pgPool-I]# {installed_dir}/bin/pgpool stop
Alors, le serveur en Standbye recupère l'IP virtuelle:
LOG: wd_escalation: eslcalated to master pgpool ERROR: wd_create_send_socket: connect() is failed(Connection refused) LOG: wd_escalation: escaleted to delegate_IP holder
On vérifie en pingant l'ip Virtuelle.
[user@local]$ ping 192.168.100.8 PING 192.168.100.8 (192.168.100.8) 56(84) bytes of data. 64 bytes from 192.168.100.8: icmp_seq=1 ttl=64 time=0.328 ms 64 bytes from 192.168.100.8: icmp_seq=2 ttl=64 time=0.264 ms 64 bytes from 192.168.100.8: icmp_seq=3 ttl=64 time=0.412 ms
On vérifie que le serveur Actif ne possède plus l'IP virtuelle.
[root@pgPool-I]# ifconfig eth0 ... lo ...
On vérifie que le serveur en Standby a bien récupéré l'IP virtuelle
[root@pgPool-II]# ifconfig eth0 ... eth0:0 inet addr:192.168.100.8 ... lo ...
On essaie de se connecter à PostgreSQL "psql -h 192.168.100.8 -p port".
[user@local]$ psql -h 192.168.100.8 -p 9999 -l
Après que le serveur Actif soit tombé, le serveur secondaire reprend l'IP virtuelle. Cependant, dés que le serveur actif est de nouveau opérationnel, il est nécessaire de redémarrer pgpool sur les serveurs afin d'éviter tous soucis de basculement d'adresse IP
Procédure
Nouvelle instance
Pour activer le watchdog sur la nouvelle instance pgpool que vous avez créer précedemment, il suffit d'éditer les variables de la section watchdog :
Vérifier les IP et Port via le tableau
Le premier pgpool ( debpool : 192.168.168.13 )
#------------------------------------------------------------------------------
# WATCHDOG
#------------------------------------------------------------------------------
use_watchdog = on
# Activates watchdog
trusted_servers = ''
# trusted server list which are used
# to confirm network connection
# (hostA,hostB,hostC,...)
delegate_IP = '192.168.168.15'
# delegate IP address
wd_hostname = ''
# Host name or IP address of this watchdog
wd_port = 9033
# port number for watchdog service
# ifconfig command path
if_up_cmd = 'ifconfig eth1:X inet $_IP_$ netmask 255.255.255.0'
# startup delegate IP command
if_down_cmd = 'ifconfig eth1:X down'
# shutdown delegate IP command
# Other pgpool Connection Settings
other_pgpool_hostname0 = '192.168.168.14'
# Host name or IP address to connect to for other pgpool 0
other_pgpool_port0 = 5433
# Port number for othet pgpool 0
other_wd_port0 = 9033
# Port number for othet watchdog 0
Le deuxième pgpool ( debpool2 : 192.168.168.14 )
#------------------------------------------------------------------------------
# WATCHDOG
#------------------------------------------------------------------------------
use_watchdog = on
# Activates watchdog
trusted_servers = ''
# trusted server list which are used
# to confirm network connection
# (hostA,hostB,hostC,...)
delegate_IP = '192.168.168.15'
# delegate IP address
wd_hostname = ''
# Host name or IP address of this watchdog
wd_port = 9033
# port number for watchdog service
# ifconfig command path
if_up_cmd = 'ifconfig eth0:1 inet $_IP_$ netmask 255.255.255.0'
# startup delegate IP command
if_down_cmd = 'ifconfig eth0:1 down'
# shutdown delegate IP command
# Other pgpool Connection Settings
other_pgpool_hostname0 = '192.168.168.13'
# Host name or IP address to connect to for other pgpool 0
other_pgpool_port0 = 5433
# Port number for othet pgpool 0
other_wd_port0 = 9033
# Port number for othet watchdog 0