

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 集群节点设置
<a name="sap-hana-pacemaker-sles-cluster-node-setup"></a>

使用 Corosync 并配置所需的身份验证，在节点之间建立集群通信。

**Topics**
+ [部署仲裁生成器节点（仅限横向扩展集群）](#_deploy_a_majority_maker_node_scale_out_clusters_only)
+ [更改 hacluster 密码](#_change_the_hacluster_password)
+ [设置无密码身份验证](#_setup_passwordless_authentication)
+ [配置集群节点](#_configure_the_cluster_nodes)
+ [修改创建的 Corosync 配置](#_modify_generated_corosync_configuration)
+ [验证 Corosync 配置](#_verify_corosync_configuration)
+ [配置集群服务](#_configure_cluster_services)
+ [验证集群状态](#_verify_cluster_status)

## 部署仲裁生成器节点（仅限横向扩展集群）
<a name="_deploy_a_majority_maker_node_scale_out_clusters_only"></a>

**注意**  
只有拥有两个以上节点的集群才需要此选项。

在中部署 SAP HANA Scale-Out 集群时 AWS，必须在第三个可用区 (AZ) 中包含一个多数制造商节点。仲裁生成器（平局决胜机制）节点在一个可用区出现故障时，通过保留仲裁权来确保集群保持正常运行。要使横向扩展集群正常运行，必须至少有一个可用区中的所有节点以及仲裁生成器节点在运行。如果不满足此最低要求，则集群将失去其仲裁状态，所有剩余的 SAP HANA 节点都将被隔离。

多数制造商要求最低 EC2 实例配置为 2 v CPUs、2 GB RAM 和 50 GB 磁盘空间；此实例专门用于法定人数管理，不托管 SAP HANA 数据库或任何其他集群资源。

## 更改 hacluster 密码
<a name="_change_the_hacluster_password"></a>

在所有集群节点上，更改操作系统用户 hacluster 的密码：

```
# passwd hacluster
```

## 设置无密码身份验证
<a name="_setup_passwordless_authentication"></a>

SUSE 提供了多种报告工具，可以用来获取更全面、更易于使用的集群活动视图。其中许多工具都需要不输入密码来访问两个节点的权限。SUSE 建议由根用户执行此设置。

有关更多详细信息，请参阅 SUSE 文档 [Usage of hb\$1report for SLES HAE](https://www.suse.com/support/kb/doc/?id=000017501) 中的“Configuration to collect cluster report as root with root SSH access between cluster nodes”部分。

**警告**  
在实施此配置之前，请查看配置对组织的安全影响，包括根访问权限控制和网络分段。

## 配置集群节点
<a name="_configure_the_cluster_nodes"></a>

在第一个节点上初始化集群框架，包括所有已知的集群节点。

在主节点上以根用户身份运行以下命令：

```
# crm cluster init -u -n <cluster_name> -N <hostname_1> -N <hostname_2>
```

 *使用[参数参考](sap-hana-pacemaker-sles-parameters.md)中的值的示例*：

```
hanahost01:~ # crm cluster init -u -n myCluster -N hanahost01 -N hanahost02
INFO: Detected "amazon-web-services" platform
INFO: Loading "default" profile from /etc/crm/profiles.yml
INFO: Configure Corosync (unicast):
  This will configure the cluster messaging layer.  You will need
  to specify a network address over which to communicate (default
  is eth0's network, but you can use the network address of any
  active interface).

Address for ring0 [10.2.10.1]
Port for ring0 [5405]

Do you wish to use SBD (y/n)? n
WARNING: Not configuring SBD - STONITH will be disabled.

Do you wish to configure a virtual IP address (y/n)? n

Do you want to configure QDevice (y/n)? n
INFO: Done (log saved to /var/log/crmsh/crmsh.log)

INFO: Adding node hanahost02 to cluster
INFO: Running command on hanahost02: crm cluster join -y -c root@hanahost01
...
INFO: Done (log saved to /var/log/crmsh/crmsh.log)
```

此命令：
+ 初始化名为 `myCluster` 的双节点集群 
+ 配置单播通信（-u）
+ 设置基本 corosync 配置
+ 自动将第二个节点加入集群
+ 我们`fence_aws`不会像在环境中用于 STONITH 那样配置 SBD。 AWS 
+ QDevice 配置是可能的，但本文档中没有介绍。请参阅 [SUSE Linux 企业高可用性文档- QDevice 和 QNet D](https://documentation.suse.com/en-us/sle-ha/15-SP7/html/SLE-HA-all/cha-ha-qdevice.html).
+ 对于具有两个以上节点的集群，可以在初始化期间使用额外的 `-N <hostname_3>` 参数添加其他节点，也可以稍后在每个新节点上使用以下命令添加：

  ```
  # crm cluster join -c <hostname_1>
  ```

## 修改创建的 Corosync 配置
<a name="_modify_generated_corosync_configuration"></a>

初始化集群后，需要对生成的 corosync 配置进行一些修改，以便针对云环境进行优化。

 **1。编辑 corosync 配置：**

```
# vi /etc/corosync/corosync.conf
```

生成的文件通常如以下所示：

```
# Please read the corosync.conf.5 manual page
totem {
        version: 2
        cluster_name: myCluster
        clear_node_high_bit: yes
        interface {
                ringnumber: 0
                mcastport: 5405
                ttl: 1
        }

        transport: udpu
        crypto_hash: sha1
        crypto_cipher: aes256
        token: 5000     # This needs to be changed
        join: 60
        max_messages: 20
        token_retransmits_before_loss_const: 10
}

logging {
        fileline: off
        to_stderr: no
        to_logfile: yes
        logfile: /var/log/cluster/corosync.log
        to_syslog: yes
        debug: off
        timestamp: on
        logger_subsys {
                subsys: QUORUM
                debug: off
        }

}

nodelist {
    node {
        ring0_addr: <node1_primary_ip>    # Only single ring configured
        nodeid: 1
    }
    node {
        ring0_addr: <node2_primary_ip>    # Only single ring configured
        nodeid: 2
    }
}

quorum {

        # Enable and configure quorum subsystem (default: off)
        # see also corosync.conf.5 and votequorum.5
        provider: corosync_votequorum
        expected_votes: 2
        two_node: 1
}

totem {
    version: 2
    token: 5000             # This needs to be changed
    transport: udpu
    interface {
        ringnumber: 0
        mcastport: 5405
    }
}
```

 **2。修改配置以添加第二个环路并优化设置：**

```
totem {
    token: 15000           # Changed from 5000 to 15000
    rrp_mode: passive      # Added for dual ring support
}

nodelist {
    node {
        ring0_addr: <node1_primary_ip>     # Primary network
        ring1_addr: <node1_secondary_ip>   # Added secondary network
        nodeid: 1
    }
    node {
        ring0_addr: <node2_primary_ip>     # Primary network
        ring1_addr: <node2_secondary_ip>   # Added secondary network
        nodeid: 2
    }
}
```

 *示例 IP 配置：*


| 网络接口 | 节点 1 | 节点 2 | 
| --- | --- | --- | 
|  ring0\$1addr  |  10.2.10.1  |  10.2.20.1  | 
|  ring1\$1addr  |  10.2.10.2  |  10.2.20.2  | 

 **3。将修改后的配置同步到所有节点：**

```
# csync2 -f /etc/corosync/corosync.conf
```

 **4。重启集群** 

```
# crm cluster restart --all
```

## 验证 Corosync 配置
<a name="_verify_corosync_configuration"></a>

验证网络环路是否活动：

```
# corosync-cfgtool -s
```

 *输出示例：*

```
Printing ring status.
Local node ID 1
RING ID 0
        id      = 10.2.10.1
        status  = ring 0 active with no faults
RING ID 1
        id      = 10.2.10.2
        status  = ring 1 active with no faults
```

两个网络环路都应报告“活动且没有故障”。如果缺少任何一个环路，请查看 corosync 配置并检查 `/etc/corosync/corosync.conf` 更改是否已同步到辅助节点。您可能需要手动执行此操作。如有必要，请重启集群。

## 配置集群服务
<a name="_configure_cluster_services"></a>

启用 Pacemaker，使其在重启后自动启动：

```
# systemctl enable pacemaker
```

启用 Pacemaker 还可以通过服务依赖关系来处理 corosync。集群将在重启后自动启动。对于故障排除场景，您可以改为选择在启动后手动启动服务。

## 验证集群状态
<a name="_verify_cluster_status"></a>

 **1。检查 Pacemaker 服务状态：**

```
# systemctl status pacemaker
```

 **2。验证集群状态：**

```
# crm_mon -1
```

 *输出示例：*

```
Cluster Summary:
  * Stack: corosync
  * Current DC: hanahost01 (version 2.1.5+20221208.a3f44794f) - partition with quorum
  * 2 nodes configured
  * 0 resource instances configured

Node List:
  * Online: [ hanahost01 hanahost02 ]

Active Resources:
  * No active resources
```