博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LVS DR 下 tomcat 扩容问题
阅读量:5953 次
发布时间:2019-06-19

本文共 2400 字,大约阅读时间需要 8 分钟。

  hot3.png

背景

    采购了大配置物理机,希望通过 LVS DR 模式负载 tomcat,但是发现 tomcat 实例数受限于物理机的个数,无法利用空闲的物理机资源扩容,也就是一台物理机只能有一个 tomcat 属于同一个 LVS 集群。

    LVS DR 模式下,集群内的一个 RS 主机只能跑一个 tomcat ,无法通过新增 IP 扩容。首先 DR 模式要求前后端口一致,因此只能通过 IP 来区分服务了,但是新增 IP 又必须同时监听 VIP,而一个 RS 主机只能有1个 VIP,这必须导致新增的 tomcat 监听 VIP 冲突,因此一个 LVS 集群内的一台 RS 主机上只能跑一个 tomcat。

Clinet 和 RS 的通信

client 发起请求

[root@payun ~]# telnet 192.30.20.4 80Trying 192.30.20.4...Connected to 192.30.20.4.Escape character is '^]'.

在 RS 上观察

    可以在 RS 上观察到,Client 和 RS 上的 VIP 建立了连接,从这里了能说明一个 LVS 集群的 RS 上只能运行 1 个 tomcat。

[root@payun ~]# netstat -anp|grep 59|grep 80tcp        0      0 ::ffff:192.30.20.4:80       ::ffff:192.30.17.59:56147   ESTABLISHED 4029/httpd                           [root@payun ~]#

验证

     如下是我用 httpd 做的验证。

httpd 只监听 VIP

    只监听VIP,健康检查失败,无法转发请求到 RealServer。

# 192.30.20.15 的 /etc/httpd/conf/httpd.conf 修改配置为监听 VIPListen 192.30.20.4:80# 192.30.20.15 restart服务service httpd restart# 192.30.20.11 keepalived 健康检查发现 192.30.20.15 服务 down 掉[root@payun ~]# ipvsadm -lnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags  -> RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  192.30.20.4:80 rr persistent 7200  -> 192.30.20.16:80              Route   3      0          0         [root@payun ~]#

httpd 只监听主机 IP

    只监听主机 IP,健康检查正常,RealServer 无法接收到包。

    因为 DR 模式下 LVS 是通过 MAC 地址将包转发给 RealServer 的,不修改 IP 和 端口信息,包的目标 IP 还是 VIP,所以 RealServer 必须有 socket 监听 VIP 的端口,否则 Linux 内核会把包 drop 掉

# 192.30.20.15 的/etc/httpd/conf/httpd.conf 修改配置为监听主机 IPListen 192.30.20.15:80# 192.30.20.15 restart服务service httpd restart# 192.30.20.11 keepalived 健康检查正常[root@payun ~]# ipvsadm -lnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags  -> RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  192.30.20.4:80 rr persistent 7200  -> 192.30.20.15:80              Route   3      0          0           -> 192.30.20.16:80              Route   3      0          0         [root@payun ~]## Client 请求可以被转发,但是 RealServer 无法处理,如下在 192.30.20.13 上执行,因为请求转发到 RealServer 后,Linux 内核会将包送到应用的 socket 沲,但是 RealServer 并没有这个 socket,因为会报错[root@payun ~]# curl http://172.30.20.4curl: (7) couldn't connect to host[root@payun ~]#

httpd 监听主机上的所有 IP

    一切正常,实际上只需要 RealServer 的某个 instance 同时监听 主机IP 和 VIP 即可。

    主机 IP 用于 keepalived 健康检查,VIP 用户实际的请求处理。

# 192.30.20.15 的 /etc/httpd/conf/httpd.conf 修改监听所有 IPListen 80

转载于:https://my.oschina.net/payun/blog/510486

你可能感兴趣的文章
Devexpress 15.1.8 Breaking Changes
查看>>
推荐JS插件:imagesLoaded,监测图片加载情况并提供相应的事件(加载成功/失败)...
查看>>
Java B2B2C多用户商城 springcloud架构- common-service 项目构建过程(七)
查看>>
杨老师课堂之ArrayList集合常用方法解析
查看>>
ElasticSearch Client详解
查看>>
新零售讲堂之时代下的传统零售业,何去何从?
查看>>
c++读取和写入TXT文件的整理
查看>>
深入动态人脸识别小场景应用,2019年或将迎来爆发期
查看>>
Ionic2 下处理 Android 设备下返回按钮的事件
查看>>
linux安全问答(1)
查看>>
zabbix监控进程的CPU和内存占用量
查看>>
【自用】手工编译lnmp环境
查看>>
普通用户通过Putty密钥方式登录
查看>>
网页显示3D模型
查看>>
第六章:thymeleaf页面模版-1. 信息输出
查看>>
Ubuntu 16.04 install Docker 1.12.0
查看>>
2012《Linux杂志》读者选择奖 (Readers' Choice Awards 2012- Linux Journal)
查看>>
21天让你成为Horizon View高手—Day11:手动池的创建
查看>>
Python迭代对象、迭代器、生成器
查看>>
请求转发与重定向的区别
查看>>