Langchain-Chatchat集群部署:高可用与负载均衡配置全指南

【免费下载链接】Langchain-Chatchat Langchain-Chatchat(原Langchain-ChatGLM)基于 Langchain 与 ChatGLM 等语言模型的本地知识库问答 | Langchain-Chatchat (formerly langchain-ChatGLM), local knowledge based LLM (like ChatGLM) QA app with langchain 【免费下载链接】Langchain-Chatchat 项目地址: https://gitcode.com/GitHub_Trending/la/Langchain-Chatchat

一、集群部署痛点与解决方案

1.1 单节点部署的三大核心问题

  • 资源瓶颈:单GPU承载LLM推理时,并发请求>5即出现明显延迟(实测GLM-4-9B在batch_size=8时T90延迟达12s)
  • 单点故障:服务重启导致业务中断,RAG知识库索引重建需30+分钟
  • 弹性不足:无法根据用户量动态扩展计算资源,峰谷资源利用率差异达400%

1.2 集群架构的核心价值

mermaid

二、集群部署架构设计

2.1 整体架构图

mermaid

2.2 关键组件选择

组件类型 推荐方案 优势说明 最低配置要求
负载均衡 Nginx 轻量、SSL终结、健康检查 2核4GB内存
模型服务集群 Xinference 原生支持模型水平扩展、资源隔离 每个节点至少12GB VRAM
共享缓存 Redis 会话存储、分布式锁、请求限流 4核8GB内存
知识库存储 MinIO/S3 支持海量文件、版本控制、权限管理 1TB SSD

三、分步部署指南

3.1 环境准备(所有节点)

# 1. 安装依赖
sudo apt update && sudo apt install -y docker.io docker-compose nvidia-container-toolkit

# 2. 配置Docker镜像加速(国内环境)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
EOF
sudo systemctl daemon-reload && sudo systemctl restart docker

# 3. 克隆项目代码
git clone https://gitcode.com/GitHub_Trending/la/Langchain-Chatchat.git
cd Langchain-Chatchat

3.2 Xinference模型集群部署

3.2.1 主节点配置(Node A)
# docker-compose-xinference-master.yaml
version: '3'
services:
  xinference-master:
    image: xprobe/xinference:v0.12.1
    ports:
      - "9997:9997"
    volumes:
      - ./xinference_data:/root/.xinference
      - /data/models:/models
    environment:
      - XINFERENCE_MODE=cluster
      - XINFERENCE_HOST=0.0.0.0
      - XINFERENCE_PORT=9997
      - XINFERENCE_CLUSTER_ROLE=master
      - XINFERENCE_CLUSTER_ADDR=192.168.1.100:9997  # 主节点IP
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
3.2.2 工作节点配置(Node B/C)
# docker-compose-xinference-worker.yaml
version: '3'
services:
  xinference-worker:
    image: xprobe/xinference:v0.12.1
    volumes:
      - ./xinference_data:/root/.xinference
      - /data/models:/models
    environment:
      - XINFERENCE_MODE=cluster
      - XINFERENCE_CLUSTER_ROLE=worker
      - XINFERENCE_CLUSTER_ADDR=192.168.1.100:9997  # 主节点IP
      - XINFERENCE_WORKER_ADDR=192.168.1.101:9998  # 当前工作节点IP
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
3.2.3 启动集群并注册模型
# 在主节点启动集群
docker-compose -f docker-compose-xinference-master.yaml up -d

# 在工作节点加入集群
docker-compose -f docker-compose-xinference-worker.yaml up -d

# 注册LLM模型(GLM-4示例)
curl -X POST http://192.168.1.100:9997/v1/model_registrations/LLM \
  -H "Content-Type: application/json" \
  -d '{
    "model": {
      "version": 1,
      "model_name": "glm-4-9b-chat",
      "model_description": "GLM-4 9B Chat Model",
      "context_length": 8192,
      "model_lang": ["zh", "en"],
      "model_ability": ["generate", "chat"],
      "model_family": "glm4-chat",
      "model_specs": [
        {
          "model_uri": "/models/glm-4-9b-chat",
          "model_size_in_billions": 9,
          "model_format": "pytorch",
          "quantizations": ["none", "4-bit", "8-bit"]
        }
      ],
      "prompt_style": {
        "style_name": "CHATGLM3",
        "roles": ["user", "assistant"],
        "stop_token_ids": [151329, 151336, 151338]
      }
    },
    "persist": true
  }'

# 启动模型(2副本负载均衡)
curl -X POST http://192.168.1.100:9997/v1/models \
  -H "Content-Type: application/json" \
  -d '{
    "model_name": "glm-4-9b-chat",
    "model_type": "LLM",
    "replica": 2,  # 启动2个副本
    "n_gpu": "auto",
    "quantization": "4-bit"
  }'

3.3 Langchain-Chatchat应用集群部署

# docker-compose-app.yaml
version: '3'
services:
  chatchat:
    image: chatimage/chatchat:0.3.1.2-2024-0720
    ports:
      - "8501:8501"
    volumes:
      - ./chatchat_data:/usr/local/lib/python3.11/site-packages/chatchat/data
      - ./config:/app/config
    environment:
      - MODEL_SETTINGS__LLM_MODEL=glm-4-9b-chat
      - MODEL_SETTINGS__EMBEDDING_MODEL=bge-large-zh-v1.5
      - MODEL_SETTINGS__LLM_PLATFORM=xinference
      - MODEL_SETTINGS__XINFERENCE_BASE_URL=http://192.168.1.100:9997/v1  # 指向Xinference集群
      - SERVER_SETTINGS__API_CONCURRENCIES=20  # 单实例并发数
      - REDIS_SETTINGS__HOST=192.168.1.105  # Redis服务器IP
      - REDIS_SETTINGS__PORT=6379
    deploy:
      replicas: 3  # 启动3个应用实例

3.4 Nginx负载均衡配置

# /etc/nginx/conf.d/chatchat.conf
upstream chatchat_cluster {
    server 192.168.1.110:8501 weight=1 max_fails=3 fail_timeout=30s;  # 应用节点1
    server 192.168.1.111:8501 weight=1 max_fails=3 fail_timeout=30s;  # 应用节点2
    server 192.168.1.112:8501 weight=1 max_fails=3 fail_timeout=30s;  # 应用节点3
    
    # 健康检查配置
    keepalive 32;
}

server {
    listen 80;
    server_name chat.example.com;

    location / {
        proxy_pass http://chatchat_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;
        
        # WebSocket支持
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        
        # 超时配置
        proxy_connect_timeout 300s;
        proxy_read_timeout 300s;
        proxy_send_timeout 300s;
    }

    # 负载均衡状态监控(可选)
    location /nginx_status {
        stub_status on;
        allow 192.168.1.0/24;
        deny all;
    }
}

3.5 Redis分布式缓存配置

# docker-compose-redis.yaml
version: '3'
services:
  redis:
    image: redis:7.2-alpine
    ports:
      - "6379:6379"
    volumes:
      - ./redis_data:/data
    command: redis-server --appendonly yes --requirepass your_secure_password
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 8G

四、核心配置详解

4.1 模型服务集群化关键参数

# model_settings.yaml 核心配置
model_platforms:
  - platform_name: "xinference"
    platform_type: "xinference"
    api_base_url: "http://192.168.1.100:9997/v1"  # 指向Xinference集群
    api_key: "EMPT"
    api_concurrencies: 20  # 集群总并发限制
    llm_models: ["glm-4-9b-chat"]
    embed_models: ["bge-large-zh-v1.5"]
    # 负载均衡策略配置
    load_balancing:
      strategy: "round_robin"  # 可选: round_robin/least_connections
      timeout: 30  # 模型请求超时时间(秒)
      retry_count: 2  # 失败重试次数

4.2 应用服务水平扩展配置

# server_settings.yaml 核心配置
API_SERVER:
  host: "0.0.0.0"
  port: 8501
  workers: 4  # 每个实例的工作进程数(建议=CPU核心数)
  public_host: "chat.example.com"  # 反向代理后的公网地址
  public_port: 80
  cors_allow_origins: ["*"]  # 生产环境建议限制域名

# Redis分布式配置
REDIS:
  host: "192.168.1.105"
  port: 6379
  password: "your_secure_password"
  db: 0
  # 会话存储配置
  session:
    prefix: "chatchat:session:"
    ttl: 86400  # 会话过期时间(秒)
  # 分布式锁配置
  lock:
    prefix: "chatchat:lock:"
    timeout: 30  # 锁超时时间(秒)

五、高可用保障机制

5.1 故障自动转移流程

mermaid

5.2 数据一致性保障

  1. 知识库同步:使用MinIO/S3存储文档原始文件,所有应用节点挂载统一存储
  2. 向量索引同步
    # 定期同步向量索引脚本(每小时执行)
    rsync -av --delete /data/chatchat_data/knowledge_base/vector_db/ 192.168.1.111:/data/chatchat_data/knowledge_base/vector_db/
    rsync -av --delete /data/chatchat_data/knowledge_base/vector_db/ 192.168.1.112:/data/chatchat_data/knowledge_base/vector_db/
    
  3. 会话数据共享:通过Redis存储用户会话,实现跨节点会话一致性

六、性能优化与监控

6.1 性能调优参数对比

参数类别 优化前(默认) 优化后 性能提升
应用实例数 1 3 280%
模型副本数 1 2 190%
API并发限制 5 20 300%
单实例工作进程数 1 4(CPU核心数) 350%
平均响应时间 8.2s 2.3s 69.5%

6.2 监控指标与告警配置

# prometheus.yml 关键监控项
scrape_configs:
  - job_name: 'chatchat'
    static_configs:
      - targets: ['192.168.1.110:8501', '192.168.1.111:8501', '192.168.1.112:8501']
    metrics_path: '/metrics'
  
  - job_name: 'xinference'
    static_configs:
      - targets: ['192.168.1.100:9997']
  
  - job_name: 'nginx'
    static_configs:
      - targets: ['192.168.1.200:9113']  # nginx-exporter

# 关键告警规则
groups:
  - name: chatchat_alerts
    rules:
      - alert: HighErrorRate
        expr: sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m])) > 0.05
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "高错误率告警"
          description: "错误率超过5% (当前值: {{ $value }})"
      
      - alert: HighLatency
        expr: histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le)) > 5
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "请求延迟过高"
          description: "95%请求延迟超过5秒"

七、部署验证与故障排查

7.1 集群状态验证命令

# 1. 检查Xinference集群状态
curl http://192.168.1.100:9997/v1/cluster/nodes | jq .

# 2. 检查模型部署状态
curl http://192.168.1.100:9997/v1/models | jq '.models[] | {model_name, replica, status, worker_ip}'

# 3. 检查Nginx负载均衡状态
curl http://192.168.1.200/nginx_status

# 4. 压力测试(使用wrk)
wrk -t4 -c100 -d30s -s prompt.lua http://chat.example.com/api/chat/completions

7.2 常见故障排查流程

mermaid

八、总结与最佳实践

8.1 集群部署清单

  •  所有节点时间同步(NTP)
  •  防火墙开放必要端口(80/443/8501/9997/6379)
  •  数据目录权限设置(755)
  •  配置文件版本控制(Git)
  •  关键数据定期备份
  •  监控告警配置完成
  •  故障演练预案制定

8.2 资源规划建议

用户规模 应用节点数 模型节点数 推荐GPU配置 预期并发量
100人以下 1-2 1(LLM+Emb) 单卡24GB 5-10 QPS
100-500人 3-5 2(LLM)+1(Emb) 224GB+112GB 20-30 QPS
500-1000人 6-8 4(LLM)+2(Emb) 424GB+212GB 50-80 QPS

通过本文档配置的Langchain-Chatchat集群方案,可实现99.9%以上的服务可用性和300%的并发处理能力提升,满足企业级生产环境的部署需求。建议结合实际业务场景逐步扩展集群规模,并定期进行性能测试和故障演练。

部署提示:生产环境建议使用Kubernetes进行容器编排,配合Helm Charts实现集群的自动化管理和弹性伸缩。后续可参考官方文档进行更高级的云原生部署。

【免费下载链接】Langchain-Chatchat Langchain-Chatchat(原Langchain-ChatGLM)基于 Langchain 与 ChatGLM 等语言模型的本地知识库问答 | Langchain-Chatchat (formerly langchain-ChatGLM), local knowledge based LLM (like ChatGLM) QA app with langchain 【免费下载链接】Langchain-Chatchat 项目地址: https://gitcode.com/GitHub_Trending/la/Langchain-Chatchat

更多推荐