笔者以企业网中的Web服务器为例来介绍一下如何使用DNS服务器实现网络负载均衡。为了提高域名为“www.rtj.net”的网站的访问量,在企业网中部署三台内容相同的Web服务器,它们提供相同的服务,但每台服务器的IP地址都不一样。下面对企业网中的DNS服务器进行设置来实现三台Web服务器共同承担客户对网站的访问。
一、启用循环
以Windows Server 2003系统为例,在DNS服务器中,依次点击“开始→程序→管理工具→DNS”选项,进入DNS管理器窗口,鼠标右键点击DNS服务器图标,在d出的快捷菜单中选择“属性”选项,接着在属性对话框中切换到“高级”选项卡(图1),确保“服务器选项”列表框中的“启用循环”选项处于选中状态。
二、添加主机记录
在“rtj.net”区域中创建主机记录。在DNS管理器窗口中,右键点击“rtj.net”项,在d出的菜单中选择“新建主机”,进入新建主机对话框,在“名称”栏中输入“WWW”,IP地址栏中输入其中一台Web服务器的IP地址,如192.168.0.5,最后点击“添加主机”按钮。
因为企业网中有三台Web服务器,并且它们的IP地址都不同,因此另外还要新建两条主机名为“WWW”的主机记录,方法和上面一样,仅仅是它们的IP地址内容不同。这样就能将网站域名分别解析到不同的Web服务器上。
ASP NET站点中做负载均衡
基于HTTP协议我们可能发现我们要解决两点问题
第一 做到负载均衡 我们需要一个负载均衡器
可以通过DNS轮询来做 在DNS服务器上配置为每次对我们做负载均衡的同一主机名的DNS查询得到不同的IP地址 这样的好处是配置简单投入较小 缺点是浏览器访问各个服务器的机会是均等的 不能根据服务器的负载程度自动把请求路由到负载较小的服务器
可以通过专用的负载均衡设备 通过监测后台数台服务器的负载情况 自动把HTTP请求转发到负载较轻的服务器 另外必须监测后台服务器的IIS负载情况 而不是整台服务器的CPU负载 同时可能需要在负载均衡器和后台服务应用之间建立心跳连接 以避免出现某台服务器IIS进程或者其中跑的应用已经down掉 负载均衡器反而监测到这台服务器的负载最小而把大量请求转发的这台服务器 达到相反的效果
第二 Session状态的保持和迁移
由于HTTP协议的无状态性 我们一般是在Session中保存客户端的一些状态数据 负载均衡之后 前后两次HTTP请求所到达的服务器可能不是同一台 这就造成可能出现这样的情况 前一此请求处理中设置的session在第二次请求中变得不可用了 造成应用程序出错 所以我们要把session跟随迁移 实现的方法就是session的统一存储和服务器间共享
在ASP NET中服务器保存session有五种方式 Off不说了 InProc是保存在服务器进程的内存中 显然不能满足要求 另外两种能够满足
StateServer是把session保存在专门的状态服务器中 这样各台服务器都存取同一个StateServer 达到共享的目的
SQLServer是把session保存在数据库中 同样能达到目的
Custom自定制的存储方案 我们自己写当然能够实现
比较一下 Custom这种自己实现比较麻烦一般不用 SQLServer可以利用数据库的cluster达到高性能和高可用性的目的 StateServer当然也可以通过手段达到高可用性 不过似乎不能实现集群所以性能也有所限制
另外如果要做负载均衡在StateServer和SQLServer中配置session时 必须在nfig中重写machineKey节点
<machineKey
validationKey= AAAAAAAAAA
decryptionKey=
validation= SHA
decryption= Auto
/>
否则各个应用服务器拿到的session还是不一样的
lishixinzhi/Article/program/net/201311/12775这篇实用文章介绍如何将pfSense 2.0配置成你那些Web服务器的负载均衡器。这篇实用文章假设你已经安装了一个pfSense设备和至少两台Apache服务器,并且运行在你的网络上;还假设你具备了pfSense方面的一些知识。
要求
一台设备用于安装pfSense 2.0(如果这是你的边缘防火墙,我会建议物理机器)。
至少两台Apache2服务器(这些可以是虚拟服务器)。
对Apache服务器进行了配置,以便以某种方式同步Web文件(rsync/corosync或通过Web服务器维持文件版本最新的另一个选项)。
配置pfSense
pfSense使用负载均衡器,将某些类型的流量带来的负载分摊到多台服务器上;如果你有多台服务器用于托管运行应用程序,这很好;你可以将负载分摊到所有服务器上,而不是把负载全扔给一台服务器、导致不堪重负。
可以入手了,先点击“Services”(服务),然后点击“Load Balancers”(负载均衡器),然后点击“Monitor”(监视器)选项卡。
要添加一个新条目,点击“Plus”(添加)按钮,指定“Name”(名称)和“Description”(描述,在这个示例中,我会使用ApacheClusterMon作为名称和描述),将类型设成“HTTP”,然后为“Host”(主机)设置一个未使用的IP地址(我们随后会创建虚拟服务器的IP,以便分配给故障切换服务器组),任由“HTTP Code”(HTTP代码)设成“200 OK”。需要的话,然后点击“Save”(保存),使更改生效。
现在我们要创建服务器池。点击“Pools”(服务器池)选项卡,点击“Plus”(添加)按钮,即可添加新的服务器池。
指定一个名称(ApacheSrvPool将用在我的示例中)。将“Mode”(模式)设成“Load Balance”(负载均衡),然后将“Port”(端口)设成“80”(你可以让pfSense对其他端口上的其他应用程序实现负载均衡),将“Monitor”(监视器)设成你之前创建的监视器配置,并且指定你希望在服务器池中的所有Web服务器的IP地址,需要的话,点击“Save”(保存),使更改生效。
接下来点击“Virtual Servers”(虚拟服务器)选项卡,点击“Plus”(添加)按钮,添加一个新条目。指定“Name”(名称)和“Description”(描述),然后用你之前选择的未使用IP地址来设置“IP Address”(IP地址),将“Port”(端口)设成“80”,然后将“Virtual Server Pool”(虚拟服务器池)设成你之前创建的服务器池,点击“Submit”(提交),使更改生效。
就这样,你刚配置好了pfSense,对你的Web服务器之间的网络流量实现负载均衡。
顺便提一下,如果任何一台服务器没有给出200 OK状态这样的回应(pfSense定期向你的Web服务器发送请求,以确定它们是否正常运行),服务器池就会处于离线停运状态。要避免出现停运,最好的办法就是配置故障切换系统(下一篇文章会有介绍)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)