高可用dns方案

來源:互聯網
上載者:User

 昨天老畢跟我討論dns的問題,今天想了想,其實實際在生產環境中用到的dns大體有3種:1.內網調用DNS  一般是每個機房一組,做ms結構,主要功能是供機房內部應用之間調用解析,減少對hosts的依賴,避免寫入程式碼。一般ms結構就可以了,不太會做其他的高可用。2.回源調用dns  和內網調用dns功能差不多,不過這個是跨機房的調用,而且一般會通過view做智能dns解析。比較常見的應用情境就是webcdn的回源dns,結構上和內部調用dns差不多。3.外網dns  提供各種針對外網的解析,A記錄,CNAME,MX等等。。作為使用者訪問的入口,其重要性也不言而喻,因此對可用性和擴充性以及效能要求會比較高。  一般的做法是在BGP機房做一個高可用的叢集做主要的解析工作,同時在雙線或者單線機房做一組冷備的高可用DNS叢集。  這裡討論下用lvs做dns高可用的方案,主要借鑒了mysql高可用的方案一般都是一個主庫,後面掛多個叢庫,叢庫前面使用lvs+keepalived做ha,程式寫入主庫,讀取叢庫)。具體的流程如下:1.使用者通過web前端來做dns的增刪改等操作如果是python程式的話,可以通過dnspython操作)。2.slave通過對比zone檔案的serial值來決定是否需要更新記錄。3.使用者查詢請求至由lvs(dr模式)+keepalived組成的前端負載平衡。4.lvs分發請求至slave server,最後由slave server直接向使用者響應請求。
由於dns一般情況是用udp協議的關於dns使用的協議可以參考之前的blog),而大家一般都是用lvs做tcp的load balance.在用lvs實現udp的load balance時主要注意以下幾點:1.添加realserver時選擇udp,設定檔中設定protocol UDP2.應用的監聽IP要設定為vip,在這個情境中可以更改slave dns的設定listen-on port 53 {vip;物理ip;};其中vip用來實現接收lvs的轉寄包並返回資料給使用者,物理ip用來實現master到slave的同步3.health check需要注意,lvs提供的HTTP_GET和TCP_CHECK都是基於TCP協議的TCP的SYNC包來檢查應用)對於udp的檢查可以使用MISC_CHECK的方式。比如下面個設定:

virtual_server vip 53 {     delay_loop 2     lb_algo rr     lb_kind DR     protocol UDP     real_server real_server1 53 {     weight 100       MISC_CHECK {          misc_path "/etc/keepalived/check_named.sh real_server1"          misc_timeout 5        }     }        real_server real_server2 53 {        weight 100     MISC_CHECK {          misc_path "/etc/keepalived/check_named.sh real_server2"          misc_timeout 5        }        }}
其中/etc/keepalived/check_named.sh的內容如下:
#!/bin/bashSERVER=$1OK=`nslookup  www.test.com $SERVER|grep ipxxxx`if [ "$OK" == "" ] ; then    exit 1;else    exit 0;fi
即返回0代表dns服務正常,返回1代表格服務異常,將會被lvs踢出。高可用的dns結構圖:

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/140211/22591Ka6-0.jpg" title="dns.png" alt="wKioL1L45CryaLcAAAGU1cxArMI275.jpg" />

最後附一個自己寫的spec檔案,用來實現chroot的自訂rpm包,繼承到yum源中實現dns的快速部署。
Name:           Vipshop-Bind-ChrootSummary:        This is for Vipshop dns server.Group:          System Environment/DaemonsVersion:        1.0Release:        0License:        Copyright 2011 Vipshop Inc.Source:         Vipshop-Bind-Chroot-1.0.tar.gzURL:            http://www.vipshop.comPackager:       EricNiVendor:         Vipshop Inc.Provides:       Vipshop Inc.BuildRequires:  gcc-c++%descriptionThis is DNS Service pakeage , and it only distributed in Vipshop Servers .%preptest -d /usr/local/named && rm -rf /usr/local/named[ `cat /etc/passwd|grep named|wc -l` -eq 0 ] && useradd named -M -s /sbin/nologinmkdir -p  /usr/local/named /usr/local/named/var/slaves  /usr/local/named/var/named /usr/local/named/var/etc  /usr/local/named/var/logmkdir -p  /var/named/chroot/etc/namedb /var/named/chroot/etc/log /var/named/chroot/etc/run   /var/named/chroot/var/run /var/named/chroot/dev/  /var/named/chroot/etc/namedb/slaves  /var/named/chroot/etc/namedb/acl%setup -n %{name}-%{version}%buildexport BIND_HOME=/usr/local/namedexport BIND_CHROOT_HOME=/var/named/chroot./configure --prefix=${BIND_HOME} --enable-threads  --sysconfdir=/etc  --disable-openssl-version-checkmakemake installcat > ${BIND_CHROOT_HOME}/etc/named.conf << "EOF"options {directory "/etc/namedb";version "vipshop-cdn-dns";pid-file "/etc/run/named.pid";listen-on port 53 {any;};allow-query {any;};recursion yes;dump-file "/etc/namedb/cache_dump.db";zone-statistics yes;statistics-file "/etc/namedb/named_stats.txt";};logging {   channel warning   {file "/etc/log/named.log" versions 3 size 2048k;   severity warning;   print-severity yes;   print-category yes;   print-time yes;  };   channel query   {file "/etc/log/query.log" versions 3 size 2048k;   severity info;   print-category yes;   print-severity yes;   print-time yes;   };category queries   {    query;   };category default   {    warning;   };};zone "." IN {type hint;file "named.root";};zone "localhost" IN {type master;file "localhost.zone";};zone "0.0.127.in-addr.arpa" IN {type master;file "slaves/localhost.rev";};zone "vipshop.com" IN {type master;file "vipshop.zone";notify yes;also-notify {180.186.22.62;};allow-transfer {     180.186.22.62;                };};key "rndc-key" {        algorithm hmac-md5;        secret "f8Na2kl/4NuCNPEZ0f2C1Q==";};controls {        inet 127.0.0.1 port 953                allow { 127.0.0.1; } keys { "rndc-key"; };};EOFcat > ${BIND_CHROOT_HOME}/etc/rndc.conf << "EOF"key "rndc-key" {        algorithm hmac-md5;        secret "f8Na2kl/4NuCNPEZ0f2C1Q==";};options {        default-key "rndc-key";        default-server 127.0.0.1;        default-port 953;};EOFcat > ${BIND_CHROOT_HOME}/etc/rndc.key << "EOF"key "rndc-key" {        algorithm hmac-md5;        secret "f8Na2kl/4NuCNPEZ0f2C1Q==";};EOFcat > /etc/rndc.conf << "EOF"key "rndc-key" {        algorithm hmac-md5;        secret "f8Na2kl/4NuCNPEZ0f2C1Q==";};options {        default-key "rndc-key";        default-server 127.0.0.1;        default-port 953;};EOFcat >  ${BIND_CHROOT_HOME}/etc/namedb/named.root << "EOF";       This file holds the information on root name servers needed to;       initialize cache of Internet domain name servers;       (e.g. reference this file in the "cache  .  <file>";       configuration file of BIND domain name servers).;;       This file is made available by InterNIC;       under anonymous FTP as;           file                /domain/named.cache;           on server           FTP.INTERNIC.NET;       -OR-                    RS.INTERNIC.NET;;       last update:    Jan 3, 2013;       related version of root zone:   2013010300;; formerly NS.INTERNIC.NET;.                        3600000  IN  NS    A.ROOT-SERVERS.NET.A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4A.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:BA3E::2:30;; FORMERLY NS1.ISI.EDU;.                        3600000      NS    B.ROOT-SERVERS.NET.B.ROOT-SERVERS.NET.      3600000      A     192.228.79.201;; FORMERLY C.PSI.NET;.                        3600000      NS    C.ROOT-SERVERS.NET.C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12;; FORMERLY TERP.UMD.EDU;.                        3600000      NS    D.ROOT-SERVERS.NET.D.ROOT-SERVERS.NET.      3600000      A     199.7.91.13D.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2D::D;; FORMERLY NS.NASA.GOV;.                        3600000      NS    E.ROOT-SERVERS.NET.E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10;; FORMERLY NS.ISC.ORG;.                        3600000      NS    F.ROOT-SERVERS.NET.F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241F.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2F::F;; FORMERLY NS.NIC.DDN.MIL;.                        3600000      NS    G.ROOT-SERVERS.NET.G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4;; FORMERLY AOS.ARL.ARMY.MIL;.                        3600000      NS    H.ROOT-SERVERS.NET.H.ROOT-SERVERS.NET.      3600000      A     128.63.2.53H.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:1::803F:235;; FORMERLY NIC.NORDU.NET;.                        3600000      NS    I.ROOT-SERVERS.NET.I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17I.ROOT-SERVERS.NET.      3600000      AAAA  2001:7FE::53;; OPERATED BY VERISIGN, INC.;.                        3600000      NS    J.ROOT-SERVERS.NET.J.ROOT-SERVERS.NET.      3600000      A     192.58.128.30J.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:C27::2:30;; OPERATED BY RIPE NCC;.                        3600000      NS    K.ROOT-SERVERS.NET.K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129K.ROOT-SERVERS.NET.      3600000      AAAA  2001:7FD::1;; OPERATED BY ICANN;.                        3600000      NS    L.ROOT-SERVERS.NET.L.ROOT-SERVERS.NET.      3600000      A     199.7.83.42L.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:3::42;; OPERATED BY WIDE;.                        3600000      NS    M.ROOT-SERVERS.NET.M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33M.ROOT-SERVERS.NET.      3600000      AAAA  2001:DC3::35; End of FileEOFcat > ${BIND_CHROOT_HOME}/etc/namedb/localhost.zone << "EOF"$TTL 86400$ORIGIN localhost.@ 1D IN SOA @ root (42 ; serial (d. adams)3H ; refresh15M ; retry1W ; expiry1D ) ; minimum1D IN NS @1D IN A 127.0.0.1EOFcat > ${BIND_CHROOT_HOME}/etc/namedb/localhost.rev << "EOF"$TTL 86400@ IN SOA localhost. root.localhost. (1997022700 ; Serial28800 ; Refresh14400 ; Retry3600000 ; Expire86400 ) ; MinimumIN NS localhost.1 IN PTR localhost.EOFcat > ${BIND_CHROOT_HOME}/etc/namedb/vipshop.zone << "EOF"$TTL  86400@     IN      SOA     ns1.vipshop.com.  root.vipshop.com.  (                                        2013051501 ; Serial                                        28800     ; Refresh                                        14400     ; Retry                                        3500000   ; Expire                                        86400 )   ; Minimum@        IN      NS      dns1@       IN      NS      dns2localhost       IN      A       127.0.0.1img1            IN      A       xxxximg3            IN      A       xxxximg2            IN      A       xxxximg2            IN      A       xxxxdns1            IN      A       xxxxdns2            IN      A       xxxxEOFcat > /etc/init.d/named << "EOF"#!/bin/bash## named           This shell script takes care of starting and stopping#                 named (BIND DNS server).## chkconfig: - 13 87# description: named (BIND) is a Domain Name Server (DNS) \# that is used to resolve host names to IP addresses.# probe: true                # Source function library.. /etc/rc.d/init.d/functions                # Source networking configuration.[ -r /etc/sysconfig/network ] && . /etc/sysconfig/network                [ -r /etc/sysconfig/named ] && . /etc/sysconfig/named         [ -f /usr/local/named/sbin/named  ] || exit 0       #  [ -f /chroot/named/etc/named.conf ] || exit 0        case "$1" in           start)                  # Start daemons.                  echo -n "Starting named:"                  daemon /usr/local/named/sbin/named -c /etc/named.conf -u named -t /var/named/chroot                  echo                  touch /var/lock/subsys/named                  ;;           stop)                  # Stop daemons.                  echo -n "Shutting down named:"                  #killproc named          killall named                  rm -f /var/lock/subsys/named                  echo                  ;;           status)          #status named                  pid=`pidof -o %PPID -x named`                  if [ -z $pid ]                  then                        echo "named is stopped!!!"                  else                        echo "named is running: pid is $pid"                  fi                  exit $?                  ;;           restart)                  $0 stop                  $0 start                  exit $?                  ;;           reload)                  /usr/local/named/sbin/rndc reload                  exit $?                  ;;           probe)                  /usr/local/named/sbin/rndc reload >/dev/null 2>&1 || echo start                  exit 0                  ;;           *)                  echo "Usage: named {start|stop|status|restart|reload}"                  exit 1        esac        exit 0EOFchmod 755 /etc/init.d/namedmkdir -p  /usr/local/named /usr/local/named/var/slaves  /usr/local/named/var/named /usr/local/named/var/etc  /usr/local/named/var/logmkdir -p /var/named/chroot/usr  /var/named/chroot/etc/namedb  /var/named/chroot/var/run /var/named/chroot/dev/  /var/named/chroot/etc/namedb/slaves /var/named/chroot/etc/run /var/named/chroot/etc/log /var/named/chroot/etc/namedb/aclchown named:named  /var/named/chroot -Rchown 700 /var/named/chrootmknod /var/named/chroot/dev/null c  1 3mknod /var/named/chroot/dev/random c  1 8cp /etc/localtime  /var/named/chroot/etc/sed -i 's/SYSLOGD_OPTIONS=\(.*\)/SYSLOGD_OPTIONS=\"-m 0 -a \/var\/named\/chroot\/dev\/log\"/g' /etc/sysconfig/syslog/etc/init.d/syslog restart%preif [ ! `grep named /etc/passwd` ];thenuseradd  -M named  -s /sbin/nologinfi%postchkconfig --add namedchkconfig named onchown named:named  /var/named/chroot -Rchown named:named /usr/local/named -Rchown 700 /var/named/chroot%cleanrm -rf /usr/local/namedrm -rf /var/named%files/etc/init.d/named/usr/local/named//var/named/chroot/%doc%changelog* Thu May 16 2013 Ericni <ericni@vipshop.com>.- Create SPEC file.

本文出自 “菜光光的部落格” 部落格,轉載請與作者聯絡!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.