zoukankan      html  css  js  c++  java
  • PostgreSQL12使用pgpool-II配置读写分离集群

    pgpool-II是一个集连接池、主备切换与负载均衡于一身的数据库连接件,本文以配置读写分离集群为例,介绍pgpool-II的配置方式。

    本文使用的版本为PostgreSQL12.1,由于PG12版本不再支持通过recovery.conf的方式进行主备切换,如果数据目录中存在recovery.conf,则数据库无法启动。

    (一) 准备工作

    1.本例中,两台数据节点IP与端口号为

    Harvest1 192.168.100.1:5432
    
    Harvest2 192.168.100.2:5432

    保证服务器都安装了PostgreSQL12.1。

     

    提示:

    在典型配置中,可以将pgpool配置在一台独立的节点上。本文为简便起见,将pgpool部署在master节点。

     

    2.使用yum下载rpm包安装pgpool-II,注意下载的安装包须与PG的版本一致。安装包目录详见https://www.pgpool.net/yum/rpms/4.1/redhat/rhel-8-x86_64/

    [root@Harvest1 ~] yum install https://www.pgpool.net/yum/rpms/4.1/redhat/rhel-8-x86_64/pgpool-II-pg12-4.1.0-1pgdg.rhel8.x86_64.rpm

    提示:

    使用rpm安装的pgpool-II的数据目录在/etc/pgpool-II路径下。

     

    (二) 配置双机环境-主节点

    在Harvest1的postgresql.conf中添加以下配置,将wal_level配置为hot_standy表示两台数据库进行热备份,archive_mode表示开启归档模式。

    wal_level = hot_standby
    
    checkpoint_timeout = 5min
    
    archive_mode = on
    
    max_wal_senders = 3
    
    wal_keep_segments = 16 

    在数据库中创建用于同步数据的用户rep:

    postgres#= CREATE USER rep REPLICATION LOGIN ENCRYPTED PASSWORD '123456';

    为rep用户修改pg_hba.conf:

    host replication rep 0.0.0.0/0 md5

     

    修改完成后重启数据库

    pg_ctl restart

    (三) 配置双机环境-备份节点

    停止备份节点

    pg_ctl stop

    清空备份节点$PGDATA目录下的所有文件,执行命令行工具pg_basebackup:

    pg_basebackup -R -D /home/postgres/data/ -Fp -Xs -v -P -h 192.168.100.1 -p 5432 -U rep

    备份完成后启动备份数据库,查看流复制同步效果

    postgres#= SELECT pg_is_in_recovery(); 

     

    (四)配置pgpool-II

    修改/etc/pgpool-II目录下的pgpool.conf:

    # 以下为后端连接参数
    
    backend_hostname0 = '192.168.26.128' 
    
    backend_port0 = 5432
    
    backend_weight0 = 1 
    
    backend_flag0 = 'ALLOW_TO_FAILOVER' 
    
    backend_hostname1 = '192.168.26.129' 
    
    backend_port1 = 5432
    
    backend_weight1 = 100
    
    backend_flag1 = 'ALLOW_TO_FAILOVER'
    
    #pgpool的hba参数
    
    enable_pool_hba = on 
    
    pool_passwd = 'pool_passwd'
    
    #开启语句日志
    
    log_statement = on 
    
    log_per_node_statement = on 
    
     
    
    log_destination = 'syslog'
    
    print_timestamp = on
    
    log_connections = on
    
    log_hostname = off
    
    log_standby_delay = 'always'
    
    syslog_facility = 'LOCAL0'
    
    syslog_ident = 'pgpool'
    
    #开启附LB模式、流复制模式,设置拒绝的函数与SQL
    
    load_balance_mode = on 
    
    ignore_leading_white_space = on 
    
    white_function_list = '' 
    
    black_function_list = 'currval,lastval,nextval,setval'
    
    master_slave_mode = on 
    
    master_slave_sub_mode = 'stream'

     

    (五)开启系统日志

    pgpool的日志默认写到stderr,可以如上文中设置为syslog中。但由于默认情况下写入LOCAL0级别的日志会被丢弃,故要在/etc/rsyslog.conf中修改该syslog指定的输出路径:

    local0.* /var/pgpool/pgpool.log

     

    (六)pgpool秘钥

    1.生成pgpool-II管理秘钥

    pg_md5 -u sup_pool 123456

    生成结果如:

    e10adc3949ba59abbe56e057f20f883e

     

    2.在pcp.conf中添加秘钥

    sup_pool: e10adc3949ba59abbe56e057f20f883e

     

    配置pool_hba.conf,注意认证方式必须为MD5

    host all all 192.168.0.0/16 md5

     

    修改pool_passwd

    默认情况下,使用pg_md5即可向pass_wd写入用户与密码,例如:

    pg_md5 --md5auth --username=postgres 123456

     

    至此pgool-II配置完毕。

     

    (七)pgool-II的启动与停止

    启动pgpool:

    pgpool -n -d > /var/pgpool/pgpool.log 2>&1 &

    停止pgpool:

    pgpool stop

    若要强制定制pgpool:

    pgpool stop -m fast

     

    启动pgpool后,若连接正常,则会提示:

    pgpool-II successfully started. version x.x.x
    
    find_primary_node: primary node id is 0

    例如:

     

    (八)查看pgpool节点id及使用情况:

    在pgpool中,默认的端口为9999,可以通过修改pgpool.conf来更改。

     

    本例中,由于本地有psql,故可以直接使用psql连接pgpool:

    psql -p 9999 -U postgres

     

    通过以下SQL查询节点id:

    show pool_nodes;

     

     
  • 相关阅读:
    C#零相位数字滤波器,改写自Matlab函数filtfilt
    [收藏]C语言格式化字符串
    C#调用PMAC运动控制卡的pcomm32动态链接库的数据类型转换
    [收藏]常见逻辑电平标准
    主要软件作品展示
    新一年希望做的事情
    单元测试的思维导图
    SQLite简单教程
    关于动态执行SQL Statement on ISeries
    突然发现一个 IBM.Data.DB2.ISeries的一个小问题,也是很头痛的问题
  • 原文地址:https://www.cnblogs.com/MsHarvest/p/12574983.html
Copyright © 2011-2022 走看看