« »

低成本「網站負載平衡」技術備忘

以下是基於該篇文章進行實作後的心得與備忘:

  • Round Robin DNS 實作與測試
  • 利用 rsync 同步資料的方法
  • Web Site 資料同步注意事項
  • 同一線路多個 IP 的建置方案
  • 兩條線路的建置方案

環境: Fedora Linux with bind 9.2.x & rsync 2.5.x

Round Robin DNS

瞭解 Round Robin DNS

Round Robin: 巡迴排班之意
Round Robin DNS: 提供單一 Domain Name 多筆不同 IP 的查詢回應, 可說是簡易的 DNS Load-Balance
Server 端的觀點: 在 zone file 中, 同一個主機名稱設定多個不同 IP
Client 端的觀點: 查詢同一個網址, 每次所得到的 IP 都不一樣

Zone File 設定範例

$TTL 86400 @			IN SOA	dns.your.domain. root.your.domain. ( 						2006042801 						3H 						15M 						1W 						1H) 			IN NS		dns.your.domain. dns			IN A		123.123.123.123 www	0		IN A		123.123.123.123 www	0		IN A		123.123.123.124 www	0		IN A		123.123.123.125

其中, www 的 A-Records 即為 Round Robin 設置, 0 為 TTL (Time to live), 單位為秒. 若 DNS Server 因此 Loading 過重, 可酌量提高 TTL 數值.

Ping 測試

ping www.domain.name → Ctrl + C 中斷 → ping www.domain.name 查看回應的 IP 是否不同

Windows: 若 TTL 為 30 的情況下, 每次 ping 完經過 30 秒鐘才能 ping 出不同結果. 若要在 TTL 時間內 ping 出不同結果, 可執行: ipconfig /flushdns 強制清除 dns cache
Linux: 不管 TTL 的值為何, 每次 ping 都會回應不同 ip

網頁瀏覽測試

  • 直接連線: 一次只會連結某一站台
  • 透過 Squid Proxy: Proxy Server 會同時取用多個站台的資料

參考資料


利用 rsync 同步資料

rsync server (receiver)

vi /etc/xinetd.d/rsync

disable = no

vi /etc/rsyncd.conf

[label]
path = /path/to/save/data
auth users = sender_name *註
uid = root
gid = root
secrets file = /etc/rsyncd.secrets *註
read only = no

*註: 若要以 ssh 登入認證則免寫該行, 或不產生此檔亦可 (詳後述)

vi /etc/rsyncd.secrets

sender_name:password

chmod 600 /etc/rsyncd.conf /etc/rsyncd.secrets

chkconfig xinetd on

service xinetd start

netstat -ntulp | grep xinetd

tcp 0.0.0.0:873

rsync client (sender)

建立對應 rsync server: rsyncd.secrets 的密碼檔

vi /root/rsyncd.secrets

password

chmod 600 /root/rsyncd.secrets

以密碼檔登入 rsync server, 對應 rsync server: rsyncd.conf 設定檔的方法:
rsync -a –delete –password-file=/root/rsyncd.secrets /path/to/send sender_name@rsync.server.ip::label

以 ssh 登入 rsync server, 對應 rsync server: rsyncd.conf 設定檔的方法:
rsync -a –delete -e ‘ssh -l root’ /path/to/send rsync.server.ip::label

以 ssh 登入 rsync server, 指向任意路徑的方法:
rsync -a –delete -e ‘ssh -l root’ /path/to/send rsync.server.ip:/path/to/save/data

以 ssh 認證金鑰進行連線 (登入時免輸入密碼)

ssh-keygen -t rsa
cd /root/.ssh
mv id_rsa.pub authorized_keys
scp authorized_keys id_rsa root@other.linux.host:/root/.ssh

產生金鑰之後, 將公鑰: authorized_keys 與私鑰: id_rsa 置於每台 Linux 電腦登入身份家目錄的 .ssh 路徑中, 就能互相以該身份登入對方的電腦, 而不需輸入密碼.

參考資料


Web Site 資料同步注意事項

  • MySQL Replication 請參考本站: Replication in MySQL
  • 主 Web Server 資料更新後, 應立即執行 rsync 同步鏡射站台 (mirror site) 的資料
  • 以文字檔為儲存媒介的計數器、留言版應透過 NFS 共同寫入同一個檔案, 或併入 MySQL Database 中
  • 網路相簿所引用的多媒體檔案 (圖檔、影像檔) 可透過 NFS 共同存取, 或於資料更新後執行 rsync 同步資料
  • HTTP Log 應透過 NFS 寫入同一個路徑, 才能讓 Log 統計分析程式 (如: AWStats) 計算確實的流量
  • PHP Session 檔案應透過 NFS 寫入同一個路徑, 避免 User 切換頁面時, 因連入另一個 Server 而發生錯誤


同一線路多個 IP 的建置方案

目的: Server Loading 的 Load-Balancing

以一台 Linux NAT 配置 Multi-DMZ, 將 public ip #2 & #3 分別指向 Web Server #1 & #2
iptables -t nat -A PREROUTING -d public.ip.#2 -j DNAT –to-destination web.server.#1.lan_ip

iptables -t nat -A PREROUTING -d public.ip.#3 -j DNAT –to-destination web.server.#2.lan_ip


兩條線路的建置方案

目的: 頻寬負載平衡

您还可能感兴趣的内容

日志信息 »

该日志于2008-02-03 06:40由 x72 发表在1.Application分类下, 通告目前不可用,你可以至底部留下评论。

没有评论

发表评论 »


返回顶部