我正在使用asp.net 3.5和SQL Server 2008,并希望build立一个非常简单的networking农场。
我已经购买了2个VIRTUAL服务器,我不使用视图状态或会话在我的网页,只是cookies,所以我需要做的是有2个版本的相同的数据库,在每个虚拟服务器(我假设)和2个版本的二进制文件/每个服务器上的网页(我假设)。 我需要的是一些指导来设置这些,以便当用户提出请求时:
a)服务器负载平衡,请求发送到负载最小的服务器b)每当SQL数据库发生更改时,它也反映在另一个数据库中
这听起来可能吗?
回答你的问题是的,这听起来不仅可能,而且可能。
首先,我猜你购买了2个虚拟服务器,这些来自一些托pipe公司? OK让我们假设这是真的,如果你仅仅限于这两个,那么你真的会更好地使用一个作为数据库服务器,一个作为Web服务器。 如果你认为你将有足够的stream量需要两个Web服务器,然后得到第三台服务器,并运行它作为您的数据库服务器。 如果你得到两个Web服务器,是的,你需要在两个服务器上的代码。
如果您确实需要两台Web服务器和两台数据库服务器,并且仅购买两台服务器,则无法在同一数据库上以主动激活模式运行它们。 更新只能发送给一个主机,然后复制可以将这些更改传播给从机。
简单的负载平衡方法是做循环DNS,这是简单的,快速的,不是很难设置,并做一个分散负载的工作。 根据你的问题,我正在假设你的技能水平,并以此为出发点。
这真的只是表面上,如果你认真对待这个网站,并诚实地相信它将有足够的stream量要求负载平衡的configuration,请find谁知道系统方面的事情来帮助你。
从数据库的angular度来看,你所描述的是一个“主 – 主”复制scheme( 参见这里的一些注释,这可能意味着你需要SQL企业版(每个服务器一个许可证),这是不便宜的 – 你不能用Express Edition做这个,也可能不用Standard,你可以尝试在你的应用程序逻辑中实现这个function,但是这可能是一个复杂的蠕虫病毒,如果两个服务器在同一个vlan中DC,那么当两个服务器需要写入任何内容时,可以让这两个服务器访问同一主数据库,然后从各自的数据库读取只读请求 – 这可以与主从复制一起使用,这是比较容易的(并且可能更便宜)前景从本质上讲:将SQL数据库耕种到许多机器比耕种访问数据库的Web服务器要困难得多。
将请求传递给两个不同的Web服务器的最简单的方法(如果在情况中描述了所有HTTP(S)请求都带有所需要的所有状态,而不是某些被保存在服务器端“会话”中,不需要类似“粘性会话”的任何东西)就是使用循环法的DNS,具有多个相关名称的Alogging。 看到这里 。 这并不能解释其中一个服务器正在closures,所以这不是一个高可用性的解决scheme,而且您对平衡的控制也很less(您无法确定哪台机器能够获得命中,因此您可以在一台服务器上减less命中已经很忙了)。 对于高可用性和受控平衡,您需要一台额外的机器来处理所有请求,并决定哪台真实的networking服务器受到攻击。
将应用程序扩展到多个服务器(性能,高可用性,地理位置或上述某种组合) 并不像看起来那么简单。
为什么你需要2份数据库? 你要托pipe什么样的应用程序? 数据库接近实时同步是否足够好?
为什么不把两台Web服务器指向一台数据库服务器呢? 按照你所描述的方式扩展SQL服务器是不能掉以轻心,这绝对不会被认为是一个快速和简单的设置!