iT邦幫忙

0

資料庫系統架構

目前公司的應用服務與資料庫在同台伺服器運行。
公司計劃 User <-> 應用伺服器 <-> 資料庫伺服器 分離成三層式架構甚至分散式。

User <-> 負載平衡 <-> 應用Server(多台) <-> 資料庫系統
但怕資料庫伺服器還是負載,所以在加上一台負載平衡
User <-> 負載平衡 <-> 應用Server(多台) <-> 負載平衡 <-> 資料庫系統(多台)
1.這樣是否架構是否可行?

2.在資料庫伺服是多台下時,是要執行分散式資料庫設計(以拆資料表結構方法),以SQL程式分配寫入不同資料庫伺服器的表位置?
2-1.那前方就不用掛負載平衡嗎? 因為已經將各功能的表分散負載

3.若是前方是有掛負載平衡對應多台資料庫,每台資料庫伺服器的資料即時同步,是使用Sql Server 的復寫方式還是鏡像技術?就不用重新設計拆資料表?

看更多先前的討論...收起先前的討論...
wtya iT邦新手 5 級 ‧ 2012-01-06 11:54:20 檢舉
剛看到DB要做覆載平衡我也傻眼了一下>< ~
不過也不只cluster可以用~~
也可以考慮用鏡像(Database Mirroring )
或是用Log Shipping 。
不過系統規劃還是老話一句就只
"沒有最好的方法,只有最適用的方法"


提供相關聯結:
Database Mirroring
http://msdn.microsoft.com/en-us/library/ms189852.aspx
http://technet.microsoft.com/zh-tw/library/ms131373(SQL.90).aspx
log shipping
http://msdn.microsoft.com/en-us/library/bb895393.aspx
ymtangg iT邦新手 5 級 ‧ 2012-01-12 14:36:27 檢舉
感謝提供方法,因第一次接觸資料庫系統建置,實務經驗不多,目前看到這篇文
http://caryhsu.blogspot.com/2011/03/sql-server-load-balancing.html 講解滿清楚。

程式執行Insert及update較多所以朝這兩方向做測試~
Cluster:將多台DB Server cluster 服務 -> 對應一外部儲存體。
是否可以架設成?
假設有兩台做Cluster,DB的儲存體都對應到其中一台Cluster的內部儲存體,這樣當儲存體Cluster反而沒效果嗎?

Replication(複寫):多台同時讀寫,不分唯讀(Select)伺服器。
sam0407 iT邦大師 1 級 ‧ 2012-01-18 10:40:54 檢舉
程式Insert及update較多,I/O及CPU都是可能的瓶頸點,如果瓶頸是在I/O,作Cluster時只是原有Disk Array加Controller多接一台主機的狀況,那將無助於改善效能問題,當然如果因為要作Cluster會將原有低階的Disk Array換高階機種,那效果絕對會有改善。

我印象中您要採取的這種作法,Application Server上的AP是有限制的,一定都要是.NET 2.0以上才有支援,您再和您們家的程式設計師確認看看吧!
caryhsu iT邦新手 5 級 ‧ 2012-01-18 15:15:51 檢舉
如果您有需要架設SQL Server Cluster時,您可以參考下列的連結先將您的IO進行優化,另外在關於 Load Balance 的架構選擇上,Replication是一個不錯的選擇,但是建議你需要注意在多台同時讀寫時,可能造成資料衝突的問題。

SQL Server 2008 R2 容錯移轉叢集環境架設 - 利用 VM 與 Windows Storage Server - Part I
http://caryhsu.blogspot.com/2011/07/sql-server-2008-r2-vm-windows-storage.html
SQL Server 2008 R2 容錯移轉叢集環境架設 - 利用 VM 與 Windows Storage Server - Part II
http://caryhsu.blogspot.com/2011/08/sql-server-2008-r2-vm-windows-storage.html
SQL Server 2008 R2 容錯移轉叢集環境架設 - 利用 VM 與 Windows Storage Server - Part III(終)
http://caryhsu.blogspot.com/2011/08/sql-server-2008-r2-vm-windows-storage_22.html
SQL Server - 雙主動模式叢集環境架設
http://caryhsu.blogspot.com/2012/01/sql-server.html
SQL Server 儲存設備 (Storage) 最佳調整作業
http://caryhsu.blogspot.com/2011/02/sql-server-io.html
jojojjjo iT邦新手 4 級 ‧ 2015-05-26 21:09:49 檢舉
要規劃資料庫也要考慮做好備份, 否則出現問題, 什麼也救不了。
可以參考 http://www.ahsay.com/jsp/tc/home/
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
20
Ray
iT邦大神 1 級 ‧ 2012-01-04 22:36:26
最佳解答

ymtangg提到:
負載平衡 <-> 資料庫系統(多台)

別鬧了, DB 哪有人這樣做負載平衡的...有哪家的 Load Balancer 可以讓你這樣用?

應該要組成 DB Cluster 才對....

在 Cluster 的環境中, DB 主機可以有很多台, 但是大家的後端都接到同一個外部儲存體 (通常是 SAN), 所有主機都寫入同一個儲存體內的一個 DB 而已, 也因為只有一個儲存體, 一個 DB, 所以主機之間根本沒有同步的需要.

8
Albert
iT邦高手 1 級 ‧ 2012-01-04 16:28:49

目前公司的應用服務與資料庫在同台伺服器運行

先分了再說

目前家裡的 [載小孩上課] 與 [上班工作] 用同一台 [小轎車] 運行

我是否要買 大巴士 + 平衡派遣車系統 + 大7 + 法拉利 ?

12
sam0407
iT邦大師 1 級 ‧ 2012-01-05 09:24:51

回答您的問題如下:
1.如同Raytracy大所言,負載平衡設備是不能解決資料庫負載過重的問題,但DB Server效能不足的原因很多,應詳細探究為何效能不足,架DB Cluster能解決部份問題,但不一定能帶來太大的效能上的改進。

2.拆Table結構是一個方法,通常是用在資料量特大的Table才建議,但用這種方式程式開發人員保證會很痛苦,如果真要採取這種架構,建議您程式架構要多一層資料存取層,商業物件不能直接下SQL存取資料庫資料,要透過資料存取層元件來存取資料庫資料,才能避免程式設計師的人為錯誤。
2-1.是

3.還是建議您先分析資料庫效能瓶頸可能會出現在那裡再來決定架構,根據我個人經驗,Disk I/O是最大的問題,而造成Disk I/O的原因通常是Index沒設好或程式設計師的SQL指令沒考慮到因資料長大產生的效能問題,這些問題都先排除後再考慮作資料庫的覆寫或鏡像,將複雜的查詢指令、BI報表及Data Mining的資料來源指向覆寫或鏡像出來的那台主機,這樣應該就可以解決您的問題。

ymtangg iT邦新手 5 級 ‧ 2012-01-06 09:47:48 檢舉

感謝您的回答,目前服務原本就拆成數台Server服務都各自有DB,但進來量大時某台就會負載,但資料庫又還是使用access沒有正規化,又想換成三層式結構,所以才會怕原本是每台都處理自已的DB,合成DB Cluster時,會不會效能更差。其實拆Table已經依每日重新另一張表減少一張表筆數過多。 目前先準備二台做DB Cluster,我想也只有嘗試下去才知道是部適合。

6
hankyeh
iT邦新手 4 級 ‧ 2012-01-05 15:45:40

1.理論上可以行的通
但是通常沒有人在作DB 的 LB
不過沒人做不表示不能做,因為小弟的系統有把DB 接LB
但是只是把它當熱切換器而己

如果資料量大到一台DB無法負擔的話
考量拆DB的時後首要考量是你資料的同步該如何處理

2.不建議 速度會太慢
2.1 MYSQL 有M-S、M-M、讀寫分離等等技術
3.建議直接拿四台SERVER做CLUSTER

在做資料庫多台併行前要先決定你的資料一致性要多高
如果可以容忍有時間差的同步
可以考慮Big Table 架構的資料庫來進行處理
否則就是加快取吧~~
盡量把 讀/寫 的任務分散開來做

我要發表回答

立即登入回答