在之前的spark on yarn集群配置中,感覺最麻煩的就是各個機器之間的網絡配置了,一直想簡化這部分的工作。
一開始的辦法是一臺機器一臺機器的編輯/etc/network/interfaces
文件和/etc/hosts
文件使各臺機器都有固定的ip和通過機器名稱可以轉換成對應的ip,這樣一旦集群中一臺機器發生變動,各臺機器都要過一遍,很是麻煩。
現在一般的家用路由器上都有根據mac地址分配固定ip的功能,所以只要在路由器上配置dhcp分配的規則,將各個機器的網卡mac地址填入就可以將機器的ip固定住了。
接下來就是機器之間互相識別的事了,這里我們在集群內選定一臺主機,作為dns服務器,其他的機器只要將dns服務設定為這臺機器,就可以識別其他機器名稱所對應的ip了。
按慣例,給出操作環境:
Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-66-generic x86_64
服務端
首先安裝bind
sudo apt-get install bind9
安裝完畢之后開始配置。
先要說一些基本認知:
- 所有的配置文件都在
/etc/bind/
下 - 要使配置生效,需要重啟bind9服務
sudo service bind9 restart
- 服務啟動的日志在
/var/log/syslog
中,需要查看之以確保配置正確和生效
然后我們開始配置bind,參照ubuntu的bind中文wiki。
修改named.conf.local
添加一個zone節點,這里我們的zone名字是“mwnet”:
zone "mwnet" {
type master;
file "/etc/bind/db.mwnet";
};
然后將“db.local”文件復制成“db.mwnet”,并修改之:
;
; BIND data file for local loopback interface
;
$TTL 604800
@ IN SOA mwnet. root.localhost. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
@ IN NS mwnet.
@ IN A 192.168.3.9
Y40 IN A 192.168.3.9
X230 IN A 192.168.3.11
;省略不展示其他機器信息...
其中第5、11行就是將"localhost"修改成了自己的zone名稱。
第12行是必須的,指定默認的域名解析到的ip,包括“ns.mwnet”的解析。
從第13行開始就是機器名稱的解析了。
接著增加一個反向解析的配置,這一步必須要做,否則hdfs的datanode啟動會失敗。
同樣修改named.conf.local
添加一個zone節點:
zone "3.168.192.in-addr.arpa" {
type master;
notify no;
file "/etc/bind/db.192.168.3";
};
然后將db.127
文件復制成db.192.168.3
,并修改之:
;
; BIND reverse data file for local loopback interface
;
$TTL 604800
@ IN SOA mwnet. root.localhost. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns.
9 IN PTR ns.mwnet.
9 IN PTR Y40.mwnet.
11 IN PTR X230.mwnet.
;省略不展示其他機器信息...
注意這里PTR記錄和 db.mwnet
里面的A記錄是一一對應的。
保存修改之后重啟服務。
客戶端
接下來修改各臺機器的dns服務器設置,需要改動/etc/resolvconf/resolv.conf.d/base
文件:
search mwnet
domain mwnet
nameserver 192.168.3.9
第1行寫search是為了在尋找主機的時候,自動在主機名稱后面加上“.mwnet”,以便dns服務器解析。
第2行寫domain是為了讓本機加入"mwnet"域,這樣完整的主機名就變成了設備名稱+“.mwnet”。
第3行指定了dns服務器的地址。
需要注意的是這個改動必須重啟機器后生效。
補充
如果之前沒有改動過/etc/hosts
文件,需要注意一點就是把系統自動添加機器名稱解析到127.0.1.1的記錄刪除,很多事情都壞在這條記錄上。