您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

使用 STONITH 设备在 SUSE 中进行高可用性设置

本文将针对如何使用 STONITH 设备在 SUSE 操作系统上为 HANA 大型实例设置高可用性进行详细的分步说明。

免责声明:本指南通过在 Microsoft HANA 大型实例环境中成功测试设置而得出。由于 Microsoft HANA 大型实例的服务管理团队不支持此操作系统,因此,你可能需要联系 SUSE,以进一步了解操作系统层面的疑难解答或说明。Microsoft 服务管理团队负责对 STONITH 设备进行设置并提供全力支持,并且可对有关 STONITH 设备的问题进行疑难解答。

必备条件

若要使用 SUSE 聚类分析设置高可用性 (HA),需要满足以下先决条件。

  • HANA 大型实例已预配
  • 操作系统 (OS) 已注册
  • HANA 大型实例服务器已连接到 SMT 服务器以获取修补程序/包
  • 操作系统已安装最新的补丁
  • 网络时间协议(NTP 时间服务器)已设置
  • 阅读并了解有关 HA 设置的最新版本的 SUSE 文档

设置详细信息

本指南使用以下设置:

  • 操作系统:适用于 SAP 的 SLES 12 SP1
  • HANA 大型实例:2xS192(4 个套接字,2 TB)
  • HANA 版本:HANA 2.0 SP1
  • 服务器名称:sapprdhdb95 (node1) 和 sapprdhdb96 (node2)
  • STONITH 设备:基于 iSCSI 的 STONITH 设备
  • HANA 大型实例节点之一上的 NTP 已设置

在使用 HANA 系统复制 (HSR) 设置 HANA 大型实例时,可以请求 Microsoft 服务管理团队设置 STONITH 设备。 在预配时执行此操作。

如果你是已预配 HANA 大型实例的现有客户,则仍可以设置 STONITH 设备。 以服务申请表 (SRF) 的形式向 Microsoft 服务管理团队提供以下信息。 可以通过技术部客户经理或 HANA 大型实例载入的 Microsoft 联系人来申请 SRF。

  • 服务器名称和服务器 IP 地址(例如,myhanaserver1,10.35.0.1)
  • 位置(例如,美国东部)
  • 客户名称(例如,Microsoft)
  • SID - HANA 系统标识符(例如,H11)

配置 STONITH 设备后,Microsoft 服务管理团队会向你提供 STONITH 块设备 (SBD) 名称和 iSCSI 存储的 IP 地址。 可以使用此信息来配置 STONITH 设置。

按照以下步骤使用 STONITH 设置 HA:

  1. 标识 SBD 设备。
  2. 初始化 SBD 设备。
  3. 配置群集。
  4. 设置 softdog 监视器。
  5. 将节点加入群集。
  6. 验证群集。
  7. 将资源配置为群集。
  8. 测试故障转移过程。

标识 SBD 设备

备注

本部分仅适用于现有客户。 如果你是新客户,Microsoft 服务管理团队会向你提供 SBD 设备名称,因此可以跳过此部分。

仅适用于现有客户:Microsoft 服务管理团队配置 STONITH 设备后,你需要确定用于设置的 SBD 设备。

  1. 将 /etc/iscsi/initiatorname.isci 修改为:

    iqn.1996-04.de.suse:01:<Tenant><Location><SID><NodeNumber> 
    

    Microsoft 服务管理会提供此字符串。 在这两个节点上修改文件,但每个节点上的节点编号不同。

    屏幕截图显示了一个 initiatorname 文件,其中包含一个节点的 InitiatorName 值。

  2. 修改 /etc/iscsi/iscsid.conf:设置 node.session.timeo.replacement_timeout=5 和 node.startup = automatic。 在这两个节点上修改文件。

  3. 执行发现命令;它会显示四个会话。 在这两个节点上运行该命令。

    iscsiadm -m discovery -t st -p <IP address provided by Service Management>:3260
    

    屏幕截图显示了控制台窗口,其中显示了 isciadm discovery 命令的结果。

  4. 执行该命令以登录到 iSCSI 设备;它会显示四个会话。 在这两个节点上运行该命令。

    iscsiadm -m node -l
    

    屏幕截图显示了控制台窗口,其中显示了 iscsiadm node 命令的结果。

  5. 执行重新扫描脚本:rescan-scsi-bus.sh。此脚本将显示为用户创建的新磁盘。 在这两个节点上运行该命令。 你应该会看到一个大于零的 LUN 编号(例如:1、2 等)。

    rescan-scsi-bus.sh
    

    屏幕截图显示了控制台窗口,其中显示了脚本的结果。

  6. 若要获取设备名称,请运行 fdisk –l 命令。 在这两个节点上运行该脚本。 选择大小为 178 MiB 的设备。

      fdisk –l
    

    屏幕截图显示了控制台窗口,其中显示了 f disk 命令的结果。

初始化 SBD 设备

本部分和以下部分适用于新客户和现有客户。

  1. 初始化这两个节点上的 SBD 设备。

    sbd -d <SBD Device Name> create
    

    屏幕截图显示了控制台窗口,其中显示了 sbd create 命令的结果。

  2. 检查已写入到设备的内容。 在这两个节点上执行该操作。

    sbd -d <SBD Device Name> dump
    

配置群集

本部分介绍设置 SUSE HA 群集的步骤。

  1. 首先,安装包。 请检查是否已安装 ha_sles 和 SAPHanaSR-doc 模式。 如果未安装,请先进行安装。 在这两个节点上安装它们。

    zypper in -t pattern ha_sles
    zypper in SAPHanaSR SAPHanaSR-doc
    

    屏幕截图显示了控制台窗口以及运行 pattern 命令的结果。 屏幕截图显示了控制台窗口以及运行 SAPHanaSR-doc 命令的结果。

  2. 然后,设置群集。 可以使用 ha-cluster-init 命令或 YaST2 向导设置群集。 本示例使用了 YaST2 向导。 仅在主节点上执行此步骤。

    1. 选择“YaST2” > “高可用性” > “群集”

      屏幕截图显示了 YaST 控制中心,其中选择了“高可用性”和“群集”。

      屏幕截图显示了一个对话框,其中包含“安装”和“取消”选项。

    2. 由于已安装 halk2 包,请选择“取消”。

      屏幕截图显示了有关你的取消选项的消息。

    3. 选择“继续”。

      预期值=已部署的节点数(在本例中为 2)。

      屏幕截图显示了“群集安全性”,其中包含“启用安全身份验证”复选框。

    4. 选择“下一页”。

      屏幕截图显示了“群集配置”窗口,其中包含“同步主机”和“同步文件”列表。

      添加节点名称,然后选择“添加建议的文件”。

    5. 选择“开启 csync2”。

    6. 选择“生成预共享密钥”,它会显示下面的弹出窗口。

      屏幕截图显示了一条消息,指出你的密钥已生成。

    7. 选择“确定”。

      使用 Csync2 中的 IP 地址和预共享密钥执行身份验证。 使用 csync2 -k /etc/csync2/key_hagroup 生成密钥文件。 在创建文件 key_hagroup 后,应将其手动复制到群集的所有成员。 确保将文件从 node1 复制到 node2。

      屏幕截图显示了“群集配置”对话框,其中包含将密钥复制到群集的所有成员所需的选项。

    8. 选择“下一步”。 屏幕截图显示了“群集服务”窗口。

      在默认选项中,启动已关闭。 将其更改为“打开”,以便 pacemaker 在启动时开始。 可以基于设置需求做出选择。

    9. 选择“下一步”,完成群集配置。

设置 softdog 监视程序

本部分将介绍监视器 (softdog) 的配置。

  1. 将以下命令行添加到这两个节点上的 /etc/init.d/boot.local。

    modprobe softdog
    

    屏幕截图显示了其中添加了 softdog 行的启动文件。

  2. 更新这两个节点上的文件 /etc/sysconfig/sbd,如下所示:

    SBD_DEVICE="<SBD Device Name>"
    

    屏幕截图显示了其中添加了 SBD_DEVICE 值的 sbd 文件。

  3. 通过运行以下命令在这两个节点上加载内核模块:

    modprobe softdog
    

    屏幕截图显示了控制台窗口的一部分,其中显示了 modprobe softdog 命令。

  4. 确保该 softdog 在这两个节点上运行,如下所示:

    lsmod | grep dog
    

    屏幕截图显示了控制台窗口的一部分,其中显示了运行 lsmod 命令的结果。

  5. 启动这两个节点上的 SBD 设备:

    /usr/share/sbd/sbd.sh start
    

    屏幕截图显示了控制台窗口的一部分,其中显示了 start 命令。

  6. 测试这两个节点上的 SBD 守护程序。 在这两个节点上进行配置后,会看到两个条目。

    sbd -d <SBD Device Name> list
    

    屏幕截图显示了控制台窗口的一部分,其中显示了两个条目。

  7. 向其中一个节点发送测试消息。

    sbd  -d <SBD Device Name> message <node2> <message>
    

    屏幕截图显示了控制台窗口的一部分,其中显示了两个条目。

  8. 在第二个节点 (node2) 上,可以查看消息状态。

    sbd  -d <SBD Device Name> list
    

    屏幕截图显示了控制台窗口的一部分,其中的一个成员显示了另一个成员的测试值。

  9. 若要采用 sbd 配置,请按如下所示更新文件 /etc/sysconfig/sbd。 在这两个节点上更新文件。

    SBD_DEVICE=" <SBD Device Name>" 
    SBD_WATCHDOG="yes" 
    SBD_PACEMAKER="yes" 
    SBD_STARTMODE="clean" 
    SBD_OPTS=""
    
  10. 在主节点 (node1) 上启动 pacemaker 服务。

    systemctl start pacemaker
    

    屏幕截图显示了控制台窗口,其中显示了启动 pacemaker 后的状态。

    如果 pacemaker 服务失败,请参阅“方案 5:Pacemaker 服务失败”。

加入群集

接下来,将节点加入群集。

  • 添加节点。 在 node2 上运行以下命令,以将 node2 加入群集。

    ha-cluster-join
    

    如果在加入群集期间收到错误,请参阅“方案 6:Node2 无法加入群集”。

验证群集

  1. 启动群集服务。 查看并选择性地在这两个节点上首次启动群集:

    systemctl status pacemaker
    systemctl start pacemaker
    

    屏幕截图显示了控制台窗口,其中显示了 pacemaker 的状态。

  2. 监视状态。 运行命令 crm_mon,以确保这两个节点处于联机状态。 可以在该群集的任意节点上运行该命令。

    crm_mon
    

    屏幕截图显示了控制台窗口,其中显示了 crm_mon 的结果。

    你还可以登录到 hawk 来检查群集状态 https://<node IP>:7630。 默认用户是 hacluster,密码为 linux。 如果需要,可以使用 passwd 命令更改密码。

配置群集属性和资源

本部分将介绍配置群集资源的步骤。 在本示例中,设置以下资源,其余资源可以通过参考 SUSE HA 指南进行配置(如果需要)。

  • 群集启动
  • STONITH 设备
  • 虚拟 IP 地址

仅在其中一个节点中执行配置。 在主节点上执行该操作。

  1. 配置群集启动和其他设置:添加群集启动。 创建文件并按以下所示添加文本:

    sapprdhdb95:~ # vi crm-bs.txt
    # enter the following to crm-bs.txt
    property $id="cib-bootstrap-options" \
    no-quorum-policy="ignore" \
    stonith-enabled="true" \
    stonith-action="reboot" \
    stonith-timeout="150s"
    rsc_defaults $id="rsc-options" \
    resource-stickiness="1000" \
    migration-threshold="5000"
    op_defaults $id="op-options" \
    timeout="600"
    
  2. 将配置添加到群集:

    crm configure load update crm-bs.txt
    

    屏幕截图显示了运行 crm 命令的控制台窗口的一部分。

  3. 配置 STONITH 设备:添加资源 STONITH,创建文件,并添加文本,如下所示。

    # vi crm-sbd.txt
    # enter the following to crm-sbd.txt
    primitive stonith-sbd stonith:external/sbd \
    params pcmk_delay_max="15"
    
    • 将配置添加到群集。

      crm configure load update crm-sbd.txt
      
  4. 配置虚拟 IP 地址:添加资源虚拟 IP。 创建文件并添加文本,如下所示。

    # vi crm-vip.txt
    primitive rsc_ip_HA1_HDB10 ocf:heartbeat:IPaddr2 \
    operations $id="rsc_ip_HA1_HDB10-operations" \
    op monitor interval="10s" timeout="20s" \
    params ip="10.35.0.197"
    
    • 将配置添加到群集:

      crm configure load update crm-vip.txt
      
  5. 现在验证该资源。 运行 crm_mon 命令后,可以看到两个资源。

    屏幕截图显示了控制台窗口,其中包含两个资源。

    • 此外,可以在 https://<node IP address>:7630/cib/live/state 上看到状态。

      屏幕截图显示了两个资源的状态。

测试故障转移过程

  1. 若要测试故障转移过程,请停止 node1 上的 pacemaker 服务,并将资源故障转移到 node2。

    Service pacemaker stop
    
  2. 现在,停止 node2 上的 pacemaker 服务,资源已故障转移到 node1。

    故障转移前
    屏幕截图显示了故障转移前两个资源的状态。

    故障转移之后
    屏幕截图显示了故障转移后两个资源的状态。

    屏幕截图显示了控制台窗口,其中显示了故障转移后资源的状态。

疑难解答

本部分将介绍几个在安装过程中可能会遇到的失败情景。 你不一定会遇到这些问题。

情景 1:群集节点未联机

如果任何节点在群集管理器中都未显示为联机,则可以尝试以下方法使其联机。

  1. 启动 iSCSI 服务:

    service iscsid start
    
  2. 现在登录到该 iSCSI 节点。

    iscsiadm -m node -l
    

    预期输出如下所示:

    sapprdhdb45:~ # iscsiadm -m node -l
    Logging in to [iface: default, target: iqn.1992-08.com.netapp:hanadc11:1:t020, portal: 10.250.22.11,3260] (multiple)
    Logging in to [iface: default, target: iqn.1992-08.com.netapp:hanadc11:1:t020, portal: 10.250.22.12,3260] (multiple)
    Logging in to [iface: default, target: iqn.1992-08.com.netapp:hanadc11:1:t020, portal: 10.250.22.22,3260] (multiple)
    Logging in to [iface: default, target: iqn.1992-08.com.netapp:hanadc11:1:t020, portal: 10.250.22.21,3260] (multiple)
    Login to [iface: default, target: iqn.1992-08.com.netapp:hanadc11:1:t020, portal: 10.250.22.11,3260] successful.
    Login to [iface: default, target: iqn.1992-08.com.netapp:hanadc11:1:t020, portal: 10.250.22.12,3260] successful.
    Login to [iface: default, target: iqn.1992-08.com.netapp:hanadc11:1:t020, portal: 10.250.22.22,3260] successful.
    Login to [iface: default, target: iqn.1992-08.com.netapp:hanadc11:1:t020, portal: 10.250.22.21,3260] successful.
    

情景 2:yast2 不显示图形视图

在本文档中,使用 yast2 图形屏幕来设置高可用性群集。 如果 yast2 不随如下所示的图形窗口一起打开,并引发 Qt 错误,请执行以下步骤。 如果正常打开,则可以跳过这些步骤。

错误

屏幕截图显示了控制台窗口的一部分,其中显示了一条错误消息。

预期输出

屏幕截图显示了 YaST 控制中心,其中突出显示了“高可用性”和“群集”。

如果 yast2 不随图形视图一起打开,请执行以下步骤:

  1. 安装所需程序包。 必须以用户“root”身份登录,并设置 SMT 以下载/安装包。

  2. 若要安装包,使用 yast > 软件 > 软件管理 > 依赖项 > 选项“安装建议的包...”。 以下屏幕截图显示了预期屏幕。

    备注

    需要在这两个节点上执行这些步骤,以便可以从两个节点访问 yast2 图形视图。

    屏幕截图显示了控制台窗口,其中显示了 YaST 控制中心。

  3. 在“依赖项”下,选择“安装建议的包”。

    屏幕截图显示了控制台窗口,其中选择了“安装建议的包”。

  4. 查看所做的更改,然后选择“确定”。

    yast

    包安装继续进行。

    屏幕截图显示了控制台窗口,其中显示了安装进度。

  5. 选择“下一步”。

    屏幕截图显示了控制台窗口,其中显示了一条成功消息。

  6. 选择“完成” 。

  7. 另外,还需要安装 libqt4 和 libyui qt 包。

    zypper -n install libqt4
    

    屏幕截图显示了控制台窗口,其中正在安装 libqt4 包。

    zypper -n install libyui-qt
    

    屏幕截图显示了控制台窗口,其中正在安装 libyui-qt 包。

    屏幕截图显示了控制台窗口,其中继续安装 libyui-qt 包。

    Yast2 现在可以打开图形视图,如下所示。

    屏幕截图显示了 YaST 控制中心,其中选择了“软件”和“联机更新”。

情景 3:yast2 不显示高可用性选项

对于要在 yast2 控制中心上显示的高可用性选项,需要安装其他包。

  1. 使用“Yast2”>“软件”>“软件管理”,选择以下模式:

    • SAP HANA 服务器基
    • C/C++ 编译器和工具
    • 高可用性
    • SAP Application 服务器基

    以下屏幕介绍安装模式的步骤。

    使用 yast2 > 软件 > 软件管理

    屏幕截图显示了 YaST 控制中心,其中选择了“软件”和“联机更新”来开始安装。

  2. 选择模式。

    屏幕截图显示了在“C/C++ 编译器和工具”项中选择第一种模式。

    屏幕截图显示了在“C/C++ 编译器和工具”项中选择第二种模式。

  3. 选择“接受”。

    屏幕截图显示了“已更改的包”对话框,已更改了其中的包来解析依赖项。

  4. 选择“继续”。

    屏幕截图显示了“正在执行安装”状态页。

  5. 安装完成后,选择“下一步”。

    屏幕截图显示了安装报告。

情景 4:HANA 安装失败,显示 gcc 程序集错误

HANA 安装失败,显示以下错误。

屏幕截图显示了一条错误消息,指出操作系统未准备好执行 gcc5 程序集。

  • 若要解决此问题,需要安装库 (libgcc_sl and libstdc++6),如以下屏幕截图所示。

    屏幕截图显示了控制台窗口,其中正在安装所需的库。

情景 5:Pacemaker 服务失败

Pacemaker 服务启动期间发生了以下问题。

sapprdhdb95:/ # systemctl start pacemaker
A dependency job for pacemaker.service failed. See 'journalctl -xn' for details.
sapprdhdb95:/ # journalctl -xn
-- Logs begin at Thu 2017-09-28 09:28:14 EDT, end at Thu 2017-09-28 21:48:27 EDT. --
Sep 28 21:48:27 sapprdhdb95 corosync[68812]: [SERV  ] Service engine unloaded: corosync configuration map
Sep 28 21:48:27 sapprdhdb95 corosync[68812]: [QB    ] withdrawing server sockets
Sep 28 21:48:27 sapprdhdb95 corosync[68812]: [SERV  ] Service engine unloaded: corosync configuration ser
Sep 28 21:48:27 sapprdhdb95 corosync[68812]: [QB    ] withdrawing server sockets
Sep 28 21:48:27 sapprdhdb95 corosync[68812]: [SERV  ] Service engine unloaded: corosync cluster closed pr
Sep 28 21:48:27 sapprdhdb95 corosync[68812]: [QB    ] withdrawing server sockets
Sep 28 21:48:27 sapprdhdb95 corosync[68812]: [SERV  ] Service engine unloaded: corosync cluster quorum se
Sep 28 21:48:27 sapprdhdb95 corosync[68812]: [SERV  ] Service engine unloaded: corosync profile loading s
Sep 28 21:48:27 sapprdhdb95 corosync[68812]: [MAIN  ] Corosync Cluster Engine exiting normally
Sep 28 21:48:27 sapprdhdb95 systemd[1]: Dependency failed for Pacemaker High Availability Cluster Manager
-- Subject: Unit pacemaker.service has failed
-- Defined-By: systemd
-- Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit pacemaker.service has failed.
--
-- The result is dependency.
sapprdhdb95:/ # tail -f /var/log/messages
2017-09-28T18:44:29.675814-04:00 sapprdhdb95 corosync[57600]:   [QB    ] withdrawing server sockets
2017-09-28T18:44:29.676023-04:00 sapprdhdb95 corosync[57600]:   [SERV  ] Service engine unloaded: corosync cluster closed process group service v1.01
2017-09-28T18:44:29.725885-04:00 sapprdhdb95 corosync[57600]:   [QB    ] withdrawing server sockets
2017-09-28T18:44:29.726069-04:00 sapprdhdb95 corosync[57600]:   [SERV  ] Service engine unloaded: corosync cluster quorum service v0.1
2017-09-28T18:44:29.726164-04:00 sapprdhdb95 corosync[57600]:   [SERV  ] Service engine unloaded: corosync profile loading service
2017-09-28T18:44:29.776349-04:00 sapprdhdb95 corosync[57600]:   [MAIN  ] Corosync Cluster Engine exiting normally
2017-09-28T18:44:29.778177-04:00 sapprdhdb95 systemd[1]: Dependency failed for Pacemaker High Availability Cluster Manager.
2017-09-28T18:44:40.141030-04:00 sapprdhdb95 systemd[1]: [/usr/lib/systemd/system/fstrim.timer:8] Unknown lvalue 'Persistent' in section 'Timer'
2017-09-28T18:45:01.275038-04:00 sapprdhdb95 cron[57995]: pam_unix(crond:session): session opened for user root by (uid=0)
2017-09-28T18:45:01.308066-04:00 sapprdhdb95 CRON[57995]: pam_unix(crond:session): session closed for user root
  • 若要修复此问题,请删除文件 /usr/lib/systemd/system/fstrim.timer 中的以下行

    Persistent=true
    

    屏幕截图显示了 fstrim 文件,其中包含要删除的值 Persistent=true。

情景 6:Node2 无法加入群集

在使用 ha-cluster-join 命令将 node2 加入到现有群集时,发生以下错误。

ERROR: Can’t retrieve SSH keys from <Primary Node>

屏幕截图显示了控制台窗口,其中显示了错误消息“无法从 IP 地址检索 SSH 密钥”。

  1. 若要修复此问题,请在这两个节点上运行以下命令:

    ssh-keygen -q -f /root/.ssh/id_rsa -C 'Cluster Internal' -N ''
    cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
    

    屏幕截图显示了控制台窗口的一部分,正在第一个节点上运行命令。

    屏幕截图显示了控制台窗口的一部分,正在第二个节点上运行命令。

  2. 执行前面的修复操作后,应能将 node2 添加到群集中。

    屏幕截图显示了控制台窗口,其中显示了成功的 ha-cluster-join 命令。

后续步骤

可以在以下文章中找到有关 SUSE HA 设置的详细信息:

了解如何执行操作系统文件级备份和还原。