Greenplum 连接管理

Greenplum 连接管理

Greenplum 连接管理5 Greenplum 连接管理5.1 客户端应用5.2数据库应用接口5.3用psql连接5.4连接问题的发现及解决5.5PgBouncer连接池配置PgBouncerPgBouncer授权文件格式为PgBouncer配置基于HBA的授权启动PgBouncer管理PgBouncer

 

5 Greenplum 连接管理

5.1 客户端应用

名称用法
createdb创建一个新数据库
createlang定义一种新的过程语言
createuser定义一个新的数据库角色
dropdb移除一个数据库
droplang移除一种过程语言
dropuser移除一个角色
psqlPostgreSQL交互式终端
reindexdb对一个数据库重建索引
vacuumdb对一个数据库进行垃圾收集和分析

在使用这些客户端应用时,用户必须通过Greenplum的Master实例连接到一个数据库。用户将需要知道目标数据库的名称、Master的主机名和端口号,还有用于连接的数据库用户名。这些信息可以在命令行上分别用选项-d、-h、 -p和-U来提供。如果找到不属于任何一个选项的参数,它将被首先解释为数据库名。

所有这些选项都有默认值,如果该选项没有被指定就会使用其默认值。默认主机是本地主机。默认 端口号是5432。默认用户名是用户的操作系统用户名,同时也是默认的数据库名。注意操作系统用户名和Greenplum数据库用户名并不需要一样。

如果默认值和实际情况不同,用户可以设置环境变量PGDATABASE、PGHOST、PGPORT和PGUSER为合适的值,或者使用一个psql~/.pgpass文件来包含常用的口令。

 

 [gpadmin@mdw greenplum-db]$ cd bin
 [gpadmin@mdw bin]$ ls
 analyzedb                   gpaddmirrors             gpconfig_modules  gpinitsystem       gpreload                        gpstart             pg_dump
 atmsort.pl                  gpbackup                 gpcopy            gpkafka            gprestore                       gpstate             pg_dumpall
 atmsort.pm                  gpbackup_ddboost_plugin  gpcopy_helper     gpload             gp_restore                      gpstop              pg_receivexlog
 changetrackingdump          gpbackup_helper          gpcrondump        gpload.py          gp_restore_agent                gpstringsubs.pl     pg_resetxlog
 clusterdb                   gpbackup_s3_plugin       gpdbrestore       gpload.pyc         gprestore_filter.py             gpsys1              pg_restore
 createdb                    gp_bsa_delete_agent      gpddboost         gplogfilter        gprestore_filter.pyc            gptransfer          pg_upgrade
 createlang                  gp_bsa_dump_agent        gpdeletesystem    gpmapreduce        gprestore_post_data_filter.py   gptransfer_modules  postgres
 createuser                  gp_bsa_query_agent       gp_df             gpmfr              gprestore_post_data_filter.pyc  initdb              postmaster
 dld.pl                      gp_bsa_restore_agent     gpdiff.pl         gpmfr.py           gpscp                           ipcclean            psql
 dropdb                      gpcheck                  gp_dump           gpmfr.pyc          gpsd                            lib                 README
 droplang                    gpcheckcat               gp_dump_agent     gpmmon             gpseginstall                    minirepro           reindexdb
 dropuser                    gpcheckcat_modules       gpexpand          gpmovemirrors      gpsmon                          openssl             test_gpmfr.py
 ecpg                        gpcheckcloud             gpfdist           gpperfmoncat.sh    gpsourcify.pl                   pg_basebackup       throttlingD.cnf
 explain.pm                  gpcheckmirrorseg.pl      gpfilespace       gpperfmon_install  gpss                            pgbouncer           throttlingD.py
 generate-greenplum-path.sh  gpcheckperf              gpgenfsmap.py     gppkg              gpssh                           pg_config           throttlingD.pyc
 get_ereport.pl              gpcheckresgroupimpl      gpgenfsmap.pyc    gp_primarymirror   gpssh-exkeys                    pg_controldata      vacuumdb
 gpactivatestandby           gpconfig                 gpinitstandby     gprecoverseg       gpssh_modules                   pg_ctl              xlogdump
 [gpadmin@mdw bin]$ ls -l crea*
 -rwxr-xr-x 1 gpadmin gpadmin 191421 Aug 10  2018 createdb
 -rwxr-xr-x 1 gpadmin gpadmin 233175 Aug 10  2018 createlang
 -rwxr-xr-x 1 gpadmin gpadmin 194607 Aug 10  2018 createuser
 [gpadmin@mdw bin]$ ls -l drop*
 -rwxr-xr-x 1 gpadmin gpadmin 189535 Aug 10  2018 dropdb
 -rwxr-xr-x 1 gpadmin gpadmin 239108 Aug 10  2018 droplang
 -rwxr-xr-x 1 gpadmin gpadmin 187329 Aug 10  2018 dropuser
 [gpadmin@mdw bin]$ ls -l psql reindexdb vacuumdb 
 -rwxr-xr-x 1 gpadmin gpadmin 1233919 Aug 10  2018 psql
 -rwxr-xr-x 1 gpadmin gpadmin  195732 Aug 10  2018 reindexdb
 -rwxr-xr-x 1 gpadmin gpadmin  111752 Aug 10  2018 vacuumdb

 

5.2数据库应用接口

用户可能想要开发用户自己的客户端应用接入到Greenplum数据库。PostgreSQL为最常用的数据库应用编程接口(API提供了数种数据库驱动,这些同样也能在Greenplum数据库中使用。这些驱动作为一个独立的下载提供。每一种驱动(除了随PostgreSQL提供的libpq)都是一个独立的PostgreSQL开发项目并且必须被下载、安装并且配置以连接到 Greenplum数据库。可用的驱动如下:

APIPostgreSQL驱动下载链接
ODBCpsqlODBChttps://odbc.postgresql.org/window.location='https://odbc.postgresql.org/').
JDBCpgjdbchttps://jdbc.postgresql.org/window.location='https://jdbc.postgresql.org/')
Perl DBIpgperlhttps://metacpan.org/release/DBD-Pgwindow.location='https://metacpan.org/release/DBD-Pg')
Python DBIpygresqlhttp://www.pygresql.org/window.location='http://www.pygresql.org/')
libpq C 库libpqhttps://www.postgresql.org/docs/9.4/libpq.htmlwindow.location='https://www.postgresql.org/docs/9.4/libpq.html')

用API访问Greenplum数据库的一般步骤是:

  1. 从合适的来源下载用户的编程语言平台以及相应的API。例如,用户可以从Oracle得到Java开发工具包(JDK)和JDBC API。

  2. 根据API规范编写用户的客户端应用。在编程时,注意Greenplum数据库中的 SQL支持这样用户才不会使用不被支持的SQL语法。 更多信息请见

    Greenplum数据库参考指南

 

5.3用psql连接

依靠用户使用的默认值或者已经设置的环境变量,下面的例子展示了如何通过psql 来访问数据库:

 $ psql -d gpdatabase -h master_host -p 5432 -U gpadmin
          
 $ psql gpdatabase
 $ psql

 

5.4连接问题的发现及解决

很多事情都可能阻止客户端应用成功地连接到Greenplum数据库。这个主题解释了一些常见的连接问题 的原因以及如何改正它们。

问题解决方案
没有用于主机或者用户的pg_hba.conf配置要允许Greenplum数据库接受远程客户端连接,用户必须配置用户的Greenplum数据库的Master实例,这样来自于客户端主机和数据库用户的连接才会被允许连接到Greenplum数据库。这可以通过在pg_hba.conf配置文件(位于Master实例的数据目录中)中增加 合适的条目就能做到。更多详细的信息请见允许访问Greenplum数据库。
Greenplum数据库没有运行Greenplum数据库的Master实例没有运行,用户将无法连接。用户可以通过在Greenplum的Master主机上运行gpstate工具来 验证Greenplum数据库系统是否正常运行。
网络问题Interconnect 超时如果用户从一个远程客户端连接到Greenplum的Master主机,网络问题可能阻止连接(例如,DNS主机名解析问题、主机系统没有运行等等)。为了确认网络问题不是原因, 可尝试从远程客户端主机连接到Greenplum的Master主机。例如:ping hostname 。 如果系统不能解析主机名和Greenplum数据库所涉及的主机的IP地址,查询和连接将会失败。对于某些操作,到Greenplum数据库Master的连接会使用localhost而其他连接使用真实的主机名,因此用户必须能解析两者。如果用户遇到这种错误,首先确认用户能够从Master主机通过网络连接到 Greenplum数据库阵列中的每一台主机。在Master和所有Segment的/etc/hosts文件中 确认有Greenplum数据库阵列所涉及所有主机的正确的主机名和IP地址。IP 127.0.0.1 必须解析为localhost。
已有太多客户端连接默认情况下,Greenplum数据库被配置为在Master和每个Segment上分别允许最多250和 750个并发用户连接。导致该限制会被超过的连接尝试将被拒绝。这个限制由Greenplum数据库Master的 postgresql.conf配置文件中的max_connections参数控制。 如果用户为Master更改了这个设置,用户还必须在Segment上做出适当的更改。

5.5PgBouncer连接池

PgBouncer工具可以管理PostgreSQL和Greenplum数据库连接的连接池。

PgBouncer连接池来自于PostgreSQL社区,它被包括在Greenplum数据库中。PgBouncer可以为多个数据库管理连接池,并且这些数据库可以位于不同的Greenplum数据库集群或者 PostgreSQL后端。PgBouncer会为每一种数据库用户与数据库的组合建立一个池。一个被 池化的连接只能被来自于同一个用户和数据库的另一个连接请求重用。当客户端断开连接后 PgBouncer会将连接归还给连接池以做下次重用。

PgBouncer有三种池模式来共享连接:

  • 会话池化 – 当一个客户端连接时,只要它保持连接状态,就分配给它一个连接。当该客户端断开连接时,该连接才被放回到池中。

  • 事务池化 – 在一个事务运行期间,分配一个连接给客户端。当PgBouncer发现事务完成,该连接就被放回到池中。这种模式只能被用于不使用依赖于会话的特性的应用。

  • 语句池化 – 语句池化类似于事务池化,但是不允许多语句事务。这种模式的目标是为了在客户端强制自动提交模式,且它的定位是PostgreSQL上的PL/Proxy。

配置PgBouncer

 

通过配置文件配置PgBouncer和它到Greenplum数据库的访问。配置文件通常命名为pgbouncer.ini, 提供Greenplum数据库的位置信息。pgbouncer.ini文件也指定PgBouncer的进程、连接池、授权用户和授权配置。

pgbouncer.ini

配置文件示例内容如下:

 [databases]
 postgres = host=127.0.0.1 port=5432 dbname=postgres
 pgb_mydb = host=127.0.0.1 port=5432 dbname=mydb
 ​
 [pgbouncer]
 pool_mode = session
 listen_port = 6543
 listen_addr = 127.0.0.1
 auth_type = md5
 auth_file = users.txt
 logfile = pgbouncer.log
 pidfile = pgbouncer.pid
 admin_users = gpadmin

PgBouncer授权文件格式

PgBouncer有自己的用户授权文件。用户可以在pgbouncer.ini配置文件 的auth_file属性中定义文件名。auth_file文本文件格式如下:

 "username1" "password" ...
 "username2" "md5abcdef012342345" ...

auth_file为每个用户占用一行。每行至少有两个域,两个都用双引号包裹 (" ")。第一部分定义Greenplum数据库用户名,第二部分为明文或MD5编码的密码。PgBouncer忽略改行余下的部分。

(auth_file文件格式与Greenplum数据库所用的授权信息文件 pg_auth相似。PgBouncer可以直接使用Greenplum数据库授权文件。)

使用MD5编码的密码,密码格式如下:

 "md5" + MD5_encoded(<password><username>)

可以从pg_shadow视图中获取所有Greenplum数据库用户的MD5编码密码。

为PgBouncer配置基于HBA的授权

PgBouncer支持基于HBA的授权。要为PgBouncer配置基于HBA的授权,在pgbouncer.ini配置文件中设置auth_type=hba,并在pgbouncer.ini文件中配置 HBA格式文件参数auth_hba_file。

名称为hba_bouncer.conf的PgBouncer HBA文件的内容如下:

 local       all     bouncer             trust
 host        all     bouncer      127.0.0.1/32       trust

相关pgbouncer.ini配置文件中的对应配置部分:

 [databases]
 p0 = port=15432 host=127.0.0.1 dbname=p0 user=bouncer pool_size=2
 p1 = port=15432 host=127.0.0.1 dbname=p1 user=bouncer
 ...
 ​
 [pgbouncer]
 ...
 auth_type = hba
 auth_file = userlist.txt
 auth_hba_file = hba_bouncer.conf

启动PgBouncer

用户可以在Greenplum数据库master主机或其他服务器上运行PgBouncer。如果在一台单独的服务器上 安装PgBouncer,用户可以使用PgBouncer管理客户端,通过更新PgBouncer配置文件和重载配置很容易的 切换客户端连接到standby master。

参考以下配置设置PgBouncer。

  1. 创建PgBouncer配置文件。例如,增加以下文本到文件pgbouncer.ini中:

     [databases]
     postgres = host=127.0.0.1 port=5432 dbname=postgres
     pgb_mydb = host=127.0.0.1 port=5432 dbname=mydb
     ​
     [pgbouncer]
     pool_mode = session
     listen_port = 6543
     listen_addr = 127.0.0.1
     auth_type = md5
     auth_file = users.txt
     logfile = pgbouncer.log
     pidfile = pgbouncer.pid
     admin_users = gpadmin

    该文件列出了数据库和它们连接的详细信息。该文件也配置了PgBouncer实例 有关PgBouncer配置文件内容和格式的详细信息,请参考Refer to the pgbouncer.iniwindow.location='http://47.92.231.67:8080/6-0/utility_guide/admin_utilities/pgbouncer-ini.html')参考页面。

  2. 创建授权文件。文件名应该和pgbouncer.ini文件中定义的auth_file参数名字一样,users.txt

    。每行包含一个用户名和一个密码。密码的格式应该匹配PgBouncer配置文件中定义的auth_type。如果auth_type参数为plain,密码串应该为干净的文本文件密码,例如:

    "gpadmin" "gpadmin1234"

     

    如果auth_type如下面例子中为md5,授权部分必须是MD5编码格式。 MD5编码的密码格式如下:

    "md5" + MD5_encoded(<password><username>)
  3. 开始启动pgbouncer:

    $ $GPHOME/bin/pgbouncer -d pgbouncer.ini

    -d选项代表以后台进程的形式运行PgBouncer。pgbouncer命令的 语法和选项,请见pgbouncerwindow.location='http://47.92.231.67:8080/6-0/utility_guide/admin_utilities/pgbouncer.html')参考页面。

  4. 更新客户应用连接到

    pgbouncer,以代替直接连接到Greenplum数据库服务器。例如连接到上面配置的Greenplum数据库mydb,像如下方式一样运行psql:

    $ psql -p 6543 -U someuser pgb_mydb

    -p选项的值代表用户配置的PgBouncer实例的listen_port端口号。

管理PgBouncer

PgBouncer提供一个类psql的管理控制台,可以通过指定PgBouncer端口号 和虚拟数据库名称pgbouncer来登录到PgBouncer管理控制台。该控制台接受类SQL命令,这些命令允许用户监控、重新配置和管理PgBouncer。

有关PgBouncer管理控制台命令的完整文档,请参考 PgBouncer管理控制台window.location='http://47.92.231.67:8080/6-0/utility_guide/admin_utilities/pgbouncer-admin.html')命令参考。

要开始使用PgBouncer管理控制台,请遵循下列步骤。

  1. 用psql登录到pgbouncer虚拟数据库:

    $ psql -p 6543 -U username pgbouncer

    username必须是pgbouncer.ini配置文件中admin_users参数中所设置的值。如果pgbouncer进程运行在用户登录的当前Unix用户的UID下,用户还可以用该用户名登录。

  2. 要看PgBouncer管理控制台命令,运行

    SHOW help

    命令:

    pgbouncer=# SHOW help;
    NOTICE:  Console usage
    DETAIL:
        SHOW HELP|CONFIG|DATABASES|POOLS|CLIENTS|SERVERS|VERSION
        SHOW FDS|SOCKETS|ACTIVE_SOCKETS|LISTS|MEM
        SHOW DNS_HOSTS|DNS_ZONES
        SHOW STATS|STATS_TOTALS|STATS_AVERAGES
        SET key = arg
        RELOAD
        PAUSE [<db>]
        RESUME [<db>]
        DISABLE <db>
        ENABLE <db>
        KILL <db>
        SUSPEND
        SHUTDOWN
  3. 如果用户对PgBouncer配置文件pgbouncer.ini做了修改,用户可以用RELOAD命令重载它:

    pgbouncer=# RELOAD;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值