标签: pgpool

一个很好的PgPool II配置

我一直在尝试配置PgPool接受大约150的请求.Postgres服务器配置为只接受100个连接.超过100的任何东西都需要由PgPool汇集.我似乎没有那样做.我只需要PgPool对请求进行排队,我当前的配置不会这样做.从我的JMeter测试中,当我尝试连接超过100时,postgres给出了一个错误,说PSQL错误:sorry, too many clients.

我只使用以下参数配置了PGPool:

listen_address = 'localhost'
port = 9999
backend_hostname0 = 'localhost'
backend_port0 = 5432
num_init_children = 100
max_pool = 4
child_life_time =120
child_max_connections = 0
connections_life_tome = 120
client_idle_limit = 0
Run Code Online (Sandbox Code Playgroud)

由于我只需要PgPool来排队额外的连接请求,上面的配置是否正确?请告知正确的配置.

postgresql pgpool

6
推荐指数
2
解决办法
1万
查看次数

PHP PDO PGPOOL PGSQL - SQLSTATE [HY000]:一般错误:7没有连接到服务器

我试着解释我的问题!!!

我使用PDO扩展通过pgpool-II连接到PostgreSQL.它在Apache中运行良好,但是从PHP CLI(在同一台机器上)我收到此PDO错误:

SQLSTATE [HY000]:一般错误:7没有连接到服务器

我已经在谷歌和这里搜索了,但似乎没有人试过这样做.有谁有想法吗?

编辑:

这是我用来建立连接的代码:

include 'manage_db.php';
include_once 'properties.php';
global $properties;

$dsn = 'pgsql:dbname=' . $properties['db_pgpool'] . ';host=localhost;port=' . $properties['port_pgpool'];

try{
   $mgmtDb = new ManageDb($dsn, $properties['username_pgpool'], $properties['password_pgpool']);
} catch (Exception $e) {
   echo 'PDO - Caught exception: ',  $e->getMessage(), "\n";
}
Run Code Online (Sandbox Code Playgroud)

ManageDB是我自己的类,它实现了一些实用程序功能以及创建数据库连接:

class ManageDb {
        var $db;

        function ManageDb($dsn, $username, $password){
            $this->db = new PDO($dsn, $username, $password);
            $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }

....
Run Code Online (Sandbox Code Playgroud)

postgresql pdo pgpool

5
推荐指数
1
解决办法
4187
查看次数

在多用户应用程序的情况下,如何正确地从pgPool-II与JDBC建立连接?

我的公司计划使用pgPool-II以使其"故障转移","负载平衡"(以及最终"复制")功能受益.

我们在这里考虑我们有一个由服务器集群托管的J2EE Tomcat Web应用程序,其中Jakarta Tomcat Connector(JK)或类似服务用于在客户端和这些Tomcat服务器之间建立链接(负载平衡).此外,我们认为我们有一个PostgreSQL 9.3数据库集群,其中pgPool-II用于执行Tomcat服务器集群和数据库集群之间的链接.我们的应用程序是一个多用户应用程序,其中每个用户都与不同的角色相关联(当然,就数据库而言).

我了解到pgPool-II使用与postgreSQL相同的协议,所以连接到池我们只需要连接到它,因为我们通常连接到数据库,对吧?

这个邮件副本中,我看到有2个池层是没用的,所以除了pgPool-II之外,不需要使用JDBC Tomcat池.我们将池任务委托给JDBC Tomcat池,要么将它委托给pgPool-II,对吧?

所以我最后的问题是:

  • 在这种情况下如何正确地从pgPool-IIJDBC建立连接,每次用户需要执行SQL请求时,我是否只需要一个新的pgPool-II连接?不影响性能?

  • 哪个部分应该负责池任务以获得最佳性能?JDBC Tomcat,pgPool-II还是像pgBouncer这样的其他服务?什么是最好的方法?

提前致谢!

PS:如果有些问题不明确,请告诉我,我会编辑我的帖子.

postgresql junit tomcat jdbc pgpool

5
推荐指数
0
解决办法
1275
查看次数

使用 ubuntu 和 postgresql 启动 pgpool 后,pid 文件消失

我已经使用 pgpoolII-3.3.3 和 pgPoolAdmin 在 ubuntu 12.04 上安装了 postgresql 9.1

如果我尝试从带有 sudo pgpool 的终端运行 pgpool 它似乎开始了。查看 ubuntu 文件资源管理器,我可以看到如何在 /var/run/pgpool/pgpool.id 中创建 pgpool.pid 文件(这是 pgpool.conf 中的路径)

但是一秒钟后文件消失了。

我试图更改目录的所有者和目录权限,但似乎没有任何解决方法。

如果之后我尝试使用 sudo pgpool -m fast stop 停止 pgpool,我会收到一个错误:错误。找不到pid文件

似乎文件被创建并突然被破坏。我想知道为什么。

如果我尝试从 pgPoolAdmin 运行 pgpool,我会收到此错误:pgpool start failed。未找到 pgpool.pid。

像其他时候一样,这可能是一个愚蠢的问题,我无法解决它,因为我对这些系统没有很高的了解。

知道要尝试什么吗?

Xrry 圣诞节

linux postgresql ubuntu pgpool

5
推荐指数
1
解决办法
6031
查看次数

在 pgpool 中,当在 postgresql 函数中使用删除查询时,它不会从所有服务器中删除数据

我在 pgpool 中创建了以下函数。

CREATE OR REPLACE Function fun1(Id int)
RETURNS boolean as $executionStatus$
DECLARE

BEGIN
    DELETE FROM table1 where table1_id =  Id ; 
    DELETE from table2 where table2_id =  Id ;
    DELETE from table3 where table3_id =  Id ;
    RETURN true;
END;
$executionStatus$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

我在 pgpool 的 postgres shell 中运行以下命令

select fun1(1);
Run Code Online (Sandbox Code Playgroud)

仅从主站删除数据。我再次尝试,然后它从不同的服务器中删除。因此在这种情况下复制失败。但如果我单独使用删除查询,那么它工作正常。它正在从所有服务器中删除数据。

DELETE FROM table1 where table1_id =  1 ;DELETE from table2 where table2_id =  1 ;DELETE from table3 where table3_id =  1 ;
Run Code Online (Sandbox Code Playgroud)

请让我知道如何解决这个问题。

database postgresql pgpool

5
推荐指数
1
解决办法
336
查看次数

如何为负载平衡集群配置 Tomcat JDBC Pool(如 PostgreSQL 主从复制)

假设有一个 PostgreSQL 集群,由一个主节点和两个通过流复制的只读副本组成。

如何配置 Tomcats DBCP 以了解数据库集群内有多个不同的节点,从而将变异语句分配给主节点的连接,并将无副作用语句(负载平衡)分配给任何从节点的连接?

正如 PostgreSQL 的 JDBC 驱动程序文档所述,可以在 JDBC 连接 URL 中声明多个节点: jdbc:postgresql://host1:port1,host2:port2/database

于是就产生了在Tomcats server.xml中配置两个连接池的想法。一个 JNDI 资源用于读/写主数据源,另一个池用于只读副本:jdbc:postgresql://host1:port1/database?targetServerType=master和 用于副本jdbc:postgresql://host1:port1,host2:port2/database?targetServerType=preferSlave&loadBalanceHosts=true

在这种情况下,Tomcat 上运行的应用程序需要知道有两个具有不同语义的数据库连接池,因此需要根据每个 SQL 语句来决定从哪个池请求连接。这似乎是一个不好的模式,因为应用程序依赖于特定的数据库基础设施,并且 JDBC 池应该抽象底层数据库的实现。

Tomcat DBCP 和 PostgreSQL 集群之间的附加抽象层(例如pgpool-II)可以在这种情况下提供帮助吗?(特别是当将来基础设施增长到多个 Tomcat 服务器实例或 PostgreSQL 数据库的高可用性和故障转移要求上升时)

postgresql load-balancing pgpool jdbc-pool tomcat-dbcp

5
推荐指数
0
解决办法
1670
查看次数

我应该在 HA 设置中禁用 Knex.js 连接池吗?

我有一个高可用性设置,其中数据流如下:

... <-> Objection.js <-> Knex.js (pool) <-> Pgpool-II (pool) <-> PostgreSQL Cluster
Run Code Online (Sandbox Code Playgroud)

如您所见,连接池现在在两个地方进行管理 - Knex.js 和 Pgpool-II。我想知道我是否真的需要两者,或者我可以完全禁用 Knex.js 池pool: {min: 0, max: 0}并让 Pgpool-II 完成所有工作?谢谢你。

postgresql high-availability pgpool knex.js

5
推荐指数
0
解决办法
386
查看次数

PostgreSQL + pgpool 复制与未命中平衡

我有一个 PostgreSQL 复制 MS,pgpool 仅作为主服​​务器上的负载平衡器。复制过程正常,过程没有延迟。问题是,即使我为每台服务器配置了不同于 50% 的余额,主服务器收到的请求也比从服务器多。

这是后端权重为 M(1)-S(2) 的 pgpool show_pool_nodes

node_id |  hostname   | port | status | lb_weight |  role   | select_cnt | load_balance_node | replication_delay
---------+-------------+------+--------+-----------+---------+------------+-------------------+-------------------
 0       | master-ip   | 9999 | up     | 0.333333  | primary | 56348331   | false             | 0
 1       | slave-ip    | 9999 | up     | 0.666667  | standby | 3691734    | true              | 0
Run Code Online (Sandbox Code Playgroud)

正如你所理解的,主服务器比从服务器接收 +10 倍的请求

这是后端权重为 M(1)-S(5) 的 pgpool show_pool_nodes

 node_id |  hostname   | port | status | …
Run Code Online (Sandbox Code Playgroud)

database postgresql load-balancing pgpool

5
推荐指数
1
解决办法
865
查看次数

Spring Data JPA:无法从另一个线程找到插入的实体

我在主线程中插入一个实体,然后在另一个线程中尝试modifiedAt通过 Spring JPA 存储库的 JPA 查询读取该插入实体的字段 ()。

interface SettlementRepository : JpaRepository<Settlement, Long> {

    /**
     * Fetches the state of a settlement.
     */
    @Query("SELECT s.modifiedAt FROM Settlement s WHERE s.id = :id")
    fun findModifiedAtById(id: Long): Instant
}

/* ... */

val transactionTemplate = TransactionTemplate(transactionManager)

val settlements: List<Settlement> = transactionTemplate.execute {
    amounts.map {
        settlementRepository.save(Settlement(...))
    }
}!!

val executorService = Executors.newFixedThreadPool(4)

settlements.forEach {
    executorService.execute {
        val lastModified = settlementRepository.findModifiedAtById(it.id)
        // But sometimes EmptyResultDataAccessException throws!
    }
}

Run Code Online (Sandbox Code Playgroud)

插入是在事务中完成的TransactionTemplate,并且必须在数据库(PostgreSQL)中持久化和刷新,但有时(并非总是)EmptyResultDataAccessException抛出异常。 …

hibernate jpa pgpool spring-data-jpa kotlin

5
推荐指数
0
解决办法
476
查看次数

如何解决pg池连接到前端错误

我用于pgpool管理postgres使用 k8s 部署的数据库集群,

我遇到了这个错误:

ERROR: unable to read data from front end
DETAIL: EOF encountered with front end
Run Code Online (Sandbox Code Playgroud)

有人知道这个吗?

postgresql pgpool kubernetes

5
推荐指数
0
解决办法
866
查看次数