我为园子设计的脚本大致如下:
1慢检测:任务计划每分钟运行。发现cpu高于95%后,触发2。
2快检测:每隔5秒钟运行,发现cpu高于95%,连续6次后,触发3。
3报警n次。超出5分钟未处理后,触发4。
4去sql server机,执行主备切换的powershell命令。
5休眠n秒,连续触发3次主备切换,cpu还不能下降的话。则重启sql server机。
简单来说,就是操作自动化。
sql脚本:https://files.cnblogs.com/files/piapia/powershell.zip
Add-Content -Path "${PSScriptRoot}/bj报警未处理标记.txt" -Value ‘‘ foreach ($Private:i in 1..6) { #这里有些我写的报警脚本。 https://gitee.com/chuanjiao10/kasini3000/tree/master/admin_gui #xxx Start-Sleep -Seconds 60 } if (Test-Path -LiteralPath "${PSScriptRoot}/bj报警未处理标记.txt") { #触发sql server 主备切换。 & "${PSScriptRoot}/sql_server主备切换.ps1" }
if (Test-Path -LiteralPath "${PSScriptRoot}/记录主备切换次数.txt") { $Private:主备切换次数 = Get-Content -Path "${PSScriptRoot}/记录主备切换次数.txt" } if ($Private:主备切换次数 -ge 3) { Remove-Item -LiteralPath "${PSScriptRoot}/记录主备切换次数.txt" Write-Host ‘重启sqlserver‘ & "${PSScriptRoot}/重启sql服务器.ps1" } $Private:主备切换次数++ Add-Content -Path "${PSScriptRoot}/记录主备切换次数.txt" -Value $Private:主备切换次数 Add-Content -Path "${PSScriptRoot}/记录主备切换时间.txt" -Value (Get-Date) #sqlserver 主备切换 & "${PSScriptRoot}/0sqlserver_insert.ps1" -server ‘127.0.0.1‘ -username ‘aaa‘ -pass ‘12345678‘ -query "USE master ; ALTER DATABASE database_name SET PARTNER FAILOVER ;" # https://docs.microsoft.com/zh-cn/sql/database-engine/database-mirroring/manually-fail-over-a-database-mirroring-session-transact-sql?view=sql-server-2016