最开始搭建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
bind9默认安装在/etc/bind/目录下,我们打开named.conf 可以看见:
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
配置如下:
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";
};
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
;
$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.
注意:每台机器的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
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
配置完后,我们应该更新一下网络配置:
sudo ifdown --force eth0 && sudo ip addr flush dev eth0 && sudo ifup --force eth0
sudo /etc/init.d/bind9 restart
通过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