近日在做灾备切换项目时,客户的系统中有微软的“故障转移群集管理器”软件,这是我头一次接触这种冷门软件,客户方面的运维人员都是手工管理这个软件中的服务,而我们的灾备自动化切换需要通过命令方式来对群集、服务做启停、改ip地址。
查阅网上文档,得知需要用cluster命令来实现,可参考一位博友的文档
cluster命令用法总结
https://blog.csdn.net/jaminwm/article/details/8008895/
这是一张故障转移群集管理器的截图,展示了群集、群集中的服务和应用程序、节点、网络。
群集名称是my12cluster,群集的IP地址需要通过命令方式进行修改,后面介绍修改的命令。
这是服务和应用程序my12AG的基本信息截图,服务的IP地址要通过命令进行修改,后面介绍修改的命令。
几经周折和反复试验,终于找到了对故障转移群集管理器中的服务做启停、改ip地址的命令方法,这里来记录下。
1. 停止群集和服务
使用命令 cluster resource ResourceName /off
C:\Windows\System32\cluster resource "群集 IP 地址" /off
C:\Windows\System32\cluster resource "群集名称" /off
C:\Windows\System32\cluster resource "my12AG" /off
C:\Windows\System32\cluster resource "my12AG_10.0.128.185" /off
C:\Windows\System32\cluster resource "my12AG_my12sql-db" /off
启动的结果输出:
正在将资源“群集 IP 地址”脱机...
资源 组 节点 状态
-------------------- -------------------- --------------- ------
群集 IP 地址 群集组 my12sql-db02 脱机
正在将资源“群集名称”脱机...
资源 组 节点 状态
-------------------- -------------------- --------------- ------
群集名称 群集组 my12sql-db02 脱机
正在将资源“my12AG”脱机...
资源 组 节点 状态
-------------------- -------------------- --------------- ------
my12AG my12AG my12sql-db02 脱机
正在将资源“my12AG_my12sql-db”脱机...
资源 组 节点 状态
-------------------- -------------------- --------------- ------
my12AG_my12sql-db my12AG my12sql-db02 脱机
正在将资源“my12AG_10.0.128.185”脱机...
资源 组 节点 状态
-------------------- -------------------- --------------- ------
my12AG_10.0.128.185 my12AG my12sql-db02 脱机
2. 修改群集和服务的IP地址
使用命令 cluster resource ResourceName /priv address=IPAddress subnetmask=AddressMask
C:\Windows\System32\cluster resource "群集 IP 地址" /priv address=10.7.128.184 subnetmask=255.255.255.0
C:\Windows\System32\cluster resource "my12AG_10.0.128.185" /priv address=10.7.128.185 subnetmask=255.255.255.0
3. 启动群集和服务
使用命令 cluster resource ResourceName /on
C:\Windows\System32\cluster resource "群集 IP 地址" /on
C:\Windows\System32\cluster resource "群集名称" /on
C:\Windows\System32\cluster resource "my12AG" /on
C:\Windows\System32\cluster resource "my12AG_my12sql-db" /on
C:\Windows\System32\cluster resource "my12AG_10.0.128.185" /on
启动的结果输出:
正在将资源“群集 IP 地址”联机...
资源 组 节点 状态
-------------------- -------------------- --------------- ------
群集 IP 地址 群集组 my12sql-db02 联机
正在将资源“群集名称”联机...
资源 组 节点 状态
-------------------- -------------------- --------------- ------
群集名称 群集组 my12sql-db02 联机
正在将资源“my12AG”联机...
资源 组 节点 状态
-------------------- -------------------- --------------- ------
my12AG my12AG my12sql-db02 联机
正在将资源“my12AG_my12sql-db”联机...
资源 组 节点 状态
-------------------- -------------------- --------------- ------
my12AG_my12sql-db my12AG my12sql-db02 联机
正在将资源“my12AG_10.0.128.185”联机...
资源 组 节点 状态
-------------------- -------------------- --------------- ------
my12AG_10.0.128.185 my12AG my12sql-db02 联机
4. 检查群集和服务是否是脱机状态
通过一个批处理,将服务的状态中有“脱机”关键字的信息写入一个文本,然后判断文件文件中字符串行数是否是5,表示所有服务都是脱机状态。
如果要检查是否是联机状态,把find关键字换成“联机”。
@echo off
C:\Windows\System32\cluster resource "群集 IP 地址" /status < nul | find "脱机" >> cluster_off_check.txt
C:\Windows\System32\cluster resource "群集名称" /status < nul | find "脱机" >> cluster_off_check.txt
C:\Windows\System32\cluster resource "my12AG" /status < nul | find "脱机" >> cluster_off_check.txt
C:\Windows\System32\cluster resource "my12AG_10.0.128.185" /status < nul | find "脱机" >> cluster_off_check.txt
C:\Windows\System32\cluster resource "my12AG_my12sql-db" /status < nul | find "脱机" >> cluster_off_check.txt
for /f "delims=" %%b in (cluster_off_check.txt) do (echo %%b)
SETLOCAL ENABLEDELAYEDEXPANSION
SET lines=0
FOR /F "tokens=* delims=" %%i IN (cluster_off_check.txt) DO (SET /A lines = !lines! + 1)
echo offline cluster resource count: %lines%
rem 5个服务是否都是脱机状态
if %lines% EQU 5 (echo OK, 群集服务和应用都已脱机) else (echo ERROR, 有群集服务和应用联机,请检查)
del cluster_off_check.txt
启动的结果输出:
群集 IP 地址 群集组 my12sql-db02 联机
群集名称 群集组 my12sql-db02 联机
my12AG my12AG my12sql-db02 联机
my12AG_10.0.128.185 my12AG my12sql-db02 联机
my12AG_my12sql-db my12AG my12sql-db02 联机
running cluster resource count: 5
OK, 群集服务和应用都已联机