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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM