文章段落
很多人開始用雲端之後,就是把它當成傳統機房,一台一台開來用,但其實只是看不到實體機,所有動作都是透過網頁或遠端連線操作完成而已,雖然少了實體機房設備的維運,但仍然沒有充份利用雲端的優勢。
雲端帶給人們最大的優勢,就是快速、彈性和安全性,那底要如何發揮這三項優勢呢?這裡提供一個 GCP 基本架構給大家參考,就是 Load Balancer 和 Instance Group:
![GCP 基本架構 Load Balancer和Instance Group](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/026-1024x542.png)
我們先準備好一組自動擴展的機器,也就是執行個體群組 (Instance Group),當使用者流量從最前端的負載平衡進來,接著把前端流量導到不同的機器,如果流量突然變大,後端機器無法負荷的時候,Instance Group 就會自動加開機器,由負載平衡自動把流量導流到新機器上,這樣原有的機器就不會因為負載過重而崩潰。
以下我們就開始吧!
建立執行個體範本 Instance Group
準備執行個體範本,做法和開 VM 一樣,步驟如下:
有關 VM 怎麼開,可參考《開 GCP VM 要注意什麼?Compute Engine 開機詳細教學》。
![](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/001-1024x331.png)
為範本取名,然後設定機器規格:
![為範本取名,然後設定機器規格](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/002.png)
作業系統 Debian 10,允許 HTTP 流量,最重要的是要點開進階設定頁面:
![作業系統 Debian 10,允許HTTP流量,點開進階設定頁面](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/003-1-919x1024.png)
在管理頁面會看到 Startup script,我們要在這裡寫東西:
![Startup script](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/004.png)
Startup script 就是建立 VM 的時候,在開機完成時先自動執行一些指令,有點像當年 DOS 系統的 AUTOEXEC.BAT 開機執行檔。唉呀曝露我的年齡啊~沒關係我有一顆年輕的心!
如果你有把環境設定,或是架站的相關軟體、相依性套件或要部署的網站程式碼準備好,就可以寫指令在開 VM 時自動裝好,立即上線服務。就不用像上面提的, VM 一台一台開起來,再一台一台裝環境,再部署程式碼,太累了……。
在這裡我們貼上準備好的 script ,它其實就是自動裝好 apache ,並且寫一張網頁:
![Startup script 自動裝好apache,並且寫一張網頁](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/image-3.png)
程式碼在這:
#! /bin/bash
apt-get update
apt-get install -y apache2
cat <<EOF > /var/www/html/index.html
<html><body><h1>Hello World from Aaron at Cloud Ace!</h1>
<p>This page was created from a simple startup script!</p>
</body></html>
EOF
其他不用調整,直接按 Create 吧!
![建立 instance group](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/image-6.png)
它不是真的開機器,所以很快,幾秒就完成了!
![建立 instance template 完成畫面](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/image-7-1024x170.png)
再補充一下,除了 startup script 以外,使用 image 來做 template 會更好,尤其是你的系統環境超複雜的時候,每次開 VM 都要花半天才能上線的情況,用 image 可以幫你省下更多時間。
建立執行個體群組 Instance Group
真的要開機器了!
![建立 instance group](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/005-1024x321.png)
先取個名字為 aaron-web,之後的 VM 名字會自動帶 aaron-web-xxx。然後找一個 Zone 來開 VM。
![instance group 命名,設定 Zone](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/image-8.png)
我們選擇剛建好的 instance template,注意 Autoscale 模式一定要啟動。下方有一個 CPU 使用率 60%,表示 VM 很忙,忙到 CPU 使用率超過 60% 時,它就再開一台新的 VM 來幫忙服務。但我們稍候會做 Load Balancer ,它會有一個健康狀態檢查 Health Check ,會比較重要喔,這裡保持預設就好。
![設定 instance template 和 autoscale](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/006.png)
Cool Down Period 指的是,如果機器數量上來了,過一陣子之後,使用者變少了,那你開那麼多台機器,要不要自動刪除,這裡保持預設值。
再來就是重點了,你最小要幾台,最多要幾台。雖然會自動刪除,但因為錢錢的關係,還是要設一個上限,總不能讓它無止境開個100台吧!在這裡我們設5台就好。
![Coold Down Period](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/image-9.png)
最重要的地方來了,Health check
![設定 Health Check](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/image-10.png)
這個 Health Check 一定要設定,如果沒有就必須建立一個。
這裡取好名字,設定要檢查的是 HTTP Port 80,要跟上面的 Apache 服務一致,才能檢查到喔!
![設定 Health Check](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/image-11.png)
檢查的規則,例如 10 秒鐘檢查一次,每次等 5 秒看有沒有正常回應,如果連續2次正常,就判斷為健康,如果連續3次不正常,就判斷不健康。這裡也保持預設。
這是為了要告訴前端的 Load Balance :「我這台機器快掛了,流量先去別台吧!」
類似本店客滿,請去隔壁吃飯的概念。如果你開餐廳總不希望客戶真的去隔壁吃飯,所以要趕快生出幾間包廂,讓客戶都進來吃。
![設定 Health Check 判定規則](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/image-12.png)
還有一點點要設(不要急啊),Initial delay 指的是新的 VM 開機也要等,畢竟開機用的 CPU 很多,不要一開就判斷為不健康,所以你可以等久一點,例如 300 秒。
再來是,如果要讓 Health Check 可以運作,你要設定防火牆讓它可以去檢查你的機器喔!很多人在這一段都會忘記,然後 Load Balance 建好一直看不到 Health Check 的綠色勾勾,搞很久都不知道原因在哪裡,我是說我啦!
![Initial delay](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/007.png)
我們先把群組建起來,等等去設定防火牆也沒關係喔!
![Instance Group 建立完成](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/image-14-1024x231.png)
最後可以在主機頁面看到一台 VM ,上面有一個外部 IP,可以直接點擊它。
![點擊 Instance Group 中的一台機器](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/image-15-1024x187.png)
你會看到已經做好的歡迎頁面,這就是剛剛的 Startup Script 幫你做的事情喔!
![Instance Group 中的一台機器上的網頁](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/image-16-1024x284.png)
建立防火牆允許健康狀態檢查 Health Check
從選單 VPC Network 進去找到 Firewall
![建立防火牆規則允許健康狀態檢查 Health Check](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/008-1024x267.png)
取個名字,在這裡盡可能把名字寫完整,以利一眼辨識這一條防火牆規則的功用。
![設定防火牆規則](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/009-1024x1016.png)
![設定防火牆規則允許 Health Check 的 IP](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/010-1024x962.png)
![確認後建立防火牆規則](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/image-13.png)
建立負載平衡 Load Balancer
接下來終於到主角 Load Balancer 出場了,快來看看怎麼設定:
![建立 Load Balancer](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/011.png)
點擊建立 Load Balancer
![點擊建立 Load Balancer](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/image-18-1024x404.png)
因為我建的是 Web 服務,走 HTTP ,所以就選 HTTP(S) Load Balancing。如果你要建立 HTTPS 的服務,記得要準備好網域,在建立的過程把憑證放上去喔!
![選擇 HTTP(S) Load Balancing](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/012-1024x367.png)
因為流量是從外部進來,所以選擇 From Internet to my VMs
![From Internet to my VMs](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/013.png)
你會看到選擇後端服務 Backend services & backend buckets,後端服務可以接 Instance Group,而它也可以接 Cloud Storage Bucket,如果你的網站是靜態的,你其實可以直接把 HTML 檔放在 Bucket 裡面,根本就不用 Web Server 或是開任何機器來服務,非常省錢啊!!
![建立後端服務 Backend Service](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/015.png)
建立後端服務 Backend Service,一樣先取名字。
![建立後端服務 Backend Service](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/image-20.png)
選擇前面建好的 Instance Group ,Port 選80,其他保持預設,就可以按下 Done和 Create。
![選擇前面建好的Instance Group](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/016-1-760x1024.png)
Health check 也選擇之前建好的,如果需要記錄的話,就把 Logging 勾起來。
![如果需要記錄的話,就把 Logging 勾起來。](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/017.png)
你會看到目前完成的狀態,再點擊 Frontend configuration。
![設定前端](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/018-1024x383.png)
這裡是要指定一個 IP ,如果還沒有 IP ,也可以當場建立一個,像我早已準備好了嘿嘿!(明明就是上次測試的時候忘記釋放掉,各位不要像我一樣總是犯那些常見的低級錯誤啊!!)
![設定前端 IP](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/019-901x1024.png)
按下 Done 之後,應該會看到設定好的畫面,最後按一下 Review and finalize。
![最後 Load Balance 檢查](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/020-1024x588.png)
因為設定很多,要看一下是否設定正確,Backend services 的圈圈會一直在轉,是正常的,如果都沒問題,可以直接按下 Create。
![最後 Load Balance 檢查](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/021-1024x536.png)
接下來就靜待偉大的 Load Balancer 建立完成吧!真是令人興奮啊!!
確認 Load Balencer 啟動
速度很快,在我上一句話才打完字,它就出現了綠色勾勾,可見 Google 的負載平衡反應迅速,難怪再大的流量都不怕。
![Load Balance 建立完成](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/image-22-1024x425.png)
我們點擊 aaron-lb 進去看看,裡面有一個 Load Balance IP
![查看 Load Balance 訊息](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/022-1024x539.png)
我們直接複製它,貼到瀏覽器上來看看:
![Load Balance 呈現網頁](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/image-23.png)
太棒了,代表 Load Balance 有把我的訪問導到後端建立的 Web 服務上喔!
對 Load Balance 和 Instance Group 做壓力測試
又想開始想那些有的沒的了,沒錯,現在就是要送一堆流量,看看到底它們能不能撐得住!
點擊右上角的 Cloud Shell
![開啟 Cloud Shell](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/image-24.png)
安裝 siege 指令
sudo apt-get -y install siege
![安裝 siege](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/023-1024x414.png)
裝完馬上就可以測試了,真是無比興奮啊!!
測試指令 siege -c 250 http://[Load_Balance_IP]
準備…3…2…1…發射!!
siege -c 250 http://[Load_Balance_IP]
![進行壓力測試](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/024.png)
開始送流量了,因為我的機器很小,所以很快就撐不住,Health Check 馬上就檢查到機器不行了,就趕快去加開機器。
大概1分鐘的時間,1台機器瞬間變成4台了!
![Autoscale 從1台變成4台機器](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/image-25-1024x292.png)
每個 IP 都點進去看一下,證明我不是開假的機器~
果然都是依照我原有的範本,Autoscale 出來的!
![4台機器都是同一個網頁服務](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/image-26.png)
回來看一下整個 instance group 的流量
![整個 instance group 的流量](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/025-1024x418.png)
Siege 一打下去流量(藍線)真的飆高,後來機器為了回應,回傳的流量(紅線)也起來了。
再看一下 Autoscale 的狀態,使用率(紅線)超過 Capacity,就會馬上加開機器,讓使用率保持在 Capacity 可承受的量之下。
![Autoscale的狀態變化](https://storage.googleapis.com/cloudace-tw-blog/1/2020/09/image-27-1024x465.png)
好了,以上的過程,讓我們可以看到整個 GCP 基本的網路服務架構,任何進來的流量一律經過 Load Balancer,再分流到後端的機器,也能夠承受惡意的流量攻擊例如 DDoS;如果機器資源不夠,就會自動擴充以支援前端的需求,待前端流量退去,機器也能夠自動刪減,節省不必要的成本。
因此,GCP 基本的快速、彈性和安全性都有初步達成,這只是基本的喔,未來會再深入了解更進階的功能,達到更強的快速、彈性跟安全性。
對了,建立完成後,記得要刪掉相關服務,尤其是靜態 IP 喔!
參考文件:
https://cloud.google.com/load-balancing/docs/load-balancing-overview?hl=zh-tw