linux實現DNS輪詢實現負載平衡
導讀 | DNS 輪詢機制會受到多方面的影響,如:A記錄的TTL時間長短的影響;別的 DNS 伺服器 Cache 的影響;windows 客戶端也有一個DNS Cache。這些都會影響 DNS 輪詢的效果。因此 DNS 的輪詢機制並不能做為一個 load balancing的解決方案,只能作為一個 load distribution 方案。 |
不過有一個引數你可以試試看是否能調整一下輪詢的效果:
在 named.conf 中可以設定 bind 的 round-robin 的給出結果的順序:
options { rrset-order { order random; }; };
rrset-order 支援三個引數:fixed, random, cyclic 。
fix 會將多個A記錄按配置檔案的順序固定給出
random 會隨機給出
cyclic 會迴圈給出
DNS輪詢就是指DNS伺服器將域名解析請求按照A記錄的順序,逐一分配到不同的IP上,同時在一定程度上也實現了簡單的負載均衡。
我們先看一下 WINDOWS2003下如何設定DNS輪詢。比如:有兩臺WEB主機,A主機ip是 192.168.1.1,B主機ip是192.168.1.4 , 企業裡有單獨一臺DNS伺服器,然後在該DNS伺服器的正向區域裡(域名為haiquan.net)分別建立兩個主機A記錄,第一個主機記錄的記錄IP是 192.168.1.1, 第二個主機記錄的記錄IP是192.168.1.4,附圖:
轉:
實現DNS輪詢實現負載平衡
然後在DNS主機QINGYG上點選右鍵選擇屬性,在出現的對話方塊中勾選"啟用迴圈",如圖:
注意:網路掩碼排序可以根據子網掩碼來判斷dns地址和客戶端是否在同一個網段或者離的比較近,然後優先返回較近的伺服器的地址。
設定完畢後,我們看一下效果:
注意:WINDOWS會快取DNS結果,為方便觀察輪詢情況,我們需要用"ipconfig /flushdns"來清空DNS快取。
下面我們看一下LINUX下如何設定DNS輪詢,以RHEL 5為例:
1、首先需要安裝BIND並搭建DNS伺服器(具體DNS搭建過程請參考相關資料)
#yum install -y bind* caching-nameserver*
安裝DNS伺服器一般需要安裝以下三個資料包:
bind-utils-9.3.3-7.el5
查詢用
bind-chroot-9.3.3-7.el5
安全機制
caching-nameserver-9.3.3-7.el5
配置檔案
2、修改區域資料配置檔案(example.com.db),這裡主要看一下DNS輪詢配置
IN MX 10 mail.example.com. ... ... mail IN A 192.168.1.9 IN A 192.168.1.10 IN A 192.168.1.11
在以上配置中,mail.example.com對應了3個IP地址,此時具體選擇哪一條A記錄,是由rrset-order語句決定的。另外,在反向解析檔案中,這3個IP也都要對應mail主機,以免有些郵件伺服器為了反垃圾郵件進行反向查詢時出現問題。
這是在 /etc/named.conf 檔案中 options 語句有關rrset-order配置的一個例子:
rrset-order { class IN type A name "mail.example.com" order random; order cyclic; };
這個設定會使處於IN類中的A記錄的響應以隨機順序返回,IN 類以"mail.example.com"為字尾。其他的記錄以迴圈記錄被返回。
rrset-order 支援三個引數:fixed, random, cyclic 。
fixed 將多個A記錄按配置檔案的順序固定給出
random 隨機給出
cyclic 迴圈給出
注:rrset-order語句並不被BIND9支援,BIND9目前只支援"random-cyclic"排序,伺服器隨機選擇RRset集中的開始點,有順序返回在那個點開始的記錄。
3、測試看結果:
[root@linux252:/]#host mail.example.com mail.example.com has address 192.168.1.9 mail.example.com has address 192.168.1.10 mail.example.com has address 192.168.1.11
總結一下:
DNS輪詢的配置是比較方便的,如果網路擴增,新增的Web伺服器只要增加一個公網IP即可。 但相對來說,DNS輪詢也有其自身的一些缺點,這個工作當中也是我們需要注意的。
其一:如果某臺伺服器當機,DNS伺服器是無法知曉的,仍舊會將訪問分配到此伺服器。修改DNS記錄全部生效一般要1-3小時,甚至更久;
其二:如果幾臺Web伺服器之間的硬體配置不同,導致能夠承受的壓力也是不同的,但是DNS輪詢解析目前不能很好的按權重進行分配。
其三:如果是 需要身份驗證的網站,DNS解析無法將驗證使用者的訪問持久分配到同一伺服器。雖然有一定的本地DNS快取,但是很難保證在使用者訪問期間,本地DNS不過 期,而重新查詢伺服器並指向了新的伺服器,那麼原伺服器儲存的使用者資訊是無法被帶到新伺服器的,而且可能被要求重新認證身份,而且來回切換時間長了各臺服 務器都儲存有使用者不同的資訊,對伺服器資源也是一種浪費。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2709269/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java實現負載均衡演算法--輪詢和加權輪詢Java負載演算法
- 在 Linux 上用 DNS 實現簡單的負載均衡LinuxDNS負載
- 幾行程式碼實現負載均衡輪詢演算法行程負載演算法
- ajax實現輪詢
- 在Linux中,如何實現負載均衡?Linux負載
- GRPC 負載均衡實現RPC負載
- Ribbon實現負載均衡負載
- nginx實現負載均衡Nginx負載
- 使用輪詢&長輪詢實現網頁聊天室網頁
- Locust如何實現逐步負載?負載
- HaProxy 實現 MySQL 負載均衡MySql負載
- SpringCloud微服務中使用RestTemplate+Ribbon實現負載均衡(實現方法+實現原理+替換負載均衡策略)SpringGCCloud微服務REST負載
- Linux下玩轉nginx系列(五)---nginx實現負載均衡LinuxNginx負載
- 使用YARP來實現負載均衡負載
- Python實現簡單負載均衡Python負載
- nginx+tomcat實現負載均衡NginxTomcat負載
- dubbo(三):負載均衡實現解析負載
- CentOS7 實現 Keepalived + Nginx 實現高可用 Web 負載均衡CentOSNginxWeb負載
- Haproxy搭建 Web 群集實現負載均衡Web負載
- Nginx如何實現四層負載均衡?Nginx負載
- orleans叢集及負載均衡實現負載
- Keepalived實現Nginx負載均衡高可用Nginx負載
- Nginx實現簡單的負載均衡Nginx負載
- Docker Compose+nginx實現負載均衡DockerNginx負載
- 超實用:實現負載均衡技術的方式負載
- Python 使用 backoff 更優雅的實現輪詢Python
- Nginx實現請求的負載均衡 + keepalived實現Nginx的高可用Nginx負載
- 放電消納負載如何實現的負載
- Nginx如何實現負載均衡釋出策略?Nginx負載
- RHEL 7配置HAProxy實現Web負載均衡Web負載
- SpringCloud Fegin結合Ribbon實現負載均衡SpringGCCloud負載
- LVS+Keepalived 實現高可用負載均衡負載
- haporxy+keepalived實現負載均衡+高可用負載
- jmeter壓力測試實現負載均衡JMeter負載
- 伺服器負載均衡原理及實現伺服器負載
- nginx實現兩臺服務負載均衡Nginx負載
- nginx讓多個tomcat實現負載均衡NginxTomcat負載
- 在Linux中,什麼是負載均衡,並且如何在Linux中實現它。Linux負載