1. 程式人生 > 實用技巧 >使用ansible快速部署一個主流的Web架構

使用ansible快速部署一個主流的Web架構

拓撲:

wKioL1icKkeBk9nMAADZROqP5lk658.jpg

拓撲說明:

  1. 兩臺伺服器配置Keepalived+Nginx做雙主模型的Load Balance,主機名為lb1和lb2

  2. 兩臺伺服器配置lamp,用於處理動態資源請求,主機名為lamp1和lamp2

  3. 兩臺伺服器配置varnish作為靜態資源快取伺服器,主機名為varnish1和varnish2

  4. 兩臺伺服器配置Nginx用於處理靜態資源請求

  5. 額外需要一臺伺服器安裝ansible,使用ansible批量管理所有伺服器

關鍵技術點:

1. Keepalived配置了郵件報警指令碼,當節點的狀態發生改變時,會發送報警郵件(指令碼中的郵箱需修改)

2. Load Balance部分使用Nginx進行動靜分離

3. 排程動態資源流量時,為了繫結session會話,使用的是ip_hash演算法,如果使用sticky方式排程,需要調整快取規則,否則訪問靜態資源時由於擁有cookie資訊,資源無法被緩

4. 排程靜態資源流量時,為了提高快取命中率,使用的是ip_hash演算法。可以考慮使用consistent_hash演算法(一致性雜湊)。但經過測試,Nginx使用consistent_hash演算法時,無法實現對後端伺服器的健康狀態監測以及故障轉移。因此,如果需要使用consistent_hash演算法,建議使用Tengine

5. 關於靜態資源快取部分,使用的是多層級快取。前端LB上,Nginx配置了proxy_cache,用於存放少部分熱點資料,後端Varnish上存放經常被訪問的資料。由於測試用,前端LB上快取的時間很短

6. 所有web服務每天會分割一次access_log

7. 在響應報文中新增自定義Hearder,可顯示相應資源是從哪臺伺服器上獲取的,便於以後排錯

還可以進一步改進的地方:

1.實驗配置中的快取策略可以進一步修改和優化

2. varnish的日誌服務還未配置

3. 可以使用Tengine替代Nginx,使用consistent_hash演算法提高快取命中率的同時,分散快取的儲存位置

4.關於ansible的安全隱患:

由於使用金鑰方式進行通訊,因此一旦ansible server被非法登入,其他被管理節點也存在被篡改的風險。因此,可考慮專門建立一個ansible使用者用於和其他被管理節點使用金鑰方式進行ssh通訊,其他使用者如果需要使用ansible來管理伺服器,需要sudo至ansible使用者來執行ansible命令,這樣在日誌中會有相應的記錄

實驗環境:

所有伺服器ssh埠號:2222

ansibleserver與被管理節點的通訊方式: 使用金鑰方式進行ssh通訊,remote_user為root

所有伺服器使用hosts來解析主機名,因此所有伺服器的hosts需要保持一致

ansible_server Centos7.2

192.168.1.200

lb1 Centos 7.2

192.168.1.202

llb2 Centos 7.2

192.168.1.203

varnish1 Centos 7.2

192.168.1.208

varnish2 Centos 7.2

192.168.1.209

lamp1 Centos 6.5

192.168.1.101

lamp2 Centos 6.5

192.168.1.102

static_server1 Centos 7.2

192.168.1.205

static_server2 Centos 7.2

192.168.1.206

最終效果:

wKioL1icKnuj4tcBAAGNb-UWFYg034.jpg

wKioL1icKqyTF1PVAAF2HAKO6uc458.jpg

附件為ansible所需的所有配置檔案,包含了實驗中所需的所有角色,一共是兩個壓縮分卷。感興趣的可以下載測試


轉載於:https://blog.51cto.com/362475097/1896439