ARTICLE DETAIL

资讯详情

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

SUSE上SAP HANA HAE配置脚本:从手工crm到自动化生成

SUSE上SAP HANA HAE配置脚本:从手工crm到自动化生成 简介这份资源面向在 SUSE Linux 平台上部署 SAP HANA 高可用集群的运维工程师与系统管理员提供一套可快速落地的 HAE 配置脚本解决手工配置 Corosync、Pacemaker 及 fence 流程繁琐、易出错的问题。脚本兼容 SUSE 12 SPx 系列同时支持 HANA 1.0 与 HANA 2.0并覆盖基于 IPMI 与 SBD 两种 fence 模式适合具备一定 Linux 集群基础、希望缩短部署周期的技术人员使用。压缩包共 6 个文件约 5KB包含 2 个 sh 执行脚本、2 个 tpl 配置模板以及 2 个 txt 说明文档分别承担自动化配置、参数模板与使用指引等职责结构精简、开箱即用。目前已有 687 人学习下载。借助其中的配置模板与脚本读者可省去逐条编写集群资源的重复劳动快速完成 HAE 环境搭建并对照说明文档理解各参数含义为后续排错与调优提供参考。1. 从手工敲 crm 到脚本一把梭SUSE 上 SAP HANA HAE 到底在配什么如果你在 SUSE 上给 SAP HANA 搭过 HAE大概率经历过这种场面两台机器摆好ha-cluster-init跑完接着就是对着crm一行行敲资源crm configure里 primary/secondary、VIP、fence 设备轮着来敲错一个参数crm_mon里资源就卡在 FAILED 不动。更别提 SBD 和 IPMI 两种 fence 模式切换时配置文件改到怀疑人生。这套hana-hae-config-creator-v2.4就是冲着这个场景来的——它把 SUSE Linux 上 SAP HANA 的 HAE 配置过程收进几个脚本和模板里执行crmconfig.sh就能把 Corosync、Pacemaker、SBD、资源组按 HANA 1.0/2.0 的差异生成出来。适合谁手上只有 SUSE 12 SPx、不想每次重装都翻文档、又需要 IPMI 或 SBD 两种 fence 模式都能落地的运维和 BASIS。它不替你装 HANA也不替你规划网络但能把 HAE 那层最容易出错的配置固化下来。2. 拆开脚本包模板、变量与生成逻辑2.1 文件清单与各自职责拿到hana-hae-config-creator-v2.4.zip解压后目录是hae-config-creator-v2.4里面几个文件不是随便堆的每个都有明确分工。先看清单文件作用是否需改settings.sh全局变量节点名、VIP、HANA SID、fence 模式必须改crmconfig.sh主执行脚本读 settings 并生成 crm 配置一般不改crmconfig.tplIPMI fence 模式的 crm 配置模板按需微调crmconfig-sbd.tplSBD fence 模式的 crm 配置模板按需微调README.txt作者写的使用说明和参数解释先读联系作者.txt反馈渠道不用动这个结构的好处是模板和变量分离。你改settings.sh里的值crmconfig.sh负责把模板里的占位符替换掉最后输出一份可以直接crm configure load的配置。常见做法是先把settings.sh复制一份备份改坏了能回退。2.2 settings.sh 里必须对齐的变量settings.sh是整个脚本的输入源变量填错后面全白搭。下面是我一般会先确认的几组# settings.sh 关键变量示例按实际环境改 HANA_SIDHDB # HANA 实例编号必须与 hdbnsutil -sr_enable 时一致 NODE1hana01 # 主节点主机名必须与 /etc/hosts 解析一致 NODE2hana02 # 备节点主机名 VIP192.168.10.100 # HANA 对外虚拟 IP客户端连这个 FENCE_MODEsbd # 可选 ipmi 或 sbd决定用哪个 tpl SBD_DEVICE/dev/disk/by-id/xxx # SBD 模式必填IPMI 模式留空 IPMI_IP1192.168.20.11 # IPMI 模式必填SBD 模式留空 IPMI_IP2192.168.20.12逻辑说明HANA_SID决定资源名里带不带实例号NODE1/NODE2决定 clone 资源的节点列表VIP是 HANA 主备切换后客户端要连的地址。FENCE_MODE是分叉点——选ipmi走crmconfig.tpl选sbd走crmconfig-sbd.tpl。参数说明SBD_DEVICE在 SBD 模式下必须是一个共享块设备通常用/dev/disk/by-id/下的稳定路径不要写/dev/sdb这种会漂移的名字。IPMI_IP1/2是两台物理机的带外管理地址IPMI 模式下 fence 设备靠它硬重启节点。2.3 crmconfig.sh 的生成流程crmconfig.sh本身不复杂核心就是读变量、选模板、替换、输出。我把它拆成三步看# crmconfig.sh 逻辑简化示意 source ./settings.sh if [ $FENCE_MODE sbd ]; then TPLcrmconfig-sbd.tpl else TPLcrmconfig.tpl fi # 用 sed 把模板里的占位符替换成 settings 里的值 sed -e s/__HANA_SID__/$HANA_SID/g \ -e s/__NODE1__/$NODE1/g \ -e s/__NODE2__/$NODE2/g \ -e s/__VIP__/$VIP/g \ $TPL crmconfig.out echo 生成 crmconfig.out检查后执行 crm configure load replace crmconfig.out逻辑说明脚本先source settings.sh把变量加载进来再根据FENCE_MODE选模板。sed做的是纯文本替换把模板里__XXX__形式的占位符换成真实值。参数说明crm configure load replace里的replace表示替换现有配置如果集群里已经有资源执行前最好先crm configure show备份一份。常见做法是先生成crmconfig.out用crm configure load之前先cat一遍确认没有残留的__占位符。2.4 两种 fence 模式的模板差异IPMI 和 SBD 的模板不是简单换个设备名资源结构有区别。IPMI 模式下fence 设备是stonith:external/ipmi每个节点一个靠带外网口断电SBD 模式下fence 设备是stonith:external/sbd依赖共享块设备上的 SBD 分区节点间通过 SBD 心跳判断对方是否真的挂了。模板里crmconfig.tpl会生成两个primitive的 stonith 资源crmconfig-sbd.tpl只生成一个stonith:external/sbd并指向SBD_DEVICE。选哪个如果机器有独立 IPMI 口且网络可靠IPMI 更直接如果共享存储已经就位、不想额外配带外网络SBD 更省事。注意 SBD 模式对共享块设备的延迟敏感放在慢速存储上容易误判。3. 从零执行在 SUSE 12 SPx 上跑通 HAE 配置3.1 前置条件与 ha-cluster-init 的边界脚本不负责装集群软件SUSE 12 SPx 上得先有ha-cluster-init跑出来的基础集群。我一般按这个顺序来两台机器装好SUSE Linux Enterprise High Availability Extension配好/etc/hosts互相能解析时间同步走 NTP然后只在第一台执行ha-cluster-init第二台用ha-cluster-join加进去。这一步做完crm_mon应该能看到两个节点都是 online。脚本是在这个基础上做 HANA 资源层的配置不是从裸机开始。常见翻车点是主机名大小写不一致ha-cluster-init默认用hostname输出如果/etc/hosts里写的是大写后面资源里节点名对不上clone 资源起不来。3.2 改 settings.sh 并生成配置前置集群就绪后把包传到主节点解压进目录改settings.sh。下面是我改完后的一个片段# 改完 settings.sh 后执行生成 cd hae-config-creator-v2.4 vi settings.sh # 按 2.2 的变量逐项填 bash crmconfig.sh # 生成 crmconfig.out cat crmconfig.out # 人工检查一遍逻辑说明crmconfig.sh执行后不会自动加载配置只生成crmconfig.out这是故意的——给你一个检查窗口。参数说明cat的时候重点看三处一是primitive里的sid是不是你的 HANA SID二是stonith资源的 IP 或设备路径对不对三是clone和group的节点列表是不是NODE1 NODE2。如果看到__开头的占位符说明settings.sh里有变量没填。3.3 加载配置并验证资源状态检查没问题后加载配置# 加载生成的 crm 配置 crm configure load replace crmconfig.out # 查看集群状态 crm_mon -Af # 单独看 stonith 是否注册 crm configure show | grep stonith逻辑说明crm configure load replace会把crmconfig.out里的配置合并进当前集群replace表示同名资源替换。参数说明crm_mon -Af里-A显示所有资源包括隐藏的-f显示 failcount。加载后正常应该看到rsc_hana_HDB是Master/Slave结构VIP 资源在 Master 节点上stonith 资源是Started。如果 stonith 显示FAILED先crm configure show看设备参数IPMI 模式常见是带外地址不通SBD 模式常见是设备路径写错或权限不对。3.4 模拟切换验证 fence 是否生效配置完不验证等于没配。我一般会做一次手动切换# 手动把 HANA 资源从当前 Master 迁走 crm resource move rsc_hana_HDB hana02 # 观察切换过程 crm_mon -Af # 确认后清除 move 约束 crm resource clear rsc_hana_HDB逻辑说明crm resource move强制资源迁移到指定节点触发一次主备切换。参数说明切换过程中crm_mon会显示资源从Master变Slave再在新节点变MasterVIP 跟着漂移。如果卡住不动看crm_mon里有没有stonith动作SBD 模式下节点会通过 SBD 设备确认对方状态。验证完记得crm resource clear清掉临时约束否则资源会一直粘在 hana02 上。4. 避坑与排查脚本跑完资源起不来时先看这几处4.1 现象crm_mon 里 stonith 资源 FAILED节点无法 fence原因IPMI 模式下带外地址填错或带外网络不通SBD 模式下SBD_DEVICE路径不存在或没有正确初始化 SBD 分区。解决IPMI 先用ipmitool -I lanplus -H IPMI_IP -U user -P pass power status单独测通SBD 用sbd -d /dev/disk/by-id/xxx dump确认设备可读没初始化就先sbd -d /dev/disk/by-id/xxx create。4.2 现象HANA 资源起不来日志报 SID 不匹配原因settings.sh里HANA_SID和实际 HANA 实例号不一致或者 HANA 还没做hdbnsutil -sr_enable。解决在 HANA 侧执行hdbnsutil -sr_state确认实例号和复制状态脚本里的 SID 必须和su - sidadm里的 sid 完全一致大小写敏感。4.3 现象VIP 资源在切换后不漂移客户端连不上原因VIP 资源没有正确绑定到 Master 角色或者crmconfig.out里 VIP 的group和 HANA clone 没关联。解决检查crm configure show里 VIP 的primitive是否在同一个group里或者有没有colocation约束把它和 Master 绑在一起。常见做法是 VIP 放在 HANA 资源组里跟着 Master 走。4.4 现象执行 crmconfig.sh 报 sed 错误或生成空文件原因settings.sh里有变量含特殊字符比如 VIP 里带了/或者模板文件路径不对。解决先确认在hae-config-creator-v2.4目录下执行settings.sh里不要写带/的值VIP 只写 IP。如果生成空文件bash -x crmconfig.sh看哪一步 sed 失败。4.5 现象SUSE 12 SPx 上 crm 命令不存在原因HA Extension 没装或没激活crm是 pacemaker 的命令行工具属于pacemaker包。解决zypper se pacemaker确认安装systemctl status pacemaker确认服务在跑。如果ha-cluster-init都没跑过先补那一步脚本不负责装集群。5. 进阶把脚本塞进自动化流程与版本管理脚本本身是静态的但 HAE 配置会随环境变。我后来养成的习惯是把settings.sh按环境拆成settings-prod.sh、settings-test.shcrmconfig.sh里用source ${1:-settings.sh}接收参数这样同一套模板能管多个集群。更进一步把整个hae-config-creator-v2.4目录放进 git每次改settings.sh都留 commit下次重装直接 checkout 对应版本比翻聊天记录找参数靠谱。验证脚本生成结果是否和线上一致可以用crm configure show导出当前配置和crmconfig.out做 diff# 导出当前集群配置并与生成文件对比 crm configure show crmconfig.current diff crmconfig.current crmconfig.out逻辑说明crm configure show输出的是集群实际生效的配置diff能看出脚本生成的和线上跑的差在哪。参数说明如果 diff 有差异先确认是不是有人手工改过线上配置如果是把手工改动同步回模板别让脚本和现实脱节。这个习惯帮我抓过好几次“以为脚本对、其实线上被改过”的情况。还有一个技巧SBD 模式下sbd -d device dump的输出可以存下来当基线每次变更后对比sbd的timeout和watchdog设置。SUSE 12 SPx 上 SBD 的timeout默认值在不同补丁级别有差异脚本模板里如果写死了值升级系统后可能和内核 watchdog 不匹配导致 fence 动作变慢。我一般会在settings.sh里加一个SBD_TIMEOUT变量模板里引用它而不是硬编码。从那以后我每次配 HAE都强制走一遍“生成、diff、手动切换、清约束”这四步哪怕脚本看起来再顺也不跳过验证。希望帮到你。本文还有配套的精品资源点击获取
返回列表