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

来源:百度文库 编辑:神马文学网 时间:2024/04/28 03:32:31
低成本「網站負載平衡」技術備忘
幾天前在Linux Today 看到了這篇文章:Linux.com - How to configure a low-cost load-balanced LAMP cluster (LAMP, Linux & Apache & MySQL & PHP / Perl / Python)
以下是基於該篇文章進行實作後的心得與備忘:
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 會同時取用多個站台的資料
參考資料
微軟技術社群: 微軟專家線上對談 Q&Azytrax.com: HOWTO - Configure Load Balancing鳥哥的 Linux 私房菜: 簡易 DNS 伺服器設定
利用 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 路徑中, 就能互相以該身份登入對方的電腦, 而不需輸入密碼.
參考資料
使用 rsync (全自動網路備份法) by OLS3rsync 資料同步 by 藍色泡泡RSYNC INTRODUCTION (HTML Edition) by 帕胡德rsync 官方網頁
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

兩條線路的建置方案
目的: 頻寬負載平衡

Posted by Jamyy at 2006年04月28日 17:38
from:http://cha.homeip.net/blog/archives/2006/04/post_13.html#more