主頁(yè) > 知識(shí)庫(kù) > pgpool復(fù)制和負(fù)載均衡操作

pgpool復(fù)制和負(fù)載均衡操作

熱門(mén)標(biāo)簽:地圖標(biāo)注和圖片名稱的區(qū)別 合肥公司外呼系統(tǒng)運(yùn)營(yíng)商 辦公外呼電話系統(tǒng) 漯河外呼電話系統(tǒng) 美容工作室地圖標(biāo)注 外呼調(diào)研系統(tǒng) 重慶自動(dòng)外呼系統(tǒng)定制 打電話智能電銷(xiāo)機(jī)器人授權(quán) 海豐有多少商家沒(méi)有地圖標(biāo)注

簡(jiǎn)介

pgpool-II是一個(gè)位于postgresql數(shù)據(jù)庫(kù)和客戶端之間的中間件,可以提供一下幾個(gè)功能:

1.連接池

pgpool-II保持已經(jīng)連接到postgresql數(shù)據(jù)庫(kù)的連接,并在使用相同參數(shù)連接進(jìn)來(lái)時(shí)重用他們,減少了連接開(kāi)銷(xiāo),并增加了系統(tǒng)的總體吞吐量。

2.復(fù)制

pgpool-II可以管理多個(gè)postgresql數(shù)據(jù)庫(kù),激活復(fù)制功能并使在2臺(tái)或多臺(tái)postgresql節(jié)點(diǎn)中建立一個(gè)實(shí)時(shí)備份稱為可能,這樣,如果其中一臺(tái)節(jié)點(diǎn)失效,服務(wù)可以不被終端繼續(xù)運(yùn)行。

3.負(fù)載均衡

如果數(shù)據(jù)庫(kù)進(jìn)行了復(fù)制,則在任何一臺(tái)服務(wù)器中執(zhí)行一個(gè)select查詢將返回相同的結(jié)果。pgpool-II利用了復(fù)制的功能以降低每臺(tái)postgresql服務(wù)器的負(fù)載。它通過(guò)分發(fā)select查詢到所有可用的服務(wù)器中,增強(qiáng)了系統(tǒng)的整體吞吐量。在理想的狀況下,讀性能應(yīng)該和postgresql數(shù)量成正比。負(fù)載均衡功能在大量用戶同時(shí)執(zhí)行很多讀查詢的場(chǎng)景中工作效果最好。

4.限制超過(guò)限度的連接

postgresql會(huì)限制當(dāng)前的最大連接數(shù),當(dāng)?shù)竭_(dá)這個(gè)數(shù)量時(shí),新的連接將被拒絕。增加這個(gè)連接數(shù)會(huì)增加資源消耗并且對(duì)系統(tǒng)的全局性能有一定的負(fù)面影響。pgpool-II也支持限制最大連接數(shù),但她的做法是將連接放入隊(duì)列,而不是立即返回一個(gè)錯(cuò)誤。

另外,pgpool-II也支持并行查詢,數(shù)據(jù)被分割到多臺(tái)服務(wù)器上,所以一個(gè)查詢可以在多臺(tái)服務(wù)器上同時(shí)執(zhí)行,以減少總體執(zhí)行時(shí)間。并行查詢?cè)诓樵兇笠?guī)模數(shù)據(jù)的時(shí)候非常有效。

測(cè)試環(huán)境

IP 應(yīng)用 版本
10.10.10.56 postgresql 9.2.15
10.10.10.57 postgresql 9.2.15
10.10.10.56 pgpool-II 3.5

環(huán)境說(shuō)明:兩臺(tái)postgresql,pgpool和其中一臺(tái)postgresql在一臺(tái)服務(wù)器上。

測(cè)試需求:測(cè)試pgpool實(shí)現(xiàn)postgresql的復(fù)制和負(fù)載均衡

安裝pgpool

1.源碼安裝

wget http://www.pgpool.net/download.php?f=pgpool-II-3.5.3.tar.gz
tar -zxvf pgpool-II-3.5.3.tar.gz 
cd pgpool-II-3.5.3
./configure --prefix=/usr/local/pgpool --with-openssl
#報(bào)錯(cuò)configure: error: libpq is not installed or libpq is old
#安裝 yum install postgresql-devel即可
make  make install

2.安裝pgpool-regclass

使用 PostgreSQL 8.0 至 PostgreSQL 9.3,強(qiáng)烈推薦在需要訪問(wèn)的 PostgreSQL 中安裝 pgpool_regclass 函數(shù),因?yàn)樗?pgpool-II 內(nèi)部使用。 如果不這樣做,在不同的 schema 中處理相同的表名會(huì)出現(xiàn)問(wèn)題(臨時(shí)表不會(huì)出問(wèn)題);而PostgreSQL 9.4或更高版本則不需要

cd pgpool-II-3.5.3/src/sql/pgpool-regclass
make  make install

-bash-4.2$ psql -f pgpool-regclass.sql template1
或
psql template1
=# CREATE EXTENSION pgpool_regclass;

應(yīng)在每臺(tái)通過(guò) pgpool-II 訪問(wèn)的數(shù)據(jù)庫(kù)中執(zhí)行 pgpool-regclass.sql 或者 CREATE EXTENSION。 你不需要在你執(zhí)行“psql -f pgpool-regclass.sql template1” 或者 CREATE EXTENSION 后建立的數(shù)據(jù)庫(kù)中這么做, 因?yàn)檫@個(gè)模板數(shù)據(jù)庫(kù)將被克隆成新建的數(shù)據(jù)庫(kù)。

3.建立insert_lock表

如果你在復(fù)制模式中使用了 insert_lock ,強(qiáng)烈推薦建立 pgpool_catalog.insert_lock 表,用于互斥。 到現(xiàn)在為止,insert_lock 還能夠工作。但是,在這種情況下,pgpool-II 需要鎖定插入的目標(biāo)表。 這種行為和 pgpool-II 2.2 和 2.3 系列類(lèi)似。由于表鎖與 VACUUM 沖突,所以 INSERT 操作可能因而等待很長(zhǎng)時(shí)間。

cd pgpool-II-3.5.3/src/sql/
psql -f insert_lock.sql tempalte1

應(yīng)在在每臺(tái)通過(guò) pgpool-II 訪問(wèn)的數(shù)據(jù)庫(kù)中執(zhí)行 insert_lock.sql。 你不需要在你執(zhí)行“psql -f insert_lock.sql template1”后建立的數(shù)據(jù)庫(kù)中這么做, 因?yàn)檫@個(gè)模板數(shù)據(jù)庫(kù)將被克隆成新建的數(shù)據(jù)庫(kù)。

4.安裝pgpool_recovery

如果你使用在線回復(fù),需要以下一些函數(shù): pgpool_recovery, pgpool_remote_start, pgpool_switch_xlog。

另外,附帶工具pgpoolAdmin 控制 pgpool-II 啟停和重新連接后端的 PostgreSQL 節(jié)點(diǎn), 它需要函數(shù) pgpool_pgctl;而且 pgpoolAdmin 需要函數(shù) pgpool_pgctl 來(lái)對(duì) PostgreSQL 進(jìn)行停止/重啟/重新加載參數(shù)操作。

可以使用和安裝 pgpool_regclass 一樣的方法安裝著四個(gè)函數(shù)。 不過(guò)和 pgpool_regclass 不同的是,你只需要在 template1 數(shù)據(jù)庫(kù)中安裝這些函數(shù)。

cd pgpool-II-3.5.3/src/sql/pgpool-recovery
make  make install
psql -f pgpool-recovery.sql template1
或
psql template1
=# CREATE EXTENSION pgpool_recovery

配置pgpool

1.配置pcp.conf

pgpool提供pcp接口,可以查看,管理pgpool的狀態(tài),并且可以遠(yuǎn)程操作pgpool,pcp.conf用來(lái)對(duì)pcp相關(guān)命令認(rèn)證的文件

cd /usr/local/pgpool
cp etc/pcp.conf.sample etc/pcp.conf
bin/pg_md5 -m -u pgpool -p
會(huì)自動(dòng)生成pool_passwd
postgres:md533c14731dfdfsdfsdf91e8d10c4bff5
cat etc/pcp.conf
pgpool:md533c14731dfdfsdfsdf91e8d10c4bff5

2.配置pool_hba.conf

通過(guò)pool_hba.conf可以進(jìn)行相關(guān)權(quán)限設(shè)置,類(lèi)似于postgresql的pg_hba.conf

cd /usr/local/pgpool
cp etc/pool_hba.conf.sample etc/pool_hba.conf
bin/pg_md5 -m -u postgres -p
會(huì)自動(dòng)生成pool_passwd
postgres:md533c14731dfdfsdfsdf91e8d10c4bff5

**注意:

1.pool_hba.conf中的加密方式必須和pg_hba.conf中的加密方式一樣,都為mds、trust或其他方式。若不一樣會(huì)報(bào)錯(cuò)。

2.pool_hba.conf中的用戶必須在postgresql數(shù)據(jù)庫(kù)中存在

**

3.配置pgpool.conf

cd /usr/local/pgpool
cp etc/pgpool.conf.sample etc/pgpool.conf
#創(chuàng)建相關(guān)目錄
mkdir -p /var/run/pgpool
mkdir -p /usr/local/pgpool/logs
vim etc/pgpool.conf
listen_addresses = '*'
port = 9999
socket_dir = '/tmp'
listen_backlog_multiplier = 2
serialize_accept = off
pcp_listen_addresses = '*'
pcp_port = 9898
pcp_socket_dir = '/tmp'
backend_hostname0 = '10.10.10.56'
backend_port0 = 5432
backend_weight0 = 1
backend_data_directory0 = '/data/pgsql/data'
backend_flag0 = 'ALLOW_TO_FAILOVER'
backend_hostname1 = '10.10.10.57'
backend_port1 = 5432
backend_weight1 = 1
backend_data_directory1 = '/data/pgsql/data'
backend_flag1 = 'ALLOW_TO_FAILOVER'
enable_pool_hba = on
pool_passwd = 'pool_passwd'
debug_level = 0
pid_file_name = '/var/run/pgpool/pgpool.pid'
logdir = '/usr/local/pgpool/logs'
replication_mode = on
load_balance_mode = on
master_slave_mode = off

其中:

replication_mode = on 復(fù)制模式打開(kāi),可以在兩臺(tái)postgresql數(shù)據(jù)庫(kù)上進(jìn)行實(shí)時(shí)備份

load_balance_mode = on 負(fù)載均衡模式打開(kāi),可以實(shí)現(xiàn)負(fù)載均衡

3.啟動(dòng)pgpool

/usr/local/pgpool/bin/pgpool

4.連接pgpool

psql -U postgres -p 9999 -h 10.10.10.56
Password for user postgres: 
psql (9.2.15)
Type "help" for help.
postgres=#

測(cè)試

1.創(chuàng)建bench_replication數(shù)據(jù)庫(kù)

psql -U postgres -p 9999 -h 10.10.10.56
Password for user postgres: 
psql (9.2.15)
Type "help" for help.
postgres=#create database bench_replication;

我們可以分別登陸56、57上的postgresql進(jìn)行查看

psql -U postgres -p 5432 -h 10.10.10.56
Password for user postgres: 
psql (9.2.15)
Type "help" for help.

postgres=# \list
          List of databases
  Name  | Owner | Encoding | Collate | Ctype | Access privileges 
-------------------+----------+----------+-------------+-------------+-----------------------
 bench_replication | postgres | UTF8  | en_US.UTF-8 | en_US.UTF-8 | 
 postgres   | postgres | UTF8  | en_US.UTF-8 | en_US.UTF-8 | 
 template0   | postgres | UTF8  | en_US.UTF-8 | en_US.UTF-8 | =c/postgres   +
     |   |   |    |    | postgres=CTc/postgres
 template1   | postgres | UTF8  | en_US.UTF-8 | en_US.UTF-8 | =c/postgres   +
     |   |   |    |    | postgres=CTc/postgres
(4 rows)

可以看到兩臺(tái)postgresql都創(chuàng)建了bench_replication數(shù)據(jù)庫(kù),因此pgpool的復(fù)制是成功的。

2.pgbench測(cè)試

#安裝pgbench
yum install postgresql-contrib
pgbench -i -h 10.10.10.56 -U postgres -p 9999 bench_replication

在所有pgsql節(jié)點(diǎn)中,下面列出的表和數(shù)據(jù)都被建立了,說(shuō)明復(fù)制運(yùn)行正常。

表名 行數(shù)
branches 1
tellers 10
accounts 100000
history 0

總結(jié)

以上只是簡(jiǎn)單介紹了pgpool-II的復(fù)制和負(fù)載均衡作為入門(mén),還有很多功能沒(méi)有介紹,需要我們繼續(xù)探索。

補(bǔ)充:pgpool使用中遇到的坑總結(jié)

1,復(fù)制模式可靠性低

最早時(shí)候使用的是復(fù)制模式,數(shù)據(jù)到pgpool然后pgpool分別寫(xiě)入n個(gè)postgres.發(fā)現(xiàn)經(jīng)常出現(xiàn)數(shù)據(jù)不一致問(wèn)題,導(dǎo)致最終只有一個(gè)數(shù)據(jù)庫(kù)可用

2,online recovery

基于PIRT的online recovery 配置復(fù)雜

3,基于流復(fù)制的主備模式

這個(gè)用到postgres9的新特性,前期配置測(cè)試都很easy,failover 也很好用,但是當(dāng)服務(wù)連接上pgpool時(shí),事務(wù)往往報(bào)錯(cuò) postgres error : failed to read kind from backend,這個(gè)我在之前的文章中提到過(guò),至今無(wú)法解決。

4,連接數(shù)的困擾

num_init_children 原來(lái)理解成了一個(gè)池的大小,如果超過(guò)了會(huì)自動(dòng)擴(kuò)增,但是實(shí)際上往往不夠用,確切的說(shuō)該值也是 pgpool-II 支持的從客戶端發(fā)起的最大并發(fā)連接數(shù)。

所以這個(gè)值配的盡量大些,并且對(duì)這個(gè)值的更改必須重啟pgpool.

5,client_idle_limit不要配置

當(dāng)一個(gè)客戶端在執(zhí)行最后一條查詢后如果空閑到了 client_idle_limit 秒數(shù), 到這個(gè)客戶端的連接將被斷開(kāi).連接不應(yīng)該讓pgpool來(lái)斷開(kāi),應(yīng)該是應(yīng)用主動(dòng)去斷開(kāi)。如果讓pgpool去斷開(kāi),會(huì)導(dǎo)致客戶端不可用。

當(dāng)然pgpool也有一個(gè)好處,能夠快速找到連接的應(yīng)用。因?yàn)槊總€(gè)連接都是單獨(dú)的進(jìn)程,所以啟動(dòng)后會(huì)有num_init_children 個(gè)進(jìn)程可以接受連接

使用# ps -ef |grep pgpool 可以看到

pgpool: wait for connection request 的進(jìn)程是空進(jìn)程,等待連接。

pgpool: postgres dbtest 10.115.53.167(51883) idle 這些進(jìn)程是使用中的進(jìn)程,并且可以看到是來(lái)自哪臺(tái)機(jī)器,什么用戶,連接的是什么數(shù)據(jù)庫(kù)。

當(dāng)然使用select * from pg_stat_activity 也能查到 連接情況

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • PostgreSQL+Pgpool實(shí)現(xiàn)HA主備切換的操作
  • postgresql 實(shí)現(xiàn)啟動(dòng)、狀態(tài)查看、關(guān)閉
  • 如何查看postgres數(shù)據(jù)庫(kù)端口
  • postgresql連續(xù)歸檔及時(shí)間點(diǎn)恢復(fù)的操作
  • PostgreSQL pg_archivecleanup與清理archivelog的操作
  • 解決PostgreSQL日志信息占用磁盤(pán)過(guò)大的問(wèn)題
  • Postgresql 如何清理WAL日志
  • PostgreSQL歸檔配置及自動(dòng)清理歸檔日志的操作

標(biāo)簽:來(lái)賓 烏海 錦州 晉城 珠海 衡陽(yáng) 株洲 蚌埠

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《pgpool復(fù)制和負(fù)載均衡操作》,本文關(guān)鍵詞  pgpool,復(fù)制,和,負(fù)載,均衡,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《pgpool復(fù)制和負(fù)載均衡操作》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于pgpool復(fù)制和負(fù)載均衡操作的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章