本文共 4038 字,大约阅读时间需要 13 分钟。
早期搭建Hadoop集群的时候,在做主机和IP解析的时候,通常的做法是写hosts文件,但是Hadoop集群大了以后做hosts文件很麻烦,每次加新的服务器都需要整个集群重新同步一次hosts文件,另外,如果在同一个域下面做两个集群,做distcp,也需要把两个集群的hosts文件全写完整并完全同步,很麻烦。那么,一劳永逸的办法就是做DNS。DNS我这边已经用了很长时间了,几年前为了学这个还专门买了一本巨厚的BIND手册。
做DNS服务器最常用的就是BIND,ISC开发并维护的开源系统。
以centos6为例,使用BIND 9.8.2,在域名解析服务器上安装bind和域名正反向查询工具
yum install bind bind-utils
安装完成后,配置文件在 /etc/named.conf,域名数据文件通常我们会放在 /var/named,配置文件不是很复杂。留一个小问题,172.16.0.0/18写成子网掩码应该写多少?在该子网内可用的IP地址范围是多少?
/etc/named.conf
//// named.conf//// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS// server as a caching only nameserver (as a localhost DNS resolver only).//// See /usr/share/doc/bind*/sample/ for example named configuration files.//options { listen-on port 53 { 172.16.0.2; }; //监听内网地址53端口, ns1要改成172.16.0.1// listen-on-v6 port 53 { ::1; }; //不监听IPv6 directory "/var/named"; //DNS数据文件存储目录 dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { 172.16.0.0/18; }; //允许172.16.0.0/18的子网IP主机进行查询,任意主机写any; recursion yes; //允许递归查询 dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic";};logging { channel default_debug { file "data/named.run"; severity dynamic; };};zone "." IN { type hint; file "named.ca";};zone "hadoop" IN { //我们的hadoop域 type master; file "hadoop.zone"; };zone "16.172.in-addr.arpa" IN { type master; file "172.16.zone"; };include "/etc/named.rfc1912.zones";include "/etc/named.root.key";
然后是正向解析文件 /var/named/hadoop.zone
$TTL 600$ORIGIN hadoop.@ IN SOA ns1 root ( ;SOA部分必写 0; Serial 1D; Refresh 1H; Retry 1W; Expire 3H); Negative Cache TTL@ IN NS ns1.hadoop.@ IN NS ns2.hadoop.;用两台namenode同时担负nameserver,反正namenode平时也没什么具体事干,DNS查询走udp端口,不会对 namenode造成压力;另外一个原因是namenode基本不会挂,而DN等服务器比较容易挂,所以NN同时做NS也更稳定,当然,有钱可以单独购置NS服务器,土豪请随意。;两台namenode一起ns1 IN A 172.16.0.1ns2 IN A 172.16.0.2;两台正向解析服务器的A记录,至于A, CNAME, MX等含义不解释了。namenode-01 IN A 172.16.0.1namenode-02 IN A 172.16.0.2;服务器的A记录
反向解析文件 /var/named/172.16.zone
反向解析文件里需要把IP地址的顺序倒过来写,例如,172.16.0.1在反向文件里要写成1.0.16.172,所以,文件名命名为16.172.zone更符合规则。
$TTL 600@ IN SOA namenode-01.hadoop. root.namenode-01.hadoop. ( //SOA部分必写 0; Serial 1D; Refresh 1H; Retry 1W; Expire 3H); Negative Cache TTL; 反向解析文件里不能有$ORIGIN,所以在下面先写上全部主机名@ IN NS ns1.hadoop.@ IN NS ns2.hadoop.1.0 IN PTR ns1.hadoop. 2.0 IN PTR ns2.hadoop.1.0 IN PTR namenode-01.hadoop.2.0 IN PTR namenode-02.hadoop.
全部完成后执行
chkconfig --add namedservice named restart
接下来在所有主机的/etc/resolv.conf文件中添加
nameserver 172.16.0.1nameserver 172.16.0.2
然后删除所有主机中的hosts文件内容,只保留127.0.0.1
用nslookup测试一下
[root@namenode-01 named]# nslookup > set q=A> namenode-02.hadoopServer: 172.16.0.1Address: 172.16.0.1#53#正向查询Name: namenode-02.hadoopAddress: 172.16.0.2> set q=PTR> 172.16.0.2Server: 172.16.0.1Address: 172.16.0.1#53#反向查询2.0.16.172.in-addr.arpa name = namenode-02.hadoop.####然后关闭ns1的DNS服务进行测试。[root@namenode-01 named]# service named stop停止 named:. [确定][root@namenode-01 named]# nslookup > set q=A> namenode-01.hadoopServer: 172.16.0.2Address: 172.16.0.2#53Name: namenode-01.hadoopAddress: 172.16.0.1> set q=PTR> 172.16.0.1Server: 172.16.0.2Address: 172.16.0.2#531.0.16.172.in-addr.arpa name = namenode-01.hadoop.
这样,做好了Namenode高可用,也勉强算是做好了DNS的高可用,集群中任意一台Namenode挂机,也不会影响整个集群的正常服务,新买的服务器只需要装好操作系统,在/etc/resolv.conf里面设置两个nameserver的IP地址即可,这就比hosts文件方便多了。
转载地址:http://jqado.baihongyu.com/