SQL Server Alwayson架构下 服务器 各虚拟IP漂移监控告警的功能实现 -2(虚拟IP视角)SQL Server Alwayson架构下 服务器 各虚拟IP漂移监控告警的功能实现 -1(服务器视角)SQL Server Alwayson架构

SQL Server Alwayson架构下 服务器 各虚拟IP漂移监控告警的功能实现 -2(虚拟IP视角)SQL Server Alwayson架构下 服务器 各虚拟IP漂移监控告警的功能实现 -1(服务器视角)SQL Server Alwayson架构,第1张

概述1.需求描述 我们知道Windows Cluster 都是多节点的,当虚拟IP漂移的时候,一般都是从一个节点漂移到另外一个节点。如果可以及时捕捉到旧节点信息是什么、新节点信息是什么对我们提供高可用的数 1.需求描述

我们知道windows Cluster 都是多节点的,当虚拟IP漂移的时候,一般都是从一个节点漂移到另外一个节点。如果可以及时捕捉到旧节点信息是什么、新节点信息是什么对我们提供高可用的数据库服务很重要,只有捕捉到这些信息后才可以进一步检查相应的Job、账号,甚至是调整相应的应用服务等。

2.基本原理

在上一节《SQL Server Alwayson架构服务器 各虚拟IP漂移监控告警的功能实现 -1(服务器视角)》,我们实现了针对某一个节点的监控即这个节点是否有虚拟IP新增或消减。接下来我们需要实现的是针对一个集群(或是Alwayson)漂移情况的监控,例如监控虚拟IP是从哪儿来,又要到哪儿去。这个功能的实现依赖上一节的功能和数据。

实现方式是将各个单节点的数据发送保存到一台远程服务器上,然后根据集群信息进行聚合判断就可以了。

其聚合判断功能实现:根据指定时间段内,同一个虚拟IP是否对应两个ServerIP,来判读是否发生了漂移。如果发生了漂移,进而根据相应数据的时间先后判断从哪儿来,到哪儿去。

3.代码实现

 

中央服务器中表 DBA_ServerIPDataBase_OverCheck 的创建脚本。主要存储了指定时间段内(例如 6H),各个Server节点的各种IP数据。

/****** Object:  table [dbo].[DBA_ServerIPDataBase_OverCheck]    Script Date: 2019/6/28 11:24:11 ******/SET ANSI_NulLS ONGOSET QUOTED_IDENTIFIER SET ANSI_padding CREATE table [dbo].DBA_ServerIPDataBase_OverCheck](    LocalServerIP] varchar](20) NulL,Clustername50) ServerIPServername100) ServerFullnameServerIPTypeDataBasename550) DisabledFlag1) CreateTimedatetime] CreateByModifyTimeModifyBy) ON PRIMARY]OFFEXEC sys.sp_addextendedproperty @name=N'MS_Description',@valuewindows集群名称@level0typeSCHEMA@level0name@level1typetable@level1name@level2typeColUMN@level2name'IP地址计算机对象名称计算机对象全称0实时有效,1第一次失效,2第二次失效,3第三次失效,4第四次失效,5第五次失效,彻底删除创建时间创建人GO

过渡表DBA_ServerIPDataBaseCheck_Base,存储比较的数据。

***** Object:  table [dbo].[DBA_ServerIPDataBaseCheck_Base]    Script Date: 2019/6/28 13:33:50 *****DBA_ServerIPDataBaseCheck_BaseMaxCurrDateTimeIPFailoverResultDBFailoverResult250) nvarcharGO

 

在各个DB Server上原来的存储过程  USP_DBA_ServerIPDataBase_OverCheck 的尾部,添加以下代码,实现的功能是将数据汇总到中央服务器的数据库中,用来聚合判断。

(USP_DBA_ServerIPDataBase_OverCheck的更多内容,请参照SQL Server Alwayson架构下 服务器 各虚拟IP漂移监控告警的功能实现 -1(服务器视角)

 

        -----将数据插入到远程Server DB中,用来判断漂移前/后DB是否有变化        INSERT INTO 中心服务器IP].中心数据库.dbo.](],)        SELECT ]          FROM ]

 聚合判断、发邮件的存储过程为 USP_DBA_ServerIPDataBase_OverCheck_Alarm,其具体的脚本如下:

 

GOPROCEDURE USP_DBA_ServerIPDataBase_OverCheck_Alarm]ASBEGIN  SET NOCOUNT ON         DECLARE @Localip VARCHAR(20@ip @Servername 100@ServerFullname Declare @CurrDateTime nvarchar(@PreDiffDateTime 20) =''        Set @CurrDateTimeCONVERT(19),1)">GETDATE(),120)         @MaxCurrDateTime datetime        -----删除历史数据,暂无归档        DELETE FROM DBA_ServerIPDataBase_OverCheck WHERE CreateTime<DATEADD( HH,1)">-6,1)">GETDATE()),1)">)        FROM    DBA_ServerIPDataBaseCheck_Base        ---查询出一仆二主的ServerIP        select ServerIP,1)">count(distinct LocalServerIP) As Qty' into #temp_ServerIP from ]        group by ServerIP        having distinct LocalServerIP)>1         ------查询出不同的载体        if exists(select 1 from #temp_ServerIP )        begin        --找出对应关系        select distinct a.LocalServerIP,a.ServerIP  into #temp_diffIP from DBA_ServerIPDataBase_OverCheck a inner join #temp_ServerIP b        on a.ServerIP=b.ServerIP        Declare DBname         Cursor for             Select LocalServerIP,ServerIP    #temp_diffIP        Open DBname                Fetch next from DBname INTO @Localip,1)">@ip        While (@@fetch_status=0)               Begin                  @MaxCurrDateTime= max(CreateTime)  DBA_ServerIPDataBase_OverCheck                 where LocalServerIP @Localip and ServerIP @ip                 insert into DBA_ServerIPDataBaseCheck_Base (values(@ip,1)">@MaxCurrDateTime,1)">@CurrDateTime)            fetch INTO  @ip                END            select * from DBA_ServerIPDataBase_OverCheck a              update a set a.IPFailoverResultIP 漂移进来'              DBA_ServerIPDataBaseCheck_Base a             where * from DBA_ServerIPDataBaseCheck_Base b where a.ServerIP=b.ServerIP and a.MaxCurrDateTime>b.MaxCurrDateTime)            IP 漂移出来<-------------------增加数据库            select *             set a.DataBasenameb.DataBasename            from DBA_ServerIPDataBaseCheck_Base a  DBA_ServerIPDataBase_OverCheck b            on  a.ServerIPand a.LocalServerIP  b.LocalServerIP                  and a.MaxCurrDateTime b.CreateTime            -----邮件告警               declare @sql as varchar(200)            @Subject 200)DB SERVER IP ABnorMAL,PLEASE CHECK!'            @Body nvarchar(max)''            set @Body= N<HTML>'                     + N<style type="text/CSS"> td {border:solID #9ec9ec;  border-wIDth:1px 1px 1px 1px; padding:4px 0px;} table {border:1px solID #9ec9ec;wIDth:80%;border-wIDth:0px 0px 0px 0px;Font-size:14px}</style>'                    <H1 ></H1>'             SET +<body><Font color=#0000CC>Dear All,<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;此List是监控到过去10 MIn 有DB Server IP 出现漂移情况,请及时Check。'<br>'                           &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;具体数据如下:;<br><br><table><tr bgcolor=#ffaa11 align="center"><td colspan="5">IP漂移后的宿主信息</td><td colspan="5">IP漂移前的宿主信息</td></tr><tr bgcolor=#FFFF00 align="center"><td>LocaliP</td><td>ServerIP</td><td>DataBasename</td><td>IPOverResult</td><td>CheckDateTime</td>            <td>LocaliP</td><td>ServerIP</td><td>DataBasename</td><td>IPOverResult</td><td>CheckDateTime</td></tr>'                SELECT <tr><td>+a.LocalServerIP</td><td>+a.ServerIPisnull(a.DataBasename,1)">'')+a.IPFailoverResult+ 120)</td>            <td>+b.LocalServerIP+ b.ServerIPisnull(b.DataBasename,1)">+b.IPFailoverResult</td></tr>'                from DBA_ServerIPDataBaseCheck_Base a left  DBA_ServerIPDataBaseCheck_Base b                b.ServerIP                where     a.IPFailoverResult' and b.IPFailoverResult@Body = </table><Font color=#0000CC><br><br>DBA<br>Best wishes</body><HTML>'             @BODYREPLACE(@BODY,1)">'''',1)">''IF ' <>''                BEGIN                    @AllEmailToAddress 3000)''                    @AllEmailCcAddress Select @AllEmailToAddresshanmeimei;xiaoming;lilei'                    @AllEmailCcAddresslaoban'                    exec msdb..sp_send_dbmail @profile_name =  autoMail'                profile 名称,请检查此参数,根据实际情况进行替换 ,1)">@recipIEnts   =  @AllEmailToAddress          收件人邮箱 ,1)">@copy_recipIEnts@AllEmailCcAddress@subject       邮件标题 ,1)">@body         @BODY             邮件内容 ,1)">@body_format  HTML'                       邮件格式 ,1)">@file_attachments@importance HIGH varchar(10) 告警级别                END        endEND
 4.功能实现

例如下面的告警邮件,告诉监控人员:虚拟IP(169.XXX.XXX.247) 从 Server --169.XXX.XXX.44 转移到了Server---169.XXX.XXX.43,并且包含了漂移前后Server上数据库的名字(有可能数据库多少不完全一致)。

 

 

本文版权归作者所有,未经作者同意不得转载,谢谢配合!!!

本文版权归作者所有,未经作者同意不得转载,谢谢配合!!!

本文版权归作者所有,未经作者同意不得转载,谢谢配合!!!

 

总结

以上是内存溢出为你收集整理的SQL Server Alwayson架构下 服务器 各虚拟IP漂移监控告警的功能实现 -2(虚拟IP视角) SQL Server Alwayson架构下 服务器 各虚拟IP漂移监控告警的功能实现 -1(服务器视角)SQL Server Alwayson架构下 服务器 各虚拟IP漂移监控告警的功能实现 -1(服务器视角) 全部内容,希望文章能够帮你解决SQL Server Alwayson架构下 服务器 各虚拟IP漂移监控告警的功能实现 -2(虚拟IP视角) SQL Server Alwayson架构下 服务器 各虚拟IP漂移监控告警的功能实现 -1(服务器视角)SQL Server Alwayson架构下 服务器 各虚拟IP漂移监控告警的功能实现 -1(服务器视角) 所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1151239.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存