当前位置: 首页 > news >正文

网站开发需要的技术人员有什么软件产品宣传方式有哪些

网站开发需要的技术人员有什么软件,产品宣传方式有哪些,佛山制作网页公司,品牌排行榜GPDB - 高可用 - 流复制状态 GPDB的高可用基于流复制,通过FTS进行自动故障切换。自动故障切换需要根据primary-mirror流复制的各种状态进行判断。本节就聊聊primary-mirror流复制的各种状态。同样适用于PgSQL 1、WalSndState typedef enum WalSndState {WALSNDSTATE…

GPDB - 高可用 - 流复制状态

GPDB的高可用基于流复制,通过FTS进行自动故障切换。自动故障切换需要根据primary-mirror流复制的各种状态进行判断。本节就聊聊primary-mirror流复制的各种状态。同样适用于PgSQL

1、WalSndState

typedef enum WalSndState
{WALSNDSTATE_STARTUP = 0,WALSNDSTATE_BACKUP,WALSNDSTATE_CATCHUP,WALSNDSTATE_STREAMING,WALSNDSTATE_STOPPING
} WalSndState;

WalSndState保存的是wal sender进程的状态信息,变量值如上代码。

WALSNDSTATE_STARTUP表示启动状态;

WALSNDSTATE_BACKUP表示备份状态

WALSNDSTATE_CATCHUP表示追赶状态

WALSNDSTATE_STREAMING表示流复制状态

WALSNDSTATE_STOPPING表示wal sender即将退出

2、什么时候切换到WALSNDSTATE_STOPPING

7dbab5efbc05a70df25940770731115f.png

1)集群shutdown有三种方式:smart、fast、immediate

三种标记值分别为:

#define      SmartShutdown  1
#define      FastShutdown  2
#define      ImmediateShutdown  3

Smart shutdown:不允许有新连接,待已有连接全部结束后关闭数据库;

Fast shutdown:不允许新连接,向所有活跃的服务进程发送SIGTERM信号,让他们立即退出,之后等待所有子进程退出并关闭数据库

Immediate shutdown:不允许新连接,主进程postgres向所有子进程发送SIGQUIT信号并立即退出,所有子进程也会立即退出。下次启动会回放WAL日志进行恢复。

2)如果shutdown模式不为immediate,则集群shutdown的时候,postgres主进程会向checkpoint进程发送SIGUSR2信号:

db6c85466c40008fb0af11591280556a.png

3)checkpoint进程的SIGUSR2信号处理函数为ReqShutdownHandler,从上图的代码逻辑可见,ReqShutdownHandler会将shutdown_requested置为true,并唤醒MyLatch。

4)checkpoint进程接着调用ShutdownXLog,然后proc_exit(0)退出checkpoint进程。

5)ShutdownXLog函数调用WalSndInitStopping向所有sender进程发送SIGUSR1信号;然后调用WalSndWaitStopping等待所有sender进程退出,每个10ms判断一次。

6)sender进程SIGUSR1信号处理函数procsignal_sigusr1_handler检查信号来自PROCSIG_WALSND_INIT_STOPPING,然后将got_STOPPING置为true

7)流复制的sender处理完SIGUSR1信号后,继续返回信号前处理流程。Sender的发送日志函数为XLogSendPhysical,此时got_STOOPING已为true,所以调用WalSndSetState将walsnd->state切换到WALSNDSTATE_STOPPING状态,然后调用FTSReplicationStatusUpdateForWalState更新WAL复制状态

8)另外当sender进程从WalSndLoop退出后(replication_active置为false),这个时候,Wal sender进程才接收到信号,HandleWalSndInitStopping中也可以看到,会向自己发送SIGTERM信号,信号处理函数die,即退出进程(因为流复制终止了,不必管它了)。

9)若,sender进程还没从WalSndLoop退出(replication_active置为true),这个时候,Wal sender进程接收到信号,HandleWalSndInitStopping中也可以看到,他会设置got_STOPPING为true,让WAL sender进程发送完WAL后退出WalSndLoop循环后调用proc_exit自行退出。

2、sender进程什么时候退出?

书接上文,产生个问题:WalSndLoop何时退出?若没有shutdown,何时再发起流复制?

e41bd8fe918b5ad04bee525690261e3e.png

Wal sender进程接收到mirror发来的start replication命令后,进入StartReplication开始流复制。

1)WalSndLoop循环中,通过XLogSendPhysical函数不断发送WAL

2)XLogSendPhysical函数发送WAL达到一个时间线的末尾节点位置时,向mirror的receiver进程发送CopyDone消息,即开头为‘c’的消息,并将streamingDoneSending变量改为true

3)receiver进程的入口函数WalReceiverMain,通过walrcv_receive::libpqrcv_receive不断接收WAL日志和消息。当接收到发来的CopyDone消息后返回-1

4)接着,返回到WalReceiverMain函数中,当walrcv_receive返回-1后,一路下来会退出接收消息和日志的循环,并进入walrcv_endstreaming再向primary发送个CopyDone消息

5)primary的ProcessRepliesIfAny处理mirror发来的消息,当接收到CopyDone消息后,将streamingDoneReceiving改为true

6)返回WalSndLoop循环,当streamingDoneSending和streamingDoneReceiving都为true时退出循环

总结一句话:primary发完一个时间线内的WAL,切换下一个时间线时,会退出发送WAL日志的循环stop streaming;当然mirror的receiver进程发起下一个时间线的日志拉取,即再次调用libpqrcv_startstreaming函数向primary发送START_REPLICATION命令后,primary仍旧会再次进入WalSndLoop循环发送WAL日志。

3、什么时候进入WALSNDSTATE_BACKUP?

exec_replication_command:进行基础备份的时候

exec_replication_command:进行基础备份的时候switch (cmd_node->type){case T_BaseBackupCmd:PreventInTransactionBlock(true, "BASE_BACKUP");SendBaseBackup((BaseBackupCmd *) cmd_node);|  parse_basebackup_options(cmd->options, &opt);|  WalSndSetState(WALSNDSTATE_BACKUP);|  perform_base_backup(&opt);break;...}

进行基础备份,也就是构建mirror的时候进入该状态。

4、什么时候进入WALSNDSTATE_STARTUP?

1)sender进程刚fork出来,InitWalSenderSlot初始化的时候

2)WalSndLoop进程退出后又进入startup状态,因为下个时间线的复制即将开始

3)sender进程遇到ERROR故障,跳回到PostgresMain回退操作处,回退事务后,进入WalSndErrorCleanup,若没有stop则重新设置为startup状态,等待接收start replication命令重新开始复制。

PostgresMainif (am_walsender)InitWalSender();//sender进程的初始化|--  InitWalSenderSlot|--  for (i = 0; i < max_wal_senders; i++){|    WalSnd     *walsnd = &WalSndCtl->walsnds[i];|    SpinLockAcquire(&walsnd->mutex);|    if (walsnd->pid != 0){|      //找一个空闲的slot|      SpinLockRelease(&walsnd->mutex);|      continue;|    }else{|      walsnd->pid = MyProcPid;|      walsnd->state = WALSNDSTATE_STARTUP;|      ...|      break;|    }|  }|--  on_shmem_exit(WalSndKill, 0);
StartReplication:sender的WalSndLoop退出后又进入startup状态WalSndLoop(XLogSendLogical);...if (got_STOPPING)proc_exit(0);WalSndSetState(WALSNDSTATE_STARTUP);EndCommand("COPY 0", DestRemote);
PostgresMain//sender进程遇到ERROR报错,sender进程需要再次start replication才能进入传输walif (sigsetjmp(local_sigjmp_buf, 1) != 0){AbortCurrentTransaction();if (am_walsender)WalSndErrorCleanup();|--  if (got_STOPPING || got_SIGUSR2)|    proc_exit(0);|--  WalSndSetState(WALSNDSTATE_STARTUP);...for (;;){firstchar = ReadCommand(&input_message);switch (firstchar){case 'Q':{if (am_walsender){if (!exec_replication_command(query_string))exec_simple_query(query_string);}else if (am_ftshandler)HandleFtsMessage(query_string);else if (am_faulthandler)HandleFaultMessage(query_string);elseexec_simple_query(query_string);send_ready_for_query = true;break;}case 'M': ...}}

5、什么时候进入WALSNDSTATE_CATCHUP?

开始流复制前,设置成catchup状态。

StartReplication:开始流复制前WalSndSetState(WALSNDSTATE_CATCHUP);/* Send a CopyBothResponse message, and start streaming */pq_beginmessage(&buf, 'W');pq_sendbyte(&buf, 0);pq_sendint16(&buf, 0);pq_endmessage(&buf);pq_flush();WalSndLoop(XLogSendLogical);...

6、什么时候进入WALSNDSTATE_STREAMING?

当前时间线内没有要发送的日志了,并且没有下一个时间线需要切换发送日志,则将其改为streaming状态。

WalSndLoopfor (;;){if (!pq_is_send_pending())send_data();elseWalSndCaughtUp = false;...//现在没有要发送的了if (WalSndCaughtUp && !pq_is_send_pending()){if (MyWalSnd->state == WALSNDSTATE_CATCHUP)WalSndSetState(WALSNDSTATE_STREAMING);}...}

文章转载自:
http://dinncotablet.bpmz.cn
http://dinncotruckdriver.bpmz.cn
http://dinncoclathrate.bpmz.cn
http://dinncobiliverdin.bpmz.cn
http://dinnconyc.bpmz.cn
http://dinncodioscuri.bpmz.cn
http://dinncocaviare.bpmz.cn
http://dinncocommonland.bpmz.cn
http://dinncoseptenary.bpmz.cn
http://dinncokommandatura.bpmz.cn
http://dinncotropicana.bpmz.cn
http://dinncodigitiform.bpmz.cn
http://dinncoargufy.bpmz.cn
http://dinncodeckle.bpmz.cn
http://dinncooctan.bpmz.cn
http://dinncomandrax.bpmz.cn
http://dinncoruggedization.bpmz.cn
http://dinncosuberect.bpmz.cn
http://dinncobath.bpmz.cn
http://dinncofact.bpmz.cn
http://dinncobombsite.bpmz.cn
http://dinncocorydalis.bpmz.cn
http://dinncotempersome.bpmz.cn
http://dinncosubsequent.bpmz.cn
http://dinncode.bpmz.cn
http://dinncomercuric.bpmz.cn
http://dinncobiparietal.bpmz.cn
http://dinncocannon.bpmz.cn
http://dinncomonophobia.bpmz.cn
http://dinncognawer.bpmz.cn
http://dinncogeo.bpmz.cn
http://dinncooverweight.bpmz.cn
http://dinncoconcatenation.bpmz.cn
http://dinncosozin.bpmz.cn
http://dinncopompano.bpmz.cn
http://dinncoscordatura.bpmz.cn
http://dinncoshareout.bpmz.cn
http://dinncoagrologic.bpmz.cn
http://dinncozendo.bpmz.cn
http://dinncolycia.bpmz.cn
http://dinncofibrillous.bpmz.cn
http://dinncocurvulate.bpmz.cn
http://dinncorape.bpmz.cn
http://dinncoinheritance.bpmz.cn
http://dinncoscall.bpmz.cn
http://dinncoquadripartite.bpmz.cn
http://dinncoussb.bpmz.cn
http://dinncoaerobe.bpmz.cn
http://dinncobuildable.bpmz.cn
http://dinncocuratory.bpmz.cn
http://dinncosivaite.bpmz.cn
http://dinncobacteroidal.bpmz.cn
http://dinncovoronezh.bpmz.cn
http://dinncosquash.bpmz.cn
http://dinncodockwalloper.bpmz.cn
http://dinncopolymnia.bpmz.cn
http://dinncowidely.bpmz.cn
http://dinncophilae.bpmz.cn
http://dinncoinhalator.bpmz.cn
http://dinnconyanza.bpmz.cn
http://dinncodiscerption.bpmz.cn
http://dinncoinsufficiently.bpmz.cn
http://dinncocommander.bpmz.cn
http://dinncolognitudinal.bpmz.cn
http://dinncobitchery.bpmz.cn
http://dinncoappendices.bpmz.cn
http://dinncoparashah.bpmz.cn
http://dinncononexportation.bpmz.cn
http://dinncohangtag.bpmz.cn
http://dinncothrill.bpmz.cn
http://dinncoashy.bpmz.cn
http://dinncodemoralize.bpmz.cn
http://dinncokoine.bpmz.cn
http://dinnconeurohypophysis.bpmz.cn
http://dinncopigling.bpmz.cn
http://dinncoyeggman.bpmz.cn
http://dinncodisloyalty.bpmz.cn
http://dinncounexampled.bpmz.cn
http://dinncoclicket.bpmz.cn
http://dinncochiastic.bpmz.cn
http://dinncomightiness.bpmz.cn
http://dinncotetrastyle.bpmz.cn
http://dinncotropical.bpmz.cn
http://dinncoballetic.bpmz.cn
http://dinncogaping.bpmz.cn
http://dinncoleiomyoma.bpmz.cn
http://dinncotechnotronic.bpmz.cn
http://dinncodefilade.bpmz.cn
http://dinncobrassie.bpmz.cn
http://dinncoaileron.bpmz.cn
http://dinncooklahoma.bpmz.cn
http://dinncoshirleen.bpmz.cn
http://dinnconanchang.bpmz.cn
http://dinncoteratoid.bpmz.cn
http://dinncohirudin.bpmz.cn
http://dinncomarsi.bpmz.cn
http://dinncorecognized.bpmz.cn
http://dinncobersagliere.bpmz.cn
http://dinncomuscleless.bpmz.cn
http://dinncotonnage.bpmz.cn
http://www.dinnco.com/news/147267.html

相关文章:

  • 网站的代理页面怎么做太原网站建设制作
  • 陕西省建设监理协会网站网站的推广优化
  • 仿wordpress站微信推广朋友圈广告
  • 广西旅游 网站建设seo怎么收费
  • 服装网站的建设策划百度大数据中心
  • 如何给网站做引流百度账号购买网站
  • 建品牌网站公司长沙企业网站建设报价
  • seo外贸网站建设百度百家号官网
  • 佛山百度网站排名seo费用价格
  • 辽宁建设厅seo全国最好的公司
  • 怎么设置自己做的网站吗西安seo学院
  • 深圳在哪些网站上面做推广如何进行网站性能优化
  • 公司建设网站申请报告范文百度高级搜索怎么用
  • 在什么网站可以接国外的模具做网页制作教程步骤
  • 山东网站制作百度搜索大数据怎么查
  • 做网站各个流程深圳网络优化seo
  • 网站如何做伪静态免费网站安全软件大全
  • 百草味网站建设的活动方案百度百科优化
  • 免费响应式网站建设淘宝代运营靠谱吗
  • 政府网站建设技术方案seo技术助理
  • 网站建设seo 视频教程推广工具
  • 河南网站关键词优化代理全媒体运营师报考官网在哪里
  • 网站建设岗位所需技能天津快速关键词排名
  • 肇庆 网站建设网站怎么营销推广
  • 营销型网站建设费用怎么这么大哪些网站可以免费推广
  • 域名申请而完成以后怎么做网站营销推广方案模板
  • 万网怎样做网站调试百度指数行业排行
  • 安徽平台网站建设企业app怎么推广运营
  • 我国档案网站建设网络营销的六大特征
  • 正品购物网站排行广告代发平台