我有多个用于 Web 应用程序的 PostgreSQL 服务器。通常在热备模式(异步流复制)下一个主多从。
我使用 PGBouncer 进行连接池:安装在每个 PG 服务器(端口 6432)上的一个实例连接到本地主机上的数据库。我使用事务池模式。
为了在从站上平衡我的只读连接,我使用 HAProxy (v1.5) 和 conf 或多或少像这样:
listen pgsql_pool 0.0.0.0:10001
mode tcp
option pgsql-check user ha
balance roundrobin
server master 10.0.0.1:6432 check backup
server slave1 10.0.0.2:6432 check
server slave2 10.0.0.3:6432 check
server slave3 10.0.0.4:6432 check
Run Code Online (Sandbox Code Playgroud)
因此,我的 Web 应用程序连接到 haproxy(端口 10001),即在每个 PG 从站上配置的多个 pgbouncer 上的负载平衡连接。
这是我当前架构的表示图:
这很有效,但我意识到有些人的实现方式完全不同:Web 应用程序连接到单个 PGBouncer 实例,该实例连接到 HAproxy,它在多个 PG 服务器上进行负载平衡:
最好的方法是什么?第一个(我现在的)还是第二个?一种解决方案相对于另一种解决方案有什么优势吗?
谢谢
postgresql scalability high-availability pgbouncer load-balancing
如果我错了,请纠正我,但我想通过添加更多机器或平衡多个服务器之间的负载来处理更多请求和负载是水平扩展。那么,如果我添加更多服务器,我该如何分发数据库?我是否创建一个数据库来保存多台服务器的用户记录?还是我也要拆分数据库?数据库完整性如何?如何同步呢?不然我怎么办?我是一个新手,真的很困惑,但渴望学习。我想在我的项目中使用 postgres,并且想在开始之前了解一些基本的东西。我正在考虑使用两个小的 ec2 实例。但是我对数据库感到困惑。我如何着手创建数据库。我需要为此进行分片吗?根据 postgres,水平缩放的最佳方法是什么?如果您能向我解释一下,我将不胜感激。谢谢!
编辑:
如何使用多台机器进行负载均衡并管理数据库?
我有一个用户可以上传视频的应用程序,它将使用 Elastic Transcoder 转换为 mp4。用户约10k。那么,如何使用多台机器进行负载均衡并管理数据库呢?我想做的是性能负载平衡。我在很多帖子中读到添加更多机器可以利用它。所以我认为水平缩放。但是由于水平扩展很可怕,我如何负载平衡和管理我的数据库?
对于运行连接池和负载平衡但没有查询缓存的专用 PGPool 机器,建议使用多少物理内存?
我看到了;num_init_children(96) * max_pool(2) * number_of_backends(2) = 384
中的线条 SHOW pool_pools
每个 PID 的模态平均值似乎约为 99M,有几个 1G 异常值
# top for 20 pgpool processes
$ top -p $(pgrep pgpool | head -20 | tr "\\n" "," | sed 's/,$//')
Tasks: 20 total, 0 running, 20 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3.1 us, 4.0 sy, 0.0 ni, 92.2 id, 0.0 wa, 0.0 hi, 0.7 si, 0.0 st
KiB Mem : 1784080 total, 22068 free, 1629960 used, 132052 buff/cache …
Run Code Online (Sandbox Code Playgroud) 为了扩展 PostgreSQL 流复制从属设备上的读取流量,我希望能够对请求进行负载平衡。Postgres 文档建议使用 pgPool 和 pgBouncer 之类的工具,但我想知道在 postgres 读取从站前面使用 TCP 负载均衡器(如 HAProxy 或 AWS Elastic Load Balancer)是否有问题(原则上)。
负载均衡器充当需要由客户端发出的读取请求的单个读取端点。一个显着的优势是当读取从属服务器关闭时读取请求不会受到影响,因为负载均衡器中的其他服务器可以接收负载。
如何配置 SQL Server 2012 以使用多个 NIC?
我有一台带有 4 个 NIC 的服务器。我想使用 2 个 NIC 来查询我的数据库,并使用 2 个 NIC 从中检索结果。
我希望它们在负载平衡模式下工作,并且在出现一个缺口时仍能继续工作。
有可能的?
我的两个 postgresql 服务器配置为流复制,工作正常。
Pgpool 配置为主从模式/负载平衡模式。
pgpool.conf:
listen_addresses = '*'
port = 9999
backend_hostname0 = 'master-postgres-ip'
backend_port0 = port-no
backend_weight0 = 1
backend_data_directory0 = 'data-dir'
backend_hostname1 = 'slave-postgres-ip'
backend_port1 = port-no
backend_weight1 = 1
backend_data_directory1 = 'data-dir'
load_balance_mode = on
master_slave_mode = on
master_slave_sub_mode='stream'
Run Code Online (Sandbox Code Playgroud)
我预计所有写入查询都将转到主查询,而读取查询将分布在两个查询之间。但是,所有的查询都只是为了掌握。但是,如果我停止主控,查询将变为从属。
有人可以告诉我可能出了什么问题吗?
pgpool 在启动时给出以下日志:
2015-11-03 17:25:56: pid 21284: LOG: find_primary_node: checking backend no 0
2015-11-03 17:25:56: pid 21284: LOG: find_primary_node: checking backend no 1
2015-11-03 17:25:56: pid 21284: DEBUG: SSL is requested but SSL support is not …
Run Code Online (Sandbox Code Playgroud)