Hadoop 通过bind9配置DNS服务器替代hosts的IP映射(ubuntu版)

最开始搭建hadoop集群时,我是用hosts的ip映射实现的各个主机名与IP之间的映射关系。

但是,hosts的ip映射的缺点是,当我们在集群里面增加一个机器时,所有机器都要更新他们的hosts文件,这样就显得很繁琐。

通过查找资料,可以使用bind9配置DNS来替代原先的hosts的IP映射,当需要添加新主机时,只需要更改DNS服务器中bind的正向解析文件和反向解析文件即可。大大减轻了操作负担。

具体实现如下:

环境:Ubuntu 14.04.4 LTS 

以三台主机为例:

192.168.1.200   delab-master-01
192.168.1.201   delab-slave-01
192.168.1.202   delab-slave-02

首先,如果你已经配置了hosts的ip映射,应该把各台机器上的ip映射删除。


1、安装bind9

选择一台主机作为DNS服务器(这里以delab-master-01),安装bind9

sudo apt-get install bind9

2、配置bind文件

bind9默认安装在/etc/bind/目录下,我们打开named.conf 可以看见:

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";

它将本机的需要的配置独立在name.conf.local这个文件里面,在name.conf里面用include把name.conf.local包含进来,所以我们只需要修改named.conf.local即可。

配置如下:

zone "hadoop.com"{
type master;
file "/etc/bind/db.hadoop.com";
};

zone "1.168.192.in-addr.arpa"{
type master;
file "/etc/bind/db.192.168.1";
};


这里hadoop.com是自己设置的域名,可以自行修改。这里的db.hadoop.com 对应着正向解析文件。

db.192.168.1对应反向解析文件。注意: 1.168.192 和db.192.168.1是刚好反过来的。


在/etc/bind/目录下分别新建db.hadoop.com和db.192.168.1文件。

在db.hadoop.com 中增加:

@       IN      SOA     localhost. root.localhost. (
1       ; Serial
604800  ; Refresh
86400   ; Retry
2419200 ; Expire
604800 )        ; Negative Cache TTL
;
@       IN      NS      localhost.
@       IN      A       127.0.0.1

delab-master-01 IN      A       192.168.1.200
delab-slave-01  IN      A       192.168.1.201
delab-slave-02  IN      A       192.168.1.202

在db.192.168.1中增加:

;
$TTL 604800
@ IN SOA hadoop.com. root.hadoop.com. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL;

@       IN      NS      hadoop.com.
200     IN      PTR     delab-master-01.hadoop.com.
201     IN      PTR     delab-slave-01.hadoop.com.
202     IN      PTR     delab-slave-02.hadoop.com.


3、修改所有机器中的dns服务器指向我们的dns服务器(即delab-master-01)

注意:每台机器的dns服务器指向都需要修改。

这里可以直接修改/etc/resolv.conf文件,增加nameserver 192.168.1.200 (这里的ip是我们DNS服务器的IP地址)

但是,在重新启动机器后,/etc/resolv.conf文件会被复写,所以不建议这么做。


建议直接修改/etc/network/interfaces文件。

重要:如果你使用的是ubuntu桌面版,网络配置可能是通过Network-Manager完成的,那么,应该先关掉Network-Manager(sudo stop network-manager),并将 /etc/NetworkManager/nm-system-settings.conf 文件中的managed=false:

[ifupdown]
managed=false

最后在interfaces文件中添加, dns-nameservers 192.168.1.200dns-search hadoop.com

auto eth0
iface eth0 inet static
address 192.168.1.200
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.1.200
dns-search hadoop.com

这里dns-search hadoop.com作用很重要,如果没有这个,那么我们访问各个主机时,需要把完整输入对应域名,如:delab-slave-01.hadoop.com ,配置了dns-search之后,我们就可以直接输入delab-slave-01来访问相应主机。这样的话,配置完DNS后, 我们hadoop的相关配置文件就都不修改即可使用。


配置完后,我们应该更新一下网络配置:

sudo ifdown --force eth0 && sudo ip addr flush dev eth0 && sudo ifup --force eth0


4、重启bind

sudo /etc/init.d/bind9 restart

我们可以通过nslookup来查看配置是否成功:(正向解析和反向解析)

Hadoop 通过bind9配置DNS服务器替代hosts的IP映射(ubuntu版)_第1张图片

通过ping 主机名:


至此,我们DNS服务器就已经配置完成了,如果有新的主机加入集群,我们只需要配置DNS服务器中的bind的正向解析文件和反向解析文件即可。


当然,如果我们dns服务器挂了,整个集群就没法通信了,所以可以配置主从DNS服务器来实现HA(High Available),具体可参考以下博文:

How To Configure BIND as a Private Network DNS Server on Ubuntu 16.04

https://www.digitalocean.com/community/tutorials/how-to-configure-bind-as-a-private-network-dns-server-on-ubuntu-16-04


你可能感兴趣的:(Hadoop)