2017-04-24 393 views
1

我在四個PostgreSQL工作人員之間設置bi-direction replication,我想讓我的Go數據庫連接池處理四個連接。它應該能夠爲它們創建多個連接,爲任何給定查詢隨機選擇一個連接,並在連接斷開時進行故障切換。這在Go數據庫庫中是可行的嗎?或者我應該只使用pgBouncer而不是試圖讓database/sqlpgx來處理這種平衡?如何獲取Golang數據庫連接池來管理羣集中多個主機的連接?

+2

golang中的連接池是根據'配置'(對於每個模式的PostgreSQL,對於MySQL,您可以使用「相同」連接訪問同一服務器中的多個數據庫/模式)。如果您需要連接到多個服務器,則需要爲每個服務器創建不同的連接池,然後手動管理它。恕我直言,在你的情況下,你應該使用pgBouncer。 – putu

+0

似乎是對的,@putu。想把這個答案放在我能接受的答案中嗎? – theory

回答

2

golang中的連接池在您撥打sql.Open(driverName, dataSourceName)時創建,其中dataSourceName是驅動程序專用的configuration用於連接到數據庫。無論何時我們更改configuration(即更改主機地址,模式,用戶名等),我們都需要打開新的連接,因此將創建新的連接池。如果驅動程序可以處理負載平衡,則應該在dataSourceName中配置,例如,如MariaDB Connector/J高可用性配置。

AFAIK,lib/pqpgx尚未支持負載平衡。就你而言,要連接到集羣中的數據庫服務器,需要爲每個服務器打開不同的連接池,然後手動管理連接(並執行負載平衡)。這種方法需要做很多工作。我認爲最好使用pgBouncer。

+0

很好的答案,謝謝! – theory