
# 配置NFS Server的HA机制
#### 操作场景
![](https://support.huaweicloud.com/dgdec-sap/public_sys-resources/notice_3.0-zh-cn.png)
如果您选择使用SFS Turbo实现文件共享存储，此章节可跳过。
在双NFS Server的场景下，需要配置NFS Server之间的同步机制，确保NFS Server能够正常给SAP HANA提供服务。
#### 前提条件
已完成[配置NFS Server互信](https://support.huaweicloud.com/dgdec-sap/sap_02_0049.html)和[格式化NFS Server磁盘](https://support.huaweicloud.com/dgdec-sap/sap_02_0059.html)。
#### 操作步骤
1. 初始化集群信息。 
   1. 以"root"帐号和密钥文件登录Jump Host，并通过SSH协议，跳转到待作为主节点的NFS Server，假设其名称为nfs01。
   
   2. 在主节点上，执行以下命令，进入集群配置界面。 **ha-cluster-init**
      
   
   3. 系统弹出下述提示。输入"y"，并按"Enter"键。
      ```
      WARNING: NTP is not configured to start at system boot.
      WARNING: No watchdog device found. If SBD is used, the cluster will be unable to start without a watchdog.
      Do you want to continue anyway? [y/N]
      ```
      
   
   4. 系统弹出下述提示。输入"n"，并按"Enter"键。
      ```
      /root/.ssh/id_rsa already exists - overwrite? [y/N]
      ```
      
   
   5. 系统弹出下述提示，请输入NFS Server的心跳网段，并按"Enter"键。 例如，输入网段"10.0.4.0"
      ```
      Network address to bind to (e.g.: 192.168.1.0) []
      ```
      
   
   6. 系统弹出下述提示，采用默认设置，并按"Enter"键。
      ```
      Multicast address (e.g.: 239.x.x.x) [239.97.171.218]
      ```
      
   
   7. 系统弹出下述提示，采用默认设置，并按"Enter"键。
      ```
      Multicast port [5405]
      ```
      
   
   8. 系统弹出下述提示，输入"n"，并按"Enter"键。
      ```
      Do you wish to use SBD? [y/N]
      ```
      
   
   9. 系统弹出下述提示，输入"n"，并按"Enter"键。
      ![](https://support.huaweicloud.com/dgdec-sap/public_sys-resources/note_3.0-zh-cn.png)
      为了保证系统安全，可在完成HA机制的全部配置后，修改"hacluster"的密码。
      ```
      ...
          Log in with username 'hacluster', password 'linux'
      WARNING: You should change the hacluster password to something more secure!
        Enabling pacemaker.service
        Waiting for cluster........done
        Loading initial configuration 
      ...
      Do you wish to configure an administration IP? [y/N]
      ```
      
   
   10. 系统完成集群的初始化过程，提示如下：
       ```
       Done (log saved to /var/log/ha-cluster-bootstrap.log)
       ```
       
   
   
   
   
2. 将备节点加入集群。 
   1. 在主节点nfs01上，将"corosync.conf"配置文件同步到备节点。 命令行如下
      **scp /etc/corosync/corosync.conf 备节点主机名称:/etc/corosync/**
      例如
      **scp /etc/corosync/corosync.conf nfs02:/etc/corosync/**
      
   
   2. 在主节点上，以SSH方式登录到备节点。 **ssh nfs02**
      
   
   3. 执行以下命令，将备节点加入集群。 **ha-cluster-join**
      
   
   4. 系统弹出下述提示。输入"y"，并按"Enter"键。
      ```
      WARNING: NTP is not configured to start at system boot.
      WARNING: No watchdog device found. If SBD is used, the cluster will be unable to start without a watchdog.
      Do you want to continue anyway? [y/N]
      ```
      
   
   5. 系统弹出下述提示信息，输入主节点的心跳平面IP地址（例如"10.0.4.101"），并按"Enter"键。
      ```
      IP address or hostname of existing node (e.g.: 192.168.1.1) []
      ```
      
   
   6. 系统弹出下述提示信息，输入"n"，并按"Enter"键。
      ```
      /root/.ssh/id_rsa already exists - overwrite? [y/N]
      ```
      
   
   7. 系统完成备节点加入集群的初始化过程，提示如下：
      ```
      ……
      ```
      ```
      WARNING: You should change the hacluster password to something more secure!
      ```
      ```
      Enabling pacemaker.service
      ```
      ```
      Waiting for cluster........done
      ```
      ```
      Done (log saved to /var/log/ha-cluster-bootstrap.log)
      ```
      
   
   
   
   
3. 配置集群基础参数。 
   1. 以VNC方式，以"root"帐号和密码，登录主节点，并进入命令行界面。
   
   2. 执行**yast2** 命令，进入"YaST2 Control Center"界面，如[图1]所示。
      图1YaST2 Control Center界面   
      ![](https://support.huaweicloud.com/dgdec-sap/zh-cn_image_0093688858.jpg) 
   
   3. 选择"High Availability \> Cluster"，系统提示需要安装"hawk"软件包， 如[图2]所示，选择"Cancel"，按"Enter"。
      图2提示安装hawk软件包   
      ![](https://support.huaweicloud.com/dgdec-sap/zh-cn_image_0093688860.jpg) 
   
   4. 系统提示"If you continue without installing required packages, YaST may not work properly."，选择"Continue"，按"Enter"。进入Cluster的配置界面。
   
   5. 选择左侧的"Communication Channels"导航，并在右侧界面输入配置参数。示例如[图3]所示。
      参数说明如下：
      - Transport：选择"Unicast"。
      
      - Channel区域框："Bind Network Address"参数选择NFS Server心跳链路的网段，在这里为心跳平面的网段，例如"10.0.4.0"；"Multicast Port"参数采用默认值。
      
      - Auto Generate Node ID：确保该参数为选中状态。
      
      - Redundant Channel：无需配置。
      
      - Member Address：通过"Add"添加主备NFS Server的心跳平面IP地址和业务/备份平面的IP地址。
      
      
      图3Communication Channels界面   
      ![](https://support.huaweicloud.com/dgdec-sap/zh-cn_image_0095196520.jpg) 
   
   6. 选择左侧的"Security"导航，并在右侧界面输入配置参数，如[图4]所示。
      参数"Enable Security Auth"确保为选中状态。
      然后，选中"Generate Auth Key File"并按"Enter"，系统弹出生成成功的提示信息，选中"OK"并按"Enter"，生成Auth Key文件。
      图4Security界面   
      ![](https://support.huaweicloud.com/dgdec-sap/zh-cn_image_0093688864.jpg) 
   
   7. 选择左侧的"Configure Csync2"导航，并在右侧界面输入配置参数，如[图5]所示。
      选中一个"Sync Host"的节点，然后选中"Generate Pre-Shared-Keys"并按"Enter"生成文件，同时确认右下方的按钮显示为"Turn csync2 OFF"，确保已打开Csync2 功能。
      图5Configure Csync2界面   
      ![](https://support.huaweicloud.com/dgdec-sap/zh-cn_image_0093688866.jpg) 
   
   8. 选择左侧的"Service"导航，并在右侧界面输入配置参数，如[图6]所示。
      参数说明如下：
      - Booting：默认选择"On"，服务器启动时启动集群。
      
      - Switch on and off：确保为已启动集群。
      
      - firewall settings：确保"Firewall is disabled"。
      
      
      图6Service界面   
      ![](https://support.huaweicloud.com/dgdec-sap/zh-cn_image_0093688868.jpg) 
   
   9. 选中"Finish"并按"Enter"键完成配置。
   
   10. 将主节点的"key_hagroup "和"csync2.cfg"文件复制到备节点。 以 "root"用户登录主节点，执行以下命令
       **scp /etc/csync2/key_hagroup /etc/csync2/csync2.cfg** ***备节点主机名称*** **:/etc/csync2**
       例如
       **scp /etc/csync2/key_hagroup /etc/csync2/csync2.cfg nfs02:/etc/csync2**
       
   
   11. 在主节点执行以下命令。 **systemctl enable csync2.socket**
       **systemctl enable xinetd**
       **systemctl restart xinetd**
       
   
   12. 在备节点执行以下命令 以 "root"用户登录备节点，执行以下命令
       **systemctl enable csync2.socket**
       **systemctl enable xinetd**
       **systemctl restart xinetd**
       
   
   13. 重新在主节点执行以下命令，同步主备服务器配置文件。 **csync2 -xv**
       
   
   14. 在主节点检查集群状态 执行以下为命令，确保状态为"active (running)"。
       ![](https://support.huaweicloud.com/dgdec-sap/public_sys-resources/note_3.0-zh-cn.png)
       如果回显的信息提示stonith磁盘未配置，此为正常现象。在后续的步骤中将配置stonith。
       **systemctl status pacemaker**
       
   
   15. 在主节点重启集群 **systemctl stop pacemaker**
       **systemctl start pacemaker**
       
   
   16. 在备节点检查集群状态 执行以下为命令，确保状态为"active (running)"。
       ![](https://support.huaweicloud.com/dgdec-sap/public_sys-resources/note_3.0-zh-cn.png)
       如果回显的信息提示stonith磁盘未配置，此为正常现象。在后续的步骤中将配置stonith。
       **systemctl status pacemaker**
       
   
   17. 在备节点重启集群 **systemctl stop pacemaker**
       **systemctl start pacemaker**
       
   
   18. 在主节点查看集群心跳网络状态 **corosync-cfgtool -s**
       可查看到主备心跳链路的心跳信息，请确保配置正常。示例如下：
       ```
       Printing ring status.
       Local node ID 167772739
       RING ID 0
       id= 10.0.4.101
       status= ring 0 active with no faults
       RING ID 1
       id= 10.0.5.101
       status= ring 1 active with no faults
       ```
       
   
   19. 在主节点查看集群是否正常。 **crm_mon -r1**
       系统返回的提示示例如下，两个NFS Server节点处于"Online"状态，表示集群正常。
       ```
       Last updated: Wed Oct 19 17:40:31 2016
       Last change: Tue Oct 18 15:32:00 2016 by root via cibadmin on hana01
       Stack: classic openais (with plugin)
       Current DC: nfs01 - partition with quorum
       Version: 1.1.12-f47ea56
       2 Nodes configured, 2 expected votes
       0 Resources configured
       Online: [ nfs01 nfs02 ]
       ```
       
   
   
   
   
4. 配置softdog。 
   1. 在主节点，执行以下命令，打开文件，按"i"键，进入编辑模式。
      **vi /etc/init.d/boot.local**
      
   
   2. 在最后一行添加如下内容。
      ```
      modprobe softdog >/dev/null 2>&1
      ```
      
   
   3. 按"Esc"键，输入":x!"并按"Enter"键退出。
   
   4. 在命令行界面，执行以下命令
      **modprobe softdog**
      
   
   5. 参见[4.a]～[4.d]，在备节点上配置softdog。
   
   
   
   
5. Fence设备上配置SBD信息。 
   1. 在主备节点上设置sbd服务开机自启动 **systemctl enable sbd**
      
   
   2. 在主节点上，创建SBD分区
      命令如下
      **sbd -d /dev/disk/by-id/*磁盘分区的ID*create**
      ![](https://support.huaweicloud.com/dgdec-sap/public_sys-resources/note_3.0-zh-cn.png)
      使用**ll /dev/disk/by-id \|grep** ***分区名称*** **\|grep scsi-3** 命令查询SDB盘的ID。例如，磁盘分区为**/dev/sdb1** ，则使用**ll /dev/disk/by-id \|grep sdb\|grep scsi-3** 找到**sdb1**对应的ID。
      例如
      **sbd -d /dev/disk/by-id/scsi-36888603000000db7fa179ea56210049-part1** **create**
      
   
   3. 将该分区分配给主节点 命令如下
      **sbd -d /dev/disk/by-id/*磁盘分区的ID*** **allocate** ***主节点的主机名称***
      例如
      **sbd -d /dev/disk/by-id/scsi-36888603000000db7fa179ea56210049-part1 allocate nfs01**
      
   
   4. 将该分区分配给备节点 命令如下
      **sbd -d /dev/disk/by-id/*磁盘分区的ID*** **allocate** ***备节点的主机名称***
      例如
      **sbd -d /dev/disk/by-id/scsi-36888603000000db7fa179ea56210049-part1 allocate nfs02**
      
   
   5. 查询分配信息 命令如下
      **sbd -d /dev/disk/by-id/*磁盘分区的ID*** **list**
      例如
      **sbd -d /dev/disk/by-id/scsi-36888603000000db7fa179ea56210049-part1 list**
      回显如下：
      ```
      0  nfs01 clear
      1  nfs02 clear
      ```
      
   
   6. 执行以下命令 **sbd -d /dev/disk/by-id/*磁盘分区的ID*** **dump**
      例如
      **sbd -d /dev/disk/by-id/scsi-36888603000000db7fa179ea56210049-part1 dump**
      
   
   7. 打开SBD文件。 执行**vi /etc/sysconfig/sbd**命令打开文件，并在文件中添加信息。
      示例如下：
      ![](https://support.huaweicloud.com/dgdec-sap/public_sys-resources/note_3.0-zh-cn.png)
      SBD_DEVICE信息中的路径，以SBD磁盘的分区信息为准，下面内容为示例。
      ```
      SBD_DEVICE="/dev/disk/by-id/scsi-36888603000000db7fa179ea56210049-part1"
      SBD_OPTS="-W"
      ```
      
   
   8. 在主节点上将配置文件同步到备节点。 **scp /etc/sysconfig/sbd** ***备节点主机名称*** **:/etc/sysconfig**
      例如
      **scp /etc/sysconfig/sbd nfs02:/etc/sysconfig**
      
   
   9. 在主节点重启集群服务 **systemctl stop pacemaker**
      **systemctl start pacemaker**
      
   
   10. 在备节点重启集群服务 **systemctl stop pacemaker**
       **systemctl start pacemaker**
       
   
   11. 检查集群配置 **crm_mon -r1**
       系统返回的提示示例如下，两个NFS Server节点处于"Online"状态，表示集群正常。
       ```
       Last updated: Wed Oct 19 17:40:31 2016
       Last change: Tue Oct 18 15:32:00 2016 by root via cibadmin on hana01
       Stack: classic openais (with plugin)
       Current DC: nfs01 - partition with quorum
       Version: 1.1.12-f47ea56
       2 Nodes configured, 2 expected votes
       0 Resources configured
       Online: [ nfs01 nfs02 ]
       ```
       
   
   
   
   
6. 添加Fence SBD资源。 
   1. 在主节点命令行界面，执行以下命令，进入CRM配置模式。 **crm**
      系统回显如下：
      ```
      crm(live)#
      ```
      
   
   2. 执行以下命令，进入配置模式 **configure**
      
   
   3. 输入下列命令，完成SBD资源的添加。 **primitive r_sbd stonith:external/sbd params pcmk_delay_max=40**
      **commit**
      
   
   
   
   
7. 创建虚拟业务IP。 
   1. 在管理控制台，单击"服务列表 \> 计算 \> 弹性云服务器"，进入"弹性云服务器"管理界面。
   
   2. 找到一台NFS Server对应的云服务器，并单击云服务器的名称，弹出云服务器的详细信息。
   
   3. 单击"网卡"页签，在云服务器的业务/管理平面网卡后，单击"管理私有IP地址"，弹出"虚拟IP地址"界面。
   
   4. 单击"申请虚拟IP地址"分配规划的浮动IP地址，在分配好的浮动IP栏单击"绑定服务器"，绑定给所需的云服务器，重复执行绑定操作给其他云服务器。
   
   5. 在主节点的命令行界面，CRM的配置模式下，执行以下命令
      命令中，**params ip**即为NFS Server的虚拟业务IP，应按照实际填写。
      **primitive nfs_vip ocf:heartbeat:IPaddr2 params ip=*10.0.1.103*op monitor interval="10" timeout="20" on-fail=restart**
      **commit**
      
   
   
   
   
8. 创建集群共享卷文件系统 
   在主节点，执行以下命令，分别为Shared卷和Backup卷创建集群共享卷文件系统。
   命令中**params device** 和**directory** 为磁盘ID及路径，应按照实际填写。查看磁盘ID的方法可参见[5.b]中的相关描述。
   **primitive nfs_shared ocf:heartbeat:Filesystem params device="*/dev/disk/by-id/磁盘分区的ID*" directory="/shared" fstype=xfs op monitor interval="10" timeout="40" on-fail=restart**
   **primitive nfs_bak ocf:heartbeat:Filesystem params device="*/dev/disk/by-id/磁盘分区的ID*" directory="/backup" fstype=ext3 op monitor interval="10" timeout="40" on-fail=restart**
   **primitive nfs_sapmnt ocf:heartbeat:Filesystem params device="** ***/dev/disk/by-id/磁盘分区的ID*** **" directory="/sapmnt " fstype=ext3 op monitor interval="10" timeout="40" on-fail=restart**
   **primitive nfs_sys ocf:heartbeat:Filesystem params device="** ***/dev/disk/by-id/磁盘分区的ID*** **" directory="/usr/sap/A01/SYS" fstype=ext3 op monitor interval="10" timeout="40" on-fail=restart**
   **primitive nfs_sapcd ocf:heartbeat:Filesystem params device="** ***/dev/disk/by-id/磁盘分区的ID*** **" directory="/sapcd" fstype=ext3 op monitor interval="10" timeout="40" on-fail=restart**
   **commit**
   
   
9. 创建NFS资源。
   
   在主节点的CRM的配置模式下，创建名称为"nfsserver"的资源，执行以下命令。
   其中，nfs_ip为NFS Server的浮动IP地址。
   **primitive nfsserver nfsserver params nfs_ip=*10.0.5.103*nfs_shared_infodir="/shared" nfs_shared_infodir="/backup" nfs_shared_infodir="/sapmnt" nfs_shared_infodir="/usr/sap/A01/SYS" nfs_shared_infodir="/sapcd" operations $id=nfsserver-operations op monitor interval="10" timeout="20" on-fail=restart**
   **commit**
   
   
10. 创建资源组。 
    在主节点的CRM的配置模式下，将[7.e]～[9]创建的资源，创建为名称为"nfs_group"的资源组
    **group nfs_group nfs_vip nfs_shared nfs_bak nfs_sapmnt nfs_sys nfs_sapcd nfsserver**
    **commit**
    
    
11. 创建Clone Ping。 
    在主节点的CRM的配置模式下，执行以下命令，创建Clone Ping
    **primitive r_ping ocf:pacemaker:ping params multiplier="100" dampen="5" host_list="** ***10.0.5.1*** **" op monitor interval="15" timeout="60" start="60" op start interval="0" timeout="60"**
    **clone PING r_ping**
    **commit**
    参数说明如下：
    - r_ping表示clone ping的资源名称。
    
    - Multiplier是一个增效器，以100这个值为基准，两个节点ping数据包有丢失时就会从100减去相应的值，以此来判断节点的业务网卡的通迅情况。
    
    - dampen表示每5秒ping一次
    
    - 10.0.5.1代表NFS Server的业务/备份平面的网段的网关。
    
    - monitor表示监控资源；interval表示若15秒ping不到上层交换设备，最迟60秒(timeout)就会迁移资源(start)。
    
    
    
    
12. 创建约束条件 
    在主节点的CRM的配置模式下，执行以下命令，为资源组"nfs_group"创建约束条件名称为"nfs_conn"
    **location nfs_conn nfs_group rule -inf: not_defined pingd or pingd lte 0**
    **commit**
    
    
13. 配置其他信息 
    1. 配置Stonith参数。 **property startup-fencing=true**
       **property stonith-enabled=true**
       **property stonith-action=off**
       **commit**
       
    
    2. 配置Failure时间 **rsc_defaults failure-timeout=600**
       **commit**
       
    
    3. 在主节点，按**Ctrl+C**键，退出CRM的配置模式。
    
    
    
    
 
