SlideShare une entreprise Scribd logo
1  sur  39
Télécharger pour lire hors ligne
基于linux-HA的PG高可用系统

           DBA/李思亮
我们的问题
• 目前的mysql-HA 方案是可行的,有效的。
• mysql-HA 检测代码时间过长,目前需要5
  分钟左右确认故障。
• 单向不可控,主从网络不通导致切换的可
  能性。
• 监控代码与切换代码分离,引入多层架
  构,增加中间环节。
• LVS的高可用性保障(脑裂问题)
简介
•   linux-ha.org 是希望提供一整套的解决方案库,来实现linux系统下的高可用性解决方案。

•   起始于1999年。
•   最初是heartbeat ,到版本2.1.4 的时候,做了功能上的分拆,分拆为heartbeat,
    cluster-glue,resource-agents 3个部分,同时,把CRM (集群管理)分离作为一个单
    独的开源系统进行开发,也就是我们说的pacemaker .
•   现在的heartbeat 只剩下一个消息通信层这一个功能了,社区也已经不再添加新的功能
    了。这也预示着heartbeat 的生命周期进入夕阳阶段了。

•   另一个项目corosync 功能跟heartbeat 一样:消息管理层。 但比heartbeat 集成了更多
    的功能。

•   2002年起始于openais.org ,2008年命名为corosync 2009年发布1.0.0版本,
•   目前版本 1.4.1 。

•   pacemaker 模块 来源于heartbeat 主要功能是资源管理。
不同的架构方案
我们的方案
COROSYNC + PACEMAKER
COROSYNC
• 提供安全可靠,有序的消息传输。
• 确认集群的membership
• 确认集群的法定投票人数(quorum)
 – 通过authkey 确认集群节点间的关系和安全验证
 – 单环有序的广播协议(single-ring ordering and
   membership protocol)
 – 一般通过网络udp协议传输消息,可以通过广播
   (broadcast) 方式
Pacemaker
• 目前的主要代码贡献者 redhat,ibm,NTT
• 提供 分布式 集群消息框架
• CIB 是一个基于XML的数据仓库,存储了
  资源的配置信息和资源的运行状态
• 集成了 策略决策系统(PE) (Policy Engine )
  来保证 资源之间的依赖关系
• Resource Agents: 资源脚本。资源脚本可
  以是任何可以执行的代码, 一般要求 代码
  能够响应: start stop monitor 3个动作
安装
• yum install pacemaker corosync
  heartbeat
• yum install resource-agnets fence-
  agents
• 各个节点之间配置无密码认证。
• 各个节点之间配置时间同步。
• linux-HA redhat6.0 之后的安装变更
  – http://bbs.pconline.cn/topic-2329.html
                        □
配置
•   各个节点的配置中的主机名=`uname -n`
•   配置节点的hosts文件主机名=`uname -n`
•   vi /etc/corosync/corosync.conf
•   vi /etc/corosync/service.d/pcmk
    – service {
    –     name: pacemaker
    –      ver: 1
    – }
• corosync-keygen
• copy all of them to all nodes.
启动
• /etc/init.d/corosync start
• /etc/init.d/pacemaker start
• crm_mon 监控状态。
资源
• 资源是任何可执行的程序。
• 资源需要支持3个基本操作
  – start  启动资源,
  – stop    停止资源,
  – monitor 监控状态
• http,database,filesystem,disk,
  network,ip,drbd。。。。
• 目前社区提供约70个资源脚本
stonith(fence)设备
• Shoot The Other Node In The Head
  – 考虑以下环境:
  – M-S结构,如何确保vip 不在两个节点上同时启动,或
    者确保vip在M节点上正确的卸载,才能在S节点上启
    动?
• 确保资源真正的在另一个节点上关闭
• 返回的状态是可信的。
主要的stonith(fence)设备
• crm ra list stonith
• 对我们来说最有价值的。
  – fence_vmware 远程操作虚拟机
  – fence_ipmilan 主机远程电源管理
• redhat 资助了大部分的pacemaker 的开发
  者,把redhat的RHCS的fence系统合并生
  成了resource-agents,stonith改称为fence
  设备。
资源管理器pacemaker
• 基于xml的配置数据库与状态容器
• crm_mon 监控资源状态,基于事件驱动的。
• crm 资源配置管理工具
 – crm configure show
 – crm resource show
 – crm help 。。。。

• cibadmin 资源配置信息仓库cib的管理工
  具
•
•
    node node95 
                              我们的一个配置示例
         attributes standby="off"
•   node node96 
•        attributes standby="off"
•   primitive ClusterIp ocf:heartbeat:IPaddr2 
•        params ip=" 192.168.11.101" cidr_netmask="32" 
•        op monitor interval="30s" failure-timeout="60s" 
•        op start interval="0" timeout="30s" 
•        op stop interval="0" timeout="30s" 
•        meta target-role="Started" is-managed="true"
•   primitive fence_vm95 stonith:fence_vmware 
•        params ipaddr=" 192.168.10.197" login="user" passwd="passwd" vmware_datacenter="GZ-Offices" vmware_type="esx" action="reboot" port="dba-test-Cos6.2.64-
    11.95" pcmk_reboot_action="reboot" pcmk_host_list="node95 node96" 
•        op monitor interval="20" timeout="60s" failure-timeout="60s" fail-count="100" 
•        op start interval="0" timeout="60s" 
•        meta target-role="Started"
•   primitive fence_vm96 stonith:fence_vmware 
•        params ipaddr=" 192.168.10.197" login="user" passwd="passwd" vmware_datacenter="GZ-Offices" vmware_type="esx" action="reboot" port="dba-test-Cos6.2.64-
    11.96" pcmk_reboot_action="reboot" pcmk_host_list="node95 node96" 
•        op monitor interval="20" timeout="60s" failure-timeout="60s" fail-count="100" 
•        op start interval="0" timeout="60s" 
•        meta target-role="Started"
•
•
    primitive ping ocf:pacemaker:ping 
                                                                 □
         params host_list="192.168.11.95 192.168.11.96 192.168.10.1 192.168.10.254 10.10.200.10 10.10.200.20" multiplier="100" 
•        op monitor interval="10s" timeout="60s" failure-timeout="30s" 
•        op start interval="0" timeout="60s" 
•        op stop interval="0" timeout="100s"
•   primitive postgres_res ocf:heartbeat:pgsql 
•        params pgctl="/usr/local/pgsql/bin/pg_ctl" psql="/usr/local/pgsql/bin/psql" start_opt="" pgdata="/usr/local/pgsql/data" config="/usr/local/pgsql/data/postgresql.conf"
    pgdba="postgres" pgdb="postgres" 
•        op start interval="0" timeout="120s" 
•        op stop interval="0" timeout="120s" 
•        op monitor interval="10s" timeout="30s" failure-timeout="60s" migration-threshold="10000" 
•        meta target-role="Started" is-managed="true"
•   clone clone-ping ping 
•        meta interleave="true" target-role="Started"
•   location loc_ClusterIp ClusterIp 50: node96
•   location loc_fence_vm95 fence_vm95 -inf: node95
•   location loc_fence_vm96 fence_vm96 -inf: node96
•   location loc_postgres_res postgres_res 50: node96
•   colocation Pg-with-ClusterIp inf: ClusterIp postgres_res
•   order Pg-before-ClusterIp inf: postgres_res ClusterIp
•   property $id="cib-bootstrap-options" 
•        dc-version="1.1.7-6.el6-148fccfd5985c5590cc601123c6c16e966b85d14" 
•        cluster-infrastructure="openais" 
•        expected-quorum-votes="2" 
•        stonith-enabled="true" 
•        last-lrm-refresh="1350372421" 
•        no-quorum-policy="ignore" 
•        cluster-delay="30s"
•   rsc_defaults $id="rsc-options" 
•        resource-stickiness="100"
我们的一个配置示例
• node node95 
    attributes standby="off"
  node node96 
    attributes standby="off"
我们的一个配置示例
• primitive ClusterIp ocf:heartbeat:IPaddr2 
    params ip="192.168.11.101" 
      cidr_netmask="32" 
     op monitor interval="30s" 
  failure-timeout="60s" 
  op start interval="0" timeout="30s" 
  op stop interval="0" timeout="30s"
我们的一个配置示例
• primitive fence_vm95 stonith:fence_vmware 
      params ipaddr="x.x.x.x" login="user"
  passwd="passwd vmware_datacenter="GZ-
  Offices" vmware_type="esx" action="reboot"
  port="dba-test-Cos6.2.64-11.95"
  pcmk_reboot_action="reboot"
  pcmk_host_list="node95 node96" 
      op monitor interval="20" timeout="60s"
  failure-timeout="60s" fail-count="100" 
     op start interval="0" timeout="60s" 
      meta target-role="Started"
我们的一个配置示例
• primitive fence_vm96 stonith:fence_vmware 
     params ipaddr="x.x.x.x" login="user"
  passwd="passwd" 
     vmware_datacenter="GZ-Offices"
    vmware_type="esx" action="reboot" port="dba-test-
    Cos6.2.64-11.96" pcmk_reboot_action="reboot"
    pcmk_host_list="node95 node96" 
      op monitor interval="20" timeout="60s"
  failure-timeout="60s" fail-count="100" 
      op start interval="0" timeout="60s" 
      meta target-role="Started"
我们的一个配置示例
• primitive ping ocf:pacemaker:ping 
      params host_list="192.168.11.95
  192.168.11.96 192.168.10.1 192.168.10.254
  10.10.200.10 10.10.200.20" multiplier="100" 
      op monitor interval="10s" timeout="60s"
  failure-timeout="30s" 
      op start interval="0" timeout="60s" 
      op stop interval="0" timeout="100s"
我们的一个配置示例
• primitive postgres_res ocf:heartbeat:pgsql 
      params pgctl="/usr/local/pgsql/bin/pg_ctl"
  psql="/usr/local/pgsql/bin/psql" start_opt=""
  pgdata="/usr/local/pgsql/data"
  config="/usr/local/pgsql/data/postgresql.conf"
  pgdba="postgres" pgdb="postgres" 
      op start interval="0" timeout="120s" 
      op stop interval="0" timeout="120s" 
      op monitor interval="10s" timeout="30s"
  failure-timeout="60s" migration-
  threshold="10000"
我们的一个配置示例
• clone clone-ping ping 
     meta interleave="true" target-
  role="Started"
我们的一个配置示例
• location loc_ClusterIp ClusterIp 50:
  node96
• location loc_fence_vm95 fence_vm95 -inf:
  node95
• location loc_fence_vm96 fence_vm96 -inf:
  node96
• location loc_postgres_res postgres_res 50:
  node96
我们的一个配置示例
• colocation Pg-with-ClusterIp inf: ClusterIp
  postgres_res
• order Pg-before-ClusterIp inf: postgres_res
  ClusterIp
我们的一个配置示例
• property $id="cib-bootstrap-options" 
     dc-version="1.1.7-6.el6-
  148fccfd5985c5590cc601123c6c16e966b85d14
  "
•      cluster-infrastructure="openais" 
•      expected-quorum-votes="2" 
•      stonith-enabled="true" 
•      last-lrm-refresh="1350372421" 
•      no-quorum-policy="ignore" 
•      cluster-delay="30s"
我们的一个配置示例
• rsc_defaults $id="rsc-options" 
     resource-stickiness="100"
数据库启动脚本的改造
PG数据库切换的两个假设
• 1.主从数据库都是开着的,这个时候,如果
  主库发生故障了,数据库可以按照我们的
  预想的方式发生主从切换。
     然后从库的pg 会切换为主库,原来的主
  库就坏掉了,需要人工干预才能恢复主从
  复制了
• 我们的数据库只支持一次主从切换。
PG数据库切换的两个假设
• 2.从库是冷启动的,就是说在发生故障切换的时候,从
  库是没有启动的,这个时候,也会发生切换,但是从库
  是只读访问的,不会破坏主从的复制关系,这个时候需
  要人工干预把从库切为主库。




 从库需要通过集群软件来停库的情况发生的可能性比较小,我们
 还是做了相应的处理。
PG数据库切换的两个假设
• 针对第2个情况的的考虑:
   dba 人工干预了从库的主机,比如我们把
  从库停机维护了2天,期间,发生了主从切
  换,这个时候,我们是不希望从库转换为
  主库的,因为可能丢了很多数据,从库的
  日志恢复是没有追赶上主库的。这个时
  候,从库只是简单的冷启动,会把未恢复
  的日志完成恢复,达到跟主库达到一致,
  这个时候,dba 可以人工干预启动主从切换。
VIP的arp表更新问题
• vip在集群节上启动时通过arp欺骗来实现的。
 – 在节点主机上执行ifconfig -a 是看不到vip的。

                          □

    □


                              □
资源的fail-count问题
• 每一个资源,如果失败是会在原来的节点上重启,如果重
  启成功则fail-count+=1,migration-threshold -=1,如果重
  启不成功,就会触发资源切换。
•    当fail-couont 达到最大值(1000000)就会发生资源
  切换。除非清理fail-count否则是资源是不会再回来的,这
  个参数是可以修改的。
• 清理fail-count 的命令:
  – crm resource cleanup <res> <node>
  – crm resource cleanup fence_vm95 node96
• 还有一个fail-timeout 问题
• 详细说明:
  – http://bbs.pconline.cn/topic-2367.html
fence设备的作用点
• 如果资源start失败,会直接切备机,fence
  设备不会被触发。
• 如果资源stop失败,fence设备就起作用,
  一般情况默认是重启主机,可设置。
• 如果不启用fence设备会怎样?
 – 如果资源stop失败,就会不停的尝试stop,这
   个资源将不会切换到备机,最终会陷入一个死
   循环,导致资源无法提供服务。
脑裂问题
• 什么情况下发生脑裂?
 – 集群中节点间的心跳连接断开就会发生脑裂
• 产生什么影响?
 – 集群中的各个节点各自为政,互相认为对方失
   败了,于是资源开始在各个节点上启动,fence
   设备不停的去相互重启对方主机,共享类资源
   出现故障,比如共享磁盘,发生写锁,vip同时
   在多个节点间启动,导致无法访问,数据库类
   资源,将导致数据不一致,甚至损坏。
如何预防脑裂
• 生产环境中脑裂的发生几率比较低。
    – 3个及其以上节点的环境中,几乎不可能发生。
•   启用fence设备。
•   增加第三方投票节点。
•   增加多个心跳链路。
•   我们的方案:
    – 启用fence设备 +多条心跳链路。
两节点集群的问题
• 法定投票人数问题
 – 资源管理器的中心节点的选出,要有集群中
   >sum(nodes)/2 的节点投票选出。
 – 通过设置系统参数 no-quorum-policy="ignore"
   解决
• 脑裂问题
 – 启用fence设备
 – 两节点的集群必须启用fence设备。
基于linux-HA 的PG高可用性
基于linux-HA 的PG高可用性

Contenu connexe

Tendances

基于MHA的MySQL高可用方案
基于MHA的MySQL高可用方案基于MHA的MySQL高可用方案
基于MHA的MySQL高可用方案Louis liu
 
服务器端性能优化 提升Qps、rt
服务器端性能优化 提升Qps、rt服务器端性能优化 提升Qps、rt
服务器端性能优化 提升Qps、rt锐 张
 
主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0jinqing zhu
 
Golang advance
Golang advanceGolang advance
Golang advancerfyiamcool
 
UseNUMA做了什么?(2012-03-14)
UseNUMA做了什么?(2012-03-14)UseNUMA做了什么?(2012-03-14)
UseNUMA做了什么?(2012-03-14)Kris Mok
 
【Maclean liu技术分享】深入理解oracle中mutex的内部原理
【Maclean liu技术分享】深入理解oracle中mutex的内部原理【Maclean liu技术分享】深入理解oracle中mutex的内部原理
【Maclean liu技术分享】深入理解oracle中mutex的内部原理maclean liu
 
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版Jackson Tian
 
Gdb principle
Gdb principleGdb principle
Gdb principlelibfetion
 
JavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization SkillsJavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization SkillsHo Kim
 
Automate with Ansible basic (3/e)
Automate with Ansible basic (3/e)Automate with Ansible basic (3/e)
Automate with Ansible basic (3/e)Chu-Siang Lai
 
我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptx我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptxjames tong
 
真正读懂oracle sql执行计划execution plan v20131025
真正读懂oracle sql执行计划execution plan v20131025真正读懂oracle sql执行计划execution plan v20131025
真正读懂oracle sql执行计划execution plan v20131025maclean liu
 
【Ask maclean技术分享oracle数据库优化】awr鹰眼系列awr报告全面指标分析
【Ask maclean技术分享oracle数据库优化】awr鹰眼系列awr报告全面指标分析【Ask maclean技术分享oracle数据库优化】awr鹰眼系列awr报告全面指标分析
【Ask maclean技术分享oracle数据库优化】awr鹰眼系列awr报告全面指标分析maclean liu
 
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410maclean liu
 
Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Kris Mok
 
Aisanux安装光盘分析
Aisanux安装光盘分析Aisanux安装光盘分析
Aisanux安装光盘分析Guangyao Cheng
 
ElasticSearch Training#2 (advanced concepts)-ESCC#1
ElasticSearch Training#2 (advanced concepts)-ESCC#1ElasticSearch Training#2 (advanced concepts)-ESCC#1
ElasticSearch Training#2 (advanced concepts)-ESCC#1medcl
 
Hadoop+spark實作
Hadoop+spark實作Hadoop+spark實作
Hadoop+spark實作FEG
 
Shell,信号量以及java进程的退出
Shell,信号量以及java进程的退出Shell,信号量以及java进程的退出
Shell,信号量以及java进程的退出wang hongjiang
 

Tendances (20)

基于MHA的MySQL高可用方案
基于MHA的MySQL高可用方案基于MHA的MySQL高可用方案
基于MHA的MySQL高可用方案
 
服务器端性能优化 提升Qps、rt
服务器端性能优化 提升Qps、rt服务器端性能优化 提升Qps、rt
服务器端性能优化 提升Qps、rt
 
主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0
 
Golang advance
Golang advanceGolang advance
Golang advance
 
UseNUMA做了什么?(2012-03-14)
UseNUMA做了什么?(2012-03-14)UseNUMA做了什么?(2012-03-14)
UseNUMA做了什么?(2012-03-14)
 
善用工具
善用工具善用工具
善用工具
 
【Maclean liu技术分享】深入理解oracle中mutex的内部原理
【Maclean liu技术分享】深入理解oracle中mutex的内部原理【Maclean liu技术分享】深入理解oracle中mutex的内部原理
【Maclean liu技术分享】深入理解oracle中mutex的内部原理
 
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版
 
Gdb principle
Gdb principleGdb principle
Gdb principle
 
JavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization SkillsJavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization Skills
 
Automate with Ansible basic (3/e)
Automate with Ansible basic (3/e)Automate with Ansible basic (3/e)
Automate with Ansible basic (3/e)
 
我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptx我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptx
 
真正读懂oracle sql执行计划execution plan v20131025
真正读懂oracle sql执行计划execution plan v20131025真正读懂oracle sql执行计划execution plan v20131025
真正读懂oracle sql执行计划execution plan v20131025
 
【Ask maclean技术分享oracle数据库优化】awr鹰眼系列awr报告全面指标分析
【Ask maclean技术分享oracle数据库优化】awr鹰眼系列awr报告全面指标分析【Ask maclean技术分享oracle数据库优化】awr鹰眼系列awr报告全面指标分析
【Ask maclean技术分享oracle数据库优化】awr鹰眼系列awr报告全面指标分析
 
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
 
Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)
 
Aisanux安装光盘分析
Aisanux安装光盘分析Aisanux安装光盘分析
Aisanux安装光盘分析
 
ElasticSearch Training#2 (advanced concepts)-ESCC#1
ElasticSearch Training#2 (advanced concepts)-ESCC#1ElasticSearch Training#2 (advanced concepts)-ESCC#1
ElasticSearch Training#2 (advanced concepts)-ESCC#1
 
Hadoop+spark實作
Hadoop+spark實作Hadoop+spark實作
Hadoop+spark實作
 
Shell,信号量以及java进程的退出
Shell,信号量以及java进程的退出Shell,信号量以及java进程的退出
Shell,信号量以及java进程的退出
 

En vedette

Mass 201 CMR 17 Data Privacy Law
Mass 201 CMR 17 Data Privacy LawMass 201 CMR 17 Data Privacy Law
Mass 201 CMR 17 Data Privacy Lawguest8b10a3
 
Life Unlimited Church Announcements
Life Unlimited Church AnnouncementsLife Unlimited Church Announcements
Life Unlimited Church Announcementsluchurch
 
Altamaha School Media Center
Altamaha School Media CenterAltamaha School Media Center
Altamaha School Media Centerjessmiles04
 
Background Check & Due Diligence Services - Arch360 Group
Background Check & Due Diligence Services - Arch360 GroupBackground Check & Due Diligence Services - Arch360 Group
Background Check & Due Diligence Services - Arch360 GroupGabriela Coldea, CFE
 
Heritage Observatory Open Data GIS Platform
Heritage Observatory Open Data GIS PlatformHeritage Observatory Open Data GIS Platform
Heritage Observatory Open Data GIS PlatformDaniel Caune
 
Introdução à programação em android
Introdução à programação em androidIntrodução à programação em android
Introdução à programação em androidArmindo Macedo
 
ad:tech New York: Marketing to Millennials
ad:tech New York: Marketing to Millennialsad:tech New York: Marketing to Millennials
ad:tech New York: Marketing to MillennialsContext Optional
 
Intellectual property
Intellectual propertyIntellectual property
Intellectual propertyRexNige
 
Open Source Presentation
Open Source PresentationOpen Source Presentation
Open Source PresentationRexNige
 
Ppt06 little rabbit 2010
Ppt06 little rabbit 2010Ppt06 little rabbit 2010
Ppt06 little rabbit 2010luciamontoliu
 
Social Media Best Practices OMMA Global Case Study
Social Media Best Practices OMMA Global Case StudySocial Media Best Practices OMMA Global Case Study
Social Media Best Practices OMMA Global Case StudyContext Optional
 
Tobi Timeline
Tobi TimelineTobi Timeline
Tobi Timelinettakata
 

En vedette (20)

Mass 201 CMR 17 Data Privacy Law
Mass 201 CMR 17 Data Privacy LawMass 201 CMR 17 Data Privacy Law
Mass 201 CMR 17 Data Privacy Law
 
Winter p4
Winter p4Winter p4
Winter p4
 
Life Unlimited Church Announcements
Life Unlimited Church AnnouncementsLife Unlimited Church Announcements
Life Unlimited Church Announcements
 
Altamaha School Media Center
Altamaha School Media CenterAltamaha School Media Center
Altamaha School Media Center
 
Background Check & Due Diligence Services - Arch360 Group
Background Check & Due Diligence Services - Arch360 GroupBackground Check & Due Diligence Services - Arch360 Group
Background Check & Due Diligence Services - Arch360 Group
 
Heritage Observatory Open Data GIS Platform
Heritage Observatory Open Data GIS PlatformHeritage Observatory Open Data GIS Platform
Heritage Observatory Open Data GIS Platform
 
Introdução à programação em android
Introdução à programação em androidIntrodução à programação em android
Introdução à programação em android
 
ad:tech New York: Marketing to Millennials
ad:tech New York: Marketing to Millennialsad:tech New York: Marketing to Millennials
ad:tech New York: Marketing to Millennials
 
Islandscapes By Night
Islandscapes By NightIslandscapes By Night
Islandscapes By Night
 
Ppt05 monster 2010
Ppt05 monster 2010Ppt05 monster 2010
Ppt05 monster 2010
 
Intellectual property
Intellectual propertyIntellectual property
Intellectual property
 
Presentation Skills
Presentation SkillsPresentation Skills
Presentation Skills
 
Open Source Presentation
Open Source PresentationOpen Source Presentation
Open Source Presentation
 
Spring
SpringSpring
Spring
 
Winter p3
Winter p3Winter p3
Winter p3
 
Costume research
Costume researchCostume research
Costume research
 
Ppt06 little rabbit 2010
Ppt06 little rabbit 2010Ppt06 little rabbit 2010
Ppt06 little rabbit 2010
 
Social Media Best Practices OMMA Global Case Study
Social Media Best Practices OMMA Global Case StudySocial Media Best Practices OMMA Global Case Study
Social Media Best Practices OMMA Global Case Study
 
Peggy and mummy
Peggy and mummyPeggy and mummy
Peggy and mummy
 
Tobi Timeline
Tobi TimelineTobi Timeline
Tobi Timeline
 

Similaire à 基于linux-HA 的PG高可用性

MySQL压力测试经验
MySQL压力测试经验MySQL压力测试经验
MySQL压力测试经验Jinrong Ye
 
服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130Jinrong Ye
 
Lamp优化实践
Lamp优化实践Lamp优化实践
Lamp优化实践zhliji2
 
MongoDB at Qihoo 360
MongoDB at Qihoo 360MongoDB at Qihoo 360
MongoDB at Qihoo 360MongoDB
 
Elastic stack day-2
Elastic stack day-2Elastic stack day-2
Elastic stack day-2YI-CHING WU
 
淘宝主备数据库自动切换
淘宝主备数据库自动切换淘宝主备数据库自动切换
淘宝主备数据库自动切换mysqlops
 
PHP Optimization for Millions Visits Level
PHP Optimization for Millions Visits LevelPHP Optimization for Millions Visits Level
PHP Optimization for Millions Visits LevelHo Kim
 
Open Street Map安裝指引 (Ubuntu 12.04)
Open Street Map安裝指引 (Ubuntu 12.04)Open Street Map安裝指引 (Ubuntu 12.04)
Open Street Map安裝指引 (Ubuntu 12.04)Marc Huang
 
線上埋碼資料收集實作
線上埋碼資料收集實作線上埋碼資料收集實作
線上埋碼資料收集實作FEG
 
Linux基础
Linux基础Linux基础
Linux基础zhuqling
 
Node cluster
Node clusterNode cluster
Node clusteraleafs
 
康盛创想项目部Linux 服务器部署标准(最新版)
康盛创想项目部Linux 服务器部署标准(最新版)康盛创想项目部Linux 服务器部署标准(最新版)
康盛创想项目部Linux 服务器部署标准(最新版)Yiwei Ma
 
MySQL自动切换设计与实现
MySQL自动切换设计与实现MySQL自动切换设计与实现
MySQL自动切换设计与实现orczhou
 
Linux network monitoring hands-on pratice
Linux network monitoring hands-on praticeLinux network monitoring hands-on pratice
Linux network monitoring hands-on praticeKenny (netman)
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUGYingSiang Geng
 

Similaire à 基于linux-HA 的PG高可用性 (20)

MySQL压力测试经验
MySQL压力测试经验MySQL压力测试经验
MySQL压力测试经验
 
服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130
 
Lamp优化实践
Lamp优化实践Lamp优化实践
Lamp优化实践
 
MongoDB at Qihoo 360
MongoDB at Qihoo 360MongoDB at Qihoo 360
MongoDB at Qihoo 360
 
Elastic stack day-2
Elastic stack day-2Elastic stack day-2
Elastic stack day-2
 
淘宝主备数据库自动切换
淘宝主备数据库自动切换淘宝主备数据库自动切换
淘宝主备数据库自动切换
 
Linux system security
Linux system securityLinux system security
Linux system security
 
PHP Optimization for Millions Visits Level
PHP Optimization for Millions Visits LevelPHP Optimization for Millions Visits Level
PHP Optimization for Millions Visits Level
 
JVM及其调优
JVM及其调优JVM及其调优
JVM及其调优
 
Rootkit 101
Rootkit 101Rootkit 101
Rootkit 101
 
Open Street Map安裝指引 (Ubuntu 12.04)
Open Street Map安裝指引 (Ubuntu 12.04)Open Street Map安裝指引 (Ubuntu 12.04)
Open Street Map安裝指引 (Ubuntu 12.04)
 
線上埋碼資料收集實作
線上埋碼資料收集實作線上埋碼資料收集實作
線上埋碼資料收集實作
 
Linux基础
Linux基础Linux基础
Linux基础
 
Node cluster
Node clusterNode cluster
Node cluster
 
康盛创想项目部Linux 服务器部署标准(最新版)
康盛创想项目部Linux 服务器部署标准(最新版)康盛创想项目部Linux 服务器部署标准(最新版)
康盛创想项目部Linux 服务器部署标准(最新版)
 
MySQL自动切换设计与实现
MySQL自动切换设计与实现MySQL自动切换设计与实现
MySQL自动切换设计与实现
 
Win dbg入门
Win dbg入门Win dbg入门
Win dbg入门
 
Windbg入门
Windbg入门Windbg入门
Windbg入门
 
Linux network monitoring hands-on pratice
Linux network monitoring hands-on praticeLinux network monitoring hands-on pratice
Linux network monitoring hands-on pratice
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
 

基于linux-HA 的PG高可用性

  • 2.
  • 3. 我们的问题 • 目前的mysql-HA 方案是可行的,有效的。 • mysql-HA 检测代码时间过长,目前需要5 分钟左右确认故障。 • 单向不可控,主从网络不通导致切换的可 能性。 • 监控代码与切换代码分离,引入多层架 构,增加中间环节。 • LVS的高可用性保障(脑裂问题)
  • 4. 简介 • linux-ha.org 是希望提供一整套的解决方案库,来实现linux系统下的高可用性解决方案。 • 起始于1999年。 • 最初是heartbeat ,到版本2.1.4 的时候,做了功能上的分拆,分拆为heartbeat, cluster-glue,resource-agents 3个部分,同时,把CRM (集群管理)分离作为一个单 独的开源系统进行开发,也就是我们说的pacemaker . • 现在的heartbeat 只剩下一个消息通信层这一个功能了,社区也已经不再添加新的功能 了。这也预示着heartbeat 的生命周期进入夕阳阶段了。 • 另一个项目corosync 功能跟heartbeat 一样:消息管理层。 但比heartbeat 集成了更多 的功能。 • 2002年起始于openais.org ,2008年命名为corosync 2009年发布1.0.0版本, • 目前版本 1.4.1 。 • pacemaker 模块 来源于heartbeat 主要功能是资源管理。
  • 7. COROSYNC • 提供安全可靠,有序的消息传输。 • 确认集群的membership • 确认集群的法定投票人数(quorum) – 通过authkey 确认集群节点间的关系和安全验证 – 单环有序的广播协议(single-ring ordering and membership protocol) – 一般通过网络udp协议传输消息,可以通过广播 (broadcast) 方式
  • 8. Pacemaker • 目前的主要代码贡献者 redhat,ibm,NTT • 提供 分布式 集群消息框架 • CIB 是一个基于XML的数据仓库,存储了 资源的配置信息和资源的运行状态 • 集成了 策略决策系统(PE) (Policy Engine ) 来保证 资源之间的依赖关系 • Resource Agents: 资源脚本。资源脚本可 以是任何可以执行的代码, 一般要求 代码 能够响应: start stop monitor 3个动作
  • 9. 安装 • yum install pacemaker corosync heartbeat • yum install resource-agnets fence- agents • 各个节点之间配置无密码认证。 • 各个节点之间配置时间同步。 • linux-HA redhat6.0 之后的安装变更 – http://bbs.pconline.cn/topic-2329.html □
  • 10. 配置 • 各个节点的配置中的主机名=`uname -n` • 配置节点的hosts文件主机名=`uname -n` • vi /etc/corosync/corosync.conf • vi /etc/corosync/service.d/pcmk – service { – name: pacemaker – ver: 1 – } • corosync-keygen • copy all of them to all nodes.
  • 11. 启动 • /etc/init.d/corosync start • /etc/init.d/pacemaker start • crm_mon 监控状态。
  • 12. 资源 • 资源是任何可执行的程序。 • 资源需要支持3个基本操作 – start 启动资源, – stop 停止资源, – monitor 监控状态 • http,database,filesystem,disk, network,ip,drbd。。。。 • 目前社区提供约70个资源脚本
  • 13. stonith(fence)设备 • Shoot The Other Node In The Head – 考虑以下环境: – M-S结构,如何确保vip 不在两个节点上同时启动,或 者确保vip在M节点上正确的卸载,才能在S节点上启 动? • 确保资源真正的在另一个节点上关闭 • 返回的状态是可信的。
  • 14. 主要的stonith(fence)设备 • crm ra list stonith • 对我们来说最有价值的。 – fence_vmware 远程操作虚拟机 – fence_ipmilan 主机远程电源管理 • redhat 资助了大部分的pacemaker 的开发 者,把redhat的RHCS的fence系统合并生 成了resource-agents,stonith改称为fence 设备。
  • 15. 资源管理器pacemaker • 基于xml的配置数据库与状态容器 • crm_mon 监控资源状态,基于事件驱动的。 • crm 资源配置管理工具 – crm configure show – crm resource show – crm help 。。。。 • cibadmin 资源配置信息仓库cib的管理工 具
  • 16. • • node node95 我们的一个配置示例 attributes standby="off" • node node96 • attributes standby="off" • primitive ClusterIp ocf:heartbeat:IPaddr2 • params ip=" 192.168.11.101" cidr_netmask="32" • op monitor interval="30s" failure-timeout="60s" • op start interval="0" timeout="30s" • op stop interval="0" timeout="30s" • meta target-role="Started" is-managed="true" • primitive fence_vm95 stonith:fence_vmware • params ipaddr=" 192.168.10.197" login="user" passwd="passwd" vmware_datacenter="GZ-Offices" vmware_type="esx" action="reboot" port="dba-test-Cos6.2.64- 11.95" pcmk_reboot_action="reboot" pcmk_host_list="node95 node96" • op monitor interval="20" timeout="60s" failure-timeout="60s" fail-count="100" • op start interval="0" timeout="60s" • meta target-role="Started" • primitive fence_vm96 stonith:fence_vmware • params ipaddr=" 192.168.10.197" login="user" passwd="passwd" vmware_datacenter="GZ-Offices" vmware_type="esx" action="reboot" port="dba-test-Cos6.2.64- 11.96" pcmk_reboot_action="reboot" pcmk_host_list="node95 node96" • op monitor interval="20" timeout="60s" failure-timeout="60s" fail-count="100" • op start interval="0" timeout="60s" • meta target-role="Started" • • primitive ping ocf:pacemaker:ping □ params host_list="192.168.11.95 192.168.11.96 192.168.10.1 192.168.10.254 10.10.200.10 10.10.200.20" multiplier="100" • op monitor interval="10s" timeout="60s" failure-timeout="30s" • op start interval="0" timeout="60s" • op stop interval="0" timeout="100s" • primitive postgres_res ocf:heartbeat:pgsql • params pgctl="/usr/local/pgsql/bin/pg_ctl" psql="/usr/local/pgsql/bin/psql" start_opt="" pgdata="/usr/local/pgsql/data" config="/usr/local/pgsql/data/postgresql.conf" pgdba="postgres" pgdb="postgres" • op start interval="0" timeout="120s" • op stop interval="0" timeout="120s" • op monitor interval="10s" timeout="30s" failure-timeout="60s" migration-threshold="10000" • meta target-role="Started" is-managed="true" • clone clone-ping ping • meta interleave="true" target-role="Started" • location loc_ClusterIp ClusterIp 50: node96 • location loc_fence_vm95 fence_vm95 -inf: node95 • location loc_fence_vm96 fence_vm96 -inf: node96 • location loc_postgres_res postgres_res 50: node96 • colocation Pg-with-ClusterIp inf: ClusterIp postgres_res • order Pg-before-ClusterIp inf: postgres_res ClusterIp • property $id="cib-bootstrap-options" • dc-version="1.1.7-6.el6-148fccfd5985c5590cc601123c6c16e966b85d14" • cluster-infrastructure="openais" • expected-quorum-votes="2" • stonith-enabled="true" • last-lrm-refresh="1350372421" • no-quorum-policy="ignore" • cluster-delay="30s" • rsc_defaults $id="rsc-options" • resource-stickiness="100"
  • 17. 我们的一个配置示例 • node node95 attributes standby="off" node node96 attributes standby="off"
  • 18. 我们的一个配置示例 • primitive ClusterIp ocf:heartbeat:IPaddr2 params ip="192.168.11.101" cidr_netmask="32" op monitor interval="30s" failure-timeout="60s" op start interval="0" timeout="30s" op stop interval="0" timeout="30s"
  • 19. 我们的一个配置示例 • primitive fence_vm95 stonith:fence_vmware params ipaddr="x.x.x.x" login="user" passwd="passwd vmware_datacenter="GZ- Offices" vmware_type="esx" action="reboot" port="dba-test-Cos6.2.64-11.95" pcmk_reboot_action="reboot" pcmk_host_list="node95 node96" op monitor interval="20" timeout="60s" failure-timeout="60s" fail-count="100" op start interval="0" timeout="60s" meta target-role="Started"
  • 20. 我们的一个配置示例 • primitive fence_vm96 stonith:fence_vmware params ipaddr="x.x.x.x" login="user" passwd="passwd" vmware_datacenter="GZ-Offices" vmware_type="esx" action="reboot" port="dba-test- Cos6.2.64-11.96" pcmk_reboot_action="reboot" pcmk_host_list="node95 node96" op monitor interval="20" timeout="60s" failure-timeout="60s" fail-count="100" op start interval="0" timeout="60s" meta target-role="Started"
  • 21. 我们的一个配置示例 • primitive ping ocf:pacemaker:ping params host_list="192.168.11.95 192.168.11.96 192.168.10.1 192.168.10.254 10.10.200.10 10.10.200.20" multiplier="100" op monitor interval="10s" timeout="60s" failure-timeout="30s" op start interval="0" timeout="60s" op stop interval="0" timeout="100s"
  • 22. 我们的一个配置示例 • primitive postgres_res ocf:heartbeat:pgsql params pgctl="/usr/local/pgsql/bin/pg_ctl" psql="/usr/local/pgsql/bin/psql" start_opt="" pgdata="/usr/local/pgsql/data" config="/usr/local/pgsql/data/postgresql.conf" pgdba="postgres" pgdb="postgres" op start interval="0" timeout="120s" op stop interval="0" timeout="120s" op monitor interval="10s" timeout="30s" failure-timeout="60s" migration- threshold="10000"
  • 23. 我们的一个配置示例 • clone clone-ping ping meta interleave="true" target- role="Started"
  • 24. 我们的一个配置示例 • location loc_ClusterIp ClusterIp 50: node96 • location loc_fence_vm95 fence_vm95 -inf: node95 • location loc_fence_vm96 fence_vm96 -inf: node96 • location loc_postgres_res postgres_res 50: node96
  • 25. 我们的一个配置示例 • colocation Pg-with-ClusterIp inf: ClusterIp postgres_res • order Pg-before-ClusterIp inf: postgres_res ClusterIp
  • 26. 我们的一个配置示例 • property $id="cib-bootstrap-options" dc-version="1.1.7-6.el6- 148fccfd5985c5590cc601123c6c16e966b85d14 " • cluster-infrastructure="openais" • expected-quorum-votes="2" • stonith-enabled="true" • last-lrm-refresh="1350372421" • no-quorum-policy="ignore" • cluster-delay="30s"
  • 29. PG数据库切换的两个假设 • 1.主从数据库都是开着的,这个时候,如果 主库发生故障了,数据库可以按照我们的 预想的方式发生主从切换。 然后从库的pg 会切换为主库,原来的主 库就坏掉了,需要人工干预才能恢复主从 复制了 • 我们的数据库只支持一次主从切换。
  • 30. PG数据库切换的两个假设 • 2.从库是冷启动的,就是说在发生故障切换的时候,从 库是没有启动的,这个时候,也会发生切换,但是从库 是只读访问的,不会破坏主从的复制关系,这个时候需 要人工干预把从库切为主库。 从库需要通过集群软件来停库的情况发生的可能性比较小,我们 还是做了相应的处理。
  • 31. PG数据库切换的两个假设 • 针对第2个情况的的考虑: dba 人工干预了从库的主机,比如我们把 从库停机维护了2天,期间,发生了主从切 换,这个时候,我们是不希望从库转换为 主库的,因为可能丢了很多数据,从库的 日志恢复是没有追赶上主库的。这个时 候,从库只是简单的冷启动,会把未恢复 的日志完成恢复,达到跟主库达到一致, 这个时候,dba 可以人工干预启动主从切换。
  • 32. VIP的arp表更新问题 • vip在集群节上启动时通过arp欺骗来实现的。 – 在节点主机上执行ifconfig -a 是看不到vip的。 □ □ □
  • 33. 资源的fail-count问题 • 每一个资源,如果失败是会在原来的节点上重启,如果重 启成功则fail-count+=1,migration-threshold -=1,如果重 启不成功,就会触发资源切换。 • 当fail-couont 达到最大值(1000000)就会发生资源 切换。除非清理fail-count否则是资源是不会再回来的,这 个参数是可以修改的。 • 清理fail-count 的命令: – crm resource cleanup <res> <node> – crm resource cleanup fence_vm95 node96 • 还有一个fail-timeout 问题 • 详细说明: – http://bbs.pconline.cn/topic-2367.html
  • 34. fence设备的作用点 • 如果资源start失败,会直接切备机,fence 设备不会被触发。 • 如果资源stop失败,fence设备就起作用, 一般情况默认是重启主机,可设置。 • 如果不启用fence设备会怎样? – 如果资源stop失败,就会不停的尝试stop,这 个资源将不会切换到备机,最终会陷入一个死 循环,导致资源无法提供服务。
  • 35. 脑裂问题 • 什么情况下发生脑裂? – 集群中节点间的心跳连接断开就会发生脑裂 • 产生什么影响? – 集群中的各个节点各自为政,互相认为对方失 败了,于是资源开始在各个节点上启动,fence 设备不停的去相互重启对方主机,共享类资源 出现故障,比如共享磁盘,发生写锁,vip同时 在多个节点间启动,导致无法访问,数据库类 资源,将导致数据不一致,甚至损坏。
  • 36. 如何预防脑裂 • 生产环境中脑裂的发生几率比较低。 – 3个及其以上节点的环境中,几乎不可能发生。 • 启用fence设备。 • 增加第三方投票节点。 • 增加多个心跳链路。 • 我们的方案: – 启用fence设备 +多条心跳链路。
  • 37. 两节点集群的问题 • 法定投票人数问题 – 资源管理器的中心节点的选出,要有集群中 >sum(nodes)/2 的节点投票选出。 – 通过设置系统参数 no-quorum-policy="ignore" 解决 • 脑裂问题 – 启用fence设备 – 两节点的集群必须启用fence设备。