2017-04-07 2 views
1

J'ai 2 serveurs PG, un maître, l'autre un esclave - réplique de flux normal qui fonctionne très bien. J'ai besoin de mettre pgpool avant eux, cela ferait l'équilibreur de charge sur les deux machines - il suffit de sélectionner des requêtes, en raison du trafic élevé.PgPool2 charge ballance

Mais comme je configure pgpool, je ne peux pas le forcer à utiliser plus d'un nœud, toujours le premier .. il ne connaît pas le second. Lorsque j'ai fait la tentative avec iptables et bloqué le premier serveur, pgpool n'a pas récupéré de cela. J'ai essayé de jouer avec le poids, avec allow_to_failover, de changer le backend invité0 en backend1, allumer/éteindre le mode maître/esclave, rien. Quoi qu'il en soit, il semble que ce soit uniquement connecté au premier serveur et rien d'autre.

Ajout de config pgPool.

# ---------------------------- 
# pgPool-II configuration file 
# ---------------------------- 
# 
# This file consists of lines of the form: 
# 
# name = value 
# 
# Whitespace may be used. Comments are introduced with "#" anywhere on a line. 
# The complete list of parameter names and allowed values can be found in the 
# pgPool-II documentation. 
# 
# This file is read on server startup and when the server receives a SIGHUP 
# signal. If you edit the file on a running system, you have to SIGHUP the 
# server for the changes to take effect, or use "pgpool reload". Some 
# parameters, which are marked below, require a server shutdown and restart to 
# take effect. 
# 


#------------------------------------------------------------------------------ 
# CONNECTIONS 
#------------------------------------------------------------------------------ 

# - pgpool Connection Settings - 

listen_addresses = '*' 
            # Host name or IP address to listen on: 
            # '*' for all, '' for no TCP/IP connections 
            # (change requires restart) 
port = 5433 
            # Port number 
            # (change requires restart) 
socket_dir = '/var/run/postgresql' 
            # Unix domain socket path 
            # The Debian package defaults to 
            # /var/run/postgresql 
            # (change requires restart) 
listen_backlog_multiplier = 2 
            # Set the backlog parameter of listen(2) to 
            # num_init_children * listen_backlog_multiplier. 
            # (change requires restart) 
serialize_accept = off 
            # whether to serialize accept() call to avoid thundering herd problem 
            # (change requires restart) 

# - pgpool Communication Manager Connection Settings - 

pcp_listen_addresses = '*' 
            # Host name or IP address for pcp process to listen on: 
            # '*' for all, '' for no TCP/IP connections 
            # (change requires restart) 
pcp_port = 9898 
            # Port number for pcp 
            # (change requires restart) 
pcp_socket_dir = '/var/run/postgresql' 
            # Unix domain socket path for pcp 
            # The Debian package defaults to 
            # /var/run/postgresql 
            # (change requires restart) 

# - Backend Connection Settings - 

backend_hostname0 = 'madmax' 
            # Host name or IP address to connect to for backend 0 
backend_port0 = 5432 
            # Port number for backend 0 
backend_weight0 = 1 
            # Weight for backend 0 (only in load balancing mode) 
backend_data_directory0 = '/srv/postgresql/9.5/main' 
            # Data directory for backend 0 
backend_flag0 = 'DISALLOW_TO_FAILOVER' 
            # Controls various backend behavior 
            # ALLOW_TO_FAILOVER or DISALLOW_TO_FAILOVER 

backend_hostname1 = 'vengerberg' 

backend_port1 = 5432 

backend_weight1 = 1 

backend_data_directory1 = '/srv/postgresql/9.5/main' 

backend_flag1 = 'DISALLOW_TO_FAILOVER' 


# - Authentication - 

enable_pool_hba = on 
            # Use pool_hba.conf for client authentication 
pool_passwd = 'pool_passwd' 
            # File name of pool_passwd for md5 authentication. 
            # "" disables pool_passwd. 
            # (change requires restart) 
authentication_timeout = 60 
            # Delay in seconds to complete client authentication 
            # 0 means no timeout. 

# - SSL Connections - 

ssl = off 
            # Enable SSL support 
            # (change requires restart) 
#ssl_key = './server.key' 
            # Path to the SSL private key file 
            # (change requires restart) 
#ssl_cert = './server.cert' 
            # Path to the SSL public certificate file 
            # (change requires restart) 
#ssl_ca_cert = '' 
            # Path to a single PEM format file 
            # containing CA root certificate(s) 
            # (change requires restart) 
#ssl_ca_cert_dir = '' 
            # Directory containing CA root certificate(s) 
            # (change requires restart) 


#------------------------------------------------------------------------------ 
# POOLS 
#------------------------------------------------------------------------------ 

# - Concurrent session and pool size - 

num_init_children = 32 
            # Number of concurrent sessions allowed 
            # (change requires restart) 
max_pool = 4 
            # Number of connection pool caches per connection 
            # (change requires restart) 

# - Life time - 

child_life_time = 300 
            # Pool exits after being idle for this many seconds 
child_max_connections = 0 
            # Pool exits after receiving that many connections 
            # 0 means no exit 
connection_life_time = 0 
            # Connection to backend closes after being idle for this many seconds 
            # 0 means no close 
client_idle_limit = 0 
            # Client is disconnected after being idle for that many seconds 
            # (even inside an explicit transactions!) 
            # 0 means no disconnection 


#------------------------------------------------------------------------------ 
# LOGS 
#------------------------------------------------------------------------------ 

# - Where to log - 

log_destination = 'stderr' 
            # Where to log 
            # Valid values are combinations of stderr, 
            # and syslog. Default to stderr. 

# - What to log - 

log_line_prefix = '%t: pid %p: ' # printf-style string to output at beginning of each log line. 

log_connections = off 
            # Log connections 
log_hostname = off 
            # Hostname will be shown in ps status 
            # and in logs if connections are logged 
log_statement = off 
            # Log all statements 
log_per_node_statement = on 
            # Log all statements 
            # with node and backend informations 
log_standby_delay = 'none' 
            # Log standby delay 
            # Valid values are combinations of always, 
            # if_over_threshold, none 

# - Syslog specific - 

syslog_facility = 'LOCAL0' 
            # Syslog local facility. Default to LOCAL0 
syslog_ident = 'pgpool' 
            # Syslog program identification string 
            # Default to 'pgpool' 

# - Debug - 

debug_level = 0 
            # Debug message verbosity level 
            # 0 means no message, 1 or more mean verbose 

#log_error_verbosity = default   # terse, default, or verbose messages 

#client_min_messages = notice   # values in order of decreasing detail: 
             # debug5 
             # debug4 
             # debug3 
             # debug2 
             # debug1 
             # log 
             # notice 
             # warning 
             # error 

#log_min_messages = warning    # values in order of decreasing detail: 
             # debug5 
             # debug4 
             # debug3 
             # debug2 
             # debug1 
             # info 
             # notice 
             # warning 
             # error 
             # log 
             # fatal 
             # panic 

#------------------------------------------------------------------------------ 
# FILE LOCATIONS 
#------------------------------------------------------------------------------ 

pid_file_name = '/var/run/postgresql/pgpool.pid' 
            # PID file name 
            # (change requires restart) 
logdir = '/var/log/postgresql' 
            # Directory of pgPool status file 
            # (change requires restart) 


#------------------------------------------------------------------------------ 
# CONNECTION POOLING 
#------------------------------------------------------------------------------ 

connection_cache = off 
            # Activate connection pools 
            # (change requires restart) 

            # Semicolon separated list of queries 
            # to be issued at the end of a session 
            # The default is for 8.3 and later 
reset_query_list = 'ABORT; DISCARD ALL' 
            # The following one is for 8.2 and before 
#reset_query_list = 'ABORT; RESET ALL; SET SESSION AUTHORIZATION DEFAULT' 


#------------------------------------------------------------------------------ 
# REPLICATION MODE 
#------------------------------------------------------------------------------ 

replication_mode = off 
            # Activate replication mode 
            # (change requires restart) 
replicate_select = off 
            # Replicate SELECT statements 
            # when in replication mode 
            # replicate_select is higher priority than 
            # load_balance_mode. 

insert_lock = on 
            # Automatically locks a dummy row or a table 
            # with INSERT statements to keep SERIAL data 
            # consistency 
            # Without SERIAL, no lock will be issued 
lobj_lock_table = '' 
            # When rewriting lo_creat command in 
            # replication mode, specify table name to 
            # lock 

# - Degenerate handling - 

replication_stop_on_mismatch = off 
            # On disagreement with the packet kind 
            # sent from backend, degenerate the node 
            # which is most likely "minority" 
            # If off, just force to exit this session 

failover_if_affected_tuples_mismatch = off 
            # On disagreement with the number of affected 
            # tuples in UPDATE/DELETE queries, then 
            # degenerate the node which is most likely 
            # "minority". 
            # If off, just abort the transaction to 
            # keep the consistency 


#------------------------------------------------------------------------------ 
# LOAD BALANCING MODE 
#------------------------------------------------------------------------------ 

load_balance_mode = on 
            # Activate load balancing mode 
            # (change requires restart) 
ignore_leading_white_space = on 
            # Ignore leading white spaces of each query 
white_function_list = '' 
            # Comma separated list of function names 
            # that don't write to database 
            # Regexp are accepted 
black_function_list = 'nextval,setval,nextval,setval' 
            # Comma separated list of function names 
            # that write to database 
            # Regexp are accepted 

database_redirect_preference_list = '' 
            # comma separated list of pairs of database and node id. 
            # example: postgres:primary,mydb[0-4]:1,mydb[5-9]:2' 
            # valid for streaming replicaton mode only. 

app_name_redirect_preference_list = '' 
            # comma separated list of pairs of app name and node id. 
            # example: 'psql:primary,myapp[0-4]:1,myapp[5-9]:standby' 
            # valid for streaming replicaton mode only. 
allow_sql_comments = off 
            # if on, ignore SQL comments when judging if load balance or 
            # query cache is possible. 
            # If off, SQL comments effectively prevent the judgment 
            # (pre 3.4 behavior). 

#------------------------------------------------------------------------------ 
# MASTER/SLAVE MODE 
#------------------------------------------------------------------------------ 

master_slave_mode = off 
            # Activate master/slave mode 
            # (change requires restart) 
master_slave_sub_mode = 'stream' 
            # Master/slave sub mode 
            # Valid values are combinations slony or 
            # stream. Default is slony. 
            # (change requires restart) 

# - Streaming - 

sr_check_period = 0 
            # Streaming replication check period 
            # Disabled (0) by default 
sr_check_user = 'pgpool' 
            # Streaming replication check user 
            # This is necessary even if you disable 
            # streaming replication delay check with 
            # sr_check_period = 0 
sr_check_password = '' 
            # Password for streaming replication check user 
sr_check_database = 'postgres' 
            # Database name for streaming replication check 
delay_threshold = 0 
            # Threshold before not dispatching query to standby node 
            # Unit is in bytes 
            # Disabled (0) by default 

# - Special commands - 

follow_master_command = '' 
            # Executes this command after master failover 
            # Special values: 
            # %d = node id 
            # %h = host name 
            # %p = port number 
            # %D = database cluster path 
            # %m = new master node id 
            # %H = hostname of the new master node 
            # %M = old master node id 
            # %P = old primary node id 
            # %r = new master port number 
            # %R = new master database cluster path 
            # %% = '%' character 

#------------------------------------------------------------------------------ 
# HEALTH CHECK 
#------------------------------------------------------------------------------ 

health_check_period = 0 
            # Health check period 
            # Disabled (0) by default 
health_check_timeout = 20 
            # Health check timeout 
            # 0 means no timeout 
health_check_user = 'nobody' 
            # Health check user 
health_check_password = '' 
            # Password for health check user 
health_check_database = '' 
            # Database name for health check. If '', tries 'postgres' frist, then 'template1' 

health_check_max_retries = 0 
            # Maximum number of times to retry a failed health check before giving up. 
health_check_retry_delay = 1 
            # Amount of time to wait (in seconds) between retries. 
connect_timeout = 10000 
            # Timeout value in milliseconds before giving up to connect to backend. 
            # Default is 10000 ms (10 second). Flaky network user may want to increase 
            # the value. 0 means no timeout. 
            # Note that this value is not only used for health check, 
            # but also for ordinary conection to backend. 

#------------------------------------------------------------------------------ 
# FAILOVER AND FAILBACK 
#------------------------------------------------------------------------------ 

failover_command = '' 
            # Executes this command at failover 
            # Special values: 
            # %d = node id 
            # %h = host name 
            # %p = port number 
            # %D = database cluster path 
            # %m = new master node id 
            # %H = hostname of the new master node 
            # %M = old master node id 
            # %P = old primary node id 
            # %r = new master port number 
            # %R = new master database cluster path 
            # %% = '%' character 
failback_command = '' 
            # Executes this command at failback. 
            # Special values: 
            # %d = node id 
            # %h = host name 
            # %p = port number 
            # %D = database cluster path 
            # %m = new master node id 
            # %H = hostname of the new master node 
            # %M = old master node id 
            # %P = old primary node id 
            # %r = new master port number 
            # %R = new master database cluster path 
            # %% = '%' character 

fail_over_on_backend_error = on 
            # Initiates failover when reading/writing to the 
            # backend communication socket fails 
            # If set to off, pgpool will report an 
            # error and disconnect the session. 

search_primary_node_timeout = 300 
            # Timeout in seconds to search for the 
            # primary node when a failover occurs. 
            # 0 means no timeout, keep searching 
            # for a primary node forever. 

#------------------------------------------------------------------------------ 
# ONLINE RECOVERY 
#------------------------------------------------------------------------------ 

recovery_user = 'nobody' 
            # Online recovery user 
recovery_password = '' 
            # Online recovery password 
recovery_1st_stage_command = '' 
            # Executes a command in first stage 
recovery_2nd_stage_command = '' 
            # Executes a command in second stage 
recovery_timeout = 90 
            # Timeout in seconds to wait for the 
            # recovering node's postmaster to start up 
            # 0 means no wait 
client_idle_limit_in_recovery = 0 
            # Client is disconnected after being idle 
            # for that many seconds in the second stage 
            # of online recovery 
            # 0 means no disconnection 
            # -1 means immediate disconnection 

.... Le repos est par défaut ....

+3

Salut, bienvenue à SO, s'il vous plaît essayer d'éviter d'utiliser merci, en signant vos messages et en commentant sur votre manque d'expérience dans une question. Il sera plus facile pour les gens de lire et d'essayer de rendre l'aide de cette façon. –

Répondre

0

De http://www.pgpool.net/docs/pgpool-II-3.5.4/doc/pgpool-en.html:

Pour une requête à charge équilibrée, toutes les conditions suivantes doivent être remplies: PostgreSQL version 7.4 ou version ultérieure, en mode réplication ou en mode maître-esclave ...

Il y a plus, mais dans votre configuration, le mode de réplication et l'esclave principal sont désactivés. D'après votre description, le plus simple est probablement d'activer le mode maître-esclave.

Vous devriez également activer le cache de connexion (l'un des principaux points de pgpool) en définissant "connection_cache = on".