Crater服务水平扩展配置:负载均衡与会话共享
为什么需要水平扩展
随着业务增长,单节点部署的Crater可能面临性能瓶颈。水平扩展通过增加服务器节点分散负载,提升系统可用性。典型场景包括:月末发票集中处理、多团队同时在线操作等高并发情况。
扩展架构设计
水平扩展需要解决两个核心问题:请求分发与状态共享。以下是基于Crater现有架构的扩展方案:
负载均衡配置
Crater项目已提供基础Nginx配置,需修改为支持多节点转发:
# 在docker-compose/nginx/nginx.conf中添加
upstream crater_app {
server app1:9000 weight=1;
server app2:9000 weight=1;
}
server {
# ... 现有配置 ...
location ~ \.php$ {
fastcgi_pass crater_app; # 替换原fastcgi_pass app:9000
# ... 其他配置不变 ...
}
}
多节点部署
通过docker-compose.yml扩展应用实例:
services:
app1: # 原app服务重命名为app1
build: ./
# ... 保持原有配置 ...
app2: # 添加第二个应用节点
build: ./
# ... 复制app1的配置 ...
nginx:
ports:
- "80:80"
volumes:
- ./docker-compose/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- app1
- app2
会话共享实现
默认文件存储会话无法跨节点共享,需修改为Redis存储:
1. 配置Redis会话驱动
// 将file驱动改为redis
'driver' => env('SESSION_DRIVER', 'redis'),
// 配置Redis连接
'connection' => env('SESSION_CONNECTION', 'cache'),
2. 配置缓存驱动
确保config/cache.php中Redis配置正确:
'default' => env('CACHE_DRIVER', 'redis'),
'stores' => [
'redis' => [
'driver' => 'redis',
'connection' => 'cache',
],
],
3. 环境变量配置
在.env文件中添加:
SESSION_DRIVER=redis
CACHE_DRIVER=redis
REDIS_HOST=redis # 对应docker-compose中的Redis服务名
REDIS_PASSWORD=your_secure_password
REDIS_PORT=6379
共享数据库配置
多节点需连接同一数据库,确保config/database.php配置正确:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'db'), # 使用docker-compose中的db服务名
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'crater'),
'username' => env('DB_USERNAME', 'crater'),
'password' => env('DB_PASSWORD', 'crater'),
// 确保关闭查询缓存,避免节点间数据不一致
'options' => [
PDO::ATTR_EMULATE_PREPARES => true,
],
],
部署验证
1. 启动服务栈
git clone https://gitcode.com/gh_mirrors/cr/crater
cd crater
docker-compose up -d
2. 验证会话共享
- 访问Crater登录页面,输入凭证
- 在另一浏览器或隐私窗口打开相同地址
- 确认无需重新登录,用户状态保持一致
3. 负载均衡测试
使用curl命令测试请求分发:
for i in {1..10}; do
curl -s -o /dev/null -w "%{http_code} %{url_effective}\n" http://localhost
done
观察Nginx访问日志确认请求均匀分布到各节点:
docker-compose logs -f nginx | grep "request to"
注意事项
- 文件存储同步:用户上传的文件需使用共享存储,可配置config/filesystems.php使用S3或NFS
- 定时任务处理:确保只有一个节点运行定时任务,修改cron.dockerfile限制单实例部署
- 数据库连接池:高并发场景下需配置数据库连接池,参考config/database.php中的connections参数调优
- 监控告警:添加节点健康检查,配置Nginx只转发健康节点请求
扩展架构优化建议
- 引入服务发现:使用Consul或etcd自动管理节点列表
- 实现自动扩缩容:结合Prometheus监控与Kubernetes HPA
- 数据库读写分离:修改config/database.php配置主从复制
- 静态资源CDN:将public/目录资源部署到CDN加速
通过以上配置,Crater可实现无状态水平扩展,支持业务持续增长。完整配置文件可参考项目中的docker-compose/目录示例。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



