在部署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.com
Server: 192.168.122.10
Address: 192.168.122.10#53
Non-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.com
Address: 113.107.44.166
Name: 163.xdwscache.ourglb0.com
Address: 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.10
ns IN A 192.168.122.10
namenode IN A 192.168.122.11
datanode 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,多半是配置文件有错,服务没有起来。