為了幫助充分利用AWS的託管服務快速構建起一套叢集環境,徹底去掉「單一故障點」,實現最高的可用性,我們準備了《低程式碼智慧叢集@AWS的架構與搭建方案》看完本文,帶你掌握「基於nginx設定伺服器叢集」。
如果你需要解決如下的問題,可以考慮搭建一套活字格@AWS智慧叢集:
本方案是低程式碼與亞馬遜AWS提供的一套高可用負載均衡解決方案,在低程式碼智慧叢集的基礎上,通過引入ALB等託管服務,進一步提升可用性。本方案提供的主要能力如下:
特別提示:智慧叢集不相容內建SQLite資料庫,您需要在外聯資料庫上構建資料表和業務。
叢集需要用到亞馬遜提供的EC2負載均衡器(ALB模式)、ElasticCache Redis叢集、Elastic File Systems、RDS for MySQL、CloudWatch託管服務,還需要用到nginx實現應用伺服器內部的埠轉發。對上述技術的瞭解程度,很大程度上決定了您搭建出的叢集的安全性、效能和可用性。
網路拓撲簡圖
為了實現高可用的目標,本方案的應用伺服器設計為位於不同可用區的2臺EC2,其他託管服務也選擇了多可用區的設定。
步驟1:設定EFS
在AWS控制檯中選擇EFS服務,建立檔案系統,點選「自定義」按鈕後,按照下面的推薦值完成設定:
建立完成後,等檔案系統的檔案系統狀態變成「可用」,點選剛建立的檔案系統,DNS名稱就是用來存取該EFS的地址,記錄下來備用。
步驟2:設定RDS
RDS的預設安全設定與活字格不相容。所以,在建立資料庫前,你需要建立引陣列,具體做法如下:
在AWS控制檯中選擇RDS服務,在「資源」區域,點選「引陣列」,建立新的引陣列,選擇和建立RDS時一致的版本,範例中組名和描述都設定為「huozige-aws」。點選建立好的引陣列,在搜尋方塊中輸入「log_bin_trust_function_creators」,然後點選「編輯引數」按鈕,將值修改為1。
然後回到控制檯,點選「建立資料庫」,點選「標準建立」後,按照下面的推薦值完成設定:
建立完成後,等資料庫的狀態變成「可用」,點選剛建立的資料庫範例,找到連線和安全性索引標籤下的「終端節點」,這個就是資料庫服務的地址,記錄下來備用。使用本地安裝的MySQL Workbrench等工具登入到該地址,建立一個userservicedb資料庫備用。
步驟3:設定EC Redis
在AWS控制檯中選擇ElastiCache服務,點選右側選單中「資源→Redis叢集」,點選「建立Redis叢集」後,按照下面的推薦值完成設定:
建立完成後,等叢集的狀態變成「可用」,點選剛建立的叢集,找到「主終端節點」,這個就是Redis的地址,記錄下來備用。
步驟4:設定應用伺服器
在AWS控制檯中選擇EC2服務,點選右側選單中「範例→範例」,點選「建立新範例」後,按照下面的推薦值完成設定:
建立完成後,等範例狀態變成「正在執行」後,點選檢視詳情,私有IPv4地址即內網IP,用於設定負載均衡器;公有IPv4 DNS是外網地址,用於監控(EC2範例停止後重新啟動時,公有IPv4地址會發生變化,所以,不能使用這個地址做監控),記錄下這兩個值備用。點選「連線」按鈕,進入SSH使用者端索引標籤,複製「範例」下的ssh命令,記錄備用。
在Windows電腦上,將下載的pem證書拷貝到%homepath%(如C:\Users\Will)下,這裡也是Windows終端的啟動目錄。啟動終端,用EC2共的ssh命令就可以遠端登入到該伺服器,執行下面的安裝和設定操作。
4.1 安裝中文字型
受到版許可權制,我們無法為您預置常用的「微軟雅黑」等中文字型,如果您需要匯出PDF功能,需要手動安裝字型,具體方法見 幫助檔案的第6節。
4.2 安裝和設定ngnix
nginx負責將各應用的埠統一成8200(可修改,需要和安全組的設定匹配)。
首先,我們需要安裝nginx。安裝完成後,修改ngnix.conf檔案
sudo apt-get update
sudo apt-get install nginx
在http節點下,為管理控制檯和每一個應用分別建立upstream
# 內建服務指向本機22345固定埠
upstream local-us{
server localhost:22345;
}
# 針對每個應用建立上游,指向本機即可
upstream local-e{
server localhost:8005;
}
然後,在http→server節點下,設定偵聽埠,過濾location並轉發管理控制檯和每一個應用
server {
# 對外的埠號
listen 8200;
server\_name huozige-aws-app-server.com;
proxy\_set\_header Upgrade $http\_upgrade;
proxy\_set\_header Connection keep-alive;
proxy\_set\_header Host $host;
proxy\_cache\_bypass $http\_upgrade;
proxy\_set\_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;
proxy\_set\_header X-Forwarded-Proto $scheme;
proxy\_set\_header X-Real-IP $remote\_addr;
# 轉發內建服務
location ^~ /UserService/ {
proxy\_pass http://local-us/UserService/;
proxy\_redirect default;
}
# 針對每個應用做轉發,去掉埠號
location ^~ /app\_e/ {
proxy\_pass http://local-e/app\_e/;
proxy\_redirect default;
}
}
組態檔修改完畢,讓nginx做熱載入,不中斷伺服器的前提下,讀取新的設定
sudo nginx -s reload
4.3 掛載EFS目錄
建立掛載用資料夾 /share,然後修改/etc/fstab檔案,再執行重新載入命令,將EFS的檔案系統掛載到該資料夾
sudo mkdir /share
sudo vim /etc/fstab
sudo mount -a
/etc/fstab的內容如下,其中fs-0402a832717e9d61e.efs.cn-northwest-1.amazonaws.com.cn為前面建立的NFS的地址:
fs-0402a832717e9d61e.efs.cn-northwest-1.amazonaws.com.cn:/ /share nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,\_netdev 0 0
4.4 設定活字格負載均衡
完成上述環境準備後,我們需要依次登入應用服務的管理控制檯站點(http://{應用伺服器外網地址}:22345/UserService/ManagementPage/LoginPage),完成叢集設定。設定頁面在【設定】索引標籤的【負載均衡設定】選單。
步驟5:設定ALB
ALB的設定分為負載均衡器和目標群組兩部分。在2022.08版本AWS中,ALB的設定介面大多數是英文。
5.1 設定目標群組
首先,你需要基於第四步中建立的應用伺服器資訊設定目標群組。
在AWS控制檯中選擇EC2服務,點選右側選單中「負載均衡→目標群組」,點選Create target group按鈕,按照下面的推薦值完成設定:
點選Next按鈕,在Step 2區域裡,新增步驟4中建立的應用伺服器的內網IP,將Ports設定為8200(步驟4中應用伺服器的應用埠);點選Include as pending below按鈕,將其新增到候選列表,再點選Create target group按鈕完成建立。
提示:沒有關聯到負載均衡器之前,targets的heath status都是Unused
5.2 設定負載均衡器
在AWS控制檯中選擇EC2服務,點選右側選單中「負載均衡→負載均衡器」,點選「建立負載均衡器」按鈕,按照下面的推薦值完成設定:
點選剛建立的負載均衡器,在描述索引標籤下的DNS名稱,就是叢集對外提供服務地址了。
步驟6:設定CloudWatch
在AWS控制檯中選擇CloudWatch服務,點選右側選單中「應用程式監控→Synthetics Canary」,點選Canary版本區域的「建立Cannary版本」按鈕,按照下面的推薦值完成設定:
點選「建立」按鈕後,系統需要一分鐘左右的時間進行處理,你需要留意剛才輸入的郵箱地址,系統會給你傳送一封郵件,點選該郵件上「Confirm subscription」連線,啟用郵件通知。
文內範例下載地址: