2010-02-23 5 views
4

응용 프로그램/웹 응용 프로그램을 Failover Cluster API을 사용하여 "Cluster Aware"으로 만드는 방법에 대한 자료를 웹에서 찾았습니다. 필자는 많은 기술적 인 기사를 찾았지만 프로그래머 관점에서 작성된 것도 없다. 누군가 좋은 링크가 있거나 코드 샘플이나 프로그래머 관점에서 애플리케이션을 클러스터 인식하는 방법에 대한 다른 정보를 제게 제공 할 수 있습니까? C#을 기본 프로그래밍 언어로 사용합니다."Cluster Aware"응용 프로그램을 만드는 방법에 대한 조언/코드 샘플

클러스터는 IIS를 실행하는 두 개의 노드 (Windows 2003 Server)가 포함 된 활성/수동 클러스터입니다.

아무 것도 발견하지 못했기 때문에 나는 무엇인가 놓치고 있다고 의심합니다!

브롬

Ausgar에게

+0

클러스터 인식이란 무엇을 의미합니까? 당신은 그 인식에 대해 무엇을 시도합니까? –

답변

1

이 주변에 운이 있었나요?

동일한 정보를 추적하고 있습니까?

응용 프로그램에 SQL 클러스터에 상주하는 데이터베이스가있는 시나리오에서. 클러스터가 장애 조치를 수행하면 SQL 연결 풀이 잘못되어 손상됩니다. 예외 풀이없이 연결 풀을 플러시하고 다시 만들어야합니다.

코드 포인트에서 먼저해야합니다.

  1. 연결 풀에 SQL 쿼리를 제출하십시오.
  2. 유효하지 않은 SQL 연결 풀을 사용하여 예외를 캡처하십시오.
  3. 풀에 연결 avail이 없어 질 때까지 연결 풀을 플러시하거나 모든 연결을 반복합니다.
  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

이것은 클러스터 데이터베이스에 연결하는 방법을 보여줍니다. 나는 이것이 큰 문제라고 생각하지 않는다. 이것은 매우 간단합니다. –

관련 문제