该方案通过以下组件实现高可用Web集群: - Keepalived:提供虚拟IP(VIP)和故障转移能力 - Nginx:作为负载均衡器和反向代理 - Tomcat:作为应用服务器运行Web应用 - 至少两台服务器实现主备模式
在所有节点上执行:
# CentOS/RHEL
yum install -y keepalived nginx java tomcat
# Ubuntu/Debian
apt-get install -y keepalived nginx default-jdk tomcat9
在所有应用节点上配置Tomcat:
# 修改server.xml配置
vi /etc/tomcat/server.xml
# 确保以下配置正确(根据实际情况调整端口)
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
在所有节点上配置Nginx负载均衡:
http {
upstream tomcat_cluster {
# 配置Tomcat节点,weight表示权重
server 192.168.1.101:8080 weight=1;
server 192.168.1.102:8080 weight=1;
# 可添加更多节点
# 会话保持配置(可选)
ip_hash;
}
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://tomcat_cluster;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
在主节点(192.168.1.100)上配置:
vrrp_script chk_nginx {
script "/usr/bin/killall -0 nginx" # 检查nginx进程是否存在
interval 2 # 每2秒检查一次
weight 2 # 优先级变化值
}
vrrp_instance VI_1 {
state MASTER # 主节点
interface eth0 # 网卡名称
virtual_router_id 51 # 虚拟路由ID,主备必须相同
priority 101 # 优先级(主高于备)
advert_int 1 # 检查间隔
authentication {
auth_type PASS
auth_pass 1111 # 认证密码
}
virtual_ipaddress {
192.168.1.200/24 dev eth0 # 虚拟IP(VIP)
}
track_script {
chk_nginx # 关联健康检查脚本
}
}
在备用节点上配置(192.168.1.101):
vrrp_instance VI_1 {
state BACKUP # 备节点
interface eth0
virtual_router_id 51
priority 100 # 优先级低于主节点
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.200/24 dev eth0
}
track_script {
chk_nginx
}
}
在所有节点上执行:
systemctl start tomcat
systemctl start nginx
systemctl start keepalived
# 设置开机自启
systemctl enable tomcat nginx keepalived
VIP切换测试:
负载均衡测试:
健康检查测试:
会话共享:
Nginx高可用:
监控告警:
日志集中:
VIP无法访问:
Nginx负载不均衡:
会话丢失:
通过以上配置,您可以建立一个高可用的Web集群,能够自动处理节点故障并提供不间断的服务。