一、WebLogic负载均衡概述
1.1 什么是WebLogic负载均衡
WebLogic Server是Oracle提供的企业级Java应用服务器,负载均衡是将客户端请求分发到多个WebLogic服务器实例的技术,目的是提高系统可用性、扩展性和性能。通过合理的负载均衡策略,可以避免单点故障,提升整体系统的处理能力。
1.2 负载均衡的层次
| 层次 | 技术 | 说明 |
|---|---|---|
| L4传输层 | Nginx/HAProxy | 基于IP和端口分发 |
| L7应用层 | Apache mod_proxy | 基于HTTP请求头分发 |
| 集群层 | WebLogic Cluster | WebLogic内置集群机制 |
| DNS层 | DNS轮询 | 域名解析级别分发 |
1.3 WebLogic集群架构
WebLogic集群由以下组件组成:
– 管理服务器(Admin Server):管理整个域的配置
– 受管服务器(Managed Server):运行应用程序
– 集群(Cluster):一组协同工作的受管服务器
– 代理服务器(Proxy Server):接收并分发请求
二、WebLogic集群配置
2.1 创建集群
通过WebLogic管理控制台:
1. 登录管理控制台 http://admin-server:7001/console
2. 导航到 环境 → 集群
3. 点击 新建 → 输入集群名称(如myCluster)
4. 选择 消息传递模式:单播或组播
5. 点击 完成
2.2 配置受管服务器
服务器名称 地址 端口 集群
managed-server-1 192.168.1.101 7003 myCluster
managed-server-2 192.168.1.102 7003 myCluster
managed-server-3 192.168.1.103 7003 myCluster
通过WLST脚本创建:
# connect.py
connect('weblogic','password','t3://admin-server:7001')
# 创建受管服务器
cd('/')
create('managed-server-1', 'Server')
cd('Server/managed-server-1')
set('ListenAddress', '192.168.1.101')
set('ListenPort', 7003)
set('Cluster', 'myCluster')
create('managed-server-2', 'Server')
cd('Server/managed-server-2')
set('ListenAddress', '192.168.1.102')
set('ListenPort', 7003)
set('Cluster', 'myCluster')
disconnect()
2.3 配置HTTP会话复制
启用会话复制确保故障转移时用户会话不丢失:
1. 导航到 环境 → 集群 → myCluster → 配置 → 一般信息
2. 勾选 HTTP复制
3. 选择复制方式:
– 内存中复制(in-memory replication):性能好,实时性高
– 持久化复制:写入文件或数据库,可靠性高
通过WLST配置:
cd('/Clusters/myCluster')
set('WeblogicPluginEnabled', 'true')
set('ReplicationChannel', 'ReplicationChannel')
三、Nginx反向代理负载均衡
3.1 安装Nginx
sudo apt update
sudo apt install -y nginx
3.2 配置负载均衡
编辑 /etc/nginx/conf.d/weblogic.conf:
upstream weblogic_cluster {
# 轮询策略(默认)
server 192.168.1.101:7003;
server 192.168.1.102:7003;
server 192.168.1.103:7003;
}
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://weblogic_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;
proxy_set_header X-Forwarded-Proto $scheme;
# 会话保持
proxy_cookie_path / /;
# 超时设置
proxy_connect_timeout 60s;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
# 健康检查
location /health {
proxy_pass http://weblogic_cluster;
access_log off;
}
}
3.3 Nginx负载均衡策略
加权轮询:
upstream weblogic_cluster {
server 192.168.1.101:7003 weight=3;
server 192.168.1.102:7003 weight=2;
server 192.168.1.103:7003 weight=1;
}
最少连接:
upstream weblogic_cluster {
least_conn;
server 192.168.1.101:7003;
server 192.168.1.102:7003;
server 192.168.1.103:7003;
}
IP哈希(会话保持):
upstream weblogic_cluster {
ip_hash;
server 192.168.1.101:7003;
server 192.168.1.102:7003;
server 192.168.1.103:7003;
}
四、Apache mod_proxy负载均衡
4.1 安装Apache
sudo apt install -y apache2
sudo a2enmod proxy proxy_balancer proxy_http headers lbmethod_byrequests
sudo systemctl restart apache2
4.2 配置负载均衡
编辑 /etc/apache2/sites-available/weblogic.conf:
<Proxy "balancer://weblogic_cluster">
BalancerMember http://192.168.1.101:7003 route=server1
BalancerMember http://192.168.1.102:7003 route=server2
BalancerMember http://192.168.1.103:7003 route=server3
ProxySet lbmethod=byrequests
ProxySet stickysession=JSESSIONID
</Proxy>
<VirtualHost *:80>
ServerName app.example.com
ProxyPreserveHost On
ProxyPass / balancer://weblogic_cluster/
ProxyPassReverse / balancer://weblogic_cluster/
# 健康检查
ProxyPass /health balancer://weblogic_cluster/health
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_WORKER_ROUTE
</VirtualHost>
4.3 负载均衡策略
| 策略 | 模块 | 说明 |
|---|---|---|
| 请求数(byrequests) | lbmethod_byrequests | 按请求次数分配 |
| 流量(bytraffic) | lbmethod_bytraffic | 按流量大小分配 |
| 字节数(bybusyness) | lbmethod_bybusyness | 分配给最空闲节点 |
# 切换策略
sudo a2enmod lbmethod_bytraffic
sudo systemctl restart apache2
五、HAProxy负载均衡
5.1 安装HAProxy
sudo apt install -y haproxy
5.2 配置负载均衡
编辑 /etc/haproxy/haproxy.cfg:
global
log /dev/log local0
maxconn 4096
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend weblogic_front
bind *:80
default_backend weblogic_back
backend weblogic_back
balance roundrobin
cookie SERVERID insert indirect nocache
# 健康检查
option httpchk GET /health
http-check expect status 200
server server1 192.168.1.101:7003 cookie server1 check
server server2 192.168.1.102:7003 cookie server2 check
server server3 192.168.1.103:7003 cookie server3 check
# 故障转移
option redispatch
listen stats
bind *:8404
stats enable
stats uri /stats
stats refresh 10s
stats auth admin:password
5.3 启动HAProxy
sudo systemctl restart haproxy
sudo systemctl enable haproxy
# 验证配置
haproxy -c -f /etc/haproxy/haproxy.cfg
六、WebLogic内置负载均衡
6.1 配置WebLogic代理插件
WebLogic提供了专用的HTTP代理插件(mod_wl_ohs),可以与Apache或Nginx配合使用实现更智能的负载均衡。
安装WebLogic Apache插件:
# 复制插件模块
cp $ORACLE_HOME/wlserver/server/plugin/linux/x86_64/mod_wl_24.so /usr/lib/apache2/modules/
# 加载模块
sudo a2enmod proxy proxy_http
echo "LoadModule weblogic_module /usr/lib/apache2/modules/mod_wl_24.so" | sudo tee /etc/apache2/mods-available/weblogic.load
sudo a2enmod weblogic
配置插件:
<Location / >
WebLogicHost admin-server
WebLogicPort 7001
WebLogicCluster 192.168.1.101:7003,192.168.1.102:7003,192.168.1.103:7003
MatchExpression *.jsp
MatchExpression *.do
Debug ALL
</Location>
6.2 配置会话亲和性
WebLogic代理插件支持基于Cookie的会话亲和性:
<Location / >
WebLogicCluster 192.168.1.101:7003,192.168.1.102:7003,192.168.1.103:7003
WLProxySSL ON
WLProxySSLPassThrough ON
WLCookieName JSESSIONID
Idempotent ON
DynamicServerList ON
KeepAliveEnabled ON
KeepAliveSecs 20
</Location>
七、健康检查配置
7.1 Nginx健康检查
upstream weblogic_cluster {
server 192.168.1.101:7003 max_fails=3 fail_timeout=30s;
server 192.168.1.102:7003 max_fails=3 fail_timeout=30s;
server 192.168.1.103:7003 max_fails=3 fail_timeout=30s;
}
7.2 HAProxy健康检查
backend weblogic_back
option httpchk GET /health
http-check expect status 200
http-check disable-on-404
server server1 192.168.1.101:7003 check inter 5s fall 3 rise 2
server server2 192.168.1.102:7003 check inter 5s fall 3 rise 2
server server3 192.168.1.103:7003 check inter 5s fall 3 rise 2
7.3 WebLogic健康检查端点
创建简单的健康检查Servlet:
@WebServlet("/health")
public class HealthServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("application/json");
resp.setStatus(HttpServletResponse.SC_OK);
resp.getWriter().write("{\"status\":\"UP\",\"timestamp\":\"" +
new java.util.Date() + "\"}");
}
}
八、SSL/TLS配置
8.1 Nginx SSL终止
server {
listen 443 ssl;
server_name app.example.com;
ssl_certificate /etc/nginx/ssl/app.crt;
ssl_certificate_key /etc/nginx/ssl/app.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://weblogic_cluster;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
}
}
8.2 SSL直通
如果需要WebLogic处理SSL:
upstream weblogic_cluster {
server 192.168.1.101:7003;
server 192.168.1.102:7003;
}
server {
listen 443 ssl;
server_name app.example.com;
ssl_certificate /etc/nginx/ssl/app.crt;
ssl_certificate_key /etc/nginx/ssl/app.key;
location / {
proxy_pass https://weblogic_cluster;
proxy_ssl_verify off;
}
}
九、监控与运维
9.1 Nginx监控
# 查看upstream状态
curl http://localhost/upstream_status
# 查看访问日志
tail -f /var/log/nginx/access.log
# 查看连接数
nginx -V 2>&1 | grep stub_status
添加status配置:
server {
listen 8080;
location /stub_status {
stub_status;
}
}
9.2 HAProxy监控
# 访问HAProxy统计页面
curl -u admin:password http://localhost:8404/stats
# 查看Socket统计
echo "show stat" | socat stdio tcp4-connect:localhost:8404
9.3 WebLogic监控
通过WLST脚本监控:
connect('weblogic','password','t3://admin-server:7001')
# 查看服务器状态
servers = cmo.getServers()
for server in servers:
print(server.getName() + ": " + server.getState())
# 查看JVM内存
cd('ServerRuntime/server1/JVMRuntime/server1')
print("HeapUsed: " + cmo.getHeapUsedCurrent())
print("HeapFree: " + cmo.getHeapFreeCurrent())
disconnect()
十、故障排除
10.1 常见问题
问题1:502 Bad Gateway
– 原因:后端WebLogic服务不可用
– 解决:检查WebLogic服务状态,检查健康检查配置
问题2:会话丢失
– 原因:会话复制未配置或负载均衡策略不支持会话保持
– 解决:启用WebLogic HTTP复制,配置sticky session
问题3:响应缓慢
– 原因:负载不均或某台服务器性能瓶颈
– 解决:使用加权策略,监控各节点性能
10.2 故障转移测试
# 1. 停止一台服务器
ssh server1 "sudo systemctl stop weblogic"
# 2. 持续发送请求
while true; do
curl -s -o /dev/null -w "%{http_code} %{time_total}s\n" http://app.example.com/
sleep 1
done
# 3. 观察请求是否自动路由到其他服务器
总结
Debian上WebLogic负载均衡有多种实现方案,推荐组合:
- 小型项目:Nginx + WebLogic集群,简单高效
- 中型项目:HAProxy + WebLogic集群,功能丰富
- 大型项目:Nginx + HAProxy + WebLogic集群,多层架构
- 企业级:WebLogic Apache插件 + WebLogic集群,深度集成
关键要点:
– 启用会话复制确保故障转移
– 配置健康检查自动剔除故障节点
– 使用加权策略应对服务器性能差异
– 部署SSL保障传输安全
– 建立监控体系实时掌握集群状态
注:本文基于WebLogic 14.1和Debian 12编写,生产环境部署前请充分测试。