要构建一个高可用的Tomcat集群,采用Nginx做负载均衡与反向代理是一种常用方案。Nginx可以通过upstream模块实现多个Tomcat节点的负载均衡,结合keepalive机制与session粘性可以提供更高的可用性。但是,Nginx自身也存在单点故障的问题,会影响整个系统的可靠性。
所以,我们采用Keepalived实现Nginx的高可用部署。Keepalived通过VRRP协议设置主备Nginx,当主Nginx不可用时可以自动将流量切换到备Nginx,从而避免Nginx成为单点故障。
系统架构图:
[Nginx]+--Keepalived群集VIP--[客户端]
| |
[Nginx1] [Nginx2]
| |
| |
[Tomcat1] [Tomcat2] [Tomcat3]
工作流程:
1. 客户端请求负载均衡VIP,Keepalived将请求转发到主Nginx。
2. 主Nginx根据负载均衡策略,选择一台Tomcat服务器,并将请求转发过去。
3. Tomcat处理请求并返回结果给Nginx。Nginx再返回给客户端。
4. 如果主Nginx宕机,Keepalived可以检测到并将VIP漂移到备Nginx。备Nginx接管请求,并继续转发到Tomcat集群。
5. 通过Nginx的keepalive与session保持机制,可以使得已经建立连接的客户端不受Nginx转移的影响。
这种架构实现了全局的高可用性:Nginx与Tomcat集群的高可用性。Nginx故障时,不会影响已经建立连接的会话,实现了更高的可用性。
总结:该架构利用Nginx的负载均衡与反向代理功能部署Tomcat集群,使用Keepalived实现Nginx的高可用,并借助Nginx的会话保持机制提供更高的可靠性,构建一个全局高可用的Web服务系统。
Nginx+Tomcat+Keepalived高可用集群的详细安装与配置:
场景:一组nginx,一个vip,多个java程序多端口
1. 安装Tomcat:
在3台服务器上安装Tomcat,设置不同的端口,如:
Server1:8080
Server2:8081
Server3:8082
2. 安装与配置Nginx:
在2台服务器上安装Nginx,分为主备两个角色:
主Nginx(1.1.1.1):
upstream tomcat_cluster {
server 1.1.1.2:8080;
server 1.1.1.3:8081;
server 1.1.1.4:8082;
}
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass http://tomcat_cluster;
proxy_set_header X-Real-IP $remote_addr;
}
}
备Nginx(1.1.1.2):
配置同主Nginx。
3. 安装与配置Keepalived:
在主备Nginx所在服务器安装Keepalived:
主Keepalived(1.1.1.1):
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
mcast_src_ip 1.1.1.1
nopreempt
}
virtual_server 192.168.200.10 80 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 1.1.1.1 80 {
weight 1
}
}
备Keepalived(1.1.1.2):
配置同主Keepalived,但将state改为BACKUP,priority改为90。
4. 测试集群:
- 客户端访问192.168.200.10,主Keepalived将请求发往主Nginx。主Nginx随机选取一台Tomcat进行转发。
- 关闭主Nginx,主Keepalived检测到,将VIP漂移到备Nginx。备Nginx接管请求,继续转发到Tomcat集群。
- 客户端可以正常访问,已建立的会话也不受影响。实现了Tomcat集群和Nginx的高可用。