Home | Mirror | Search

4. 伺服器部署與網絡拓撲

所謂大型網站主要的特點是訪問量大,既海量訪問,對頻寬要求大,而在中國的網絡環境比較複雜,單單靠一家也難保訪問的快速、穩定,我們可能選擇多家網絡運營商,才能得到保障。

我們不得不把伺服器分散部署到各地

4.1. 小型網站

一個IP,多台伺服器流水綫方式解決方案。

這種方案必須使用帶有雙網卡的伺服器,建議選擇千兆網卡,web伺服器與database連接建議採用交叉綫互聯,不要通過Hub,Switch連接。

當web和database在同一台伺服器是建議採用 UNIX SOCK 來連結資料庫,以代替TCP/IP Socket。

以上圖中的第三套方案為例,當用戶訪問網站時,通過電信交換機連接到cache伺服器,有兩種情況。第一種是靜態html檔案或圖片,將判斷是否被緩存,如果緩存直接反饋給用戶否則連結web伺服器。第二種動態腳本,將處理立即送給web伺服器。如果動態腳本有請求資料庫操作,將連接database伺服器。

這種方式適合中小型企業,非互聯網運營商,僅僅是用一個IP實現。

兩個IP,多台伺服器解決方案。

建議你吧圖片,縮圖單獨使用一台伺服器實現。

多個IP,多台伺服器解決方案。

這種方案要注意伺服器全部暴露在WAN上,一定要謹慎設置iptables規則。

4.2. 集群網站

下面是負載均衡的例子

過程 18.1. 過程訪問演示

  1. 訪問用戶 www.example.com 網站

    用戶輸入網址: www.example.com回車

  2. dns

    域名伺服器將www.example.com解析到load balancing負載請均衡調度伺服器。

  3. load balancing

    負載均衡器根據調度算法分配到某個squid節點上

  4. squid

    靜態規則:判段是否是緩存,如果已經緩存從cache中直接取出內容,否則請求web伺服器

    動態規則:直接請求web伺服器

    請求web伺服器是將再次由load balancing分配web節點

  5. web

    web server 處理動態腳本,連接資料庫查詢。連接資料庫是仍然需要由load balancing分配database節點

  6. database

    database cluster

4.3. 聚合連接埠

Example 1 : host to host at double speed

          +----------+                          +----------+
          |          |eth0                  eth0|          |
          | Host A   +--------------------------+  Host B  |
          |          +--------------------------+          |
          |          |eth1                  eth1|          |
          +----------+                          +----------+

  On each host :
     # modprobe bonding miimon=100
     # ifconfig bond0 addr
     # ifenslave bond0 eth0 eth1

Example 2 : host to switch at double speed

          +----------+                          +----------+
          |          |eth0                 port1|          |
          | Host A   +--------------------------+  switch  |
          |          +--------------------------+          |
          |          |eth1                 port2|          |
          +----------+                          +----------+

  On host A :                             On the switch :
     # modprobe bonding miimon=100           # set up a trunk on port1
     # ifconfig bond0 addr                     and port2
     # ifenslave bond0 eth0 eth1

Example 3: High Availability in a Multiple Switch Topology
               |                                     |
               |port3                           port3|
         +-----+----+                          +-----+----+
         |          |port2       ISL      port2|          |
         | switch A +--------------------------+ switch B |
         |          |                          |          |
         +-----+----+                          +-----++---+
               |port1                           port1|
               |             +-------+               |
               +-------------+ host1 +---------------+
                        eth0 +-------+ eth1

Example 4: Maximum Throughput in a Multiple Switch Topology

Multiple switches may be utilized to optimize for throughput
when they are configured in parallel as part of an isolated network
between two or more systems, for example:

                      +-----------+
                      |  Host A   |
                      +-+---+---+-+
                        |   |   |
               +--------+   |   +---------+
               |            |             |
        +------+---+  +-----+----+  +-----+----+
        | Switch A |  | Switch B |  | Switch C |
        +------+---+  +-----+----+  +-----+----+
               |            |             |
               +--------+   |   +---------+
                        |   |   |
                      +-+---+---+-+
                      |  Host B   |
                      +-----------+

Example 5: Using multiple host and multiple switches to build a "no single
point of failure" solution.


                |                                     |
                |port3                           port3|
          +-----+----+                          +-----+----+
          |          |port7       ISL      port7|          |
          | switch A +--------------------------+ switch B |
          |          +--------------------------+          |
          |          |port8                port8|          |
          +----++----+                          +-----++---+
          port2||port1                           port1||port2
               ||             +-------+               ||
               |+-------------+ host1 +---------------+|
               |         eth0 +-------+ eth1           |
               |                                       |
               |              +-------+                |
               +--------------+ host2 +----------------+
                         eth0 +-------+ eth1
			

4.4. 關於伺服器遠程管理

將每一台伺服器暴露在廣域網上不是一個好主意,我的經驗是,目前伺服器基本都是雙網卡。

eth0: 用於對外訪問,如web伺服器僅僅開放80連接埠,其他連接埠不允許在廣域網上直接訪問。

eth1: 對內有一個私有區域網路,開放SSH的22連接埠。22連接埠僅僅能通過私有區域網路訪問,不能通過廣域網訪問。

在機房放置一台專門的管理伺服器並安裝有VPN服務,當遠程管理伺服器是通過VPN連接到這台伺服器,登錄到這台伺服器上,然後在通過SSH登錄到私有LAN上的其他伺服器進行遠程管理。

下面是VPN解決方案圖

comments powered by Disqus