Azure云上SAP-灾备站点部署和配置


方案选型

  • 为了保证SAP系统的高可用,我们选择灾备站点和主站点选择位于不同的数据中心,比【北京2】是做为主站点,【上海2】作为灾备站点。
  • 主站点和灾备站点的子网通过VNET-2-VNET打通。
  • 为了降低灾备站点的费用成本,同时降低灾备站点切换引起的业务中断延迟。灾备站点的虚拟机我们要保持实时在线:HANA采用异步复制的方式(HRS)进行同步,ASCS/ERS、应用服务器,我们选择Rysnc的方式进行定时复制。(因为Rsync可以差异复制,节省带宽费用)
  • 如果主站点发生故障,需要人为手动参与,启动灾备站点,并切换DNS。

IP地址规划

虚拟机 FQDN域名 IP地址 备注
域名服务器 NS03 ns3.azure-sap.poc 10.0.1.101 灾备站点DNS服务器
跳板机 Jump01  无 10.0.1.200 灾备站点跳板机
HANA HANA03 hana03.azure-sap.poc 10.0.1.21 灾备站点HANA实例
ASCS/ERS vascs02 vascs02.azure-sap.poc 10.0.1.30 灾备站点ASCS/ERS副结点
应用服务器 AS01 as01.azure-sap.poc 10.0.1.41 灾备站点默认应用服务器

资源部署

资源的部署主要包括网络和虚拟机。后续会共享PowerShell版的部署脚本。

网络

如何打通Azure不同数据中心的两个虚拟网络,可以参考官方文档《使用 Azure 门户配置 VNet 到 VNet VPN 网关连接

虚拟机

对于域名服务器,跳板机,应用服务器,我们可以选择从主站点导出,并复制到灾备站点。可以参考:

《PowerShell批量给Azure虚拟机磁盘创建镜像》

《PowerShell批量导出Azure中的磁盘镜像到存储账户 》

《PowerShell批量从存储账户中的VHD创建托管磁盘》

域名服务器

域名服务器ns03的配置我们要在《Azure云上SAP-域名解析服务器配置》的基础上更改如下配置:

编辑/etc/named.conf文件

配置dns允许灾备网络10.0.1.0/24的解析请求:

allow-query { 127.0.0.1;10.0.0.0/24;10.0.1.0/24; };

给灾备网络增加反向解析配置:

zone "1.0.10.in-addr.arpa" {
type master;
file "rev2.azure-sap.poc";
};

创建rev2.azure-sap.poc配置文件

ns3:/var/lib/named # vi rev2.azure-sap.poc

插入配置:

$TTL 604800
@ IN SOA ns3.azure-sap.poc. root.azure-sap.poc. (
3 ; serial (d. adams)
604800 ; refresh
86400 ; retry
2419200 ; expiry
604800 ) ; minimum
;
@ IN NS ns1.
@ IN NS ns2.
@ IN A 10.0.0.101
@ IN A 10.0.1.101
30 IN PTR vascs02.azure-sap.poc.
39 IN PTR vers02.azure-sap.poc.
21 IN PTR hana03.azure-sap.poc.

以上DNS服务配置的更改,同样也要同步更改在主站点的ns01上。

更新完成后重启DNS服务

 service named restart

DNS服务配置结束后,增加一份灾备DNS配置:

ns3:/var/lib/named # cp for.azure-sap.poc dr-for.azure-sap.poc

编辑更改以下几条记录,其他的保持不变

ns3:/var/lib/named # vi dr-for.azure-sap.poc
vhana01 IN A 10.0.1.21
vascs01 IN A 10.0.1.30
vers01 IN A 10.0.1.30
as01 IN A 10.0.1.41

dr-for.azure-sap.poc这个配置文件暂时不加载,在切换DNS切换时会用到。

HANA数据库服务器

Hana03的实例的部署,可以参考《Azure云上SAP-高可用HANA数据库安装和配置》中的章节中的《安装HANA数据库》部分,请确保和主站点的hana01和hana02一样,在安装过程中,保持相同的参数。

主站点已经配置了hana02从hana01同步复制,在灾备站点我们准备配置hana03异步从hana02上复制。

复制PKI文件

hana03:~ # scp hana01:/usr/sap/HN1/SYS/global/security/rsecssfs/data/SSFS_HN1.DAT /usr/sap/HN1/SYS/global/security/rsecssfs/data/
SSFS_HN1.DAT 100% 2960 2.9KB/s 00:00
hana03:~ # scp hana01:/usr/sap/HN1/SYS/global/security/rsecssfs/key/SSFS_HN1.KEY /usr/sap/HN1/SYS/global/security/rsecssfs/key/
SSFS_HN1.KEY 100% 187 0.2KB/s 00:00

配置hana02为复制源节点

hana02:~ # su - hn1adm
hn1adm@hana02:/usr/sap/HN1/HDB01> hdbnsutil -sr_enable -name=SITE2
checking for active nameserver ...
nameserver is active, proceeding ...
successfully enabled system as system replication source site
done.

配置hana03复制目标节点

hana03:~ # su - hn1adm
hn1adm@hana03:/usr/sap/HN1/HDB01> sapcontrol -nr 01 -function StopWait 600 10
hn1adm@hana03:/usr/sap/HN1/HDB01> hdbnsutil -sr_register --remoteHost=hana02 --remoteInstance=01 --replicationMode=async --name=SITE3

ASCS/ERS配置

ASCS/ERS的部署,我们选择新建一个台机器sles 12 sp3,重命名机器名为vascs01,并在/etc/hosts文件增加记录:

10.0.1.30 vascs01.azure-sap.poc
10.0.1.30 vascs01

来保证本台机器上关于vascs01的解析全部解析到本机,而不是主站点的ascs集群的前端IP。

安装sap_suse_cluster_connector

vascs01:~ # sudo zypper install sap_suse_cluster_connector

配置Rsync复制ASCS/ERS

1.新建本地文件SAP目录:

vascs01:~ # sudo mkdir -p /usr/sap/
vascs01:~ # sudo mkdir -p /sapmnt/NW1

2.和主站点的ascs01交换公钥,保证Rsync同步时使用ssh无须输入用户凭证

vascs01:~ # sudo ssh-keygen
vascs01:~ # sudo cat /root/.ssh/id_rsa.pub

登陆ascs01,编辑authorized_keys,追加上一步的复制的公钥

ascs01:~ # sudo vi /root/.ssh/authorized_keys

3.创建rsync脚本:

vascs01:~ # vi /rsync/ascs_sync.sh

输入以下内容并保存:

#!/bin/sh

sync(){
rsync -avr -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress root@ascs01:$1 $2
}

echo '********************************************'
echo '****   Sync ASCS Instance               ****'
echo `date +'Start at %Y-%m-%d %H:%M:%S'`
echo '********************************************'

sync /home/nw1adm /home/
sync /home/sapadm /home/
sync /usr/sap /usr/
sync /sapmnt/NW1 /sapmnt/
sync /etc/services /etc/
sync /etc/passwd /etc/
sync /etc/group /etc/
sync /etc/shadow /etc/

echo '********************************************'
echo `date +'Done at %Y-%m-%d %H:%M:%S'`
echo '********************************************'
printf "\n\n"

4.给脚本增加执行权限:

 chmod u+x /rsync/ascs_sync.sh

5.将脚本配置进crontab每隔30分钟执行一次:

vascs01:~ # crontab -e

输入内容:

30 * * * * /rsync/ascs_sync.sh >> /rsync/ascs_sync.log 2>&1

应用服务器的配置

应用服务器(Primary Application)我们是从主站点复制过来的,当时在安装应用服务器时,我们通过NFS服务器挂载了SAP的profile目录,但是因为灾备站点目前没有规划NFS,所以需要将profile目录通过Rsync复制到备注站点的AS01。

1.编辑auto.master文件:

as01:~ # sudo vi /etc/auto.master

删除末尾的挂载配置:

/- /etc/auto.direct

重启自动挂载服务:

 sudo service autofs restart

2.删除本地挂载目录的文件夹保护权限

as01:~ # sudo chattr -i /sapmnt/NW1
as01:~ # sudo chattr -i /usr/sap/trans

3. 创建/sync 目录

as01:~ # mkdir /rsync

4.增加rsync脚本文件

as01:/ # vi /rsync/as01_sync.sh

写入下面的脚本内容:

#!/bin/sh

sync(){
rsync -avr -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress root@as01:$1 $2
}
echo '********************************************'
echo '****   Sync AS01 Instance               ****'
echo `date +'Start at %Y-%m-%d %H:%M:%S'`
echo '********************************************'

sync /usr/sap /usr/
sync /sapmnt/NW1 /sapmnt/

echo '********************************************'
echo `date +'Done at %Y-%m-%d %H:%M:%S'`
echo '********************************************'
printf "\n\n"

5. 增加脚本执行权限

chmod u+x /rsync/as01_sync.sh

6.配置进crontab

crontab -e

输入:

30 * * * * /rsync/as01_sync.sh >> /rsync/as01_sync.log 2>&1

灾备站点切换

接下来我们来做一个灾备站点切换演习,这才是本篇文章的重点。我们假设主站点的Azure数据中心因为地震或者战争等不可控因素不能访问了,需要临时切换到灾备站点。我们在Azure 门户上把主站点资源组中的所有机器都关机。然后按照以下顺序启动SAP灾备系统。

切换DNS

登陆ns03,编辑etc/named.conf配置文件,

ns3:~ # vi /etc/named.conf

找到下面的配置节点:

zone "azure-sap.poc" {
type master;
file "for.azure-sap.poc";
};

把for.azure-sap.poc的替换成”dr-for.azure-sap.poc”。

重启named 服务:

ns3:~ # service named restart

保证SAP实例的Virtual Host Name均指向灾备站点。

启动ASCS/ERS

vascs01:~ # su - nw1adm
vascs01:nw1adm 6>
vascs01:nw1adm 7> startsap r3 ASCS00 vascs01
Starting Startup Agent sapstartsrv
OK
Instance Service on host vascs01 started
-------------------------------------------
starting SAP Instance ASCS00
Startup-Log is written to /home/nw1adm/startsap_ASCS00.log
-------------------------------------------
/usr/sap/NW1/ASCS00/exe/sapcontrol -prot NI_HTTP -nr 00 -function Start
Instance on host vascs01 started

启动HANA

当前灾备站点hana03仍旧是一台复制模式的实例,是不能被客户端连接的,我们需要对hana03执行take over 动作,把它变成一个主节点。

登陆hana03,先关闭hana服务:

hn1adm@hana03:/usr/sap/HN1/HDB01> sapcontrol -nr 01 -function StopWait 600 10

28.06.2018 11:11:00
Stop
OK

28.06.2018 11:11:20
StopWait
OK

Take Over当前节点:

hn1adm@hana03:/usr/sap/HN1/HDB01> hdbnsutil -sr_takeover
checking local nameserver ...
nameserver hana03:30101 not responding.
run as transaction master
updating topology for system replication takeover ...
mapped host hana01 to hana03
done.

启动hana服务:

hn1adm@hana03:/usr/sap/HN1/HDB01> sapcontrol -nr 01 -function StartWait 600 10

28.06.2018 11:16:44
Start
OK

28.06.2018 11:21:14
StartWait
OK
hn1adm@hana03:

检测hana数据库连接端口是否已经打开:

hn1adm@hana03:/usr/sap/HN1/HDB01> telnet hana03 30115
Trying 10.0.1.21...
Connected to hana03.
Escape character is '^]'.
^CConnection closed by foreign host

启动Application Server

更新数据库实例指向:

as01:/rsync # su - nw1adm
as01:nw1adm 29>
as01:nw1adm 35> hdbuserstore list DEFAULT
KEY DEFAULT
ENV : hana01.azure-sap.poc:30115
USER: SAPABAP1

把DEFAULT的值从hana01指向hana03。

as01:nw1adm 42> hdbuserstore set DEFAULT hana03.azure-sap.poc:30115 SAPABAP1 {Password}

启动应用服务器

as01:nw1adm 45> cd /usr/sap/NW1/D00/exe/
as01:nw1adm 46> startsap
Checking db Database
Database is running
-------------------------------------------
Starting Startup Agent sapstartsrv
OK
Instance Service on host as01 started
-------------------------------------------
starting SAP Instance D00
Startup-Log is written to /home/nw1adm/startsap_D00.log
-------------------------------------------
/usr/sap/NW1/D00/exe/sapcontrol -prot NI_HTTP -nr 00 -function Start
Instance on host as01 started

应用服务器启动完毕后,可以通过SAP GUI 客户端连接验证。

本文链接: https://www.pstips.net/sap-on-azure-dr-site-setup-and-configuration.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注