2010-02-23 59 views
4

我瀏覽了網絡上關於如何使用Failover Cluster API製作應用程序/ Web應用程序「Cluster Aware」的資源。我發現了很多技術文章,但沒有從程序員的角度寫的。是否有人有任何良好的鏈接,或者可以向我提供代碼示例或其他關於如何從程序員角度製作應用程序集羣意識的輸入?我們使用C#作爲我們的主要編程語言。關於如何製作應用程序的建議/代碼示例「Cluster Aware」

羣集是一個主動/被動羣集,其中包含兩個運行IIS的節點(Windows 2003 Server)。

由於我沒有發現任何東西,我懷疑我錯過了什麼!

Ausgar

+0

你是什麼意思羣集意識?你有什麼意圖做什麼? – 2010-09-08 14:53:08

回答

1

你有解決這個任何運氣?

我在追蹤相同的信息嗎?

在應用程序具有駐留在SQL羣集上的數據庫的情況下。當羣集執行故障切換時,SQL連接池變得無效並損壞。連接池需要刷新並重新創建,而不會出現異常。

從代碼的角度來看,您首先需要。

  1. 向連接池提交SQL查詢。
  2. 捕獲使用無效SQL連接池的異常。
  3. 刷新連接池或迭代所有連接,直到池無連接可用。
  4. 重新創建一個新的連接池。
  5. 重新提交SQL查詢。

我的問題是,我是一名基礎架構架構師,在最好的時候我的編碼技能很弱。

0

一直在玩,並在同事的幫助下拿出以下爲例。

static void Main(string[] args) 
    { 
     Boolean PrevSqlError = false; 
     Boolean NewSqlPool = false; 
     String ConStr = "Data Source=SQL-CLUSTER1;Initial Catalog=Example;Integrated Security=True;Connection Timeout=60;Min pool size=5"; 
     Console.WriteLine("Press any key to read from database"); 
     Console.ReadKey(); 
     while (true) 
     { 
      try 
      { 
       Console.WriteLine("Attempting to connect"); 

       using (var context1 = new ExampleDataContext()) 
       { 
        var customers1 = context1.Customers.ToList(); 
        var connection1 = new SqlConnection(ConStr); 
        connection1.Open(); 
        PrintCustomers(customers1); 
        connection1.Close(); 
       } 
       PrevSqlError = false; 
       NewSqlPool = false; 
       Console.WriteLine("Sleeping 3s"); 
       Thread.Sleep(3000); 
      } 
      catch (SqlException sqlException) 
      { 
       var SqlError = sqlException.Number; 
       Console.WriteLine("Error connecting to SQL : " + SqlError+" : "+sqlException.Message); 
       if (NewSqlPool == true) 
       { 
        Console.WriteLine("Error in New Connection Pool. Exiting!"); 
        Thread.Sleep(10000); 
        return; 
       } 
       if (PrevSqlError == true) 
       { 
        if (SqlError == 10054 || SqlError == 232 || SqlError == 233 || SqlError == 64 || SqlError == 4060) 
        { 
         Console.WriteLine("SQL Cluster Failing Over. Waiting 5s"); 
         SqlConnection.ClearAllPools(); 
         PrevSqlError = false; 
         NewSqlPool = true; 
         Thread.Sleep(5000); 
        } 
        else 
        { 
         Console.WriteLine("Fatal SQL Exception. Exiting!"); 
         Thread.Sleep(10000); 
         return; 
        } 
       } 
       else 
       { 
       Console.WriteLine("SQL Error, Retrying in 3s"); 
       PrevSqlError = true; 
       Thread.Sleep(3000); 
       } 
      } 
     } 
    } 

    private static void PrintCustomers(List<Customer> customers) 
    { 
     foreach (var item in customers) 
     { 
      Console.WriteLine(string.Format("{0} - {1}", item.Id, item.Name)); 
     } 
    } 
+0

這只是顯示如何連接到羣集數據庫。我不認爲這是一件大事。這很簡單。 – 2011-06-15 13:47:23

相關問題