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

  • 相关阅读:
    LeetCode Best Time to Buy and Sell Stock
    LeetCode Scramble String
    LeetCode Search in Rotated Sorted Array II
    LeetCode Gas Station
    LeetCode Insertion Sort List
    LeetCode Maximal Rectangle
    Oracle procedure
    浏览器下载代码
    Shell check IP
    KVM- 存储池配置
  • 原文地址:https://www.cnblogs.com/lottu/p/14069458.html
Copyright © 2011-2022 走看看