前言
在企业 Web 服务架构中,单台服务器难以支撑高并发访问,ADC(应用交付控制器)作为核心流量调度设备,可实现服务器负载均衡、会话保持、服务健康监控等关键能力。本文以旁挂式 ADC 组网为实战场景,手把手教你完成 ADC 核心配置、Web 服务器搭建、数据库读写分离对接,最终实现高可用、高稳定的 HTTP 应用交付方案,全程可直接复现落地。
一、组网场景与核心需求
1. 组网架构
ADC 设备采用旁挂方式接入企业组网,后端 HTTP 服务器的网关配置在核心交换机,不改变原有网络拓扑,部署更灵活、无侵入性。
2. 核心功能需求
HTTP 负载均衡:ADC 接收客户端 HTTP 访问请求,根据指定均衡算法,将流量均匀分配至后端真实 HTTP 服务器,提升服务并发承载能力;
Cookie 会话保持:携带指定 Cookie 名称的客户端请求,始终定向至同一台后端服务器,保证用户会话连续性(如登录状态、购物车数据不丢失);
服务器健康检查:实时监控后端 HTTP 服务器运行状态,自动剔除异常服务器,停止向故障节点分配新请求,保障业务不间断;
数据库读写分离:Web 服务通过 ADC VIP 对接数据库,实现数据库流量自动调度,提升数据层稳定性。
二、组网拓扑

三、ADC 核心配置步骤(旁挂模式)
基于旁挂组网、服务器网关在交换机的前提,按以下顺序完成配置,即可实现负载均衡全功能:
1. 接口基础配置
配置 ADC 接入交换机的业务接口,划分对应 VLAN/IP 地址,确保 ADC 与后端服务器、客户端网络互通,为流量转发奠定网络基础。

2. 健康检查配置
创建 HTTP 健康检查策略,定义检测端口、检测间隔、异常阈值等参数,ADC 定时向后端服务器发送探测请求,实时识别服务器故障状态。

3. 目的路由配置
针对后端服务器网段、客户端网段配置静态路由,保证 ADC 请求转发、响应回包的路由可达,实现流量正常双向传输。

4. 真实服务器配置
添加后端所有 HTTP 真实服务器,配置服务器 IP、服务端口(默认 80 端口),绑定已创建的健康检查策略,完成后端节点注册。

5. 服务池配置
创建负载均衡服务池,将注册的真实服务器加入池中;配置负载均衡算法(如轮询、加权轮询),开启 Cookie 会话保持功能(指定自定义 Cookie 名称),实现流量调度与会话绑定。


6. 虚拟服务器配置
创建对外提供服务的虚拟服务器(VIP),配置对外监听 IP、端口,关联已创建的服务池;客户端仅需访问 VIP,ADC 自动完成流量转发与调度。

四、Web 服务器搭建(Python Flask 版)
为快速验证负载均衡、会话保持、数据库对接效果,使用 Python Flask 搭建简易 HTTP 服务,自带 Cookie 生成、MySQL 日志记录、数据库读写分离功能,两台后端服务器需部署相同代码,仅需保证运行环境一致。
1. 环境依赖
两台服务器均需安装依赖包:
pip install flask pymysql2. 完整 Web 服务代码
from flask import Flask, request, make_response
import pymysql
import socket
import uuid
# 初始化Flask应用
app = Flask(__name__)
# ==================== 数据库核心配置 ====================
# ADC数据库读写分离VIP(关键:通过ADC对接数据库)
DB_HOST = "192.168.1.98"
DB_USER = "webuser"
DB_PASS = "Web@Pass123"
DB_NAME = "testdb"
# =======================================================
# 获取服务器本机IP
def get_local_ip():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 连接公共DNS,获取本机物理IP
s.connect(("8.8.8.8", 80))
local_ip = s.getsockname()[0]
finally:
s.close()
return local_ip
# 首页接口:负载均衡+会话保持+数据库日志核心页面
@app.route("/")
def index_page():
server_ip = get_local_ip()
# 1. 处理用户会话Cookie(会话保持核心标识)
user_token = request.cookies.get("token")
if not user_token:
# 无Token则自动生成唯一标识,用于会话保持
user_token = str(uuid.uuid4())
db_conn = None
db_cursor = None
try:
# 2. 通过ADC VIP连接MySQL(实现数据库读写分离)
db_conn = pymysql.connect(
host=DB_HOST,
user=DB_USER,
password=DB_PASS,
database=DB_NAME,
connect_timeout=5 # 连接超时,避免服务阻塞
)
db_cursor = db_conn.cursor()
# 3. 自动创建访问日志表(表不存在则创建,兼容初次部署)
db_cursor.execute("""
CREATE TABLE IF NOT EXISTS visit_log (
id INT PRIMARY KEY AUTO_INCREMENT,
web_ip VARCHAR(50) COMMENT 'Web服务器IP',
token VARCHAR(100) COMMENT '用户会话标识',
visit_time DATETIME DEFAULT NOW() COMMENT '访问时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
""")
# 4. 记录用户访问日志
db_cursor.execute(
"INSERT INTO visit_log (web_ip, token) VALUES (%s, %s)",
(server_ip, user_token)
)
db_conn.commit()
# 5. 查询最新50条访问日志
db_cursor.execute("SELECT * FROM visit_log ORDER BY id DESC LIMIT 50")
visit_logs = db_cursor.fetchall()
# 6. 构造前端展示页面
response_html = f"<h1>Web服务器运行正常</h1>"
response_html += f"<h2>本机节点IP:{server_ip}</h2>"
response_html += f"<h2 style='color:green'>✅ MySQL连接成功(通过ADC VIP实现读写分离)</h2>"
response_html += f"<p>数据库调度节点:{DB_HOST}</p>"
response_html += f"<p style='color:blue'>当前用户会话Token:{user_token}</p>"
response_html += "<hr><h4>最新访问日志:</h4>"
for log in visit_logs:
response_html += f"日志ID:{log[0]} | Web节点:{log[1]} | 会话Token:{log[2]} | 访问时间:{log[3]}<br>"
# 7. 写入Cookie,实现ADC会话保持
resp = make_response(response_html)
resp.set_cookie(
key="token",
value=user_token,
max_age=86400, # 有效期1天
httponly=True, # 防止XSS攻击,生产环境必配
samesite="Lax" # 防止CSRF攻击,提升安全性
)
return resp
except Exception as e:
# 数据库异常回滚,避免数据不一致
if db_conn:
db_conn.rollback()
return f"<h1 style='color:red'>MySQL连接失败</h1><p>错误详情:{str(e)}</p>"
finally:
# 关闭数据库连接,防止连接泄漏
if db_cursor:
db_cursor.close()
if db_conn:
db_conn.close()
if __name__ == "__main__":
# 生产环境关闭DEBUG模式,提升服务安全性
app.run(host="0.0.0.0", port=80, debug=False)
五、功能验证(核心验收步骤)
配置完成后,通过以下步骤验证 ADC+Web 服务是否正常工作:
负载均衡验证:客户端浏览器多次访问 ADC 虚拟服务器 VIP,观察页面展示的 Web 节点 IP。在未携带会话保持 Cookie 或首次访问时,IP 会按配置的负载均衡算法交替出现,证明流量调度正常;若已生成 Cookie 并开启会话保持,则会固定访问同一台服务器,属于正常会话粘滞现象。


会话保持验证:清除浏览器缓存后访问 VIP,记录页面 Token 值,多次刷新页面,Web 节点 IP 始终不变,证明 Cookie 会话保持生效;


健康检查验证:手动停止一台后端 Web 服务器,继续访问 VIP,请求仅分配至正常运行的服务器,故障节点自动被剔除;
数据库验证:页面显示「MySQL 连接成功」,查看日志表数据正常,证明通过 ADC VIP 的数据库读写分离功能正常。
总结
本实验聚焦 ADC 核心能力验证,完成了负载均衡流量调度、Cookie 会话保持、健康检查故障转移全流程部署。需特别说明:Cookie 会话保持仅保障正常运行时的请求粘滞,无法解决故障切换场景下的会话丢失问题。实际生产环境中,若后端 Web 服务器未搭建集中式会话共享(Redis / 共享数据库),服务器故障切换会导致用户登录状态、购物车等会话数据丢失,业务体验中断。因此,真正的企业级高可用架构,必须以「ADC 负载均衡 + 健康检查 + 集中式会话共享」三位一体为核心,实现业务无感故障切换。后续将持续更新数据库读写分离实战、Web 服务器集中式会话共享完整落地教程,构建全链路高可用应用交付体系。
评论区