クラスターデプロイメント
GPT-Load高可用性クラスターデプロイメントソリューション、マスタースレーブアーキテクチャと水平スケーリングをサポート
クラスターアーキテクチャ概要
分散マスタースレーブアーキテクチャ
ワンマスターマルチスレーブの分散アーキテクチャを採用。マスターノードは管理機能を担当し、スレーブノードはプロキシサービスに専念し、高可用性と負荷分散を実現
マスターノード
Web管理インターフェース、設定管理、統計分析
スレーブノード
APIプロキシサービスに専念、水平スケーリングをサポート
共有ストレージ
統一されたMySQLとRedisクラスター
デプロイメント要件
重要なお知らせ
クラスターデプロイメント時、データベースとRedisは必須です。分散協調と状態同期に使用されます
インフラストラクチャ要件
データベースクラスター
- • MySQL 8.2+高可用性クラスター
- • マスタースレーブレプリケーションまたはGaleraクラスターをサポート
- • 読み書き分離の設定を推奨
- • 定期的なバックアップと障害復旧メカニズム
キャッシュクラスター
- • Redisクラスターまたはセンチネルモード
- • 分散ロックと状態同期に使用
- • 永続化とフェイルオーバーを設定
- • メモリ使用量とパフォーマンスを監視
デプロイメント手順
1
共有インフラストラクチャの準備
MySQLクラスター(またはPostgreSQL)のデプロイ
クラウドデータベースクラスターサービスの使用、または独立したMySQL/PostgreSQLクラスターの自己デプロイを推奨します。
Redisクラスターのデプロイ
Redis Sentinelまたはクラスターモードの使用を推奨し、高可用性とデータ一貫性を確保します。
2
ノードdocker-compose.yml内容参考(マスタースレーブノード共通)
services:
gpt-load:
image: ghcr.io/tbphp/gpt-load:latest
container_name: gpt-load
ports:
- "${PORT:-3001}:${PORT:-3001}"
env_file:
- .env
restart: always
volumes:
- ./data:/app/data
stop_grace_period: ${SERVER_GRACEFUL_SHUTDOWN_TIMEOUT:-10}s
healthcheck:
test: wget -q --spider -T 10 -O /dev/null http://localhost:${PORT:-3001}/health
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
設定を使用してマスタースレーブノードを区別
IS_SLAVE=true
マスターノード:設定なしまたはIS_SLAVE=falseに設定。スレーブノード:IS_SLAVE=trueに設定。
クラスター全体でマスターノードが1つだけであることを確保。
3
ロードバランシング設定
Nginxまたは他のロードバランサーを使用して、リクエストを異なるスレーブノードに分散
Nginx設定例
# nginx.conf
upstream gpt_load_cluster {
server master-node-ip:3001 weight=3;
server slave-node1-ip:3001 weight=5;
server slave-node2-ip:3001 weight=5;
# 必要に応じてスレーブノードを追加
}
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://gpt_load_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;
# CFや他のプロキシサービスを使用する場合、リアルIPを設定
set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;
}
}
設定管理
統一設定要件
AUTH_KEY
同一である必要があります(管理キー)DATABASE_DSN
同一である必要がありますREDIS_DSN
同一である必要がありますIS_SLAVE
スレーブノードはtrueに設定動的設定同期
- • システム設定はMySQLに保存され自動同期
- • グループ設定はすべてのノードにリアルタイム配信
- • キー状態はRedisを通じてリアルタイム共有
- • 設定変更時にサービス再起動は不要
監視と運用
ヘルスチェック
ノード健康状態
# ノード状態確認
curl http://node:3001/health
# レスポンス例
{
"status": "healthy",
"timestamp": "2025-07-15T12:56:00Z",
"uptime": "11.822967ms"
}
クラスター状態監視
- • 各ノードのリクエスト量とレスポンス時間を監視
- • データベースとRedis接続状態を確認
スケーリングと容量管理
水平スケーリング
- • 必要に応じてスレーブノード数を増加
- • ロードバランサー設定を更新
- • 新しいノードが自動的に設定を同期
- • 既存サービスにシームレスに統合
グレースフルシャットダウン
- • ロードバランサーからノードを削除
- • 既存リクエストの処理完了を待機
- • コンテナに停止信号を送信
- • 関連リソースとログをクリーンアップ
ベストプラクティス
✅ 推奨事項
- • コンテナオーケストレーションツールの使用(Docker Swarm/K8s)
- • データベースとRedisの高可用性設定
- • 包括的な監視とアラートシステムの設定
- • 設定とデータの定期的なバックアップ
- • 統一デプロイメント用の設定管理ツールの使用
- • ブルーグリーンデプロイメントまたはローリングアップデートの実装
❌ 避けるべき事項
- • データベースまたはキャッシュの単一障害点
- • ノード間の設定不整合
- • ネットワーク遅延と分割問題の無視
- • 監視とログ収集の不足
- • 大量のノード設定の手動管理
- • 本番環境設定の直接変更