首先不要问我为什么不去直接用Nginx+keepalive, 而在这里费劲巴拉的配置Windows 下HA环境, 而且还是tomcat 和 sqlserver。
概述:IIS的负载均衡中我们用到了微软的ARR(Application Request Route), 在此基数之上我们再借助NLB服务就可以实现Windows高可用类似linux 中的Nginx + Keepalive实现的功能;ARR算是应用级别的负载均衡方案,而NLB则是服务器级别的负载均衡方案
软件:IIS 10 + tomcat8 + java8 + ARR
环境:两个tomcat应用节点+两个NLB(NLB+IIS在一台机器上)节点
描述 | 软件 | IP |
---|---|---|
NLB节点1 | windows server 2019 + IIS 10+ARR | 192.168.1.12 |
NLB节点2 | windows server 2019 + IIS 10+ARR | 192.168.1.13 |
tomcat应用节点1 | windows server 2019 + tomcat 8.5 + java 8 | 192.168.1.16 |
tomcat应用节点2 | windows server 2019 + tomcat 8.5 + java 8 | 192.168.1.17 |
NLB集群虚拟IP | 192.168.1.101 |
以上节点均已加入域nginx.com, 如何加入域:
杜隆坦:windows server 2019加域zhuanlan.zhihu.com一,安装&配置NLB
1,安装NLB服务(NLB节点1, NLB节点2都需要安装)
下面第一框里面要是你还没安装NLB则只是会看到一行就是本机的name 和 IP, 我这里是因为我先安装了然后来做截图;所以你会看到两行
这里同样, 我是事后截图; 所以你会看到(installed); 你首次安装需要勾选这个
2,配置NLB(NLB节点1)
下面我们创建集群的虚拟IP: 192.168.1.101
单播
在单播模式下,NLB重新对每个NLB节点中启用NLB的网络适配器分配MAC地址(此MAC地址称为群集MAC地址),并且所有的NLB节点均使用相同的MAC地址(均使用群集MAC地址),同时NLB修改所有发送的数据包中的源MAC地址,从而使交换机不能将此群集MAC地址绑定在某个端口上。 工作在单播模式下的NLB可以在所有网络环境下正常运行,但是由于它的工作特性,具有以下两个限制: 由于NLB所使用的群集MAC地址没有绑定在某个具体的交换机端口上,所以所有的NLB通讯均通过在交换机的所有端口上广播进行,而不管此端口是否连接了NLB节点,这造成了额外的网络流量负担; 由于所有的NLB节点具有相同的MAC地址,NLB节点之间不能通过自己原有的专用IP地址进行通讯。若我们在NLB创建时选择单播的模式,在“群集IP配置”中的“网络地址”是以“02 - BF”开头,后面紧跟IP地址的十六进制表示,该网络地址与实际主机的MAC地址相同,后续加入的主机也将修改为此MAC地址。
多播
在多播模式下,NLB不会修改NLB节点启用NLB的网络适配器的MAC地址,而是为它再分配一个二层多播MAC地址专用于NLB的通讯(此MAC地址称为群集MAC地址),这样NLB节点之间可以通过自己原有的专用IP地址进行通讯。但是在多播模式中,NLB节点发送的针对群集IP地址MAC地址ARP请求的ARP回复会将群集IP地址映射到多播MAC地址,而许多路由器或者交换机(包括CISCO的产品)会拒绝这一行为。当出现这种情况时,你必须在路由器和交换机上手动添加静态映射,将群集IP地址映射到群集的多播MAC地址。 Windows Server 2003提供了一个新的特性,称为IGMP 多播,它可以通过使用IGMP协议支持来使交换机只将NLB通讯发送到连接NLB节点的端口,而不是所有交换机端口。但是此特性必须要求交换机支持IGMP侦听,并且要求群集工作在多播模式下。若我们在NLB创建时选择多播的模式,在“群集IP配置”中的“网络地址”是以“03 -BF”开头,后面紧跟IP地址的十六进制表示。在IGMP多播模式下,将采用“01 – 00 - 5E”开头的MAC地址。在多播的模式下,实体主机之间可以互相通信。
如何选择
一般来说,在NLB的创建时,单网卡多播,双网卡单播。双网卡单播时,因为主机之间不能互相通信,将设置内网通讯的网卡,也就是群集设置中的心跳。在微软 官方推荐在NLB设置时,首先考虑单播模式,除非单播不能满足其要求,若要解决流量扩展的方法,推荐使用VLAN。
所以我们这里选择多播, 因为是虚拟机行单个网卡
这里我们只要集群的80端口开放, 当让你可以根据你的需要配置
增加NLB的第二个节点
不出意外你就会看下面的页面, 说明创建成功!
二,安装&配置IIS
1,安装IIS(NLB节点1, NLB节点2都需要安装)
继续下一步
这个可以根据需要勾选, 我这里默认
2,安装ARR(NLB节点1, NLB节点2都需要安装)
下载地址:
Application Request Routingwww.iis.net3,配置IIS(NLB节点1)
下面打勾
通过下面的框把tomcat的两个节点添加进去
分别点击Hide advanced setttings...然后修改htttport 为8080; 让然你可以修改成tomcat节点上的tomcat的端口; 因为我用了默认8080端口
注意:下面这个很关键, 因为通过这个心跳检测tomcat节点上的tomcat应用是否可用
三, 安装java && tomcat(tomcat应用节点1 和 tomcat应用节点2)
1, 下载和安装java8
Java架构成长之路:Java基础篇——环境配置zhuanlan.zhihu.com2,下载和安装tomcat
下载tomcat地址:
https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.60/bin/apache-tomcat-8.5.60.exemirrors.tuna.tsinghua.edu.cn安装就不截图了, 一直下一步就行了(前提是配置好java环境)
然后各自都启动好tomcat
四,测试NLB集群
浏览器输入: http://192.168.1.101/ 看到tomcat的界面说明成功
参考连接:
Achieving High Availability and Scalability - ARR and NLBdocs.microsoft.com