我有两个PG服务器,一个主服务器,另一个从服务器-正常的流副本,工作得很好。
我需要把pgpool放在它们前面,这将使两台机器上的负载均衡器都可用——只需选择查询,因为流量很大。
但当我配置pgpool时,我不能强制它使用多个节点,总是第一个。。它不知道第二个。
当我尝试使用iptables并阻止第一台服务器时,pgpool没有从中恢复。
我试着使用权重,使用allow_to_failover,将guest backend0更改为backend1,打开/关闭主/从模式,什么都不做。
不管怎样,看起来它只连接到一个(第一个)服务器,而没有其他服务器。
正在附加配置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

.... rest是默认的。。。。

最佳答案

http://www.pgpool.net/docs/pgpool-II-3.5.4/doc/pgpool-en.html
要使查询实现负载平衡,必须满足以下所有要求:
PostgreSQL 7.4或更高版本,
在复制模式或主从模式下。。。
还有更多,但是在您的配置中,复制模式和主从机都被禁用。根据您的描述,最简单的可能是启用主从模式。
可能还应该通过设置“connection_cache=on”来启用连接缓存(pgpool的要点之一)。

关于postgresql - PgPool2负载平衡,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43276306/

10-09 00:56