背景:
公司測試環境的網關一直不能正常工作,每天都需要被前端催重啓,測試催重啓,移動端開發催重啓,簡直了。雖然只需要一行命令就可以重啓完成,但是內心還是覺得無比煩悶。要不把網關部署爲高可用的??
解決
這是一個不太大膽的想法,說搞就搞,把網關服務的代碼部署到測試環境的另一臺服務器上,然後讓兩個網關服務同時註冊到兩個Eureka。心裏想到,Eureka 是互相註冊,高可用的,現在兩個網關注冊到高可用的註冊中心,理論上高可用的網關不就輕鬆實現了嗎?
問題發現
在部署完成之後,簡單的測試了一下,發現如果我殺一個網關進程,整個服務還是不能正常工作,意味着高可用全是騙人的。一波操作猛如虎,一看戰績0-5。
解決問題
既然我可以在Eureka的控制檯看到兩個網關的實例,但是還是不能實現高可用,說明,我一開始就錯了。重新捋一捋網關這個東西。前端請求一個域名,然後網關吧這個鏈接轉發到相應的服務器。問題應該就出在這個域名這裏了,域名先被阿里雲解析,然後轉發到相應的服務器,然後在服務器上通過Nginx 轉發到相應的端口,那麼只要在nginx 那裏做一個負載均衡就可以了。
upstream mygateway{
server 172.16.*.**:10200 weight=1;
server 172.16.*.**:10200 weight=1;
}
server {
listen 80;
server_name testapi.sayyoo.cn;
large_client_header_buffers 4 16k;
client_max_body_size 300m;
client_body_buffer_size 128k;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffer_size 64k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://mygateway;
}
}
重啓NGINX,然後殺掉其中一個網關服務,終於實現了網管的高可用。