iT邦幫忙

2

apache2+mysql架設ha及load balance

目前因線上活動需求,需要高穩定性的server(活動期間三天24小時不停機)
需要服務為apache與mysql
目前Server狀態為
datacenter.example.com(Windows Server 2016 Datacenter) 架設mysql
s1.example.com(Ubuntu server 18.04 LTS)架設apache
目前機房有新增兩部server要做HA及負載均衡
且預計於Microsoft Azure加設一台server做異地備援(能再加更好)
DB(Mysql)及user上傳進來的檔案都需要及時同步
目前沒有方向
請各位大大協助指引

2 個回答

6
raytracy
iT邦大神 1 級 ‧ 2020-03-21 04:16:46
最佳解答

基本架構大概會像這樣, 實際上會有很多種不同的變化:

但是從您的敘述來看, 只是一個賭徒式的設計, 因為:
裡面用了一堆技術名詞 (HA, Load Balance, DR, Sync....)

看起來好像很專業, 也好像可以解決問題, 但其實你們並不知道:

  • 每秒鐘最高會有多少條連線要建立?
  • 每一個人走完流程要佔用多久的 session?
  • 每一個 web request 要花多久時間處理?
  • 每一個 DB transcation 要花多久時間完成?
  • 每秒鐘會有多少次 DB qeury 或 transaction?
  • 尖峰時段需要多少 bps 的連外頻寬?
  • DB 需要多少 Read/Write IOPS 才能負荷?
  • ......(還有很多問題這裡寫不完)

所以如果活動完沒事, 那單純是運氣好, 並不是這些技術發揮作用...

這就好像軍隊喊:
我有愛國者飛彈了, 所以可以攔截所有來襲導彈.
但事實上, 攔截成功率取決於:

  • 你如何部署防空飛彈的位置?
  • 你如何設計接戰準則與防禦策略?
  • 你如何訓練人員操作射控系統?
  • 你如何接收其他空防戰情來調度?

成功關鍵絕對不是: 我已經部署愛國者了! (vs 我部署 HA 了)

單就您所提供的資訊, 尚待釐清的疑問如下:

  1. 都選 MySQL 了, 為何是安裝在 Windows Server 上?
  2. 你們打算用多大的連外頻寬來收客戶?
  3. 尖峰時間每秒(或每分鐘)有多少人會連進來?
  4. 你用甚麼設備/軟體來擔任 Load Balancer 這個角色?
  5. 你自建的 Load Balancer 最大能同時承載多少條連線?
  6. 你自建的 Load Balancer 需要不要做 Session Persistence?
  7. 為何 HA 是用兩台 Server? 不是三台? 四台?....光兩台夠嗎?
  8. 為何是用 Apache Web 而不是 Nginx? Lightspeed?
  9. 為何沒有 Web Cache 來降低 Web Server 負荷並加速內容傳遞?
  10. 為何沒有使用 Redis/Memcached 來降低 SQL DB 的負荷?
  11. 應該用兩台16G RAM? 還是四台8GB RAM? 還是八台4GB RAM?
  12. 尖峰時間每台 Web Server 最多需要多少 CPU core? RAM?
  13. 尖峰時間每台 DB Server 最多需要多少 CPU core? RAM?
  14. 上傳資料要共用, 可是你的 Web Server 共用儲存體是甚麼?
  15. 寫入 DB 的資料要同步, 你的同步機制是甚麼?
  16. DB 的同步要 Multi-Master 還是 Master-Salve mode?
  17. DB 讀 vs 寫的比例是多少? 會不會寫入沒事, 卻被讀取打掛了?
  18. 你們怎麼做 Anti-DDoS 的防禦? (總不能假設世界上只有好人)
  19. 你們用甚麼壓測工具, 來驗證單機負荷與架構可承載的最大量?
  20. 地端這麼多台做 HA/LB/Replica, 為何 Azure 備援只有一台?
  21. 你們用甚麼語言/框架/協定開發網站應用?
  22. 你們的 Web 程式可以處理多主機 Scale-out 嗎?

我會反問一堆問題, 是因為樓主問的問題還不夠深入, 不夠精準, 打不到問題的核心, 當然也不會有真正有用的答案, 頂多引來一堆雜談閒聊. (閒聊聯繫感情也是不錯啦, 只是看不到真正的答案)

以前討論過一些, 先了解一下你們要面對的問題有那些:
ITHelp: 每日千人之主機與程式處理?
這些東西, 不會因為你加上了一堆 HA/Load Balance 就自動消失, 你還是要自己動手去處理.

如果老闆有在看的話:
架構設計應該是 Infra 架構師或是 SRE 工程師的專業; 找寫程式的人「順便」來兼架構設計, 以為這樣就叫 DevOps? 別折騰它們了, 程式師平常寫程式就已經耗盡腦力, 哪裡還有多餘的精力, 去鑽研探討系統架構? 厲害的架構師是因為累積了十幾二十年的失敗經驗, 有一堆公司撒錢讓他去反覆磨練, 才會知道該怎麼做, 通常這樣的人才在台灣大約價值年薪 200~300 萬左右, 國外可能近千萬年薪.

你會找肝膽腸胃科醫師, 來幫你開椎間盤突出手術嗎? 不敢嘛....
那怎麼會找程式設計師, 來幫你設計系統架構呢?

OS, Web, Cache, Load Balancer, DB Replica, DR....
這些根本都不是程式設計師的本職學能與專長啊...

不該把 C1K 的成本經驗, 線性套用到 C10K 場景來.
有些事情, 撒了錢也不一定能解決, 因為是盲目地灑:
[問卦] 有沒有館長被騙330萬,損失上千萬的八卦
館長 300 萬的新網站,究竟出了什麼問題?

但或許, 樓主的問題根本也沒這麼嚴重, 是我想太多罷了.

周一才幫一個客戶查修: 上線 1,000 人 (C1K) 就當掉的網站, 結果是改寫首頁裡面的計數器就解決了...連架構都不用改....

如果樓主對架構設計有興趣, 我們可以慢慢聊, 鑽研到甚麼不懂的地方, 來問都會有各路答案提供. 但是, 如果眼前馬上要生出一個可以上線的實戰架構, 那就不是在這裡幾句問答可以解決的事情....

你可以看看有多少種變化形, 因場景而異:
Google: web high availability

看看別人怎麼思考高流量的:
https://github.com/TritonHo/slides/blob/master/Taipei%202019-10%20talk/concurrency.pdf

https://github.com/TritonHo/slides/blob/master/Singapore%202019-03%20talk/redis-ratelimit.pdf

https://www.facebook.com/groups/616369245163622/permalink/1423467594453779/

https://blog.frost.tw/posts/2020/02/23/TGONext-The-plan-for-high-concurrency/

(我還沒問樓主怎麼做效能監測的? 沒有監測數據, 要如何設計? )

看更多先前的回應...收起先前的回應...
echochio iT邦高手 1 級 ‧ 2020-03-21 08:18:32 檢舉

的確提問的被打臉...
單是看到 windows 架 ...
感覺錢亂花?
還是隨手拿機器?
沒有人建議 windows 強項是 IIS & mssql ..

感謝大大回答
echochiowindows 上沒有apache阿......

s1.example.com(Ubuntu server 18.04 LTS)架設apache

每秒鐘最高會有多少條連線要建立?

50~100條

每一個人走完流程要佔用多久的 session?

約10分鐘

每一個 web request 要花多久時間處理?

未預估

每一個 DB transcation 要花多久時間完成?

未預估

每秒鐘會有多少次 DB qeury 或 transaction?

4~10次

尖峰時段需要多少 bps 的連外頻寬?

約2Mbps,總對外頻寬上傳20Mbps

都選 MySQL 了, 為何是安裝在 Windows Server 上?

前人留下我也很困惑,近期會改建在Linux上

你們打算用多大的連外頻寬來收客戶?

總對外頻寬下傳50Mbps,下傳20Mbps

尖峰時間每秒(或每分鐘)有多少人會連進來?

最多500人

你用甚麼設備/軟體來擔任 Load Balancer 這個角色?

尚未規劃

你自建的 Load Balancer 最大能同時承載多少條連線?

500~700

你自建的 Load Balancer 需要不要做 Session Persistence?

不需要

為何 HA 是用兩台 Server? 不是三台? 四台?....光兩台夠嗎?

預計在azure增加

為何是用 Apache Web 而不是 Nginx? Lightspeed?

為何沒有 Web Cache 來降低 Web Server 負荷並加速內容傳遞?
有的
為何沒有使用 Redis/Memcached 來降低 SQL DB 的負荷?

應該用兩台16G RAM? 還是四台8GB RAM? 還是八台4GB RAM?

目前都是8GB

尖峰時間每台 Web Server 最多需要多少 CPU core? RAM?

尖峰時間每台 DB Server 最多需要多少 CPU core? RAM?

上傳資料要共用, 可是你的 Web Server 共用儲存體是甚麼?

FreeNAS

寫入 DB 的資料要同步, 你的同步機制是甚麼?

mysql Replication

DB 的同步要 Multi-Master 還是 Master-Salve mode?

目前規劃Multi-Master

DB 讀 vs 寫的比例是多少? 會不會寫入沒事, 卻被讀取打掛了?

預估寫約等於讀

你們怎麼做 Anti-DDoS 的防禦? (總不能假設世界上只有好人)

cloudfare

你們用甚麼壓測工具, 來驗證單機負荷與架構可承載的最大量?

目前未規劃

地端這麼多台做 HA/LB/Replica, 為何 Azure 備援只有一台?

陸續增加中......

你們用甚麼語言/框架/協定開發網站應用?

codeigniter(PHP)

你們的 Web 程式可以處理多主機 Scale-out 嗎?

如果老闆有在看的話:
架構設計應該是 Infra 架構師或是 SRE 工程師的專業; 找寫程式的>人「順便」來兼架構設計, 以為這樣就叫 DevOps? 別折騰它們了, 程式師平常寫程式就已經耗盡腦力, 哪裡還有多餘的精力, 去鑽研探討系統架構? 厲害的架構師是因為累積了十幾二十年的失敗經驗, 有一堆公司撒錢讓他去反覆磨練, 才會知道該怎麼做, 通常這樣的人才在台灣大約價值年薪 200~300 萬左右, 國外可能近千萬年薪.

你會找肝膽腸胃科醫師, 來幫你開椎間盤突出手術嗎? 不敢嘛....
那怎麼會找程式設計師, 來幫你設計系統架構呢?

OS, Web, Cache, Load Balancer, DB Replica, DR....
這些根本都不是程式設計師的本職學能與專長啊...

目前現況......

如果樓主對架構設計有興趣, 我們可以慢慢聊, 鑽研到甚麼不懂的地方, 來問都會有各路答案提供. 但是, 如果眼前馬上要生出一個可以上線的實戰架構, 那就不是在這裡幾句問答可以解決的事情....

目前預估於7月初上線,目前努力規劃中

感謝大大,

fillano iT邦超人 1 級 ‧ 2020-03-21 14:07:12 檢舉

iis + fastcgi就可以跑php, python...在windows上並不是非apache不可的

raytracy iT邦大神 1 級 ‧ 2020-03-21 16:26:29 檢舉

DB R:W = 50:50?...
這在 Web 應用很少見, 你確定有量測過?

我給電商用的網站, 他們的 R:W = 98:2 而已....最多也只跑到 95:5...

fillano iT邦超人 1 級 ‧ 2020-03-22 10:59:26 檢舉

50:50...這還蠻少見的,不知道他有沒有至少分析一下架構跟資料流程XD

在技術問答區看到技術文章的答案
也是蠻少見的
/images/emoticon/emoticon73.gif

raytracy iT邦大神 1 級 ‧ 2020-03-22 20:07:32 檢舉

再來, 選擇 Master-Master replica 的原因是甚麼?
以前有實際營運過 M-M Cluster 的經驗嗎?

M-M Replica 沒事的時候看起來很理想, 可是一但整個 Cluster 出事了, 沒經驗的人可能會困個兩三天都還解不出來, 你們的活動可以停三天不讓客戶填資料嗎?

以您所說的 每秒 4~10 次 DB Query, 我們就當成是 10 QPS 或 TPS 好了, 這個量對 MySQL DB 來說, 算是非常低的用量, 8GB 記憶體, 4 Core CPU, 5000~10000 的 IOPS, 加上細心 tune 過的 my.cnf 內容, 和精心計算過的 SQL query 語法, 只用一台 DB 主機就足以應付...

如果擔心單機 Crash 的話, 頂多放一個 Master-Slave Replicate 去另外一台, 故障的時候用手動切換, 這樣的風險也比你整個 M-M Cluster 掛掉要容易救, 且救得更快....

當然, 如果你們對 M-M Cluster 查修很有經驗的話 (有把握在十幾分鐘之內救回來), 那就另當別論; 不過, 既然很有經驗, 怎麼還會來這邊問架構?

感謝大大細心回復

DB R:W = 50:50?...

回覆時看錯了...為89:11

M-M Replica 沒事的時候看起來很理想, 可是一但整個 Cluster 出事了, 沒經驗的人可能會困個兩三天都還解不出來, 你們的活動可以停三天不讓客戶填資料嗎?

了解,擔心的狀況為

如果擔心單機 Crash 的話, 頂多放一個 Master-Slave Replicate 去另外一台, 故障的時候用手動切換, 這樣的風險也比你整個 M-M Cluster 掛掉要容易救, 且救得更快....

目前將採您的建議,使用Master-Slave 架構

0
一級屠豬士
iT邦高手 1 級 ‧ 2020-03-21 11:44:20
為何 HA 是用兩台 Server? 不是三台? 四台?....光兩台夠嗎?

預計在azure增加

https://ithelp.ithome.com.tw/upload/images/20200321/20050647VnEReyGVRo.jpg

我要發表回答

立即登入回答