LVS中Windows作为真实主机(RealServer)时的设置方法
最近,公司新推了一个电商项目,IIS+ASP。而上面大大规划了要用 LVS 负载均衡集群,在这个技术陈旧的企业,LVS 项目还是去年才真正推行。由于最开始是由我测试的,所以这次的部署又落到了我头上了。 之前一直是在 RHEL 上做的 LVS+Keepalived,现在换成 Windows 主机,虽然在集群架构上的理解没啥问题,但是这 Win 主机做 RealServer 具体该如何设置还真没弄过。不过,万能的搜索引擎很快就帮我解决了,现在记录下,以便查询翻阅!
一、在 Win 主机上新增环回虚拟网卡(Microsoft Loopback Adapter)
以管理员身份运行 cmd 后,在 cmd 命令窗口中执行:hdwwiz,弹出如下界面:
下一步后,勾选手动选择:
点选网络适配器,继续下一步:
左侧选择 Microsoft,右侧找到如图硬件(Windows Server 2008/7 中则叫:Microsoft Loopback Adapter)
点击下一步开始安装,直至完成,则成功添加了环回虚拟网卡。 成功安装该适配器后,与其他任何适配器一样,您可以手动配置其选项。如果 TCP/IP 属性配置为使用 DHCP,则该适配器最终将使用一个 autonet 地址 (169.254.x.x/16),因为该适配器并没有与任何物理媒体实际相连接。 注意:默认情况下,TCP/IP 属性配置为使用 DHCP。
二、设置环回网卡 TCP/IP 信息
打开 Windows 7/8/Server 2008 的网络和共享中心,左侧点开“更改适配器设置”,找到新增的环回连接,重命名为 realserver(推荐重命名)。 右键 realserver 连接属性,开始设置 TCP/IP:
和 Linux 中的 lo:0 一个样,将 IP 地址设置为 VIP,将掩码设置为 255.255.255.255,其余留空即可。 Ps:看网上教程,都有提到如下问题,(虽然这些老家伙基本都不用了,但还是记录下吧):
子网掩码 255.255.255.255 但在 MS NT/2K/XP 会被认为是无效的。 可以有以下解决方法: 在 MS NT/2K/XP 中,网络界面(interfaces)在 HKEY_LOCAL_MACHINESystemCurrentControlSetServicesTcpipParametersInterfaces 找到适当的网络连接 IP 地址,修改 subnetMask 子网掩码,(注意修改方式)不需要重启,只需重新激活该网络连接即可。
三、修改客户端网卡接口、环回接口连接模式
将以下代码保存为 bat 执行,或直接在 CMD 中依次执行 2~5 行命令即可(双引号中需根据实际连线名称修改)
@echo off
netsh interface ipv4 set interface "realserver" weakhostreceive=enabled
netsh interface ipv4 set interface "realserver" weakhostsend=enabled
netsh interface ipv4 set interface "本地连线" weakhostreceive=enabled
netsh interface ipv4 set interface "本地连线" weakhostsend=enabled
pause
上面的四条命令一定要输入,因为 windows 2008 的默认中,网卡的 stronghost 处于启用状态,这个设置可以防止跨接口转发数据包,这就表明:来自一个网络适配器的请求不会被环回适配器处理,因为这个请求来自于不同的网络适配器。为了将环回适配器从 stronghost 切换为 weakhost,需要运行以上四条命令,要不然 TCP 的状态会一直处于 SYN_RECV 状态。
哦了,做完以上步骤之后,就可以启动 keepalived 测试效果了!关于 LVS+keepalived 的其他问题可以参考张戈博客的老文章:LVS+Keepalived 负载均衡主备&双主架构全攻略,有任何其他问题也可以给我留言。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- laravel框架select2多选插件初始化默认选中项操作示例
- PHP pthreads v3在centos7平台下的安装与配置操作方法
- laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
- PHP Beanstalkd消息队列的安装与使用方法实例详解
- 解决windows上php xdebug 无法调试的问题
- php7 图形用户界面GUI 开发示例
- Django开发的简易留言板案例详解
- php使用redis的有序集合zset实现延迟队列应用示例
- PHP使用openssl扩展实现加解密方法示例
- php使用redis的几种常见操作方式和用法示例
- 使用memory_profiler监测python代码运行时内存消耗方法
- php 多进程编程父进程的阻塞与非阻塞实例分析
- php数组指针函数功能及用法示例
- thinkphp5框架路由原理与用法详解
- ThinkPHP5&5.1实现验证码的生成、使用及点击刷新功能示例