すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:pgpool を使用した読み書き分離の実装

最終更新日:May 15, 2025

このトピックでは、Elastic Compute Service (ECS) インスタンスにインストールされている PostgreSQL の pgpool を使用して、プライマリ ApsaraDB RDS for PostgreSQL インスタンスと読み取り専用 ApsaraDB RDS for PostgreSQL インスタンスの読み書き分離を実装する方法について説明します。

背景情報

高可用性を確保するために pgpool を使用しない場合、pgpool はステートレスです。パフォーマンスの低下は無視できます。 pgpool は、データベースシステムの水平スケーリングもサポートしています。 pgpool と ApsaraDB RDS for PostgreSQL の高可用性アーキテクチャを使用して、読み書き分離を実装できます。

テスト環境のセットアップ

Premium Local SSD を使用して PostgreSQL 10 を実行するプライマリ RDS インスタンスを作成し、読み取り専用 RDS インスタンスをプライマリ RDS インスタンスに接続している場合は、pgpool をインストールするだけで済みます。詳細については、「インスタンスの作成」および「読み取り専用 ApsaraDB RDS for PostgreSQL インスタンスの作成」をご参照ください。 pgpool をインストールしたら、pgpool の構成に進みます。

説明

標準 SSD または拡張 SSD (ESSD) を使用するプライマリ RDS インスタンスの読み取り専用 RDS インスタンスは開発中です。

テスト環境:

  • ECS インスタンスは、16 個の CPU コア、64 GB のメモリ、および標準 SSD で使用可能な 1.8 TB のストレージ容量を提供する必要があります。

  • ECS インスタンスは 64 ビット CentOS 7.7 を実行します。

手順:

  1. sysctl.conf ファイルを変更します。

    sudo vi /etc/sysctl.conf  
    
    # digoal.zhou によって追加                
    fs.aio-max-nr = 1048576                
    fs.file-max = 76724600                
    
    # オプション。 kernel.core_pattern パラメーターを /data01/corefiles/core_%e_%u_%t_%s.%p に設定します。                         
    # /data01/corefiles ディレクトリは、テスト前に 777 権限で作成されます。シンボリックリンクを使用する場合は、ディレクトリを 777 に変更します。        
    
    kernel.sem = 4096 2147483647 2147483646 512000                    
    # セマフォを指定します。 ipcs -l または -u コマンドを実行して、セマフォカウントを取得できます。 16 プロセスの各グループには、カウント 17 のセマフォが必要です。                 
    
    kernel.shmall = 107374182                      
    # 共有メモリセグメントの合計サイズを指定します。推奨値: メモリ容量の 80%。単位: ページ。                 
    kernel.shmmax = 274877906944                   
    # 単一の共有メモリセグメントの最大サイズを指定します。推奨値: メモリ容量の 50%。単位: バイト。 PostgreSQL 9.2 以降のバージョンでは、共有メモリの使用量が大幅に減少します。                 
    kernel.shmmni = 819200                         
    # 生成できる共有メモリセグメントの総数を指定します。各 PostgreSQL クラスタ内で少なくとも 2 つの共有メモリセグメントを生成する必要があります。 
    
    net.core.netdev_max_backlog = 10000                
    net.core.rmem_default = 262144                       
    # ソケット受信バッファのデフォルト設定 (バイト単位)。                
    net.core.rmem_max = 4194304                          
    # 最大受信ソケットバッファサイズ (バイト単位)                
    net.core.wmem_default = 262144                       
    # ソケット送信バッファのデフォルト設定 (バイト単位)。                
    net.core.wmem_max = 4194304                          
    # 最大送信ソケットバッファサイズ (バイト単位)。                
    net.core.somaxconn = 4096                
    net.ipv4.tcp_max_syn_backlog = 4096                
    net.ipv4.tcp_keepalive_intvl = 20                
    net.ipv4.tcp_keepalive_probes = 3                
    net.ipv4.tcp_keepalive_time = 60                
    net.ipv4.tcp_mem = 8388608 12582912 16777216                
    net.ipv4.tcp_fin_timeout = 5                
    net.ipv4.tcp_synack_retries = 2                
    net.ipv4.tcp_syncookies = 1                    
    # SYN クッキーを有効にします。 SYN 待機キューがオーバーフローした場合、SYN クッキーを有効にして、少数の SYN 攻撃を防ぐことができます。                 
    net.ipv4.tcp_timestamps = 1                    
    # ネットワークソケットが TIME-WAIT 状態になるまでの時間を短縮します。 
    net.ipv4.tcp_tw_recycle = 0                    
    # このパラメーターを 1 に設定してリサイクル機能を有効にすると、TCP 接続を介した TIME-WAIT 状態のネットワークソケットがリサイクルされます。ただし、ネットワークアドレス変換 (NAT) を使用している場合、TCP 接続が失敗する可能性があります。データベースサーバーでは、このパラメーターを 0 に設定することをお勧めします。 
    net.ipv4.tcp_tw_reuse = 1                      
    # 再利用機能を有効にします。この機能により、TIME-WAIT 状態のネットワークソケットを新しい TCP 接続で再利用できます。 
    net.ipv4.tcp_max_tw_buckets = 262144                
    net.ipv4.tcp_rmem = 8192 87380 16777216                
    net.ipv4.tcp_wmem = 8192 65536 16777216                
    
    net.nf_conntrack_max = 1200000                
    net.netfilter.nf_conntrack_max = 1200000                
    
    vm.dirty_background_bytes = 409600000                       
    # 変更されたページのサイズが指定された制限に達すると、pdflush などのバックグラウンドスケジューリングプロセスが呼び出され、n 秒前に生成された変更されたページがディスクにフラッシュされます。 n の値は、次の式を使用して計算されます。n = dirty_expire_centisecs パラメーターの値/100。                 
    # デフォルトの制限は、メモリ容量の 10% です。メモリ容量が大きい場合は、制限をバイト単位で指定することをお勧めします。                 
    
    vm.dirty_expire_centisecs = 3000                             
    # 変更されたページを保持する最大期間を指定します。変更されたページは、このパラメーターで指定された期間が経過した後、ディスクにフラッシュされます。値 3000 は 30 秒を示します。                 
    vm.dirty_ratio = 95                                          
    # ユーザーがデータをディスクに書き込むために呼び出すプロセス (fsync や fdatasync など) は、変更されたページをディスクに積極的にフラッシュする必要があります。これは、変更されたページをフラッシュするバックグラウンドスケジューリングプロセスが遅く、変更されたページのサイズがメモリ容量の 95% を超える場合に適用されます。                 
    # このパラメーターを適切に設定して、ユーザーが呼び出したプロセスが変更されたページをディスクにフラッシュしないようにします。これにより、単一のサーバーに複数の RDS インスタンスを作成し、コントロールグループを使用してインスタンスごとの 1 秒あたりの入力/出力操作 (IOPS) を制限できます。                   
    
    vm.dirty_writeback_centisecs = 100                            
    # pdflush などのバックグラウンドスケジューリングプロセスが変更されたページをディスクにフラッシュする時間間隔を指定します。値 100 は 1 秒を示します。                 
    
    vm.swappiness = 0                
    # スワップ機能を無効にします。                 
    
    vm.mmap_min_addr = 65536                
    vm.overcommit_memory = 0                     
    # 使用可能なホストよりも多くのメモリを割り当てることができるかどうかを指定します。このパラメーターを 1 に設定すると、システムは常に使用可能なメモリが十分であると見なします。テスト環境で提供されるメモリ容量が少ない場合は、このパラメーターを 1 に設定することをお勧めします。 
    
    vm.overcommit_ratio = 90                     
    # overcommit_memory パラメーターが 2 に設定されている場合に割り当てることができるメモリ容量を指定します。                 
    vm.swappiness = 0                            
    # スワップ機能を無効にします。                 
    vm.zone_reclaim_mode = 0                     
    # 非均一メモリアクセス (NUMA) を無効にします。 vmlinux ファイルで NUMA を無効にすることもできます。             
    net.ipv4.ip_local_port_range = 40000 65535                    
    # ホストが割り当てる TCP または UDP ポート番号の範囲を指定します。                 
    fs.nr_open=20480000                
    # 単一のプロセスが開くことができるファイルハンドルの最大数を指定します。                 
    
    # 次のパラメーターに注意してください。             
    #vm.extra_free_kbytes = 4096000   # ホストのメモリ容量が少ない場合は、4096000 などの大きな値を指定しないでください。大きな値を指定すると、ホストが起動に失敗する可能性があります。 
    #vm.min_free_kbytes = 6291456    # メモリ 32 GB ごとに vm.min_free_kbytes パラメーターの値を 1 GB 増やすことをお勧めします。      
    # ホストのメモリがあまりない場合は、vm.extra_free_kbytes と vm.min_free_kbytes を構成しないことをお勧めします。                 
    # vm.nr_enormouspages = 66536                    
    # 共有バッファのサイズが 64 GB を超える場合は、巨大ページを使用することをお勧めします。 /proc/meminfo ファイルの Enormouspagesize パラメーターを設定することで、ページサイズを指定できます。                 
    #vm.lowmem_reserve_ratio = 1 1 1                
    # メモリ容量が 64 GB を超える場合は、このパラメーターを設定することをお勧めします。それ以外の場合は、デフォルト値 256 256 32 を保持することをお勧めします。     
  2. limits.conf ファイルを変更します。

    sudo vi /etc/security/limits.conf  
    
    * soft    nofile  1024000                
    * hard    nofile  1024000                
    * soft    nproc   unlimited                
    * hard    nproc   unlimited                
    * soft    core    unlimited                
    * hard    core    unlimited                
    * soft    memlock unlimited                
    * hard    memlock unlimited    
    
    # limits.conf ファイルの他のパラメーターをコメントアウトします。  
    # /etc/security/limits.d/20-nproc.conf ファイルをコメントアウトします。   
  3. 透過的巨大ページを無効にし、巨大ページを構成し、PostgreSQL を起動します。

    sudo chmod +x /etc/rc.d/rc.local  
    
    sudo vi /etc/rc.local  
    
    # 透過的巨大ページを無効にします。   
    if test -f /sys/kernel/mm/transparent_enormouspage/enabled; then                
       echo never > /sys/kernel/mm/transparent_enormouspage/enabled                
    fi    
    
    # 2 つのインスタンスの巨大ページを構成します。各インスタンスには 16 GB の共有バッファがあります。   
    #sysctl -w vm.nr_enormouspages=17000  
    
    # 2 つのインスタンスを起動します。   
    su - postgres -c "pg_ctl start -D /data01/pg12_3389/pg_data"  
    su - postgres -c "pg_ctl start -D /data01/pg12_8002/pg_data"  
  4. ファイルシステムを作成します。

    警告

    新しいディスクを使用する場合は、新しいディスクが vda パーティションではなく vdb パーティションに属していることを確認する必要があります。新しいディスクが vda パーティションに属している場合、新しいディスクからデータが削除される可能性があります。

    parted -a optimal -s /dev/vdb mklabel gpt mkpart primary 1MiB 100%FREE     
    mkfs.ext4 /dev/vdb1 -m 0 -O extent,uninit_bg -E lazy_itable_init=1 -b 4096 -T largefile -L vdb1  
    vi /etc/fstab   
    LABEL=vdb1 /data01 ext4 defaults,noatime,nodiratime,nodelalloc,barrier=0,data=writeback 0 0  
    
    mkdir /data01  
    mount -a  
  5. irqbalance を起動します。

    sudo systemctl status irqbalance     
    sudo systemctl enable irqbalance        
    sudo systemctl start irqbalance       
    sudo systemctl status irqbalance    
  6. PostgreSQL 10 と pgpool をインストールします。

    sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm        
    sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm       
    sudo yum search all postgresql  
    sudo yum search all pgpool  
    sudo yum install -y postgresql12*    
    sudo yum install -y pgpool-II-12-extensions      
  7. データベースシステムのデータディレクトリを初期化します。

    mkdir /data01/pg12_3389  
    sudo chown postgres:postgres /data01/pg12_3389  
  8. postgres ユーザーの環境変数を構成します。

    su - postgres  
    vi .bash_profile  
    
    # 次のパラメーターを追加します。    
    export PS1="$USER@`/bin/hostname -s`-> "      
    export PGPORT=3389  
    export PGDATA=/data01/pg12_$PGPORT/pg_data     
    
    export LANG=en_US.utf8      
    export PGHOME=/usr/pgsql-12      
    export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH      
    export DATE=`date +"%Y%m%d%H%M"`      
    export PATH=$PGHOME/bin:$PATH:.      
    export MANPATH=$PGHOME/share/man:$MANPATH      
    export PGHOST=$PGDATA      
    export PGUSER=postgres      
    export PGDATABASE=db1  
    alias rm='rm -i'      
    alias ll='ls -lh'      
    unalias vi      
  9. プライマリ RDS インスタンスを初期化します。

    initdb -D $PGDATA -U postgres -E UTF8 --lc-collate=C --lc-ctype=en_US.utf8  
  10. postgresql.conf ファイルを変更します。

    listen_addresses = '0.0.0.0'  
    port = 3389  
    max_connections = 1500  
    superuser_reserved_connections = 13  
    unix_socket_directories = '., /var/run/postgresql, /tmp'  
    tcp_keepalives_idle = 60  
    tcp_keepalives_interval = 10  
    tcp_keepalives_count = 10  
    shared_buffers = 16GB  
    enormous_pages = on  
    work_mem = 8MB  
    maintenance_work_mem = 1GB  
    dynamic_shared_memory_type = posix  
    vacuum_cost_delay = 0  
    bgwriter_delay = 10ms  
    bgwriter_lru_maxpages = 1000  
    bgwriter_lru_multiplier = 10.0  
    bgwriter_flush_after = 512kB  
    effective_io_concurrency = 0  
    max_worker_processes = 128  
    max_parallel_maintenance_workers = 3  
    max_parallel_workers_per_gather = 4  
    parallel_leader_participation = off  
    max_parallel_workers = 8  
    backend_flush_after = 256  
    wal_level = replica  
    synchronous_commit = off  
    full_page_writes = on  
    wal_compression = on  
    wal_buffers = 16MB  
    wal_writer_delay = 10ms  
    wal_writer_flush_after = 1MB  
    checkpoint_timeout = 15min  
    max_wal_size = 64GB  
    min_wal_size = 8GB  
    checkpoint_completion_target = 0.2  
    checkpoint_flush_after = 256kB  
    random_page_cost = 1.1  
    effective_cache_size = 48GB  
    log_destination = 'csvlog'  
    logging_collector = on  
    log_directory = 'log'  
    log_filename = 'postgresql-%a.log'  
    log_truncate_on_rotation = on  
    log_rotation_age = 1d  
    log_rotation_size = 0  
    log_min_duration_statement = 1s  
    log_checkpoints = on  
    log_connections = on  
    log_disconnections = on  
    log_line_prefix = '%m [%p] '  
    log_statement = 'ddl'  
    log_timezone = 'Asia/Shanghai'  
    autovacuum = on  
    log_autovacuum_min_duration = 0  
    autovacuum_vacuum_scale_factor = 0.1  
    autovacuum_analyze_scale_factor = 0.05  
    autovacuum_freeze_max_age = 800000000  
    autovacuum_multixact_freeze_max_age = 900000000  
    autovacuum_vacuum_cost_delay = 0  
    vacuum_freeze_table_age = 750000000  
    vacuum_multixact_freeze_table_age = 750000000  
    datestyle = 'iso, mdy'  
    timezone = 'Asia/Shanghai'  
    lc_messages = 'en_US.utf8'  
    lc_monetary = 'en_US.utf8'  
    lc_numeric = 'en_US.utf8'  
    lc_time = 'en_US.utf8'  
    default_text_search_config = 'pg_catalog.english'  
  11. pg_hba.conf ファイルを変更します。

    説明

    Pgpool-II は、PostgreSQL が存在するデータベースサーバーと同じ ECS インスタンスにインストールされます。 pg_hba.conf ファイルで 127.0.0.1 を指定する場合は、正常にログオンするために正しいパスワードを入力する必要があります。

    # "local" は Unix ドメインソケット接続専用です  
    local   all             all                                     trust  
    # IPv4 ローカル接続:  
    host    all             all             127.0.0.1/32            md5  
    # IPv6 ローカル接続:  
    host    all             all             ::1/128                 trust  
    # localhost からのレプリケーション接続を、レプリケーション権限を持つユーザーによって許可します。  
    local   replication     all                                     trust  
    host    replication     all             127.0.0.1/32            trust  
    host    replication     all             ::1/128                 trust  
    host db123 digoal 0.0.0.0/0 md5  
  12. ストリーミングレプリケーション権限を持つ承認済みユーザーを作成します。

    create role rep123 login replication encrypted password 'xxxxxxx';  
    CREATE ROLE  
  13. RDS インスタンスを管理する権限を持つユーザーを作成します。

    create role digoal login encrypted password 'xxxxxxx';  
    CREATE ROLE  
    
    create database db123 owner digoal;  
    CREATE DATABASE  
  14. pgpool と読み取り専用 RDS インスタンス間のヘルスハートビートを確認する権限を持つユーザーを作成します。 pgpool のパラメーターが適切に構成されている場合、このユーザーは各読み取り専用 RDS インスタンスの先行書き込みログ (WAL) 再生レイテンシを確認できます。

    create role nobody login encrypted password 'xxxxxxx';  

セカンダリ RDS インスタンスの作成

テスト手順を簡素化するために、次の手順を実行して、プライマリ ApsaraDB RDS インスタンスと同じ ECS インスタンスにセカンダリ RDS インスタンスを作成します。

  1. pg_basebackup を使用して、セカンダリ RDS インスタンスをオンラインで作成します。

    pg_basebackup -D /data01/pg12_8002/pg_data -F p --checkpoint=fast -P -h 127.0.0.1 -p 3389 -U rep123  
  2. セカンダリ RDS インスタンスの postgresql.conf ファイルを変更します。

    cd /data01/pg12_8002/pg_data   
    
    vi postgresql.conf  
    
    # セカンダリ ApsaraDB RDS インスタンスには、プライマリ ApsaraDB RDS インスタンスとは異なる次の構成があります。  
    port = 8002  
    primary_conninfo = 'hostaddr=127.0.0.1 port=3389 user=rep123' # プライマリ RDS インスタンスで信頼関係が構成されているため、パスワードを設定する必要はありません。   
    hot_standby = on  
    wal_receiver_status_interval = 1s  
    wal_receiver_timeout = 10s  
    recovery_target_timeline = 'latest'  
  3. セカンダリ RDS インスタンスの standby.signal ファイルを構成します。

    cd /data01/pg12_8002/pg_data   
    
    touch standby.signal  
  4. プライマリ RDS インスタンスとセカンダリ RDS インスタンス間のデータ同期が正常かどうかを確認します。

    db1=# select * from pg_stat_replication ;  
    -[ RECORD 1 ]----+------------------------------  
    pid              | 21065  
    usesysid         | 10  
    usename          | postgres  
    application_name | walreceiver  
    client_addr      | 127.0.0.1  
    client_hostname  |   
    client_port      | 47064  
    backend_start    | 2020-02-29 00:26:28.485427+08  
    backend_xmin     |   
    state            | streaming  
    sent_lsn         | 0/52000060  
    write_lsn        | 0/52000060  
    flush_lsn        | 0/52000060  
    replay_lsn       | 0/52000060  
    write_lag        |   
    flush_lag        |   
    replay_lag       |   
    sync_priority    | 0  
    sync_state       | async  
    reply_time       | 2020-02-29 01:32:40.635183+08  

pgpool の構成

  1. pgpool がインストールされている場所をクエリします。

    rpm -qa|grep pgpool  
    pgpool-II-12-extensions-4.1.1-1.rhel7.x86_64  
    pgpool-II-12-4.1.1-1.rhel7.x86_64  
    
    rpm -ql pgpool-II-12-4.1.1  
  2. pgpool.conf ファイルを変更します。

    cd /etc/pgpool-II-12/  
    
    cp pgpool.conf.sample-stream pgpool.conf  
    
    vi pgpool.conf  
    
    # ----------------------------  
    # pgPool-II 構成ファイル  
    # ----------------------------  
    #  
    # このファイルは、次の形式の行で構成されています。  
    #  
    #   name = value  
    #  
    # 空白を使用できます。コメントは、行のどこでも "#" で導入されます。  
    # パラメーター名と許可される値の完全なリストは、  
    # pgPool-II ドキュメントにあります。  
    #  
    # このファイルは、サーバーの起動時とサーバーが SIGHUP  
    # 信号を受信したときに読み取られます。実行中のシステムでファイルを編集する場合は、変更を有効にするためにサーバーを SIGHUP するか、「pgpool reload」を使用する必要があります。以下に示す一部のパラメーターは、変更を有効にするためにサーバーのシャットダウンと再起動が必要です。  
    #  
    
    
    #------------------------------------------------------------------------------  
    # 接続  
    #------------------------------------------------------------------------------  
    
    # - pgpool 接続設定 -  
    
    listen_addresses = '0.0.0.0'  
                                       # リッスンするホスト名または IP アドレス:  
                                       # すべての場合は '*'、TCP/IP 接続がない場合は ''  
                                       # (変更には再起動が必要です)  
    port = 8001   
                                       # ポート番号  
                                       # (変更には再起動が必要です)  
    socket_dir = '/tmp'  
                                       # Unix ドメインソケットパス  
                                       # Debian パッケージのデフォルトは  
                                       # /var/run/postgresql  
                                       # (変更には再起動が必要です)  
    reserved_connections = 0  
                                       # 予約済み接続の数。  
                                       # Pgpool-II は、num_init_chidlren - reserved_connections を超えると接続を受け入れません。  
    
    
    # - pgpool 通信マネージャー接続設定 -  
    
    pcp_listen_addresses = ''  
                                       # pcp プロセスがリッスンするホスト名または IP アドレス:  
                                       # すべての場合は '*'、TCP/IP 接続がない場合は ''  
                                       # (変更には再起動が必要です)  
    pcp_port = 9898  
                                       # pcp のポート番号  
                                       # (変更には再起動が必要です)  
    pcp_socket_dir = '/tmp'  
                                       # pcp の Unix ドメインソケットパス  
                                       # Debian パッケージのデフォルトは  
                                       # /var/run/postgresql  
                                       # (変更には再起動が必要です)  
    listen_backlog_multiplier = 2  
                                       # listen(2) の backlog パラメーターを  
                                       # num_init_children * listen_backlog_multiplier に設定します。  
                                       # (変更には再起動が必要です)  
    serialize_accept = off  
                                       # accept() 呼び出しをシリアル化してサンダリングハード問題を回避するかどうか  
                                       # (変更には再起動が必要です)  
    
    # - バックエンド接続設定 -  
    
    backend_hostname0 = '127.0.0.1'  
                                       # バックエンド 0 に接続するためのホスト名または IP アドレス  
    backend_port0 = 3389   
                                       # バックエンド 0 のポート番号  
    backend_weight0 = 1  
                                       # バックエンド 0 の重み (ロードバランシングモードのみ)  
    backend_data_directory0 = '/data01/pg12_3389/pg_data'  
                                       # バックエンド 0 のデータディレクトリ  
    backend_flag0 = 'ALWAYS_MASTER'  
                                       # さまざまなバックエンドの動作を制御します  
                                       # ALLOW_TO_FAILOVER、DISALLOW_TO_FAILOVER  
                                       # または ALWAYS_MASTER  
    backend_application_name0 = 'server0'  
                                       # walsender の application_name、「show pool_nodes」コマンドに使用されます  
    backend_hostname1 = '127.0.0.1'  
    backend_port1 = 8002  
    backend_weight1 = 1  
    backend_data_directory1 = '/data01/pg12_8002/pg_data'  
    backend_flag1 = 'DISALLOW_TO_FAILOVER'  
    backend_application_name1 = 'server1'  
    
    # - 認証 -  
    
    enable_pool_hba = on   
                                       # クライアント認証に pool_hba.conf を使用します  
    pool_passwd = 'pool_passwd'  
                                       # md5 認証用の pool_passwd のファイル名。  
                                       # "" は pool_passwd を無効にします。  
                                       # (変更には再起動が必要です)  
    authentication_timeout = 60  
                                       # クライアント認証を完了するまでの遅延 (秒単位)  
                                       # 0 はタイムアウトなしを意味します。  
    
    allow_clear_text_frontend_auth = off  
                                       # pool_passwd にユーザーパスワードが含まれていない場合、Pgpool-II がクライアントとのクリアテキストパスワード認証を使用できるようにします
    
    # - SSL 接続 -  
    
    ssl = off  
                                       # SSL サポートを有効にします  
                                       # (変更には再起動が必要です)  
    #ssl_key = './server.key'  
                                       # SSL 秘密鍵ファイルへのパス  
                                       # (変更には再起動が必要です)  
    #ssl_cert = './server.cert'  
                                       # SSL 公開証明書ファイルへのパス  
                                       # (変更には再起動が必要です)  
    #ssl_ca_cert = ''  
                                       # CA ルート証明書を含む単一の PEM 形式ファイルへのパス  
                                       # (変更には再起動が必要です)  
    #ssl_ca_cert_dir = ''  
                                       # CA ルート証明書を含むディレクトリ  
                                       # (変更には再起動が必要です)  
    
    ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL'  
                                       # 許可される SSL 暗号  
                                       # (変更には再起動が必要です)  
    ssl_prefer_server_ciphers = off  
                                       # クライアントではなく、サーバーの SSL 暗号設定を使用します  
                                       # (変更には再起動が必要です)  
    ssl_ecdh_curve = 'prime256v1'  
                                       # ECDH キー交換で使用する曲線名  
    ssl_dh_params_file = ''  
                                       # いわゆる一時的な DH ファミリーの SSL 暗号に使用される Diffie-Hellman パラメーターを含むファイルの名前。  
    
    #------------------------------------------------------------------------------  
    # プール  
    #------------------------------------------------------------------------------  
    
    # - 同時セッションとプールサイズ -  
    
    num_init_children = 128   
                                       # 許可される同時セッション数  
                                       # (変更には再起動が必要です)  
    max_pool = 4  
                                       # 接続ごとの接続プールキャッシュの数  
                                       # (変更には再起動が必要です)  
    
    # - ライフタイム -  
    
    child_life_time = 300  
                                       # プールは、この秒数アイドル状態になった後終了します  
    child_max_connections = 0  
                                       # プールは、その数の接続を受信した後終了します  
                                       # 0 は終了なしを意味します  
    connection_life_time = 0  
                                       # バックエンドへの接続は、この秒数アイドル状態になった後閉じます  
                                       # 0 はクローズなしを意味します  
    client_idle_limit = 0  
                                       # クライアントは、その秒数アイドル状態になった後切断されます  
                                       # (明示的なトランザクション内でも!)  
                                       # 0 は切断なしを意味します  
    
    
    #------------------------------------------------------------------------------  
    # ログ  
    #------------------------------------------------------------------------------  
    
    # - ログの記録場所 -  
    
    log_destination = 'syslog'  
                                       # ログの記録場所  
                                       # 有効な値は、stderr と  
                                       # syslog の組み合わせです。デフォルトは stderr です。  
    
    # - ログに記録する内容 -  
    
    log_line_prefix = '%t: pid %p: '   # 各ログ行の先頭に出力する printf スタイルの文字列。  
    
    log_connections = on  
                                       # 接続をログに記録します  
    log_hostname = off  
                                       # ホスト名は、ps ステータスと  
                                       # 接続がログに記録されている場合はログに表示されます  
    log_statement = off  
                                       # すべてのステートメントをログに記録します  
    log_per_node_statement = off  
                                       # すべてのステートメントをログに記録します  
                                       # ノードとバックエンドの情報付き  
    log_client_messages = off  
                                       # クライアントメッセージをログに記録します  
    log_standby_delay = 'if_over_threshold'  
                                       # スタンバイ遅延をログに記録します  
                                       # 有効な値は、always、  
                                       # if_over_threshold、none の組み合わせです  
    
    # - Syslog 固有 -  
    
    syslog_facility = 'LOCAL0'  
                                       # Syslog ローカルファシリティ。デフォルトは LOCAL0  
    syslog_ident = 'pgpool'  
                                       # Syslog プログラム識別文字列  
                                       # デフォルトは 'pgpool'  
    
    # - デバッグ -  
    
    #log_error_verbosity = default          # 簡潔な、デフォルトの、または詳細なメッセージ  
    
    #client_min_messages = notice           # 詳細度が減少する順序の値:  
                                            #   debug5  
                                            #   debug4  
                                            #   debug3  
                                            #   debug2  
                                            #   debug1  
                                            #   log  
                                            #   notice  
                                            #   warning  
                                            #   error  
    
    #log_min_messages = warning             # 詳細度が減少する順序の値:  
                                            #   debug5  
                                            #   debug4  
                                            #   debug3  
                                            #   debug2  
                                            #   debug1  
                                            #   info  
                                            #   notice  
                                            #   warning  
                                            #   error  
                                            #   log  
                                            #   fatal  
                                            #   panic  
    
    #------------------------------------------------------------------------------  
    # ファイルの場所  
    #------------------------------------------------------------------------------  
    
    pid_file_name = '/var/run/pgpool-II-12/pgpool.pid'  
                                       # PID ファイル名  
                                       # "pgpool.conf ファイルの場所を基準とした相対パスまたは  
                                       # 絶対パスとして指定できます  
                                       # (変更には再起動が必要です)  
    logdir = '/tmp'  
                                       # pgPool ステータスファイルのディレクトリ  
                                       # (変更には再起動が必要です)  
    
    
    #------------------------------------------------------------------------------  
    # 接続プーリング  
    #------------------------------------------------------------------------------  
    
    connection_cache = on  
                                       # 接続プールをアクティブにします  
                                       # (変更には再起動が必要です)  
    
                                       # セッションの最後に発行されるクエリのセミコロン区切りリスト  
                                       # デフォルトは 8.3 以降です  
    reset_query_list = 'ABORT; DISCARD ALL'  
                                       # 次のものは 8.2 以前用です  
    #reset_query_list = 'ABORT; RESET ALL; SET SESSION AUTHORIZATION DEFAULT'  
    
    
    #------------------------------------------------------------------------------  
    # レプリケーションモード  
    #------------------------------------------------------------------------------  
    
    replication_mode = off  
                                       # レプリケーションモードをアクティブにします  
                                       # (変更には再起動が必要です)  
    replicate_select = off  
                                       # レプリケーションモードのときに SELECT ステートメントをレプリケートします  
                                       # replicate_select は load_balance_mode よりも優先順位が高くなります。  
    
    insert_lock = off  
                                       # SERIAL データの  
                                       # 整合性を維持するために、ダミー行またはテーブルを INSERT ステートメントで自動的にロックします  
                                       # SERIAL がない場合、ロックは発行されません  
    lobj_lock_table = ''  
                                       # レプリケーションモードで lo_create コマンドを書き換えるときに、  
                                       # ロックするテーブル名を指定します  
    
    # - 縮退処理 -  
    
    replication_stop_on_mismatch = off  
                                       # バックエンドから送信されたパケットの種類が一致しない場合、  
                                       # おそらく「少数派」であるノードを縮退させます  
                                       # off の場合、このセッションを強制終了します  
    
    failover_if_affected_tuples_mismatch = off  
                                       # UPDATE/DELETE クエリで影響を受けるタプルの数が一致しない場合、  
                                       # おそらく「少数派」であるノードを縮退させます。  
                                       # off の場合、整合性を維持するためにトランザクションを中止します  
    
    
    #------------------------------------------------------------------------------  
    # ロードバランシングモード  
    #------------------------------------------------------------------------------  
    
    load_balance_mode = on  
                                       # ロードバランシングモードをアクティブにします  
                                       # (変更には再起動が必要です)  
    ignore_leading_white_space = on  
                                       # 各クエリの先頭の空白を無視します  
    white_function_list = ''  
                                       # データベースに書き込まない関数名のコンマ区切りリスト  
                                       # 正規表現が受け入れられます  
    black_function_list = 'currval,lastval,nextval,setval'  
                                       # データベースに書き込む関数名のコンマ区切りリスト  
                                       # 正規表現が受け入れられます  
    
    black_query_pattern_list = ''  
                                       # プライマリノードに送信されるクエリパターンのセミコロン区切りリスト  
                                       # 正規表現が受け入れられます  
                                       # ストリーミングレプリケーションモードでのみ有効です。  
    
    database_redirect_preference_list = ''  
                                       # データベースとノード ID のペアのコンマ区切りリスト。  
                                       # 例: postgres:primary,mydb[0-4]:1,mydb[5-9]:2'  
                                       # ストリーミングレプリケーションモードでのみ有効です。  
    
    app_name_redirect_preference_list = ''  
                                       # アプリ名とノード ID のペアのコンマ区切りリスト。  
                                       # 例: 'psql:primary,myapp[0-4]:1,myapp[5-9]:standby'  
                                       # ストリーミングレプリケーションモードでのみ有効です。  
    allow_sql_comments = off  
                                       # on の場合、ロードバランスまたは  
                                       # クエリキャッシュが可能かどうかを判断するときに SQL コメントを無視します。  
                                       # off の場合、SQL コメントは事実上判断を妨げます  
                                       # (3.4 より前の動作)。  
    
    disable_load_balance_on_write = 'transaction'  
                                       # 明示的なトランザクションで書き込みクエリが発行されたときのロードバランスの動作。  
                                       # 明示的なトランザクションにないクエリは、  
                                       # パラメーターの影響を受けないことに注意してください。  
                                       # 'transaction' (デフォルト): 書き込みクエリが発行された場合、  
                                       # 後続の読み取りクエリは、トランザクションが終了するまでロードバランスされません。  
                                       # 'trans_transaction': 書き込みクエリが発行された場合、  
                                       # 明示的なトランザクション内の後続の読み取りクエリは、セッションが終了するまでロードバランスされません。  
                                       # 'always': 書き込みクエリが発行された場合、読み取りクエリは  
                                       # セッションが終了するまでロードバランスされません。  
    
    statement_level_load_balance = off  
                                       # ステートメントレベルのロードバランシングを有効にします  
    
    #------------------------------------------------------------------------------  
    # マスター/スレーブモード  
    #------------------------------------------------------------------------------  
    
    master_slave_mode = on  
                                       # マスター/スレーブモードをアクティブにします  
                                       # (変更には再起動が必要です)  
    master_slave_sub_mode = 'stream'  
                                       # マスター/スレーブサブモード  
                                       # 有効な値は、stream、slony  
                                       # または logical の組み合わせです。デフォルトは stream です。  
                                       # (変更には再起動が必要です)  
    
    # - ストリーミング -  
    
    sr_check_period = 3   
                                       # ストリーミングレプリケーションチェック期間  
                                       # デフォルトでは無効 (0)  
    sr_check_user = 'nobody'  
                                       # ストリーミングレプリケーションチェックユーザー  
                                       # これは、sr_check_period = 0 によってストリーミング  
                                       # レプリケーション遅延チェックを無効にした場合でも必要です  
    sr_check_password = ''  
                                       # ストリーミングレプリケーションチェックユーザーのパスワード  
                                       # 空のままにすると、Pgpool-II は空のパスワードを使用する前に、最初に  
                                       # pool_passwd ファイルでパスワードを探します
    
    sr_check_database = 'postgres'  
                                       # ストリーミングレプリケーションチェックのデータベース名  
    delay_threshold = 512000  
                                       # スタンバイノードにクエリをディスパッチしないしきい値  
                                       # 単位はバイトです  
                                       # デフォルトでは無効 (0)  
    
    # - 特殊コマンド -  
    
    follow_master_command = ''  
                                       # マスターフェールオーバー後にこのコマンドを実行します  
                                       # 特殊値:  
                                       #   %d = 失敗したノード ID  
                                       #   %h = 失敗したノードのホスト名  
                                       #   %p = 失敗したノードのポート番号  
                                       #   %D = 失敗したノードのデータベースクラスタパス  
                                       #   %m = 新しいマスターノード ID  
                                       #   %H = 新しいマスターノードのホスト名  
                                       #   %M = 古いマスターノード ID  
                                       #   %P = 古いプライマリノード ID  
                                       #   %r = 新しいマスターポート番号  
                                       #   %R = 新しいマスターデータベースクラスタパス  
                                       #   %N = 古いプライマリノードのホスト名  
                                       #   %S = 古いプライマリノードのポート番号  
                                       #   %% = '%' 文字  
    
    #------------------------------------------------------------------------------  
    # ヘルスチェックグローバルパラメーター  
    #------------------------------------------------------------------------------  
    
    health_check_period = 5  
                                       # ヘルスチェック期間  
                                       # デフォルトでは無効 (0)  
    health_check_timeout = 10  
                                       # ヘルスチェックタイムアウト  
                                       # 0 はタイムアウトなしを意味します  
    health_check_user = 'nobody'  
                                       # ヘルスチェックユーザー  
    health_check_password = ''  
                                       # ヘルスチェックユーザーのパスワード  
                                       # 空のままにすると、Pgpool-II は空のパスワードを使用する前に、最初に  
                                       # pool_passwd ファイルでパスワードを探します
    
    health_check_database = ''  
                                       # ヘルスチェックのデータベース名。 '' の場合、最初に 'postgres' を試します。   
    health_check_max_retries = 60   
                                       # 失敗したヘルスチェックを諦める前に再試行する最大回数。  
    health_check_retry_delay = 1  
                                       # 再試行間の待機時間 (秒単位)。  
    connect_timeout = 10000  
                                       # バックエンドへの接続を諦めるまでのタイムアウト値 (ミリ秒単位)。  
                                       # デフォルトは 10000 ミリ秒 (10 秒) です。不安定なネットワークユーザーは、  
                                       # 値を増やすことをお勧めします。 0 はタイムアウトなしを意味します。  
                                       # この値はヘルスチェックだけでなく、  
                                       # バックエンドへの通常の接続にも使用されることに注意してください。  
    
    #------------------------------------------------------------------------------  
    # ノードごとのヘルスチェックパラメーター (オプション)  
    #------------------------------------------------------------------------------  
    #health_check_period0 = 0  
    #health_check_timeout0 = 20  
    #health_check_user0 = 'nobody'  
    #health_check_password0 = ''  
    #health_check_database0 = ''  
    #health_check_max_retries0 = 0  
    #health_check_retry_delay0 = 1  
    #connect_timeout0 = 10000  
    
    #------------------------------------------------------------------------------  
    # フェールオーバーとフェイルバック  
    #------------------------------------------------------------------------------  
    
    failover_command = ''  
                                       # フェールオーバー時にこのコマンドを実行します  
                                       # 特殊値:  
                                       #   %d = 失敗したノード ID  
                                       #   %h = 失敗したノードのホスト名  
                                       #   %p = 失敗したノードのポート番号  
                                       #   %D = 失敗したノードのデータベースクラスタパス  
                                       #   %m = 新しいマスターノード ID  
                                       #   %H = 新しいマスターノードのホスト名  
                                       #   %M = 古いマスターノード ID  
                                       #   %P = 古いプライマリノード ID  
                                       #   %r = 新しいマスターポート番号  
                                       #   %R = 新しいマスターデータベースクラスタパス  
                                       #   %N = 古いプライマリノードのホスト名  
                                       #   %S = 古いプライマリノードのポート番号  
                                       #   %% = '%' 文字  
    failback_command = ''  
                                       # フェイルバック時にこのコマンドを実行します。  
                                       # 特殊値:  
                                       #   %d = 失敗したノード ID  
                                       #   %h = 失敗したノードのホスト名  
                                       #   %p = 失敗したノードのポート番号  
                                       #   %D = 失敗したノードのデータベースクラスタパス  
                                       #   %m = 新しいマスターノード ID  
                                       #   %H = 新しいマスターノードのホスト名  
                                       #   %M = 古いマスターノード ID  
                                       #   %P = 古いプライマリノード ID  
                                       #   %r = 新しいマスターポート番号  
                                       #   %R = 新しいマスターデータベースクラスタパス  
                                       #   %N = 古いプライマリノードのホスト名  
                                       #   %S = 古いプライマリノードのポート番号  
                                       #   %% = '%' 文字  
    
    failover_on_backend_error = off  
                                       # バックエンド通信ソケットへの読み取り/書き込みに失敗した場合にフェールオーバーを開始します  
                                       # off に設定すると、pgpool は  
                                       # エラーを報告し、セッションを切断します。  
    
    detach_false_primary = off  
                                       # on の場合、誤ったプライマリをデタッチします。ストリーミングレプリケーション  
                                       # モードおよび PostgreSQL 9.6 以降でのみ  
                                       # 有効です。  
    
    search_primary_node_timeout = 300  
                                       # フェールオーバー発生時にプライマリノードを検索するタイムアウト (秒単位)。  
                                       # 0 はタイムアウトなしを意味し、永遠に  
                                       # プライマリノードを検索し続けます。  
    
    #------------------------------------------------------------------------------  
    # オンラインリカバリ  
    #------------------------------------------------------------------------------  
    
    recovery_user = 'nobody'  
                                       # オンラインリカバリユーザー  
    recovery_password = ''  
                                       # オンラインリカバリパスワード  
                                       # 空のままにすると、Pgpool-II は空のパスワードを使用する前に、最初に  
                                       # pool_passwd ファイルでパスワードを探します
    
    recovery_1st_stage_command = ''  
                                       # 最初のステージでコマンドを実行します  
    recovery_2nd_stage_command = ''  
                                       # 2 番目のステージでコマンドを実行します  
    recovery_timeout = 90  
                                       # リカバリ中のノードの postmaster が起動するのを待つタイムアウト (秒単位)  
                                       # 0 は待機なしを意味します  
    client_idle_limit_in_recovery = 0  
                                       # クライアントは、オンラインリカバリの 2 番目のステージで  
                                       # その秒数アイドル状態になった後切断されます  
                                       # 0 は切断なしを意味します  
                                       # -1 は即時切断を意味します  
    
    auto_failback = off  
                                       # replication_state が 'streaming' の場合、デタッチされたバックエンドノードは自動的に再接続します。  
    auto_failback_interval = 60  
                                       # auto_failback を実行する最小間隔 (秒単位)。  
    
    #------------------------------------------------------------------------------  
    # ウォッチドッグ  
    #------------------------------------------------------------------------------  
    
    # - 有効化 -  
    
    use_watchdog = off  
                                        # ウォッチドッグをアクティブにします  
                                        # (変更には再起動が必要です)  
    
    # - アップストリームサーバーへの接続 -  
    
    trusted_servers = ''  
                                        # ネットワーク接続を確認するために使用される  
                                        # 信頼できるサーバーリスト  
                                        # (hostA,hostB,hostC,...)  
                                        # (変更には再起動が必要です)  
    ping_path = '/bin'  
                                        # ping コマンドパス  
                                        # (変更には再起動が必要です)  
    
    # - ウォッチドッグ通信設定 -  
    
    wd_hostname = ''  
                                        # このウォッチドッグのホスト名または IP アドレス  
                                        # (変更には再起動が必要です)  
    wd_port = 9000  
                                        # ウォッチドッグサービスのポート番号  
                                        # (変更には再起動が必要です)  
    wd_priority = 1  
                                        # リーダー選出におけるこのウォッチドッグの優先順位  
                                        # (変更には再起動が必要です)  
    
    wd_authkey = ''  
                                        # ウォッチドッグ通信の認証キー  
                                        # (変更には再起動が必要です)  
    
    wd_ipc_socket_dir = '/tmp'  
                                        # ウォッチドッグ IPC ソケットの Unix ドメインソケットパス  
                                        # Debian パッケージのデフォルトは  
                                        # /var/run/postgresql  
                                        # (変更には再起動が必要です)  
    
    
    # - 仮想 IP 制御設定 -  
    
    delegate_IP = ''  
                                        # 委任 IP アドレス  
                                        # これが空の場合、仮想 IP は起動しません。  
                                        # (変更には再起動が必要です)  
    if_cmd_path = '/sbin'  
                                        # if_up/down_cmd が存在するディレクトリへのパス  
                                        # if_up/down_cmd が "/" で始まる場合、if_cmd_path は無視されます。  
                                        # (変更には再起動が必要です)  
    if_up_cmd = '/usr/bin/sudo /sbin/ip addr add $_IP_$/24 dev eth0 label eth0:0'  
                                        # 委任 IP コマンドの起動  
                                        # (変更には再起動が必要です)  
    if_down_cmd = '/usr/bin/sudo /sbin/ip addr del $_IP_$/24 dev eth0'  
                                        # 委任 IP コマンドのシャットダウン  
                                        # (変更には再起動が必要です)  
    arping_path = '/usr/sbin'  
                                        # arping コマンドパス  
                                        # arping_cmd が "/" で始まる場合、if_cmd_path は無視されます。  
                                        # (変更には再起動が必要です)  
    arping_cmd = '/usr/bin/sudo /usr/sbin/arping -U $_IP_$ -w 1 -I eth0'  
                                        # arping コマンド  
                                        # (変更には再起動が必要です)  
    
    # - エスカレーション時の動作設定 -  
    
    clear_memqcache_on_escalation = on  
                                        # スタンバイ pgpool がアクティブ pgpool に  
                                        # エスカレーション (= 仮想 IP ホルダー) されたときに、共有メモリ上のすべてのクエリキャッシュをクリアします。  
                                        # クライアントが仮想 IP を使用せずに pgpool に接続する場合は、  
                                        # これを off にする必要があります。  
                                        # (変更には再起動が必要です)  
    wd_escalation_command = ''  
                                        # 新しいアクティブ pgpool でエスカレーション時にこのコマンドを実行します。  
                                        # (変更には再起動が必要です)  
    wd_de_escalation_command = ''  
                                        # マスター pgpool がマスターであることを辞任したときにこのコマンドを実行します。  
                                        # (変更には再起動が必要です)  
    
    # - フェールオーバーのためのウォッチドッグコンセンサス設定 -  
    
    failover_when_quorum_exists = on  
                                        # ウォッチドッグクラスタがクォーラムを保持している場合にのみ、  
                                        # バックエンドノードのフェールオーバーを実行します  
                                        # (変更には再起動が必要です)  
    
    failover_require_consensus = on  
                                        # Pgpool-II ノードの大部分が  
                                        # バックエンドノードのステータス変更に同意した場合にフェールオーバーを実行します  
                                        # (変更には再起動が必要です)  
    
    allow_multiple_failover_requests_from_node = off  
                                        # Pgpool-II ノードは、フェールオーバーに関する  
                                        # コンセンサスを構築するために複数の投票を投じることができます  
                                        # (変更には再起動が必要です)  
    
    
    enable_consensus_with_half_votes = off  
                                        # 偶数ノードのクラスタで 50% の投票でコンセンサスとクォーラム計算に  
                                        # 多数決ルールを適用します。  
                                        # 有効にすると、クラスタ内の総投票数の半分を受信した後に、  
                                        # フェールオーバー時のクォーラムとコンセンサスの存在が解決されます。  
                                        # それ以外の場合、これらの決定は両方とも、  
                                        # 総投票数の半分よりも少なくとも 1 票多く必要です。  
                                        # (変更には再起動が必要です)  
    
    # - ライフチェック設定 -  
    
    # -- 共通 --  
    
    wd_monitoring_interfaces_list = ''  # 監視するインターフェイス名のコンマ区切りリスト。  
                                        # リストのいずれかのインターフェイスがアクティブな場合、ウォッチドッグは  
                                        # ネットワークが正常であると見なします  
                                        # ループバック以外のすべてのインターフェイスで監視を有効にするには 'any'  
                                        # 監視を無効にするには ''  
                                        # (変更には再起動が必要です)  
    
    wd_lifecheck_method = 'heartbeat'  
                                        # ウォッチドッグライフチェックの方法 ('heartbeat' または 'query' または 'external')  
                                        # (変更には再起動が必要です)  
    wd_interval = 10  
                                        # ライフチェック間隔 (秒) > 0  
                                        # (変更には再起動が必要です)  
    
    # -- ハートビートモード --  
    
    wd_heartbeat_port = 9694  
                                        # ハートビート信号を受信するためのポート番号  
                                        # (変更には再起動が必要です)  
    wd_heartbeat_keepalive = 2  
                                        # ハートビート信号を送信する間隔時間 (秒)  
                                        # (変更には再起動が必要です)  
    wd_heartbeat_deadtime = 30  
                                        # ハートビート信号のデッドタイム間隔 (秒)  
                                        # (変更には再起動が必要です)  
    heartbeat_destination0 = 'host0_ip1'  
                                        # ハートビート信号を送信するための宛先 0 の  
                                        # ホスト名または IP アドレス。  
                                        # (変更には再起動が必要です)  
    heartbeat_destination_port0 = 9694   
                                        # ハートビート信号を送信するための宛先 0 の  
                                        # ポート番号。通常、これは  
                                        # wd_heartbeat_port と同じです。  
                                        # (変更には再起動が必要です)  
    heartbeat_device0 = ''  
                                        # 宛先 0 との間でハートビート  
                                        # 信号を送受信するために使用される NIC デバイスの名前 (例: 'eth0')。  
                                        # これは、これが空ではなく、  
                                        # pgpool に root 権限がある場合にのみ機能します。  
                                        # (変更には再起動が必要です)  
    
    #heartbeat_destination1 = 'host0_ip2'  
    #heartbeat_destination_port1 = 9694  
    #heartbeat_device1 = ''  
    
    # -- クエリモード --  
    
    wd_life_point = 3  
                                        # ライフチェック再試行回数  
                                        # (変更には再起動が必要です)  
    wd_lifecheck_query = 'SELECT 1'  
                                        # ウォッチドッグから pgpool へのライフチェッククエリ  
                                        # (変更には再起動が必要です)  
    wd_lifecheck_dbname = 'template1'  
                                        # ライフチェックのために接続されたデータベース名  
                                        # (変更には再起動が必要です)  
    wd_lifecheck_user = 'nobody'  
                                        # ライフチェックで pgpool を監視するウォッチドッグユーザー  
                                        # (変更には再起動が必要です)  
    wd_lifecheck_password = ''  
                                        # ライフチェックにおけるウォッチドッグユーザーのパスワード  
                                        # 空のままにすると、Pgpool-II は空のパスワードを使用する前に、最初に  
                                        # pool_passwd ファイルでパスワードを探します  
                                        # (変更には再起動が必要です)  
    
    # - その他の pgpool 接続設定 -  
    
    #other_pgpool_hostname0 = 'host0'  
                                        # その他の pgpool 0 に接続するためのホスト名または IP アドレス  
                                        # (変更には再起動が必要です)  
    #other_pgpool_port0 = 5432  
                                        # その他の pgpool 0 のポート番号  
                                        # (変更には再起動が必要です)  
    #other_wd_port0 = 9000  
                                        # その他のウォッチドッグ 0 のポート番号  
                                        # (変更には再起動が必要です)  
    #other_pgpool_hostname1 = 'host1'  
    #other_pgpool_port1 = 5432  
    #other_wd_port1 = 9000  
    
    
    #------------------------------------------------------------------------------  
    # その他  
    #------------------------------------------------------------------------------  
    relcache_expire = 0  
                                       # リレーションキャッシュのライフタイム (秒単位)。  
                                       # 0 はキャッシュの有効期限なし (デフォルト) を意味します。  
                                       # リレーションキャッシュは、PostgreSQL システム  
                                       # カタログに対するクエリ結果をキャッシュして、  
                                       # テーブル構造や一時テーブルかどうかなど、さまざまな情報を取得するために使用されます。キャッシュは  
                                       # pgpool 子ローカルメモリに保持され、存続する限り保持されます。  
                                       # 誰かが ALTER TABLE などを使用してテーブルを変更すると、リレーションキャッシュは  
                                       # 一貫性がなくなります。  
                                       # この目的のために、cache_expiration  
                                       # はキャッシュのライフタイムを制御します。  
    relcache_size = 8192  
                                       # リレーションキャッシュのエントリ数。頻繁に表示される場合:  
                                       # pgpool ログに "pool_search_relcache: cache replacement happend"  
                                       # が表示される場合は、この数を増やすことをお勧めします。  
    
    check_temp_table = catalog  
                                       # 一時テーブルチェック方法。 catalog、trace、または none。  
                                       # デフォルトは catalog です。  
    
    check_unlogged_table = on  
                                       # on の場合、SELECT ステートメントでログに記録されていないテーブルチェックを有効にします。  
                                       # これにより、プライマリ/マスターのシステムカタログに対するクエリが開始されるため、マスターの負荷が増加します。  
                                       # システムでログに記録されていないテーブルが使用されていないことが確実であり、プライマリ/マスターへのアクセスを節約したい場合は、これを off にすることができます。  
                                       # デフォルトは on です。  
    enable_shared_relcache = on  
                                       # on の場合、リレーションキャッシュはメモリキャッシュに保存され、  
                                       # キャッシュは子プロセス間で共有されます。  
                                       # デフォルトは on です。  
                                       # (変更には再起動が必要です)  
    
    relcache_query_target = master     # リレーションキャッシュクエリを送信するターゲットノード。デフォルトはマスター (プライマリ) ノードです。  
                                       # load_balance_node が指定されている場合、クエリはロードバランスノードに送信されます。  
    #------------------------------------------------------------------------------  
    # メモリ内クエリメモリキャッシュ  
    #------------------------------------------------------------------------------  
    memory_cache_enabled = off  
                                       # on の場合、メモリキャッシュ機能を使用します。デフォルトは off です  
                                       # (変更には再起動が必要です)  
    memqcache_method = 'shmem'  
                                                                          # キャッシュストレージ方法。 'shmem' (共有メモリ) または  
                                       # 'memcached' のいずれか。デフォルトは 'shmem' です  
                                       # (変更には再起動が必要です)  
    memqcache_memcached_host = 'localhost'  
                                       # Memcached のホスト名または IP アドレス。 memqcache_method = 'memcached' の場合は必須です。  
                                       # デフォルトは localhost です。  
                                       # (変更には再起動が必要です)  
    memqcache_memcached_port = 11211  
                                       # Memcached ポート番号。 memqcache_method = 'memcached' の場合は必須です。  
                                       # デフォルトは 11211 です。  
                                       # (変更には再起動が必要です)  
    memqcache_total_size = 67108864  
                                       # メモリキャッシュを格納するための合計メモリサイズ (バイト単位)。  
                                       # memqcache_method = 'shmem' の場合は必須です。  
                                       # デフォルトは 64MB です。  
                                       # (変更には再起動が必要です)  
    memqcache_max_num_cache = 1000000  
                                       # キャッシュエントリの総数。 memqcache_method = 'shmem' の場合は必須です。  
                                       # 各キャッシュエントリは、共有メモリで 48 バイトを消費します。  
                                       # デフォルトは 1,000,000 (45.8MB) です。  
                                       # (変更には再起動が必要です)  
    memqcache_expire = 0  
                                       # メモリキャッシュエントリのライフタイム (秒単位)。  
                                       # 0 は無限のライフタイムを意味します。デフォルトは 0 です。  
                                       # (変更には再起動が必要です)  
    memqcache_auto_cache_invalidation = on  
                                       # on の場合、クエリキャッシュの無効化は、対応する  
                                       # DDL/DML/DCL (および memqcache_expire) によってトリガーされます。 off の場合、memqcache_expire によってのみトリガーされます。デフォルトは on です。  
                                       # (変更には再起動が必要です)  
    memqcache_maxcache = 409600  
                                       # SELECT 結果の最大サイズ (バイト単位)。  
                                       # memqcache_cache_block_size より小さくする必要があります。デフォルトは 400KB です。  
                                       # (変更には再起動が必要です)  
    memqcache_cache_block_size = 1048576  
                                       # キャッシュブロックサイズ (バイト単位)。 memqcache_method = 'shmem' の場合は必須です。  
                                       # デフォルトは 1MB です。  
                                       # (変更には再起動が必要です)  
    memqcache_oiddir = '/var/log/pgpool/oiddir'  
                                       # テーブル OID を記録するための一時作業ディレクトリ  
                                       # (変更には再起動が必要です)  
    white_memqcache_table_list = ''  
                                       # memcache するテーブル名のコンマ区切りリスト  
                                       # データベースに書き込まない  
                                       # 正規表現が受け入れられます  
    black_memqcache_table_list = ''  
                                       # memcache しないテーブル名のコンマ区切りリスト  
                                       # データベースに書き込まない  
                                       # 正規表現が受け入れられます  

    次のパラメーターを再構成する必要があります。

    listen_addresses = '0.0.0.0'  
    port = 8001  
    socket_dir = '/tmp'  
    reserved_connections = 0  
    
    pcp_listen_addresses = ''  
    pcp_port = 9898  
    pcp_socket_dir = '/tmp'  
    
    # - バックエンド接続設定 -  
    
    backend_hostname0 = '127.0.0.1'  
                                       # バックエンド 0 に接続するためのホスト名または IP アドレス  
    backend_port0 = 3389   
                                       # バックエンド 0 のポート番号  
    backend_weight0 = 1  
                                       # バックエンド 0 の重み (ロードバランシングモードのみ)  
    backend_data_directory0 = '/data01/pg12_3389/pg_data'  
                                       # バックエンド 0 のデータディレクトリ  
    backend_flag0 = 'ALWAYS_MASTER'  
                                       # さまざまなバックエンドの動作を制御します  
                                       # ALLOW_TO_FAILOVER、DISALLOW_TO_FAILOVER  
                                       # または ALWAYS_MASTER  
    backend_application_name0 = 'server0'  
                                       # walsender の application_name、「show pool_nodes」コマンドに使用されます  
    backend_hostname1 = '127.0.0.1'  
    backend_port1 = 8002  
    backend_weight1 = 1  
    backend_data_directory1 = '/data01/pg12_8002/pg_data'  
    backend_flag1 = 'DISALLOW_TO_FAILOVER'  
    backend_application_name1 = 'server1'  
    
    # - 認証 -  
    
    enable_pool_hba = on   
    
                                       # クライアント認証に pool_hba.conf を使用します  
    pool_passwd = 'pool_passwd'  
                                       # md5 認証用の pool_passwd のファイル名。  
                                       # "" は pool_passwd を無効にします。  
                                       # (変更には再起動が必要です)  
    allow_clear_text_frontend_auth = off  
                                       # pool_passwd にユーザーパスワードが含まれていない場合、Pgpool-II がクライアントとのクリアテキストパスワード認証を使用できるようにします
    
    # - 同時セッションとプールサイズ -  
    
    num_init_children = 128   
                                       # 許可される同時セッション数  
                                       # (変更には再起動が必要です)  
    max_pool = 4  
                                       # 接続ごとの接続プールキャッシュの数  
                                       # (変更には再起動が必要です)  
    
    # - ライフタイム -  
    
    child_life_time = 300  
                                       # プールは、この秒数アイドル状態になった後終了します  
    child_max_connections = 0  
                                       # プールは、その数の接続を受信した後終了します  
                                       # 0 は終了なしを意味します  
    connection_life_time = 0  
                                       # バックエンドへの接続は、この秒数アイドル状態になった後閉じます  
                                       # 0 はクローズなしを意味します  
    client_idle_limit = 0  
                                       # クライアントは、その秒数アイドル状態になった後切断されます  
                                       # (明示的なトランザクション内でも!)  
                                       # 0 は切断なしを意味します  
    
    #------------------------------------------------------------------------------  
    # ログ  
    #------------------------------------------------------------------------------  
    
    # - ログの記録場所 -  
    
    log_destination = 'syslog'  
                                       # ログの記録場所  
                                       # 有効な値は、stderr と  
                                       # syslog の組み合わせです。デフォルトは stderr です。  
    log_connections = on  
                                       # 接続をログに記録します  
    
    log_standby_delay = 'if_over_threshold'  
                                       # スタンバイ遅延をログに記録します  
                                       # 有効な値は、always、  
                                       # if_over_threshold、none の組み合わせです  
    
    #------------------------------------------------------------------------------  
    # ファイルの場所  
    #------------------------------------------------------------------------------  
    
    pid_file_name = '/var/run/pgpool-II-12/pgpool.pid'  
                                       # PID ファイル名  
                                       # "pgpool.conf ファイルの場所を基準とした相対パスまたは  
                                       # 絶対パスとして指定できます  
                                       # (変更には再起動が必要です)  
    logdir = '/tmp'  
                                       # pgPool ステータスファイルのディレクトリ  
                                       # (変更には再起動が必要です)  
    
    #------------------------------------------------------------------------------  
    # 接続プーリング  
    #------------------------------------------------------------------------------  
    
    connection_cache = on  
                                       # 接続プールをアクティブにします  
                                       # (変更には再起動が必要です)  
    
                                       # セッションの最後に発行されるクエリのセミコロン区切りリスト  
                                       # デフォルトは 8.3 以降です  
    reset_query_list = 'ABORT; DISCARD ALL'  
    
    #------------------------------------------------------------------------------  
    # ロードバランシングモード  
    #------------------------------------------------------------------------------  
    
    load_balance_mode = on  
                                       # ロードバランシングモードをアクティブにします  
                                       # (変更には再起動が必要です)  
    ignore_leading_white_space = on  
                                       # 各クエリの先頭の空白を無視します  
    white_function_list = ''  
                                       # データベースに書き込まない関数名のコンマ区切りリスト  
                                       # 正規表現が受け入れられます  
    black_function_list = 'currval,lastval,nextval,setval'  
                                       # データベースに書き込む関数名のコンマ区切りリスト  
                                       # 正規表現が受け入れられます  
    
    black_query_pattern_list = ''  
                                       # プライマリノードに送信されるクエリパターンのセミコロン区切りリスト  
                                       # 正規表現が受け入れられます  
                                       # ストリーミングレプリケーションモードでのみ有効です。  
    
    database_redirect_preference_list = ''  
                                       # データベースとノード ID のペアのコンマ区切りリスト。  
                                       # 例: postgres:primary,mydb[0-4]:1,mydb[5-9]:2'  
                                       # ストリーミングレプリケーションモードでのみ有効です。  
    
    app_name_redirect_preference_list = ''  
                                       # アプリ名とノード ID のペアのコンマ区切りリスト。  
                                       # 例: 'psql:primary,myapp[0-4]:1,myapp[5-9]:standby'  
                                       # ストリーミングレプリケーションモードでのみ有効です。  
    allow_sql_comments = off  
                                       # on の場合、ロードバランスまたは  
                                       # クエリキャッシュが可能かどうかを判断するときに SQL コメントを無視します。  
                                       # off の場合、SQL コメントは事実上判断を妨げます  
                                       # (3.4 より前の動作)。  
    
    disable_load_balance_on_write = 'transaction'  
                                       # 明示的なトランザクションで書き込みクエリが発行されたときのロードバランスの動作。  
                                       # 明示的なトランザクションにないクエリは、  
                                       # パラメーターの影響を受けないことに注意してください。  
                                       # 'transaction' (デフォルト): 書き込みクエリが発行された場合、  
                                       # 後続の読み取りクエリは、トランザクションが終了するまでロードバランスされません。  
                                       # 'trans_transaction': 書き込みクエリが発行された場合、  
                                       # 明示的なトランザクション内の後続の読み取りクエリは、セッションが終了するまでロードバランスされません。  
                                       # 'always': 書き込みクエリが発行された場合、読み取りクエリは  
                                       # セッションが終了するまでロードバランスされません。  
    
    statement_level_load_balance = off  
                                       # ステートメントレベルのロードバランシングを有効にします  
    
    #------------------------------------------------------------------------------  
    # マスター/スレーブモード  
    #------------------------------------------------------------------------------  
    
    master_slave_mode = on  
                                       # マスター/スレーブモードをアクティブにします  
                                       # (変更には再起動が必要です)  
    master_slave_sub_mode = 'stream'  
                                       # マスター/スレーブサブモード  
                                       # 有効な値は、stream、slony  
                                       # または logical の組み合わせです。デフォルトは stream です。  
                                       # (変更には再起動が必要です)  
    
    # - ストリーミング -  
    
    sr_check_period = 3   
                                       # ストリーミングレプリケーションチェック期間  
                                       # デフォルトでは無効 (0)  
    sr_check_user = 'nobody'  
                                       # ストリーミングレプリケーションチェックユーザー  
                                       # これは、sr_check_period = 0 によってストリーミング  
                                       # レプリケーション遅延チェックを無効にした場合でも必要です  
    sr_check_password = ''  
                                       # ストリーミングレプリケーションチェックユーザーのパスワード  
                                       # 空のままにすると、Pgpool-II は空のパスワードを使用する前に、最初に  
                                       # pool_passwd ファイルでパスワードを探します
    
    sr_check_database = 'postgres'  
                                       # ストリーミングレプリケーションチェックのデータベース名  
    delay_threshold = 512000  
                                       # スタンバイノードにクエリをディスパッチしないしきい値  
                                       # 単位はバイトです  
                                       # デフォルトでは無効 (0)  
    
    
    #------------------------------------------------------------------------------  
    # ヘルスチェックグローバルパラメーター  
    #------------------------------------------------------------------------------  
    
    health_check_period = 5  
                                       # ヘルスチェック期間  
                                       # デフォルトでは無効 (0)  
    health_check_timeout = 10  
                                       # ヘルスチェックタイムアウト  
                                       # 0 はタイムアウトなしを意味します  
    health_check_user = 'nobody'  
                                       # ヘルスチェックユーザー  
    health_check_password = ''  
                                       # ヘルスチェックユーザーのパスワード  
                                       # 空のままにすると、Pgpool-II は空のパスワードを使用する前に、最初に  
                                       # pool_passwd ファイルでパスワードを探します
    
    health_check_database = ''  
                                       # ヘルスチェックのデータベース名。 '' の場合、最初に 'postgres' を試します。   
    health_check_max_retries = 60   
                                       # 失敗したヘルスチェックを諦める前に再試行する最大回数。  
    health_check_retry_delay = 1  
                                       # 再試行間の待機時間 (秒単位)。  
    connect_timeout = 10000  
                                       # バックエンドへの接続を諦めるまでのタイムアウト値 (ミリ秒単位)。  
                                       # デフォルトは 10000 ミリ秒 (10 秒) です。不安定なネットワークユーザーは、  
                                       # 値を増やすことをお勧めします。 0 はタイムアウトなしを意味します。  
                                       # この値はヘルスチェックだけでなく、  
                                       # バックエンドへの通常の接続にも使用されることに注意してください。  
    
    #------------------------------------------------------------------------------  
    # フェールオーバーとフェイルバック  
    #------------------------------------------------------------------------------  
    
    failover_on_backend_error = off  
                                       # バックエンド通信ソケットへの読み取り/書き込みに失敗した場合にフェールオーバーを開始します  
                                       # off に設定すると、pgpool は  
                                       # エラーを報告し、セッションを切断します。  
    
    
    relcache_expire = 0  # 構成ファイルを再構築した後、このパラメーターを 1 に設定し、構成ファイルを再ロードしてから、このパラメーターを 0 に戻すことをお勧めします。このパラメーターを特定の時点に設定することもできます。      
                                       # リレーションキャッシュのライフタイム (秒単位)。  
                                       # 0 はキャッシュの有効期限なし (デフォルト) を意味します。  
                                       # リレーションキャッシュは、PostgreSQL システム  
                                       # カタログに対するクエリ結果をキャッシュして、  
                                       # テーブル構造や一時テーブルかどうかなど、さまざまな情報を取得するために使用されます。キャッシュは  
                                       # pgpool 子ローカルメモリに保持され、存続する限り保持されます。  
                                       # 誰かが ALTER TABLE などを使用してテーブルを変更すると、リレーションキャッシュは  
                                       # 一貫性がなくなります。  
                                       # この目的のために、cache_expiration  
                                       # はキャッシュのライフタイムを制御します。  
    relcache_size = 8192  
                                       # リレーションキャッシュのエントリ数。頻繁に表示される場合:  
                                       # pgpool ログに "pool_search_relcache: cache replacement happend"  
                                       # が表示される場合は、この数を増やすことをお勧めします。  
  3. pool_passwd ファイルを構成します。

    説明

    pgpool を使用して RDS インスタンスに接続する場合は、pgpool が PostgreSQL の認証プロトコルをサポートしているため、pool_passwd ファイルを構成する必要があります。

    cd /etc/pgpool-II-12  
    
    # 次のコマンドを実行します。  
    #pg_md5 --md5auth --username=username password  
    # digoal ユーザーと nobody ユーザーのパスワードを生成します。パスワードは pool_passwd ファイルに自動的に書き込まれます。 
    pg_md5 --md5auth --username=digoal "xxxxxxx"  
    pg_md5 --md5auth --username=nobody "xxxxxxx"  
  4. システムを使用して pool_passwd ファイルを自動的に生成します。

    cd /etc/pgpool-II-12  
    cat pool_passwd   
    digoal:md54dd55116da69d3d03bf2e3a1470564f9  
    nobody:md54240e76623e2511d607f431043a5d1c1 
  5. pool_hba ファイルを構成します。

    cd /etc/pgpool-II-12  
    cp pool_hba.conf.sample pool_hba.conf  
    vi pool_hba.conf  
    
    host all all 0.0.0.0/0 md5  
  6. pcp.conf ファイルを構成します。

    説明

    pcp.conf ファイルは、pgpool のユーザーとパスワードを管理するために使用されます。 RDS インスタンスのユーザーとパスワードとは関係ありません。

    cd /etc/pgpool-II-12  
    
    # pg_md5 abc  # このコマンドでは、パスワードを abc に設定し、MD5 暗号化アルゴリズムを使用して暗号化します。   
    900150983cd24fb0d6963f7d28e17f72  
    
    cp pcp.conf.sample pcp.conf  
    
    vi pcp.conf  
    
    USERID:MD5PASSWD  
    manage:900150983cd24fb0d6963f7d28e17f72  # このコマンドでは、manage ユーザーは PCP を管理するために使用されます。 
  7. pgpool を起動します。

    cd /etc/pgpool-II-12  
    pgpool -f ./pgpool.conf -a ./pool_hba.conf -F ./pcp.conf  
    説明

    pgpool のログを表示する場合は、次のコマンドを実行します。

    less /var/log/messages   
  8. pgpool を使用して RDS インスタンスに接続します。

    psql -h 127.0.0.1 -p 8001 -U digoal postgres  

    Connection established

FAQ

  • 読み書き分離が実装されているかどうかをテストするにはどうすればよいですか?

    pgpool を使用して RDS インスタンスに接続し、pg_is_in_recovery() 関数を呼び出すことができます。次に、接続を閉じ、接続を再確立し、pg_is_in_recovery() 関数を再度呼び出します。値 false と値 true が順番に受信された場合、pgpool はリクエストをプライマリ RDS インスタンスにルーティングしてから、読み取り専用 RDS インスタンスにルーティングします。これは、読み書き分離が成功したことを示します。

  • pgpool はレイテンシを増加させますか?

    pgpool はレイテンシをわずかに増加させます。このトピックで設定したテスト環境では、レイテンシは約 0.12 ミリ秒増加します。

  • pgpool は読み取り専用 RDS インスタンスのレイテンシとヘルスをどのようにチェックしますか?

    • 読み取り専用 RDS インスタンスの WAL 再生レイテンシが指定された制限を超えると、pgpool は SQL リクエストを読み取り専用インスタンスにルーティングするのを停止します。 pgpool は、読み取り専用インスタンスの WAL 再生レイテンシが指定された制限を下回ったことを検出した後にのみ、SQL リクエストを読み取り専用インスタンスにルーティングすることを再開します。

      説明

      プライマリ RDS インスタンスに接続し、現在の WAL データレコードが書き込まれている場所をクエリできます。この場所は、ログシーケンス番号 (LSN) 1 と呼ばれます。次に、読み取り専用 RDS インスタンスに接続し、現在の WAL データレコードが再生されている場所をクエリします。この場所は、LSN 2 と呼ばれます。 LSN 1 と LSN 2 の間のバイト数を得ることができます。この数はレイテンシを示します。

    • pgpool は読み取り専用 RDS インスタンスのヘルスを監視します。読み取り専用 RDS インスタンスが異常な場合、pgpool はリクエストを読み取り専用インスタンスにルーティングするのを停止します。

  • pgpool を停止し、pgpool の構成を再ロードするにはどうすればよいですか?

    pgpool --help コマンドを実行して、pgpool で使用されるコマンドの詳細情報を取得します。例:

    cd /etc/pgpool-II-12  
    pgpool -f ./pgpool.conf -m fast stop   
  • 複数の読み取り専用 RDS インスタンスがプライマリ RDS インスタンスに接続されている場合、pgpool をどのように構成すればよいですか?

    接続されているすべての読み取り専用 RDS インスタンスの構成を pgpool.conf ファイルに追加します。例:

    backend_hostname1 = 'xx.xx.xxx.xx'  
    backend_port1 = 8002  
    backend_weight1 = 1  
    backend_data_directory1 = '/data01/pg12_8002/pg_data'  
    backend_flag1 = 'DISALLOW_TO_FAILOVER'  
    backend_application_name1 = 'server1'  
    
    backend_hostname2 = 'xx.xx.xx.xx'  
    backend_port1 = 8002  
    backend_weight1 = 1  
    backend_data_directory1 = '/data01/pg12_8002/pg_data'  
    backend_flag1 = 'DISALLOW_TO_FAILOVER'  
    backend_application_name1 = 'server1'  
  • pcp を使用して読み取り専用 RDS インスタンスのステータスを表示するにはどうすればよいですか?

    pcp を使用して読み取り専用 RDS インスタンスのステータスを取得するには、次のコマンドを実行します。

    # pcp_node_info -U manage -h /tmp -p 9898 -n 1 -v  
    パスワード: パスワードを入力します。  
    
    
    ホスト名               : 127.0.0.1  
    ポート                   : 8002  
    ステータス                 : 2  
    重み                 : 0.500000  
    ステータス名            : up  
    ロール                   : スタンバイ  
    レプリケーション遅延      : 0  
    レプリケーション状態      :   
    レプリケーション同期状態 :   
    最後のステータス変更     : 2020-02-29 00:20:29  
  • 読み書き分離のために pgpool が使用するリスニングポートはどれですか?

    読み書き分離のために pgpool が使用するリスニングポートは次のとおりです。

    • プライマリ RDS インスタンス: ポート 3389

    • セカンダリ RDS インスタンス: ポート 8002

    • pgpool: ポート 8001

    • pcp: ポート 9898