注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

Pgbouncer: 如何获取客户端连接 IP  

2012-03-20 11:24:03|  分类: Postgres基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

       
    
             由于 PostgreSQL 采用进程模式,大量连接对数据库性能会产生较大影响,在大量连接情况下,
一般会在数据库和应用程序之间配置 pgbouncer,pgbouncer 可以配置在数据库主机上,也可以配置在
单独一台服务器上,但是采用了 pgbouncer 后,在维护方面和以前有些区别:


--1 环境信息
PostgreSQL  版本:      PostgreSQL 9.1.2
pgbouncer   版本:      pgbouncer version 1.4.2
PostgreSQL  原库IP      192.168.1.12
pgbouncer   IP          192.168.1.10


--2 区别一 pg_hba.conf 功能减弱
      采用了 pgbouncer 卑鄙,pg_hba.conf 功能减弱,这里说减弱,是因为原库上 pg_hba.conf
可以配置,但已经形同虚设,不能发挥原有的作用,因为可以配置原库上的 pg_hba.conf ,配置
成只允许 pgbouncer,原库 pg_hba.conf 配置如下。

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     trust

#Pgbouncer IP
host all all 192.168.1.10/32 md5

   
 
     尽管在原库上配置了 pg_hba.conf ,只允许 pgbouncer主机连库, 但是不能限制其它IP通过
 pg_bouncer  连接数据库,从这个角度来说,采用 pgbouncer 无疑是增加了安全漏洞,当然可以
 采用其它措施弥补。
 
 
--3 区别二 主库上无法查询应用服务器 IP
    
         在数据库维护过程中,经常需要查询某个库的业务服务器IP信息,查询哪些服务器在连接数据库,
采用了 pgbouncer 后,这方面的查询没以前方便,例如在主库上查询连接 skytf 库的客户端 IP 信息,
如下所示:

 postgres=# select datname,usename ,client_addr,client_port from pg_stat_activity where datname='skytf';
  datname  |  usename  |   client_addr   | client_port
-----------+-----------+-----------------+-------------
 skytf | skytf | 192.168.1.10 |       32119
 skytf | skytf | 192.168.1.10 |       18583
 skytf | skytf | 192.168.1.10 |       31723
 skytf | skytf | 192.168.1.10 |       32363
 skytf | skytf | 192.168.1.10 |       58929
 skytf | skytf | 192.168.1.10 |       58930
 skytf | skytf | 192.168.1.10 |       58931
 skytf | skytf | 192.168.1.10 |       58932
 skytf | skytf | 192.168.1.10 |       58933
 skytf | skytf | 192.168.1.10 |       58934
 skytf | skytf | 192.168.1.10 |       58935
 skytf | skytf | 192.168.1.10 |       58936
 skytf | skytf | 192.168.1.10 |       58937
 skytf | skytf | 192.168.1.10 |       58938
    
 
     从上面查询结果来看,上面的 clietn_addr 只显示 pgbouncer 的 IP,而无法显示真正的客户端 IP,
那么如何获取客户端的IP呢? 有两种方法:


--4 方法一: 登陆 pgbouncer 控制台获取客户端IP信息
  
            登陆 pgbouncer 控制台,并且执行 "show clients" 命令。

 postgres@db> psql -h 127.0.0.1 -p 1922  pgbouncer pgbouncer_admin
psql (9.1.2, server 1.4.2/bouncer)
WARNING: psql version 9.1, server version 1.4.
         Some psql features might not work.
Type "help" for help.

pgbouncer=# show clients;
 type |      user       |  database  | state  |         addr          | port  |       local_addr       | local_port |    connect_tim
e     |    request_time     |    ptr     |    link   
------+-----------------+------------+--------+-----------------------+-------+------------------------+------------+---------------
------+---------------------+------------+------------
 C    | skytf       | skytf  | active | ::ffff:192.168.1.15 | 57791 | ::ffff:192.168.173.215 |       1922 | 2012-03-20 06:
45:28 | 2012-03-20 10:36:31 | 0x1350c9d0 | 0x1352e330

   
    备注:为了格式输出,上面只列出一条记录,例如上面可以看出连接 skytf 库的业务服务器IP为
              192.168.1.15,显然通过 pgbouncer 查询客户端 IP 不太方便。

 
--5 方法二:通过 pgbouncer 日志查看

      另外一种方法可以通过   pgbouncer 日志查看, 如果 pgbouncer 日志功能没开启,那么需要
在配置文件里配置 logfile 参数,这里不详细解释了。

  评论这张
 
阅读(26286)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016