zoukankan      html  css  js  c++  java
  • 3、pgpool-II 内置复制模式

    一、Pgpool-II 内置复制原理

    在 pgpool-II 内置复制模式;架构图如下:

    1. 对数据库的写操作直到所有 PostgreSQL 服务器完成写操作后才返回,对写模式性能有损耗
    2. 对数据库的读操作可以发送任意一台,并不是随机分发的;可以通过 show pool_nodes 查看,可以实现读的负载均衡
    3. 该复制级别是数据库集
    4. 该模式下 pgpool 相当于 连接池

    二、Pgpool-II 内置复制配置示例

    Pgpool-II 内置复制示例环境

    角色 ip 端口 数据目录
    pgpool 192.168.1.221 9999
    db1 192.168.1.221 6000 /data/postgres/data
    db2 192.168.1.221 6001 /data/postgres/data1

    1、在 两个实例下 分别创建数据库pgpool01,数据库用户pgpool

    postgres=# create user pgpool password '123456';
    CREATE ROLE
    postgres=# create database pgpool01 owner pgpool;
    CREATE DATABASE
    

    2、在数据库创建insert_lock表

    [postgres@node3 ~]$ psql -p 6001 -f insert_lock.sql pgpool01 pgpool
    psql:insert_lock.sql:3: ERROR:  schema "pgpool_catalog" does not exist
    CREATE SCHEMA
    CREATE TABLE
    INSERT 0 1
    GRANT
    GRANT
    GRANT
    GRANT
    

    3、生成密码文件 pool_passwd

    [pgpool@node3 etc]$ pg_md5 --md5auth -u pgpool -p
    password:
    

    4、配置 pgpool.conf 文件

    listen_addresses = '*'
    backend_hostname0 = '192.168.1.221'
    backend_port0 = 6000
    backend_weight0 = 1
    backend_data_directory0 = '/data/postgres/data'
    backend_flag0 = 'ALLOW_TO_FAILOVER'
    backend_application_name0 = 'server0'
    backend_hostname1 = '192.168.1.221'
    backend_port1 = 6001
    backend_weight1 = 1
    backend_data_directory1 = '/data/postgres/data1'
    backend_flag1 = 'ALLOW_TO_FAILOVER'
    backend_application_name1 = 'server1'
    enable_pool_hba = on
    #管理密码文件
    pool_passwd = 'pool_passwd'
    #pid文件存放炉具
    pid_file_name = '/opt/pgpool/pgpool.pid'
    # 管理日志存放路径
    logdir = '/opt/pgpool/log/pgpool'
    #要启用数据库复制功能,需要设置 pgpool.conf 文件中的 replication_mode 为 on
    #当 replication_mode 被设置为 on,pgpool-II 将发送一份接收到的查询的拷贝到所有的数据库节点
    replication_mode = on
    #当 load_balance_mode 被设置为 on,pgpool-II 将在数据库节点之间分发 SELECT 查询。
    load_balance_mode = on
    # 内置复制模式不支持该参数
    #failover_when_quorum_exists = on
    

    5、启动 pgpool
    启动 pgpool;并进入 pgpool01 数据库;创建表 lottu01

    [pgpool@node3 pgpool]$ pgpool
    [pgpool@node3 pgpool]$ psql -h 192.168.1.221 -p 9999 -d pgpool01 pgpool
    Password for user pgpool:
    psql (12.2)
    Type "help" for help.
    pgpool01=> create table lottu01(id int, info text, regtime timestamp);
    CREATE TABLE
    pgpool01=> insert into lottu01 values (1, 'pgpool native replication', now());
    INSERT 0 1
    

    6、查看后端数据库
    进入后段数据库进行数据验证

    [postgres@node3 ~]$ psql -p 6000 pgpool01 pgpool
    psql (12.2)
    Type "help" for help.
    pgpool01=> set PROMPT1 '%`echo db6000=`'
    db6000=select * from lottu01;
    id |           info            |          regtime
    ----+---------------------------+----------------------------
    1 | pgpool native replication | 2020-11-13 16:05:30.190939
    (1 row)
    db6000=q
    [postgres@node3 ~]$ psql -p 6001 pgpool01 pgpool
    psql (12.2)
    Type "help" for help.
    pgpool01=> set PROMPT1 '%`echo db6001=`'
    db6001=select * from lottu01;
    id |           info            |          regtime
    ----+---------------------------+----------------------------
    1 | pgpool native replication | 2020-11-13 16:05:30.190939
    (1 row)
    # 或者
    for port in 6000 6001; do
    echo $port
    psql -c "SELECT count(1) FROM lottu01" -p $port pgpool01 
    done
    

    参考文献
    https://www.pgpool.net/docs/latest/en/html/example-basic.html#EXAMPLE-CONFIGS-REPLICATION

  • 相关阅读:
    不要同时使用ReentrantLock类与synchronized关键字锁定会修改同一个资源的不同方法
    java中volatile关键字的含义
    浅谈操作系统对内存的管理
    Java线程池使用说明
    写在清明节之后
    PY一天一学
    24小时只睡了1个小时
    关于团队关于吐槽
    出尔反尔
    时间都去哪儿了?
  • 原文地址:https://www.cnblogs.com/lottu/p/14069458.html
Copyright © 2011-2022 走看看