PG是多进程结构,连接池可以降低连接空置的问题,提高资源利用率。
通过pgpool 管理 主从关系,实现PG的主从高可用能力。
当存在多个从库的时候,可以通过权重设置自动负载不同节点的请求,使性能达到最优。
设置连接数控制,避免过高的连接导致访问报错,当超出连接数上线后,对后续的访问进行排队等待。
通过pgpool 的管理能力,可实现自身的高可用,避免连接池本身性能问题。
在内存中缓存SQL结果。 如果一个相同的SQL,则可从缓存中返回值,提高查询性能。
资源准备:
CVM 1台,centos 7.2 64位,配置 32C64GB。
云数据库PostgreSQL,主实例 1c2GB,200GB 磁盘,只读实例2个,1c2GB,200GB磁盘,组合成一个只读实例组。
主要配置文件如下:
/etc/pgpool-II-11/pgpool.conf ,主配置文件
/etc/pgpool-II-11/pool_hba.conf,连接配置文件类似于pg_hba.conf
/etc/pgpool-II-11/pool_passwd,访问用户和密码文件,主要是配置访问用户名和密码,用于连接数据库的认证。
/etc/pgpool-II-11/pgpool.conf主要配置信息如下:
#基本连接信息
# - pgpool Connection Settings -
listen_addresses =
'*'
port =
9999
socket_dir='/var/run/pgpool-II-11'
# -管理接口配置信息,可不用配置 -
pcp_listen_addresses =
''
pcp_port =
5432
pcp_socket_dir =
'/var/run/pgpool-II-11'
# - 数据库主节点连接信息配置,重要
backend_hostname0 =
'172.27.32.11'
backend_port0 =
5432
backend_weight0 =
1
backend_data_directory0 =
'/data/pgsql11/master'
backend_flag0 =
'ALWAYS_MASTER'
backend_application_name0 =
'master'
#只读实例或者只读实例组的连接信息, 配置PG只读组的VIP
backend_hostname1 =
'172.27.32.12'
backend_port1 =
5432
backend_weight1 =
1
backend_data_directory1 =
'/data/pgsql11/ro'
backend_flag1 =
'DISALLOW_TO_FAILOVER'
backend_application_name1 =
'ro'
# - 认证登录信息 -
enable_pool_hba = on
pool_passwd =
'pool_passwd'
# 相关文件信息
pid_file_name =
'/var/run/pgpool-II-11/pgpool.pid'
# 复制模式
replication_mode = off
#load balance模式是否开启
load_balance_mode = on
# 主从模式是否开起(重要,读写分离相关)
master_slave_mode = on
master_slave_sub_mode =
'stream'
# 健康检查是否开启,主要用于fail over功能
health_check_period =
0
health_check_timeout =
20
health_check_user =
'nobody'
health_check_password =
''
health_check_database =
''
# 日志相关配置
log_destination =
'syslog'
log_connections = on
log_hostname = on
log_statement = on
log_per_node_statement = on
pool_hba.conf文件配置,类似于pg_hba.conf文件:
在文件末尾追加下列内容即可:host all all 0.0.0.0/0 md5 |
---|
pool_passwd用户名和密码信息,使用下列语句执行即可生成此文件:
pg_md5 --md5auth --username=pgpool pgpool@123 |
---|
完成配置后,执行服务启动语句即可启动pg_pool。
systemctl start pgpool-II-11.service
启动服务后,可通过 systemctl status pgpool-II-11.service 看到服务的启动情况。
\set aid random_gaussian(1, :range,
10.0)
\set bid random(1,
1
* :scale)
\set tid random(1,
10
* :scale)
\set delta random(-5000,
5000)
SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
SELECT tbalance FROM pgbench_tellers WHERE tid = :tid;
SELECT bid,aid,delta,mtime FROM pgbench_history WHERE tid = :tid;
UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
cat /var/log/messages |grep
"DB node id: 0"
Aug
30
22:24:49
VM-32-9-centos pgpool[3968]: [25447-1]
2021-08-30
22:24:49: pid
3968: LOG: DB node id:
0
backend pid:
33553
statement: BEGIN;
Aug
30
22:24:49
VM-32-9-centos pgpool[5126]: [25656-1]
2021-08-30
22:24:49: pid
5126: LOG: DB node id:
0
backend pid:
33531
statement: UPDATE pgbench_tellers SET tbalance = tbalance + -651
WHERE tid =
42973;
Aug
30
22:24:49
VM-32-9-centos pgpool[3974]: [25559-1]
2021-08-30
22:24:49: pid
3974: LOG: DB node id:
0
backend pid:
33551
statement: END;
……
cat /var/log/messages |grep
"DB node id: 1"
Sep
1
12:03:25
VM-32-9-centos pgpool[20505]: [26250-1]
2021-09-01
12:03:25: pid
20505: LOG: DB node id:
1
backend pid:
20410
statement: SELECT abalance FROM pgbench_accounts WHERE aid =
45648796;
Sep
1
12:03:25
VM-32-9-centos pgpool[20520]: [27210-1]
2021-09-01
12:03:25: pid
20520: LOG: DB node id:
1
backend pid:
20411
statement: SELECT abalance FROM pgbench_accounts WHERE aid =
56012538;
Sep
1
12:03:25
VM-32-9-centos pgpool[20522]: [28362-1]
2021-09-01
12:03:25: pid
20522: LOG: DB node id:
1
backend pid:
20401
statement: SELECT abalance FROM pgbench_accounts WHERE aid =
53695003;
……
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。