低成本「網站負載平衡」技術備忘
以下是基於該篇文章進行實作後的心得與備忘:
- 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

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

没有评论▼