none
数据库镜像如何视实现自动故障转移 RRS feed

  • 问题

  • 我的问题:注册表中明明指定了服务器名字(也就是主服务器名字),当主服务器宕机后,我的应用系统应该还是根据注册表中的服务器名字寻找主服务器,那应用系统肯定无法访问,为什么实际情况不是这样呢?原理如何?在数据库中我该如何验证这个过程呢?如下为我的环境:

    我的环境:高可用的数据库镜像(见证服务器),主服务器、镜像服务器、见证服务器主机名不同

    我的应用系统:应用系统所在服务器的注册表信息如下,【servername】是主服务器的名字,应用系统通过注册表的这些键值连接数据库。

     

    "ServerName"="MS-chen"                          

    "DBName"="dotnetp25"      

    "SaPassword"="6.707"          

    "ServerProt"="1433"           

    "IsRead"="1"

    "UserName"="sa"       

    "IsConnectSl"="0"

     

    • 已编辑 i6first 2012年10月23日 11:37
    2012年10月23日 11:33

答案

  • 网站是你做的吗?

    一般在配置文件里写上连接字符串,然后程序读取连接串,我解释一下这个连接字符串吧

    Data Source=myServerAddress;Failover Partner=myMirrorServerAddress;
    Initial Catalog=myDataBase;Integrated Security=True;

    Data Source:主库的计算机名或ip地址

    Failover Partner:备库的计算机名或ip地址
    Initial Catalog:你的数据库名

    Integrated Security:使用集成身份验证即Windows验证

    我以C#为例子:

    //从配置文件读取连接字符串
    private readonly string connectionString = ForumConfig.ReadConfigInfo().DataBase; 
    SqlConnection myConnection = new SqlConnection(connectionString);

    连接字符串:

    Data Source=192.168.1.6;Failover Partner=192.168.1.7;
    Initial Catalog=gposdb;Integrated Security=True;

    当主库没有宕机的时候,程序会访问主库,当主库宕机的时候,程序会自动访问备库,你的程序什么都不用修改,你也不用做什么操作,都是ADO.NET自动帮你切换了

    另外"IsConnectSl"="0"是什么作用呢

    这个参数是LZ你自己写的,你自己都不知道吗?


    给我写信: QQ我:点击这里给我发消息

    • 已标记为答案 i6first 2012年10月29日 1:00
    2012年10月24日 1:48

全部回复

  • 在DB Connection中使用 Failover_Partner属性可以实现自动切换。 

    http://msdn.microsoft.com/zh-cn/library/ms131373(v=SQL.90).aspx

    2012年10月23日 12:29
  • Only .net version 2 and above support failover partner.
    2012年10月23日 13:24
  • 你在SSMS里访问备库成功吗当主库不能访问的时候,如果SQLSERVER都没有自动切换,你的程序怎麽切换呢?


    给我写信: QQ我:点击这里给我发消息

    2012年10月23日 14:55
  • What do you mean 'sqlserver auto switch'? SSMS doesn't do that.
    2012年10月23日 14:58
  • 是数据库自动切换,然后用SSMS去查看有没有切换成功

    给我写信: QQ我:点击这里给我发消息

    2012年10月23日 15:08
  • 不明白LZ为什麽使用注册表,使用注册表怎麽让应用系统自动切换

    一般都是在程序里使用连接字符串,而不是在注册表里写死代码

    Data Source=myServerAddress;Failover Partner=myMirrorServerAddress;
    Initial Catalog=myDataBase;Integrated Security=True;

    我估计LZ用ADO.NET连接数据库,然后判断是否可以访问,如果不能访问就在配置文件里读取备库的IP地址或计算机名,但是

    sql2005的连接字符串里已经帮你实现了自动切换

    我是根据LZ的注册表的其中一个参数来判断LZ的想法的:

    "IsConnectSl"="0"


    给我写信: QQ我:点击这里给我发消息


    2012年10月23日 15:12
  • 应用系统的程序是通过注册表来寻找数据库的,我对编程不是很熟悉,

    但可以肯定的是,在程序的配置文件里面没有配置备库的IP或者计算机名字,

    在实践中我确实实现了自动故障转移。

    我是新手,我想了解这个过程,需要指引呀。

    PS:我的应用系统就是一个网站,通过IIS实现的。


    另外"IsConnectSl"="0"是什么作用呢
    • 已编辑 i6first 2012年10月24日 1:25
    2012年10月24日 1:23
  • 网站是你做的吗?

    一般在配置文件里写上连接字符串,然后程序读取连接串,我解释一下这个连接字符串吧

    Data Source=myServerAddress;Failover Partner=myMirrorServerAddress;
    Initial Catalog=myDataBase;Integrated Security=True;

    Data Source:主库的计算机名或ip地址

    Failover Partner:备库的计算机名或ip地址
    Initial Catalog:你的数据库名

    Integrated Security:使用集成身份验证即Windows验证

    我以C#为例子:

    //从配置文件读取连接字符串
    private readonly string connectionString = ForumConfig.ReadConfigInfo().DataBase; 
    SqlConnection myConnection = new SqlConnection(connectionString);

    连接字符串:

    Data Source=192.168.1.6;Failover Partner=192.168.1.7;
    Initial Catalog=gposdb;Integrated Security=True;

    当主库没有宕机的时候,程序会访问主库,当主库宕机的时候,程序会自动访问备库,你的程序什么都不用修改,你也不用做什么操作,都是ADO.NET自动帮你切换了

    另外"IsConnectSl"="0"是什么作用呢

    这个参数是LZ你自己写的,你自己都不知道吗?


    给我写信: QQ我:点击这里给我发消息

    • 已标记为答案 i6first 2012年10月29日 1:00
    2012年10月24日 1:48
  • 应用系统的程序是通过注册表来寻找数据库的,我对编程不是很熟悉,

    但可以肯定的是,在程序的配置文件里面没有配置备库的IP或者计算机名字,

    在实践中我确实实现了自动故障转移。

    我是新手,我想了解这个过程,需要指引呀。

    PS:我的应用系统就是一个网站,通过IIS实现的。


    另外"IsConnectSl"="0"是什么作用呢
    You should check with app developer for this.
    2012年10月24日 2:11
  • 桦仔:

         你好!

         我只是在部署的时候遇到的这个问题,我不会编写程序,这个都是按照别人的配置文档配置。

         按照你的说法,如果要实现对用户的透明故障转移,那么应用程序一定要配置,数据库只能实现数据的可用,是吗?



    2012年10月26日 1:01
  • That's correct, app has to support mirror switch by reconnecting to new principal automatically.
    2012年10月26日 13:06
  • 是啊,数据库搭建好数据库镜像环境,应用程序也要配置好,那么故障转移就是透明的

    给我写信: QQ我:点击这里给我发消息

    2012年10月27日 7:48