- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
通过从运行 Postgres 9.4.1 和 pgbouncer 1.6.1 的类似服务器借用的设置,我有多个用户通过端口 6543 上的 pgbouncer 连接到数据库。我还有第二台运行 PostgreSQL 9.4.5 的服务器,我已验证所有用户只能使用设置为 verify-full
的 TLS/SSL 直接连接到数据库(在端口 5432 上)。
但是,我需要创建一个结合这些配置的环境:所有用户都通过 TLS/SSL 连接到数据库,并通过 pgbouncer 进行连接池。这意味着我需要在最近发布的(截至 2015 年 12 月 18 日)pgbouncer 1.7 中使用新的 TLS/SSL 功能,但除了 the new TLS parameters 的文档之外,我没有找到任何可用的示例来演示新功能,也没有在我的第二台服务器上使用 TLS/SSL 通过 pgbouncer 自行建立有效连接。
我已经从我的第二台服务器中包含了 postgresql.conf
、pg_hba.conf
和 pgbouncer.ini
的相关摘录。
postgresql.conf:
ssl = on # (change requires restart)
ssl_cert_file = 'server.crt' # (change requires restart)
ssl_key_file = 'server.key' # (change requires restart)
ssl_ca_file = 'root.crt' # (change requires restart)
pg_hba.conf:
hostssl all all 10.10.5.0/24 cert
pgbouncer.ini:
;
; pgbouncer configuration
;
[databases]
mydatabase = host=localhost port=5432 dbname=mydatabase
;
[pgbouncer]
listen_port = 6543
listen_addr = *
admin_users = lalligood, postgres
logfile = /tmp/pgbouncer.log
pidfile = /tmp/pgbouncer.pid
ignore_startup_parameters = application_name
server_reset_query = DISCARD ALL;
pool_mode = session
max_client_conn = 1000
default_pool_size = 300
log_pooler_errors = 0
; Improve compatibility with Java/JDBC connections
ignore_startup_parameters = extra_float_digits
; USER AUTHENTICATION (old way commented out with new lines below)
;auth_type = md5
;auth_file = pgbouncer/users.txt
auth_type = hba
auth_hba_file = pg_hba.conf
; TLS SETTINGS (NEW STUFF!)
client_tls_sslmode = verify-full
client_tls_key_file = server.key
client_tls_cert_file = server.crt
client_tls_ca_file = root.crt
server_tls_sslmode = verify-full
server_tls_key_file = /tmp/pgb_user.key
server_tls_cert_file = /tmp/pgb_user.crt
server_tls_ca_file = root.crt
pgbouncer 启动,但是,当我尝试以用户“lalligood”连接时,出现以下错误:
ERROR: no such user: lalligood
pgbouncer.log 包含每次尝试的以下行:
2016-01-13 16:00:36.971 2144 LOG C-0xcad410:
(nodb)/(nouser)@10.10.5.194:54848 closing because: No such user:
lalligood (age=0)
如有必要,我可以提供更多信息。如果有人对我可能忽略的内容有任何意见/建议,我将非常感谢您的帮助!
最佳答案
我想通了......我(部分?)尝试在 pgbouncer 1.7 中使用太多新功能而感到内疚。
有 TLS/SSL 设置,然后是 HBA 访问控制。 (TLS/SSL 不需要 HBA 访问控制,反之亦然)。此外,由于 pgbouncer 和数据库在同一个盒子上,因此 pgbouncer 和数据库之间不需要额外的 TLS/SSL 开销。
事实证明,简化为仅使用更常用的用户身份验证设置是解决方法。
首先,postgresql.conf
和 pg_hba.conf
保持不变,如上所示。
pgbouncer.ini
然而,是这样的:
;
; pgbouncer configuration
;
[databases]
mydatabase = host=localhost port=5432 dbname=mydatabase
;
[pgbouncer]
listen_port = 6543
listen_addr = *
admin_users = lalligood, postgres
auth_type = cert
auth_file = pgbouncer/users.txt
logfile = /var/lib/pgsql/pgbouncer.log
pidfile = /var/lib/pgsql/pgbouncer.pid
ignore_startup_parameters = application_name
server_reset_query = DISCARD ALL;
pool_mode = session
max_client_conn = 1000
default_pool_size = 300
log_pooler_errors = 0
; Improve compatibility with Java/JDBC connections
ignore_startup_parameters = extra_float_digits
; TLS settings
client_tls_sslmode = verify-full
client_tls_key_file = server.key
client_tls_cert_file = server.crt
client_tls_ca_file = root.crt
所以具体的更改是 auth_type = cert
& auth_file = pgbouncer/users.txt
(更改/删除 HBA 引用)并删除 4 server_tls_ ...
末尾的行。
用户使用 SSL 证书向 pgbouncer 和 postgres 数据库进行身份验证。
这也意味着我必须在./pgbouncer/users.txt
中列出将要通过pgbouncer 的用户列表。格式应该是这样的(对于每个用户):
"lalligood" ""
因为 pgbouncer 不会根据密码验证任何连接。
所以这一切意味着通过 pgbouncer 的 TLS/SSL 身份验证/连接有效。但这也让我觉得 auth_type = hba
/auth_hba_file = pg_hba.conf
充其量是可疑的;在最坏的情况下无法正常工作。
关于database - 带有 TLS/SSL 客户端和服务器连接的 pgbouncer 1.7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34771288/
尝试在亚马逊上安装 pgbouncer 遇到了这个: [root@somehost ~]# uname -a Linux somehost 4.4.35-33.55.amzn1.x86_64 #1 S
文档将 avg_wait_time 描述为: Time spent by clients waiting for a server in microseconds (average per secon
我在 6432 端口上运行我的 postgres-9.2,在 5432 端口上运行 pgbouncer。我同事的客户端机器很少有服务器机器上 5432 端口的防火墙连接权限。但作为数据库管理员,我想限
我最近为连接池设置了 pgbouncer。我的 pgbouncer.ini 文件包含 [databases] mydb = host=localhost port=5432 user=user dbn
我尝试使用 pgBouncer 来消除短暂的网络断开连接。我做了一个测试,我有 Clinet->pgBouncer->Postgresql。当从客户端建立连接时,我断开网络电缆,如果我比 ~15 秒更
我在 pgBouncer 中设置了这个限制 max_client_conn = 2000 default_pool_size = 40 当我在 phpPgAdmin 中执行此 SQL 时,只出现 2
我在 php 中使用了 PostgreSQL。一段时间后,客户端连接变大,所以我尝试使用 pgbouncer 设置最大连接等。我的数据库端口是 5432,我所有的 php 使用该端口连接到我的数据库。
我们正在考虑在我们的项目中使用 pgbouncer,其中包括动态数据库创建(即添加的每个租户 - 创建一个新数据库) 据我了解,pgbouncer 采用映射数据库的配置文件。 问题是 - 有没有办法在
我需要配置我的 pgbouncer 以处理超过 2000 个客户端连接,我正在阅读一些关于如何使用最大连接数的信息,然后我明白了我必须做什么 max_client_con = 2000在 pgbo
我在 5432 上运行 Postgres 数据库,在 6432 上运行 pgBouncer。 我所有的脚本都指向 6432,但我们有一个指向 5432 的大型遗留代码库,我们也希望它有用户 pgBou
我正在使用 pgbouncer-rr 在 redshift 集群中进行查询重写(pgbouncer 调用 rewrite_query.py 进行重写,这里是有关此项目的更多信息的链接 - https:
我正在尝试尽可能多地了解特定类型的更新查询来自哪个主机。 我的数据库是 PostgreSQL 9.0.23,本地运行 pgbouncer 用于连接池。池化类型为交易池。 数据库中保存来自 pg_sta
我在网络应用程序上使用 pgbouncer,大多数线程以 BEGIN 开始,以 COMMIT 或 ROLLBACK 结束,所以我们使用事务池,一切都很好。 但是,我们也有一些不使用事务的进程:相反,它
我已经设置了 PGBouncer 并将其配置为连接到我的 postgres 数据库,并且一切正常,但我不确定它是否真的有效。 我有一个 php 脚本作为守护进程运行并获取 beantalk 作业。问题
根据 https://pgbouncer.github.io/usage.html运行 KILL db; 应该立即断开给定数据库上的所有客户端和服务器连接。我试图使用 在我的测试环境中停止所有与 po
我在 Django 中使用 pgbouncer。我已经将 test_foo 数据库添加到它的配置中以便能够运行测试,因为显然 Django 不能为测试数据库使用不同的端口。现在测试运行但最后,当 Dj
我在事务模式下使用 pgbouncer 并试图允许接近 500 个事件事务。目的只是对设置进行压力测试 当前设置:[ 'n' 个客户 --->1 个 pgbouncer ----> 1 个 postg
我很难找到关于使用 pgbouncer 进行事务池与 session 池的优点/缺点的良好总结。 这是否意味着事务繁重的工作负载在某种程度上可以更好地实现负载平衡?是为了防止从 pgbouncer 连
我正在尝试使用 pgbouncer 1.7.2 为 Windows 10 上的 PostgreSQL 9.6 设置连接池。 尝试在 cmd 中连接到 pgbouncer psql -p 643
技术细节 转到版本 1.2 go bmizerany/pq 的 postrgres 库 这个问题让我很生气,我希望有人能够提供帮助。 我在 golang 中开发了一个应用程序来从 postgres 数
我是一名优秀的程序员,十分优秀!