在部署Hadoop的时候经常要更新每一个节点的hosts文件真是太麻烦,如果布署结点特别多,那将是非常麻烦的事情。这时我们需要一个自己的DNS服务器,仅向Hadoop集群 中的服务器提供域名解悉服务,而集群中的服务器也可使用该域名服务器查询集群外域名的解悉,一举多得。
一、安装Bind服务器
$ sudo apt install bind9
二、配置服务器
我们约定我们集群内的顶级域名是
ds.com
,DNS服务器IP为192.168.122.10,我们要布署两台服务器,分别是namenode.ds.com(192.168.122.11)
和datanode.ds.com (192.168.122.12)
。
1. 配置FORWARD
为什么要配置FORWARD呢?因为集群中除了要解悉集群内的服务器的域名,同时在解悉集群外域名的时候,我们将这些域名请求FORWARD给电信ISP提供的域名服务器去解悉,例如www.163.com
这些非集群内主机的域名。
我们编辑/etc/bind/named.conf.options
文件:
acl goodclients { 192.168.122.0/24; localhost; localnets;};options { directory "/var/cache/bind"; recursion yes; allow-query { goodclients; }; forwarders { 114.114.114.114; 8.8.8.8; 8.8.4.4; }; forward only; dnssec-validation auto; auth-nxdomain no; # conform to RFC1035 listen-on-v6 { any; };};
重启服务器测试一下:
$ nslookup> server 192.168.122.10> www.163.comServer: 192.168.122.10Address: 192.168.122.10#53Non-authoritative answer:www.163.com canonical name = www.163.com.lxdns.com.www.163.com.lxdns.com canonical name = 163.xdwscache.ourglb0.com.Name: 163.xdwscache.ourglb0.comAddress: 113.107.44.166Name: 163.xdwscache.ourglb0.comAddress: 125.90.206.144
2. 配置域名
首先编辑/etc/bind/named.conf.local
文件,将自己的域名配置包含进来:
zone "ds.com" { type master; file "/etc/bind/db.ds.com";};
我们指定了ds.com
域名的解悉文件是/etc/bind/db.ds.com
,这样,我们只需要修改这个文件即可添加、修改、删除域名配置了:
$TTL 604800@ IN SOA ns.ds.com. root.ds.com. ( 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL;@ IN NS ns.ds.com.@ IN A 192.168.122.10ns IN A 192.168.122.10namenode IN A 192.168.122.11datanode IN A 192.168.122.12
- SOA定义了域名的基础信息,第一个
ns.ds.com
是该域名下的子域名的解悉服务器,而root.ds.com
其实就是管理员的联系Email,因为@
在配置中有特殊的意义,所以使用.
代替。 @ IN NS ns.ds.com.
,一定要有这行,定制ns.ds.com
是一个域名服务器。ns IN A 192.168.122.10
,指定域名服务器的IPnamenode IN A 192.168.122.11
,namenode
的域名定义datanode IN A 192.168.122.12
,datanode
的域名定义
配置好,重启,测试。
三、注意事项
配置文件的语法相当严格,如果重启服务器后发现不起效或者timeout,多半是配置文件有错,服务没有起来。