-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstart-ha.sh
More file actions
executable file
·204 lines (174 loc) · 5.5 KB
/
start-ha.sh
File metadata and controls
executable file
·204 lines (174 loc) · 5.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
#!/bin/bash
# 案件處理系統 HA 架構啟動腳本
# High Availability Architecture Startup Script
set -e
# 顏色定義
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 打印帶顏色的消息
print_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 打印標題
echo "=========================================="
echo " 案件處理系統 - HA 架構部署"
echo " Case Processing System - HA Deployment"
echo "=========================================="
echo ""
# 檢查 Docker 是否安裝
print_info "檢查 Docker 環境..."
if ! command -v docker &> /dev/null; then
print_error "Docker 未安裝,請先安裝 Docker"
exit 1
fi
if ! command -v docker-compose &> /dev/null; then
print_error "Docker Compose 未安裝,請先安裝 Docker Compose"
exit 1
fi
print_success "Docker 環境檢查通過"
echo ""
# 檢查必要的文件
print_info "檢查配置文件..."
if [ ! -f "docker-compose-ha.yml" ]; then
print_error "找不到 docker-compose-ha.yml 文件"
exit 1
fi
if [ ! -f "nginx/nginx.conf" ]; then
print_error "找不到 nginx/nginx.conf 文件"
exit 1
fi
print_success "配置文件檢查通過"
echo ""
# 檢查 Docker 鏡像
print_info "檢查 Docker 鏡像..."
if ! docker images | grep -q "case-api"; then
print_warning "case-api 鏡像不存在,開始構建..."
docker build -f Dockerfile.api -t case-api:latest .
print_success "case-api 鏡像構建完成"
fi
if ! docker images | grep -q "case-worker"; then
print_warning "case-worker 鏡像不存在,開始構建..."
docker build -f Dockerfile.worker -t case-worker:latest .
print_success "case-worker 鏡像構建完成"
fi
print_success "Docker 鏡像檢查通過"
echo ""
# 停止舊的服務
print_info "檢查並停止舊的服務..."
if docker-compose -f docker-compose-simple.yml ps -q 2>/dev/null | grep -q .; then
print_warning "發現運行中的簡化版服務,正在停止..."
docker-compose -f docker-compose-simple.yml down
print_success "簡化版服務已停止"
fi
if docker-compose -f docker-compose-ha.yml ps -q 2>/dev/null | grep -q .; then
print_warning "發現運行中的 HA 服務,正在停止..."
docker-compose -f docker-compose-ha.yml down
print_success "HA 服務已停止"
fi
echo ""
# 啟動 HA 服務
print_info "啟動 HA 架構服務..."
print_info "組件清單:"
echo " - Nginx 負載均衡器: 1 個實例"
echo " - API 服務器: 3 個實例"
echo " - Worker 處理器: 5 個實例"
echo " - Redis Master: 1 個實例"
echo " - Redis Replica: 2 個實例"
echo ""
docker-compose -f docker-compose-ha.yml up -d
print_success "HA 服務啟動成功"
echo ""
# 等待服務啟動
print_info "等待服務啟動完成(15 秒)..."
for i in {15..1}; do
echo -ne " 剩餘 $i 秒...\r"
sleep 1
done
echo ""
# 檢查服務狀態
print_info "檢查服務狀態..."
echo ""
# 統計運行中的容器
api_count=$(docker ps --filter "name=case-api" --format "{{.Names}}" | wc -l)
worker_count=$(docker ps --filter "name=case-worker" --format "{{.Names}}" | wc -l)
redis_count=$(docker ps --filter "name=case-redis" --format "{{.Names}}" | wc -l)
nginx_count=$(docker ps --filter "name=case-nginx" --format "{{.Names}}" | wc -l)
echo " ✓ API 實例: $api_count/3"
echo " ✓ Worker 實例: $worker_count/5"
echo " ✓ Redis 實例: $redis_count/3"
echo " ✓ Nginx 實例: $nginx_count/1"
echo ""
# 測試 API 健康狀態
print_info "測試 API 健康狀態..."
if curl -s -f http://localhost:8888/api/v1/health > /dev/null 2>&1; then
print_success "API 健康檢查通過"
# 顯示詳細健康狀態
health_status=$(curl -s http://localhost:8888/api/v1/health)
echo ""
echo "健康狀態詳情:"
echo "$health_status" | python3 -m json.tool 2>/dev/null || echo "$health_status"
else
print_warning "API 健康檢查失敗,可能需要更多時間啟動"
fi
echo ""
# 顯示訪問信息
echo "=========================================="
echo " 🎉 HA 架構部署完成!"
echo "=========================================="
echo ""
echo "📋 服務訪問地址:"
echo ""
echo " 🌐 前端測試界面"
echo " http://localhost:8888"
echo ""
echo " 📊 監控儀表板"
echo " http://localhost:8888/dashboard.html"
echo ""
echo " 📈 Nginx 狀態頁"
echo " http://localhost:8889/status"
echo ""
echo " 🔌 API 端點"
echo " http://localhost:8888/api/v1/health"
echo " http://localhost:8888/api/v1/cases"
echo ""
echo "📝 常用命令:"
echo ""
echo " # 查看服務狀態"
echo " docker-compose -f docker-compose-ha.yml ps"
echo ""
echo " # 查看日誌"
echo " docker-compose -f docker-compose-ha.yml logs -f"
echo ""
echo " # 停止服務"
echo " docker-compose -f docker-compose-ha.yml down"
echo ""
echo " # 擴展 Worker 數量"
echo " docker-compose -f docker-compose-ha.yml up -d --scale worker=10"
echo ""
echo "🧪 HA 容錯測試:"
echo ""
echo " # 停止一個 API 實例(測試容錯)"
echo " docker stop case-api-1"
echo ""
echo " # 重啟 API 實例(測試恢復)"
echo " docker start case-api-1"
echo ""
echo " # 查看負載均衡日誌"
echo " docker logs case-nginx | grep upstream"
echo ""
echo "=========================================="
echo ""
print_success "部署完成!請使用瀏覽器訪問 http://localhost:8888 進行測試"
echo ""