LVS DR 下 tomcat 扩容问题


背景

    采购了大配置物理机,希望通过 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 80
Trying 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 80
tcp        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 修改配置为监听 VIP
Listen 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 -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  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 修改配置为监听主机 IP
Listen 192.30.20.15:80

# 192.30.20.15 restart服务
service httpd restart

# 192.30.20.11 keepalived 健康检查正常
[root@payun ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  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.4
curl: (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 修改监听所有 IP
Listen 80


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值