关于如何制作应用程序的建议/代码示例“Cluster Aware”
问题描述:
我浏览了网络上关于如何使用Failover Cluster API制作应用程序/ Web应用程序“Cluster Aware”的资源。我发现了很多技术文章,但没有从程序员的角度写的。是否有人有任何良好的链接,或者可以向我提供代码示例或其他关于如何从程序员角度制作应用程序集群意识的输入?我们使用C#作为我们的主要编程语言。关于如何制作应用程序的建议/代码示例“Cluster Aware”
群集是一个主动/被动群集,其中包含两个运行IIS的节点(Windows 2003 Server)。
由于我没有发现任何东西,我怀疑我错过了什么!
溴
Ausgar
答
你有解决这个任何运气?
我在追踪相同的信息吗?
在应用程序具有驻留在SQL群集上的数据库的情况下。当群集执行故障切换时,SQL连接池变得无效并损坏。连接池需要刷新并重新创建,而不会出现异常。
从代码的角度来看,您首先需要。
- 向连接池提交SQL查询。
- 捕获使用无效SQL连接池的异常。
- 刷新连接池或迭代所有连接,直到池无连接可用。
- 重新创建一个新的连接池。
- 重新提交SQL查询。
我的问题是,我是一名基础架构架构师,在最好的时候我的编码技能很弱。
答
一直在玩,并在同事的帮助下拿出以下为例。
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
你是什么意思群集意识?你有什么意图做什么? – 2010-09-08 14:53:08