ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

SUSE Linux SAP HANA高可用配置:HAE脚本自动化生成Pacemaker集群

SUSE Linux SAP HANA高可用配置:HAE脚本自动化生成Pacemaker集群 简介这是一套面向SUSE Linux平台SAP HANA高可用环境的HAE配置脚本主要供SUSE 12 SPx运维与实施人员使用解决手工配置Corosync及Pacemaker步骤繁杂、易出错的问题。脚本支持HANA 1.0与2.0并兼容基于IPMI和SBD两种fence模式可灵活适配不同物理机或虚拟化场景。资源包共6个文件包含2个Shell脚本、2个配置模板和2个文本说明整体仅5KB体积小巧却覆盖从模板生成到配置落地的完整流程。脚本将复杂的HAE配置抽象为参数化模板使用者只需按实际环境修改设置即可生成对应Corosync/Pacemaker配置避免手工逐条输入可能带来的漏配与误配适合快速部署或二次定制目前已有683人浏览学习。借助该脚本读者可以避开大量命令行手工操作直接获得可用的HAE配置框架并通过说明文件理解各参数用途有效缩短SAP HANA高可用环境的搭建周期。1. SUSE Linux SAP HANA HAE脚本为什么值得用我在给一套 SUSE Linux 上的 SAP HANA 做高可用时发现真正耗时间的不是 Pacemaker 怎么起而是配置 HAE 时要同时照顾 HANA 版本、fence 方式、资源 agent 的差异。网上零散的 crm configure 命令一抓一把但组合起来总有几个参数对不上。这个hana-hae-config-creator-v2.4.zip脚本把我最烦的 crm 模板和 SBD/IPMI fence 选择做成了可重复执行的一套流程。它面向 SUSE 12 SPx覆盖 HANA 1.0 和 2.0特别适合已经搭过两三次 HAE、想压缩交付时间的人。脚本不是黑盒它生成的就是 crm 配置命令只是把容易漏的参数替你补齐了。2. HAE配置前的选型Corosync、Pacemaker与fence模式2.1 HAE集群的基本组成与脚本的边界SUSE Linux Enterprise for SAP Applications 里说的 HAE本质上就是 Corosync 提供集群成员通信Pacemaker 作为资源管理器再配合 SAPHana 或 SAPHanaTopology 资源 agent 来监控 HANA 实例。crmconfig.sh脚本做的事情就是把这些组件对应的crm configure命令按settings.sh里的参数拼装出来。了解这一点很重要因为你改的不是脚本逻辑而是改它生成的配置。脚本的边界是它不装系统补丁也不装 Pacemaker 和 HANA 的 HA 包。它假设你已经在两台节点上装好了 SUSE 12 SPx并配置好了 HANA。安装了sap-suse-cluster-connectorSUSE 12 SP1 之后一般都有。防火墙放行了 Corosync5405/5404和 Pacemaker2224相关端口。如果你在这些前提上还没准备好脚本跑完crm status 照样是红的。我一般会先用crm configure show看一眼当前配置确认没有历史残留再执行脚本。2.2 IPMI与SBDfence模式怎么选脚本支持两种 fence 模式这一个选择会直接改变 crm 配置里的stonith部分。我的经验是有 IPMI/BMC 且能稳定访问的物理机优先用 IPMI云环境或没有 BMC 的测试机用 SBD。对比项IPMISBD依赖设备每台服务器的 BMC/BMC 网口共享 disk/dev/disk/by-id/ 指向同一块盘配置复杂度需要 ipmitool 和 BMC 用户密码需要 sbd 设备初始化并配置 watchdog网络故障时依赖 BMC 网络独立依赖存储链路网络异常时更可靠适用环境物理机、有 out-of-band 管理口物理机共享存储、虚机如 VMware 磁盘落实到脚本上settings.sh里会用类似FENCE_MODEipmi或FENCE_MODEsbd的变量控制模板选择。IPMI 模式下脚本生成的crm configure里会有类似primitive stonith-ipmi stonith:external/ipmi \ params ipmi_hostname10.10.10.1 \ ipmi_usernameadmin \ ipmi_passwordsecret \ ipmi_lanplustrue \ op monitor interval60s这段逻辑说明stonith:external/ipmi是 Pacemaker 在 HAE 环境里比较稳的 agent。ipmi_lanplus必须为 true因为现在 BMC 基本都用 RMCP 协议。op monitor interval60s是为了让 Pacemaker 每 60 秒确认一次 fence 设备在线避免节点真的失联时 stonith 直接跳过。SBD 模式下脚本会生成stonith-sbd的 primitive并且要求你先在共享盘上初始化 SBDsbd -d /dev/disk/by-id/dm-uuid-mpath-xxx create然后配置/etc/sysconfig/sbd把SBD_DEVICE指向同一块盘。脚本这时生成的配置里会有stonith-enabledtrue和stonith-watchdog-timeout。注意 SBD 模式下两节点都必须能访问同一块共享盘且不建议用 NFS最好用 SCSI-3 持久预留的块设备。2.3 SAP HANA 1.0与2.0对脚本的影响摘要里明确写着支持 HANA 1.0 与 HANA 2.0这在实际生产中不是一个可以忽略的细节。HANA 2.0 的 HA agent 从SAPHana换成了SAPHana和SAPHanaTopology的组合并且需要usr/sap/SID/SYS/global/hdb/custom下的参数配合。脚本会通过HANA_VERSION或HANA_SID来生成不同的资源 agent 参数。例如HANA 2.0 的多租户容器通常要关注AUTOMATED_REGISTERtrue是否设置。如果设了HANA 会在主节点故障后自动在新主库上注册复制的 secondary但也有一些场景会希望手动控制防止脑裂时丢失数据。脚本生成模板里一般会给一个明确开关我通常在生产环境设成false宁可让运维人工介入也不让集群自动注册带来额外风险。3. 脚本结构与settings.sh参数拆解3.1 压缩包内文件的功能划分压缩包里的hae-config-creator-v2.4目录解压后有几个文件功能定位很清楚hae-config-creator-v2.4/ ├── README.txt ├── crmconfig.sh ├── crmconfig.tpl ├── crmconfig-sbd.tpl └── settings.shREADME.txt是使用说明crmconfig.sh是主脚本crmconfig.tpl是 IPMI fence 模式的 Pacemaker 配置模板crmconfig-sbd.tpl是 SBD 模式模板settings.sh是唯一需要手动编辑的配置入口。联系作者.txt不用管那是资源作者的联络信息。我把crmconfig.sh打开看过它本质上是先 sourcesettings.sh然后用 sed 和变量替换把模板里的占位符填掉最后把生成的配置输出到crm_config.txt或者直接 pipe 给crm configure load。这种设计的好处是你不需要懂 crm shell 语法改 settings 就行。3.2 修改settings.sh的注意点settings.sh是脚本核心我实际用下来最少需要改这几个变量# 集群名称建议和 SID 保持一致 HAE_CLUSTER_NAMEprd_hana_ha # HANA SID 和大写实例号 SAPHANA_SIDHDB SAPINSTANCE_NR00 # 两个节点主机名 NODE1_NAMEhana01 NODE2_NAMEhana02 NODE1_IP192.168.10.11 NODE2_IP192.168.10.12 # 浏览器访问地址vip VIRTUAL_IP192.168.10.20 VIRTUAL_IP_PREFIX24 # fence 模式: ipmi 或 sbd FENCE_MODEipmi # IPMI 专用参数 IPMI_HOSTNAME192.168.10.110 IPMI_USERNAMEadmin IPMI_PASSWORDsupersecret # HANA 版本: 1.0 或 2.0 HANA_VERSION2.0改的时候注意两点。第一主机名要能被两节点互相解析不能只写短名而/etc/hosts里没配全否则 Corosync 起不来。第二VIRTUAL_IP不能落在 HANA 业务网段的广播地址上建议单独留一个 IP并且不要和节点 IP 同段内的其他虚机冲突。这里的HANA_VERSION会影响脚本生成crm configure里的 resource agent 类型。HANA 1.0 在旧脚本里常写成SAPHana用params SIDHDB指定而 HANA 2.0 往往要求加InstanceNumber00同时 metadata 里的部分 probe 间隔也可能不一样。3.3 crmconfig.tpl与crmconfig-sbd.tpl的差异两个模板的差别比我预想的大不只是 stonith 资源不同。我对比过内容crmconfig.tplIPMI 模式里会有类似primitive rsc_ip_SAPHana_HDB00 IPaddr2 \ params ip${VIRTUAL_IP} cidr_netmask${VIRTUAL_IP_PREFIX} \ op monitor interval10s而crmconfig-sbd.tpl里除了 stonith 资源改为stonith:external/sbd之外还会额外生成一个propert级别的参数property cib-bootstrap-options: \ stonith-enabledtrue \ stonith-actionreboot \ stonith-watchdog-timeout60sstonith-watchdog-timeout是 SBD 模式才有的IPMI 模式下不需要因为 IPMI 的 stonith 是显式指令不依赖 watchdog。如果你误把stonith-watchdog-timeout加进 IPMI 模式的配置Pacemaker 会警告你的 watchdog 设备未配置实际上可能出现 stonith 超时。所以在实际执行前我会先打开模板看一眼变量名确认和settings.sh里的名字一致。脚本版本升级偶尔会把SAPHANA_SID改成SAPHANA_SID的大小写差异这类小问题在 load 到 crm 前需要自己 catch 掉。4. 执行crmconfig.sh与生产环境排错4.1 执行前的环境检查我一般不会直接上来就跑脚本先做三件事检查时间同步、检查hdbnameserver服务、检查sbd设备如果使能了 SBD。# 在两节点上检查时间源 chronyc tracking | head -5 # 检查 HANA 复制状态 su - hdbadm -c hdbnsutil -sr_state # 如果是 SBD 模式 sbd -d /dev/disk/by-id/dm-uuid-mpath-xxx dump时间不同步会导致 Corosync 报 token 超时HANA HA 判定主备状态也会出问题。hdbnsutil -sr_state能看到当前节点的 replication 状态如果你执行脚本的时候 HANA 主备复制本来就是坏的那脚本生成的 Pacemaker 配置再怎么正确资源也起不来。这些命令的具体作用chronyc tracking返回的是本节点与时间源的偏差偏差超过 100ms 就要先调好hdbnsutil -sr_state是 HANA 自己的复制状态查询正常情况下应该是SOK或PRIMARYsbd dump输出的是 SBD 设备里的 timeout 配置和消息槽如果设备为空或权限不对后续启动 stonith 会失败。4.2 执行脚本并验证集群状态做完检查后在任意一个节点上执行chmod x crmconfig.sh ./crmconfig.sh执行完脚本后我建议不要直接看 crm status先看生成的配置内容确认 IP 和 fence 参数。如果脚本不自动加载配置它会输出一个文件你可以这样加载crm configure load update crm_config.txt然后等 30 秒左右再看crm status crm configure showcrm status里重点看Online节点数和资源是否Started。如果某个资源处于Stopped或FAILED先不要重启 Pacemaker应该用crm resource restart 资源名试一次同时打开 HANA 的 tracetail -f /var/log/messages | grep -E saphana|SAPHana|stonith这行命令是抓取系统日志里跟 HANA 资源和 stonith 相关的行能看到 Pacemaker 调动 resource agent 时的报错。SAPHana agent 的常见失败原因是 HANA 实例未注册到集群或者hdbuserstore没有配置好。脚本不会帮你配hdbuserstore所以如果日志里出现权限相关错误去检查/usr/sap/SID/HDBinstance下的.hdb目录。4.3 常见错误与日志排查我在三套环境上跑过这个脚本最容易踩的坑有三个。第一个是crm configure load报syntax error。这个多是因为模板里的$符号被 shell 或 sed 提前转义了。比如 IPMI 密码里包含$或#时settings.sh里必须用单引号包住否则 shell 会把它当变量符。我会直接写IPMI_PASSWORDs#cret$123避免这个问题。第二个是两节点同时 online但 HANA 资源总在一个节点上漂移。这是 HANA 实例的复制模式与 Pacemaker 资源参数没对齐。你需要看 HANA 的global.ini里[system_replication]段的mode是否设置为primary还有[system_replication]下的site_name是否与crm configure show里的 SAPHana 资源参数一致。脚本生成的模板一般会指定SAPHana的PRIMARY站点名如果不一致Pacemaker 无法判断哪个是主库。第三个是 SBD 模式下 stonith 设备初始化后crm status显示OFFLINE。这通常因为sbd没有在开机时启动或者/etc/sysconfig/sbd里的SBD_DEVICE没有写对。检查方法systemctl status sbd systemctl list-units | grep sbdcrm status里 stonith 资源 offline 说明 Pacemaker 启动不了 sbd原因多半是 watchdog 设备不存在。SUSE 12 SPx 上需要确保softdog模块加载modprobe softdog echo softdog /etc/modules-load.d/watchdog.conf加载后重启 sbd 服务再看集群状态。5. 进阶调整模板、申请SAP HANA许可证与切换演练5.1 自定义模板参数生产环境里一个集群往往要求AUTOMATED_REGISTERfalse为了防止主节点故障后 SBD fence 节点上的 HANA 被自动注册成新主库。你可以在crmconfig.tpl里把这一行改掉primitive rsc_SAPHana_HDB00 SAPHana \ params SIDHDB InstanceNumber00 \ AUTOMATED_REGISTERfalse \ op start start-interval0 timeout600 \ op stop stop-interval0 timeout300AUTOMATED_REGISTER是 SAPHana 资源特有的参数true 时当 PRIMARY 节点被 fence集群会自动在原来的 SECONDARY 节点发起 takeover 注册如果数据同步状态不完整可能出现数据丢失。我通常保持 false然后由后端的 Cron 脚本或运维平台来执行 takeover 操作。5.2 与SAP HANA许可证申请衔接SAP HANA 的许可证申请常被误认为和 HA 集群无关但这个脚本生成的集群切换后主机名和 SID 不变许可证一般不用重新申请。可如果 HANA 节点是跨物理机做故障迁移SAP 的软件许可体系在部分场景下会要求在目标硬件上重新导入许可证。所以在做切换演练前我建议先确认 HANA Studio 或hdblcm里的 license key 是不是绑定在 SID 上而不是绑定在 hostname 上。你可以在当前主库上执行SELECT * FROM M_LICENSE;这条 SQL 会列出 HANA 的许可类型、用量限制和有效期。如果切换后M_LICENSE里无记录或提示 invalid就需要去 SAP 官方完成许可证申请导入命令大致是hdblcm -b --actionimport_license --license/path/to/license--actionimport_license是 HANA 生命周期管理器的许可证导入参数-b表示 batch 模式避免交互命令卡住。这个步骤不在脚本范围内但脚本搭出的集群切换后许可证状态并不会自动更新最好把许可证备份放在两节点都能访问的共享目录里。5.3 手动故障切换与维护模式最后我建议每个人都做一次手动的故障切换测试而不是只在测试环境里跑通脚本。在确认集群健康的情况下可以这样拉主库crm node standby hana01crm node standby让节点进入 standbyPacemaker 会把它上面的资源全部迁移到 hana02。此时观察 HANA 是否完成 takeover有没有双 master 的报错。如果一切正常恢复节点crm node online hana01在切换前最好打开crm configure show记录当前资源 id切换后对比资源位置是否如预期。维护节点但不想触发整体切换时可以用crm resource maintenance 资源名先把资源置于维护模式避免误操作。维护结束后别忘了crm resource maintenance 资源名 off解除否则后续故障不会自动切换。这种脚本配置的 HAE适合对 Pacemaker 原理已经有一定熟悉度的人遇到生成配置与业务环境不符时能随时手动微调。把它当成一套加速工具而不是免维护的一键包才能在生产里真正省事。本文还有配套的精品资源点击获取
返回列表