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)的更多相关文章

  1. PostgreSQL Replication之第八章 与pgbouncer一起工作(4)

    8.4 提升性能 从一开始考虑pgbouncer的时候,性能就是一个关键的因素.为了确保高性能,有些问题必须认真对待.首先,确保参与您设置的所有节点相互之间的距离较近.这对于降低网络往返时间有很多的帮 ...

  2. PostgreSQL Replication之第八章 与pgbouncer一起工作(3)

    8.3 配置您的第一个pgbouncer设置 一旦我们已经完成了pbouncer的编译与安装,我们可以容易地启动它.要做到这一点,我们已经在一个本地实例(p0和p1) 建立了两个数据库.在本例中,执行 ...

  3. PostgreSQL Replication之第八章 与pgbouncer一起工作(2)

    8.2 安装pgbouncer 在我们深入细节之前,我们将看看如何安装pgbouncer.正如PostgreSQL一样,您可以采取两种途径.您可以安装二进制包或者直接从源代码编译.在我们的例子中,我们 ...

  4. PostgreSQL Replication之第八章 与pgbouncer一起工作(1)

    当您在使用大规模的设施工作,可能有时候,您必须处理许多并发打开的连接.没有人会使用十台服务器来为两个并发用户提供服务--在许多情况下,这根本没有意义.大量的设施通常会处理成百上千的并发连接.引入连接池 ...

  5. PostgreSQL Replication之第九章 与pgpool一起工作(1)

    在前面的章节中,我们已经能够深入地理解了pgbouncer,同时也学会了如何使用它来尽可能地优化复制设置.在本章我们将了解一个经常被称作与pgbouncer相对应的工具.尽管pgpool的思想与pgb ...

  6. PostgreSQL Replication之第九章 与pgpool一起工作(7)

    9.7 处理故障转移和高可用 可以使用pgpool来解决的一些明显的问题是高可用性和故障转移.一般来讲,有使用pgpool或者不使用pgpool可以用来处理这些问题的各种方法. 9.7.1 使用Pos ...

  7. PostgreSQL Replication之第九章 与pgpool一起工作(6)

    9.6 运行pgpool和流复制 pgpool也可以和除了语句级别的复制之外的流复制一起使用.一个完美的方案是使用PostgreSQL的板载复制和仅仅使用pgpool的负载均衡与连接池. 实际上,这样 ...

  8. PostgreSQL Replication之第九章 与pgpool一起工作(4)

    9.4 设置复制和负载均衡 要配置pgpool,我们可以简单地使用一个包含一种典型的配置信息的已经存在的样本文件,将它拷贝到我们的配置目录并修改之: $ cp /usr/local/etc/pgpoo ...

  9. PostgreSQL Replication之第九章 与pgpool一起工作(3)

    9.3 理解pgpool的架构 一旦我们安装了pgpool,是时候来讨论软件架构了.从一个用户的角度看,pgpool就像一个 正常的数据库服务器,您可以想连接任何其他服务器一样连接到它: pgpool ...

随机推荐

  1. 关于 折半查找 while 条件 &lt; , &lt;=

    int bin_search(int a[],int len,int key) { int low=0; int high=len-1; while(low<=high) //若为low< ...

  2. C++编写绚丽的界面

    近期项目特别的操蛋,要用C++写出各种变态界面,今晚上赶工总算有了一点小的收货. 因为没有时间去写博文 ,等项目期完了  准备 写一系列 怎样在C++/win32/mfc开发高质量  可扩展界面组建 ...

  3. 什么是域名的TTL值? ——一条域名解析记录在DNS缓存服务器中的存留时间

    什么是域名的TTL值? 转自:http://hizip.net/index.php/archives/20/TTL(Time-To-Live),就是一条域名解析记录在DNS服务器中的存留时间.当各地的 ...

  4. Android UnitTest FrameWork

    Android test suites基于Junit,可以直接使用Junit测试不使用android api的class,也可以使用android的Junit extensions测试android ...

  5. Codeforces 930A. Peculiar apple-tree (dfs)

    题目: 代码: #include <bits\stdc++.h> using namespace std; ]; //b[i]表示距离1号花絮i步的花絮的个数 map <int, l ...

  6. eclipse用tomcat发布网站的目录

    用eclipse添加的tomcat发布网站时,在tomcat安装目录中的webapps时找不到发布的网站.这是由于eclipse的默认配置,把项目发布到别的文件夹中了.如果想发布到webapps里面, ...

  7. BZOJ 3790 神奇项链(manacher+贪心)

    3790: 神奇项链 Time Limit: 10 Sec  Memory Limit: 64 MB Description 母亲节就要到了,小 H 准备送给她一个特殊的项链.这个项链可以看作一个用小 ...

  8. HashMap和Hashtable的区别。

    HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable ...

  9. VMware exsi 虚拟化嵌套

    默认情况下exsi 虚拟化嵌套是没开启的 需要我们连接exsi主机,从后台找到对应的虚拟机修改配置文件开启虚拟化功能 1.连接exsi主机,开启ssh功能 2.ssh到exsi主机,修改配置文件 查找 ...

  10. caioj 1204 Catalan数(模板)

    题目中对卡特兰数的总结很不错 以下copy自题目 Catalan数列:1,1,2,5,14,42,(前面几个要背) 即 h(0)=1,h(1)=1,h(2)=2,h(3)=5...公式:h(n)=C( ...