本文目录
方案选型
- 为了保证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批量从存储账户中的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 客户端连接验证。
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!