文件名称:
pgpool-I I的recovery
开发工具:
文件大小: 250kb
下载次数: 0
上传时间: 2019-04-20
详细说明:NULL
博文链接:https://lvhuiqing.iteye.com/blog/1883404JPIG仕租分科会200902亍牛又卜
1.2.同期L了刂一
PostgreSQl前段下機能寸石£ pepo l0特徴加b、井常{早ψ\段階期一沙t宪装在札
大(图3)。二机钴、各pgp了口七又加2台⑦ Postgre SQL圹一八接、(1)7可刂竹一沙日∽加5受切取
大更新系刀SQL充、(2)2台叨 PostgreSQL L送寸石形式
psql
psql
(1)更新系SQ左送信
pepo l
popol
popol
各 popol口七又加
(2)更新系SLt2台
複数 Post greS则L_七接徒
Postgres【彰送
PostgreSQL
PostgreSQL
网3 popol石同期可刂分一沙>亻x一
1.3,簡单内部樽造¢說明
pepo|-ll砝了儿于了口乜又少又亍厶下、共有×乇刂下宁一夕共有、乜又才¢相互排他制御、沙少十儿石
内部通信老行(区4)。
Pgpo|1制猫
pgpool
pgpool
parool
pcp
x乇
(1)con info
(1)CONN_CONTER_SEM
(2)pids
接数力>卜
3Req info
(2)REQUEST_ INFO_SEM
(4)InRecovery
内部甬信
冈4, pepo-|内部構造
了口七又間共有寸召情報:
(1)接統情報
con info
(2)了口乜又pid
pids
(3)刂夕工又卜情報
Roq info
(4)刂力八刂中力否力
ReCovey
Copyr i ght 2009. Suzuki Hironobu. Al i right reserved
JPIG仕租分科会200902亍牛又卜
以下(1)小与(3)下各種情報左定義寸石構造体示寸。
ypedef struct i
cha
database [SM DAtABaSe]; /x Database name x/
char
user [SM USER]; /x User name x/
major; x protocol ma jor version x/
minor; / protocol minor vcrsion
Int
counter; / used counter *
t i me t
create t ime; /k connect ion creation t, ime
nt load ba lancing node;/米 load balancing node冰
3 ColrlectionInfo
typedef struct
pid t pid; x oSs process id 7
time t start time; /k fork( time */
ConnectionInfo *connect ion info; /x connection informat ion
typedef struct i
POOL REQUEST KINDkind; / request kind x/
nt node id [MAX NUM BACKENDS];
/* request node id
nt mastor nodc id:
k the youngest nodc id which is not in down status
int conn counter
POOL REQUEST INTO:
Copyr i ght 2009. Suzuki Hironobu. Al i right reserved
JPIG仕租分科会200902亍牛又卜
2.才>力八以
2.1.才>力八
gpol-II、一方⑦ PostureS圹一八(“丿一下”七小場合办石)邡障害起二L了、残刂ω廿一八丶飞稼
慟L→石二上力石(Ⅸ5
害、通信叨切断炉(υ又∽又)遲机£輊微本力、八-F工了障害石重傷本O志不有刂
得石邡、 popol laψ又求∽時問Σ下一卜障詈在檢知∪、残刂Φ丿一下稼動L石。
pgpool[正常本丿一卜送信L
運用在純石二七力下老石
通信断八一下障害匕
ostgreso
本人与力⑦彈害癸生
冈5,障害兇生
問題l障害力占復旧、→刂刂力八刂下石。 popol-II比(後述寸石刁工一x20匚<短時問仑除\z)正常
連用左稀水力b刂力八刂飞老石。二札在才与不力八刂飞召。
正常運用在統水力、
正常運用态統本力、
障書丿一下在修復下老石
丿一下在追加下老石
psq
Pgpt
postgresql
postgresl
ostgreso postgres
postgres2
同期
同期
冈6, Pppoa|-|⑨内部糟造
扫、二仂機能使方七障害復旧烂讨飞水<、正常運用在弒加丿一卜追加乇可能¢石
Copyr i ght 2009. Suzuki Hironobu. Al i right reserved
JPIG仕租分科会200902亍牛又卜
2.2.才亻力八刂仕組孙
popol-II才∽亻沙力八刂叨仕租办左解說寸石(区7)。 pepo l-II叨才>亻>刂力八刂l、2→0丁r
x心分加札飞↓石。
x1
刂力八刂元0心一又八%勹了了态刂力八刂寸石圹一八斬送
刁一x2
刁工一又1作中{更靳亡机大了一力亻了口圹在送U、圹一八再起動。先軟送札大一又八y
夕了了七合打廿了亍一夕八一又①刂力八後民圹一匕又開始。
习王一x
刁工一x2
元一夕0檢索竹更新可能
psq
全接菥在切断
popol
丿力/寸石側①+一
刂力八寸召側⑦一八
postgresql
postgres1
postgresO
postgresql
八一又八夕7了0朝送
刁工一又1①期間二更新机大
7一力亻口夕在彰送
图7才亻力八y
2.3. Postures匚不卜一儿寸石 parool-数
pgpo0l-II砝甚才亻力八夫行寸石大妙、 PostgreSQL側⑦関数 pgpool recovery()
pgpool remote start(在宪行寸石。
CREATE OR REPLACE FUNCT ION pgpool_recovery(text, text, text) RETURNS bool
AS ' $I ibdir/pgpool-recovery',pgpool_ recovery LANGUAGE C STRICT;
CREATE OR REPLACE FUNCT ION pgpool_remote start(text, text) RetuRns bool
AS $I ibdir/pgpool-recovery','pgpool_remote start LANGUAGE C STRICT
Copyr i ght 2009. Suzuki Hironobu. Al i right reserved
JPIG仕租分科会200902亍牛又卜
関数 pgpool recovery( pgpool remote start(∽機能l、亍一夕八一又勹歹又夕上力机大汐工儿又勹刂
卜O宪行石
→志刂:pgpl-Ilh関数 pg recovery(水毫介飞、儿又夕刂了卜左实行廿石飞苏石(图8)
pgpool-Il
(1) grecovery(又少孙名)夫行
PostgreSQL
pg recovery
pgpoo rec
(2)又少不郏行
recovery._xx_stage. sh
图8 Postgres上儿又夕刂了卜行吵仕組孙
参考飞 pgpool_ recovery o宪装示寸。本体l0 So system彐又∽F念呼U出寸¢扬石二匕加打加石。
pgpoo -recovey.c
Datum
pgpool-recovery(PG_FUNCT ON_ARGS)
int r;
char * scr ipt Dat umGet CStr ing (Direct Funct ionCal l1(textout PointerGetDatum(PG_GETARG_ TEXT_P(O))
char remote_ host= DatumGet CStr ing(DirectFunct ionAl l1 (textout
PointerGet Datum(PG GETARG TEXT P(1))))
char *remote data directory DatumGet CStr ing(DirectFunct ionAl lI(textou
Pointer Get Datum(PG GETARG_ TEXT_ P(2))))
snpr int f(recovery scr ipt sizeof(recovery scr ipt).%s,/ %s %s %s%s
DataDir, script, DataDir, remote host
remote -data directory)
elog(DEBuG1,"recovery_scr ipt: %s, recovery_scr ipt);
r system(recovery scr ipt):
elog(ErRoR. pgpool_ recovery failed);
PG RETURN BOOL(true);
Copyr i ght 2009. Suzuki Hironobu. Al i right reserved
JPIG仕租分科会200902亍牛又卜
24,才以力八¢夕亻厶沙一
以下、 pepo l-II石、才河亻刂力八刂如理刃夕亻厶沙一竹少又在示寸(冈9)。与农才y亻刂
力八刂O卜刂力(、 pcp recovery node彐又冰下¢扔石
x1
pg start backup()関数O夫行後一又八ν夕了以了在刂力八刂側O+一八[送寸石。
刁工-x2
WAL口切刂替礻飞最新⑦7一力亻了口圹在刂力八《側⑦圹一八[斬送、最後 PostgreSQL一八在
再起動寸石。
pcp recovery node彐了∽F夫行
了工一x1
刁王一x2
popol
pgpool recovery oc
pgpool_recovery(T
pgpool_ remote starts
y_1st stage. sh
recovery2 End stage.sh| pgpool_remote start老夫行
V pestart-backupORT!: V. pg switch logo. v
postgresql
元一夕八一又
夕5又夕
刁x一x1期間更新机大
八一又八y夕了y了0送
Postgres-八叨
ML口纩仑切刂替元、
再起動+刂力八
力亻了口
一力4了口L了彰送
力/完了
postgres1
于一夕心一又
力又夕
一力刁口少
图9才力以④夕亻沙一>又
参考末!、上記02工一又夷行寸石p8pl-I①丿一又彐一下念技粹匕了示寸
Copyr i ght 2009. Suzuki Hironobu. Al i right reserved
JPIG仕租分科会200902亍牛又卜
recovery. C
nt start_recovery (int recovery_ node
/米1 st stage x
i f (exec checkpoint(conn) =0)
if (exec recovery (conn, recovery backend, FIRST_ STAGE)! = 0)
/米2 nd stage
if wait connection closed=0)
if ( exec checkpoint (conn)I= 0)
i f (execrecovery (conn, recovery backend, SECOND_ STAGE) =0);
f(exec_ remote start(conn, recovery_ backend)!=0)
if (check_postmaster started ( recovery backend ))
send- fail back_request (recovery_node)
/ wait for fai|back米/
while (!pcp wakeup_ request )t
struct t imeval t=1. 01
冰 poll ing s|GUSR2 signal per1sec米/
select(o, NULL. NULL. NULL. &t)
pcp wakeup request =0
return o
static int exec_recovery (PGconn *conn, Backend Info backend, char stage)
PGresul t xresul t
char khost name
hostname backend- >backend host name
scr ipt =(stage = FIRST_ STAGE)?
pool conf ig>recovery 1st stage command: pool conf ig->recovery 2nd st age command
snpr intf(recovery_command.
" SELECT pgpoo_recovery('‰s’.‰','%s’)",
script. host name, backend->backend data directory)
result PQexec(conn, recovery command)
r =(PQresul tStatus (resul t)I= PGRES_ TUPLES_ OK);
POclear (resul t);
return r
Copyr i ght 2009. Suzuki Hironobu. Al i right reserved
JPIG仕租分科会200902亍牛又卜
Append ix
A-1. recovery lst stage, sh
#!/bin/bash
PSQL=/usr/local/pgsql/bin/psq
MASTER_ BASEDIR-$
RECOVERY HOST-$2
RECOVERY BASEDIR=$3
#八一又八少夕了y了0開始
$PSQL -C SELECT pg start backup( pgpool-recovery)" postgres
#力八刂先用 Oprecovry.conf刁7亻儿生成
echo " restore command cp sRECOVERY BASEDIR/arch ive log/%f %p>SMASTER BASED IR/recovery. conf
#刂力八刂先O宁一夕八一又乃又夕在念O妙民八少夕了少了
ssh -T $RECOVERY HOST rm -rf SRECOVERY BASEDIRbk
ssh -T $RECOVERY_HOST mv -f SRECOVERY_ BASEDIR.. bkh
#宁一夕心一又夕弓又夕=八一又八%夕了以了在刂力八刂先鸢送
rsync -az -c ssh $MASTER BASEDIR/ $RECOVERY HOST: SRECOVERY BASEDIR/
ssh-T SRECOVERY_HOST cp-f SRECOVERY_ BASEDIR. bk/postgresql. conf SRECOVERY_ BASEDIR
ssh -T $RECOVERY_HOST rm -f SRECOVERY_BASEDIR/postmaster. pid
#力八刂先[二軻送大下、不要民农 frecovery.conf充削除
rm -f SMASTER_ BASED IR/recovery. conf
#一又八夕了%了0終了
$PSQL -C"SELECT pg_stop backup()"postgres
A-2, recovery 2nd stage, sh
#i/ bin/bash
PSQL=/usr/local/pgsql/bin/ psq
MASTER BASEDIR=$
RECOVERY HOST=S2
RECOVERY BASEDIR=$3
#最新①了一力亻口夕保存
SPSQL -C 'SELECT pg_ switch_xlog()" postgres
#最新①了一力亻丁口夕刂力八刂先〖送
r sync -az -e ssh SMASTER_ BASEDIR/archive log/ $RECoVERY_HOST: SRECoVERY_ BASEDIR/archive log/
Copyr i ght 2009. Suzuki Hironobu. Al i right reserved
10/11
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.