2017-04-07 218 views
1

我有2 PG服务器,一个主,另一个奴隶 - 普通流副本,伟大的工程。 我需要在它们之前放置pgpool,这会使两台机器上的负载平衡器 - 只是选择查询,因为流量很高。PgPool2负载平衡

但是,当我配置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 

....剩下的就是默认....

+3

嗨,欢迎来到SO,请尽量避免使用谢谢,签署您的帖子并评论您对问题的经验不足。人们阅读并尝试以这种方式呈现帮助会更容易。 –

回答

0

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

对于查询进行负载平衡,以下所有要求必须满足: 的PostgreSQL版本7.4或更高版本, 处于复制模式或主从模式 ...

还有更多,但在您的配置中,复制模式和主从属都被禁用。从你的描述来看,最简单的可能是启用主从模式。

也可能应该通过设置“connection_cache = on”来启用连接缓存(pgpool的一个要点)。