PostgreSQL Replication之第八章 与pgbouncer一起工作(5)
8.5 维护 pgbouncer
除了我们在本章已经说明的,pgbouncer有一个很好的能够执行基本管理和监控任务的交互式管理界面。
它是如何工作的呢?pgbouncer提供给您一个虚假的称为pgbouncer的数据库。它不能被用于查询,因为它只提供简单的语法来处理基本的管理任务。
[如果您正在使用pgbouncer,请不要使用普通的数据库名为pgbouncer—它将会导致混乱,它将不会产生好处。]
8.5.1 配置管理接口
为了配置这个接口,我们必须改写我们的配置文件。在我们的例子中,我们将简单地添加一行到配置文件(在该文件的pgbouncer部分):
admin_users = zb
我们想让Zoltan,用户名为zb,管理管理数据库,因此我们简单地把他在这里。如果我们想让许多用户都能够访问系统,我们可以把他们一个一个地列出来(用逗号隔开)。
重新启动pgbouncer,我们可以尝试连接到系统:
psql -p 6432 -U zb pgbouncer
psql (9.2.4, server 1.5.4/bouncer)
WARNING: psql version 9.2, server version 1.5.
Some psql features might not work.
Type "help" for help.
不要担心警告信息—它只是告诉我们,我们已经连接到一个看起来不像一个原生的PostgreSQL数据库实例的东西。
8.5.2 使用管理数据库
一旦我们连接到这个虚拟的管理数据库,我们可以检查哪个命令是可用的。要做到这一点,我们可以运行SHOW HELP:
pgbouncer=# SHOW HELP;
NOTICE: Console usage
DETAIL:
SHOW HELP|CONFIG|DATABASES|POOLS|CLIENTS|SERVERS|VERSION
SHOW STATS|FDS|SOCKETS|ACTIVE_SOCKETS|LISTS|MEM
SHOW DNS_HOSTS|DNS_ZONES
SET key = arg
RELOAD
PAUSE [<db>]
RESUME [<db>]
KILL <db>
SUSPEND
SHUTDOWN
SHOW
正如我们所提到的,系统将只接受管理命令;在这个虚拟数据库中正常的SELECT语句是不可用的。
pgbouncer=# SELECT 1+1;
ERROR: invalid command 'SELECT 1+1;', use SHOW HELP;
8.5.3 提取运行时信息
您可以使用管理界面做的一件重要事情是弄清楚为系统配置了那些数据库。要做到这一点,您可以调用SHOW DATABASES 命令:
pgbouncer=# \x
Expanded display is on.
pgbouncer=# SHOW DATABASES;
-[ RECORD 1 ]+----------
name | p0
host | localhost
port | 5432
database | p0
force_user |
pool_size | 20
reserve_pool | 0
-[ RECORD 2 ]+----------
name | p1
host | localhost
port | 5432
database | p1
force_user |
pool_size | 20
reserve_pool | 0
-[ RECORD 3 ]+----------
name | pgbouncer
host |
port | 6432
database | pgbouncer
force_user | pgbouncer
pool_size | 2
reserve_pool | 0
正如您可以看到的,我们有两个生产数据库和虚拟pgbouncer数据库 。这里重要的看点是,包含池大小以及预留池大小的列表。看看在您的bouncer设置中在做什么,是一个很好的检查。
一旦您已经检查了您系统上的数据库列表,您可以把您的注意力转移到您的系统中的客户端。为了提取活跃的客户的列表,pgbouncer提供了SHOW CLIENTS指令:
pgbouncer=# \x
Expanded display is on.
pgbouncer=# SHOW CLIENTS;
-[ RECORD 1 ]+--------------------
type | C
user | zb
database | pgbouncer
state | active
addr | unix
port | 6432
local_addr | unix
local_port | 6432
connect_time | 2013-04-29 11:08:54
request_time | 2013-04-29 11:10:39
ptr | 0x19e3000
link |
目前,我们恰好有一个到pgbouncer数据库的用户连接。我们可以看到连接来自哪里以及它是何时创建的。如果系统上有成百上千的服务器SHOW CLIENTS是特别重要的。
有时候,从系统中提取汇总信息是非常有用的。SHOW STATUS将为您提供您的系统在做什么事情的=统计信息。它显示平均执行了多少请求和执行了多少查询:
pgbouncer=# SHOW STATS;
-[ RECORD 1 ]----+----------
database | pgbouncer
total_requests | 3
total_received | 0
total_sent | 0
total_query_time | 0
avg_req | 0
avg_recv | 0
avg_sent | 0
avg_query | 0
最后,我们可以看一下我们面临的内存消耗。如果SHOW MEM被执行,pgbouncer将返回这个信息:
pgbouncer=# SHOW MEM;
name | size | used | free | memtotal
--------------+------+------+------+----------
user_cache | 184 | 4 | 85 | 16376
db_cache | 160 | 3 | 99 | 16320
pool_cache | 408 | 1 | 49 | 20400
server_cache | 360 | 0 | 0 | 0
client_cache | 360 | 1 | 49 | 18000
iobuf_cache | 2064 | 1 | 49 | 103200
(6 rows)
正如您可以看到的,pgbouncer真的是轻量级的,和其它的连接池相比不消耗太多的内存。
8.5.4 挂起与恢复操作
使用交互式虚拟数据库的重要原因之一是能够挂起和恢复正常操作。在系统运行时重新加载配置文件是可能的,正如下面的例子所显示的:
pgbouncer=# RELOAD;
RELOAD
RELOAD会重新读取配置文件,使得没有必要为了大多数小的改变重新启动整个bouncer。如果有一个新用户或者类似的事情,这是特别有用的。
pgbounce的另外一个特征是使操作停止一段时间的能力。为什么有时候有人会想要停止查询呢?让我们假设您想在基础设施的某个地方做一个小的改变。只是简单地中断操作而不引发实际的错误。当然,您必须要小心一点,以确保您的前端基础设施可以很好地处理这样的中断。从数据库方面来看,可以手动执行。
要暂时停止查询,我们可以调用SUSPEND:
pgbouncer=# SUSPEND;
SUSPEND
一旦您完成了您的更改之后,您可以很容易地恢复正常操作:
pgbouncer=# RESUME;
RESUME
一旦这个命令被调用,您可以继续给服务器发送查询。
最后,您甚至可以从交互式的shell停止pgbouncer。强烈建议,当您这样做的时候,您要小心。
pgbouncer=# SHUTDOWN;
The connection to the server was lost. Attempting reset: Failed.
!>
该系统将立即关闭。
8.6 总结
在本章中,我们学习了如何为高度可扩展的web应用程序减少永久连接创建的开销而使用pgboucner。我们看到了如何配置系统以及我们如何使用虚拟管理数据库。
在接下来的一章,将会为您介绍pgpool,一个执行复制和连接池的工具。就像pgbouncer,pgpool是开放源代码的,可以和PostgreSQL一起使用来改善您的集群的设置。
PostgreSQL Replication之第八章 与pgbouncer一起工作(5)的更多相关文章
- PostgreSQL Replication之第八章 与pgbouncer一起工作(4)
8.4 提升性能 从一开始考虑pgbouncer的时候,性能就是一个关键的因素.为了确保高性能,有些问题必须认真对待.首先,确保参与您设置的所有节点相互之间的距离较近.这对于降低网络往返时间有很多的帮 ...
- PostgreSQL Replication之第八章 与pgbouncer一起工作(3)
8.3 配置您的第一个pgbouncer设置 一旦我们已经完成了pbouncer的编译与安装,我们可以容易地启动它.要做到这一点,我们已经在一个本地实例(p0和p1) 建立了两个数据库.在本例中,执行 ...
- PostgreSQL Replication之第八章 与pgbouncer一起工作(2)
8.2 安装pgbouncer 在我们深入细节之前,我们将看看如何安装pgbouncer.正如PostgreSQL一样,您可以采取两种途径.您可以安装二进制包或者直接从源代码编译.在我们的例子中,我们 ...
- PostgreSQL Replication之第八章 与pgbouncer一起工作(1)
当您在使用大规模的设施工作,可能有时候,您必须处理许多并发打开的连接.没有人会使用十台服务器来为两个并发用户提供服务--在许多情况下,这根本没有意义.大量的设施通常会处理成百上千的并发连接.引入连接池 ...
- PostgreSQL Replication之第九章 与pgpool一起工作(1)
在前面的章节中,我们已经能够深入地理解了pgbouncer,同时也学会了如何使用它来尽可能地优化复制设置.在本章我们将了解一个经常被称作与pgbouncer相对应的工具.尽管pgpool的思想与pgb ...
- PostgreSQL Replication之第九章 与pgpool一起工作(7)
9.7 处理故障转移和高可用 可以使用pgpool来解决的一些明显的问题是高可用性和故障转移.一般来讲,有使用pgpool或者不使用pgpool可以用来处理这些问题的各种方法. 9.7.1 使用Pos ...
- PostgreSQL Replication之第九章 与pgpool一起工作(6)
9.6 运行pgpool和流复制 pgpool也可以和除了语句级别的复制之外的流复制一起使用.一个完美的方案是使用PostgreSQL的板载复制和仅仅使用pgpool的负载均衡与连接池. 实际上,这样 ...
- PostgreSQL Replication之第九章 与pgpool一起工作(4)
9.4 设置复制和负载均衡 要配置pgpool,我们可以简单地使用一个包含一种典型的配置信息的已经存在的样本文件,将它拷贝到我们的配置目录并修改之: $ cp /usr/local/etc/pgpoo ...
- PostgreSQL Replication之第九章 与pgpool一起工作(3)
9.3 理解pgpool的架构 一旦我们安装了pgpool,是时候来讨论软件架构了.从一个用户的角度看,pgpool就像一个 正常的数据库服务器,您可以想连接任何其他服务器一样连接到它: pgpool ...
随机推荐
- Codeforces Round #252 (Div. 2)-C,D
C题就是一个简单的模拟.首先给每一个人两个.然后把剩下的都给一个人就好了. 给的时候蛇形给. #include<stdio.h> #include<string.h> #inc ...
- JavaScript-4.4函数递归之阶乘举例---ShinePans
<html> <head> <meta http-equiv="content-type" content="text/html;chars ...
- 【手势交互】9. PS Move
索尼研发体感控制技术已有10年,在过去那么多年里.尝试了3D摄像头.超声波和电磁感应等各种技术.最后还是觉得眼下的MOVE所使用的技术最为合适.PS Move是索尼于2010年9月份推出.用来让PS3 ...
- node15---cookie session
二.Cookie和Session 2.1 Cookie ● HTTP是无状态协议.简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页面,服务器无法认识到,这是同一个浏览器在访问同一个网站.每一 ...
- 【转】Android 服务器之SFTP服务器上传下载功能 -- 不错
原文网址:http://blog.csdn.net/tanghua0809/article/details/47056327 本文主要是讲解Android服务器之SFTP服务器的上传下载功能,也是对之 ...
- 使用NFS共享硬盘
1. 安装 sudo apt install nfs-kernel-server 2. 配置 sudo vi /etc/exports /mnt/NewDisk *(rw,sync,no_ ...
- vue如何给它的data值赋值
activeDisplay的值如何改变 用$set();方法 vm.$set('b', 2) 或者 Vue.set(data, 'c', 3) this.someObject = Object.ass ...
- 监控慢SQL
SELECT G.TARGET || ' ' || S.MACHINE || ' ' || ceil((G.LAST_UPDATE_TIME - G.START_TIME)*86400) FROM ...
- Python 曲线拟合
#曲线拟合 fig = plt.figure() ax = fig.add_subplot(111)#将画布分割成1行1列,图像画在从左到右从上到下的第1块 ax.plot(Num,a,label=u ...
- Mathab和Python的numpy中的数组维度
Matlab和Python的numpy在维度索引方面的不同点: 1.索引的起始点不同:Matlab起始位置的索引为1,Python为0. 2.索引的括号不同:Matlab中元素可以通过小括号表示索引, ...