应急预案:专有云V3.3及以后环境中DNS注册服务强制主备切换的方法

应急预案:专有云V3.3及以后环境中DNS注册服务强制主备切换的方法

更新时间:2020-06-11 17:30:18

1. 概述

本文主要介绍在专有云V3.3及以后版本单机房环境中,DNS注册服务器强制主备切换的应急处理方法。

1.1. 适用范围

  • 专有云V3企业版,基础服务设备
    说明:适用于专有云V3.3及以后版本单机房环境。

1.2. 用户告知

  • 适用平台:x86
  • 授权级别:L2(二线技术支持工程师)
  • 临时或固化方案:临时
  • 操作复杂度:中
  • 预估执行时长:10分钟
  • 业务影响:否
  • 风险等级:中
    说明:OPS1本身已异常,将dnsapi切换至OPS2无影响。

2. 问题描述

当OPS1已断电、夯机、宕机等任何无法登录操作的情况下,此时采用普通切换已无效,需要强制切换dnsapi到OPS2服务器。强制切换是针对OPS1宕机或其他意外而导致域名无法注册的情况实施的,如果在OPS1的dnsmaster、dnsslave正常运行的状态下切换,会导致dnsapi状态混乱,影响域名注册。

3. 解决方案

3.1. 环境检查

  1. 登录OPS2服务器的dnsmaster和dnsslave容器,执行以下命令,进行数据备份。
    tar zcvf /home/named_bak_`date '+%Y%m%d%H%M%S'`.tar.gz `find /var/named/ -maxdepth 1 -type f` 
  2. 强制切换前,登录OPS2服务器dnsmaster容器中,执行以下命令,查看是否符合切换条件。确认返回结果为STANDBY,则符合切换条件。
    sh /root/dns_ha/whoami.sh
  3. 登录OPS2服务器的dnsslave容器中,执行以下命令,检查dnsapi指向。确认返回的两个IP地址都应为OPS1服务器上dnsmaster容器的IP地址。
    dig @localhosts dnsapi1.tbsite.net +short ; dig @localhost dnsapi2.tbsite.net +short

3.2. 实施步骤

强制切换DNS注册服务,操作步骤如下:

注意

  • 以下两条命令的效果相同,无报错即可认为强制切换完成。
  • 不需要在OPS1服务器的dnsmaster和dnsslave容器中执行切换操作,强制切换方案考虑是在OPS1服务器宕机或其他紧急情况下执行,如果在OPS1服务器的dnsmasmter和dnsslave容器正常运行状态下执行强制切换,会导致dnsapi混乱,甚至影响域名注册。
  • 登录OPS2服务器,执行以下命令,进行dnsapi的强制切换。
    ssh dns-master-standby.tbsite.net "site_name=`head -1 /etc/hostinfo | awk -F'.' '{print $NF}'`; /root/opsbuild/bcmc/DNS/DNS_switch.py \${site_name} \${site_name} true 11111111"
    说明:部分版本中,脚本文件的路径为/root/opsbuild/bcmc/DNS_switch.py,请以现场实际环境为准。
  • 或者在OPS2服务器的dnsmaster容器中,执行以下命令,进行切换。
    site_name=`head -1 /etc/hostinfo | awk -F'.' '{print $NF}'`; /root/opsbuild/bcmc/DNS/DNS_switch.py ${site_name} ${site_name} true 11111111

3.3. 结果验证

  1. 登录OPS2服务器的dnsmaster容器中,执行以下命令,确认返回结果为ACTIVE,则表示切换成功。
    sh /root/dns_ha/whoami.sh
  2. 登录OPS2服务器的dnsslave和dnsmaster容器中,执行以下命令,确认返回的两个IP地址都为OPS2服务器上dnsmaster容器的IP地址。
    dig @localhost dnsapi1.tbsite.net +short ; dig @localhost dnsnapi2.tbsite.net +short
  3. 执行以下命令,创建一条A记录test2468.tbsite.net
    curl 'http://dnsapi1.tbsite.net/cgi-bin/dnsapi.cgi?action=add&name=test2468.tbsite.net&ip=2.X.X.8'
  4. 稍等5秒,执行以下命令,验证刚添加的域名test2468.tbsite.net正常解析为2.X.X.8,说明dnsapi正常,且同步和解析功能正常。
    dig +short test2468.tbsite.net
  5. 执行以下命令,删除A记录。
    curl 'http://dnsapi1.tbsite.net/cgi-bin/dnsapi.cgi?action=remove&name=test2468.tbsite.net&ip=2.X.X.8'

4. 回滚方案

重新拉起的OPS1服务器上dnsmaster容器,初始状态为ACTIVE,需要手动切换成STANDBY。

  1. 登录OPS1服务器的dnsmaster容器中,执行以下命令,确认返回结果为ACTIVE。
    sh /root/dns_ha/whoami.sh
  2. 执行以下命令,手动修改OPS1服务器上dnsmaster容器的状态为STANDBY。
    说明:状态切换为STANDBY,会自动从OPS2的dnsmaster容器同步数据。
    /bin/sh /root/dns_ha/change_host_standby.sh
  3. 在OPS1服务器上dnsmaster容器中,将dnsCheckScript_singleRoom.py脚本文件上传到/root/dns_ha/目录。
  4. 可执行上一步的脚本文件,进行检查。若现场上传文件不方便,可使用API进行验证。
    1. 执行以下命令,创建一条A记录test2468.tbsite.net
      curl 'http://dnsapi1.tbsite.net/cgi-bin/dnsapi.cgi?action=add&name=test2468.tbsite.net&ip=2.X.X.8'
    2. 稍等5秒,执行以下命令,此时可以解析为2.X.X.8,说明dnsapi正常,且同步和解析功能正常。
      dig +short test2468.tbsite.net
    3. 执行以下命令,删除A记录。
      curl 'http://dnsapi1.tbsite.net/cgi-bin/dnsapi.cgi?action=remove&name=test2468.tbsite.net&ip=2.X.X.8'
  5. 登录OPS1服务器的dnsmaster或OPS2服务器的dnsmaster容器中,执行以下命令,进行状态切换。
    site_name=`head -1 /etc/hostinfo | awk -F'.' '{print $NF}'`; /root/opsbuild/bcmc/DNS/DNS_switch.py ${site_name} ${site_name} false 11111111
  6. 再次使用脚本或者API进行验证。

5. 补充说明

DNS注册服务强制切换中的补充说明如下:

  • OPS1服务器故障,进行强制切换。在OPS1恢复后必须检查主备情况,可能需要手动修改OPS1服务器上dnsmaster容器的主备状态。
  • OPS1服务器重装以后,默认可能也会是ACTIVE状态,需要在OPS1服务器上dnsmaster容器中手动执行change_host_standby.sh脚本文件修改为STANDBY状态。