准备资料
1、三台服务器,其中两台服务器(192.168.0.27、192.168.0.28)在IIS部署WCF服务,一台服务器(192.168.0.30)安装nginx;
2、http://nginx.org/en/download.html下载nginx;
3、所有的客户端Client的Hosts文件中增加映射:192.168.0.30 cluster.com.
安装配置nginx
把下载的nginx压缩包放在30服务器,然后解压,双击nginx.exe即可安装,安装完成后,打开conf文件夹里面的nginx配置文件,加入内容,如图:
192.168.0.28:9100和192.168.0.27是WCF的部署地址,要带上端口号,默认80则不用。
至此nginx安装配置完成。
项目开发
做一个简单的实验,只要两个项目就好了,一个WCF服务,一个Console客户端,项目图如下:
其中NginxWcfService就只有一个服务Service1,我们改造一下默认的GetData方法:
public string GetData(int value) { string ip = ""; System.Net.IPAddress[] address = System.Net.Dns.GetHostAddresses(System.Net.Dns.GetHostName()); if (address != null) { foreach (var item in address) { if (item.AddressFamily.Equals(AddressFamily.InterNetwork)) { ip = item.ToString(); break; } } } return string.Format("You entered: {0},当前 request 由 server={1} 返回.", value, ip); }
就是返回当前服务器的IP地址。
然后编译发布到27、28两台服务器,地址分别是http://192.168.0.27/NginxWcfService/Service1.svc和http://192.168.0.28:9100/NginxWcfService/Service1.svc。
客户端项目NginxConsole,添加服务引用http://cluster.com/NginxWcfService/Service1.svc,然后多次调用服务,即可看到效果,代码如下:
static void Main(string[] args) { for (int i = 0; i < 100; i++) { ServiceReference1.Service1Client client = new ServiceReference1.Service1Client(); var data = client.GetData(i); Console.WriteLine(data); System.Threading.Thread.Sleep(1000); } Console.Read(); }
效果如图:
这就是最简单的负载均衡,一个nginx就可以搞定了。