Linux 修改本機 /etc/hosts 的 hostName 後經常不生效

發表於2016-11-08

1、Linux修改本機別名/etc/hosts的hostName後經常不生效解決

Linux修改本機別名/etc/hosts的hostName後經常不生效, 比如我們/etc/hosts的內容如下:

#192.68.1.10 message.xxx.com

192.68.1.11 message.xxx.com

但是ping

message.xxx.com還是指向192.68.1.10。

一般2種解決方案:

1). 重啟,這是最直接最可靠穩定的一種方法,如果有些時候不方便重啟,則可以使用第二種方法。

2). 修改/etc/sysconfig/network檔案,將HOSTNAME修改成對應的別名,如下:

修改後重啟網路服務

service network restart (本質是/etc/init.d/network) 3).

如果重啟伺服器後,還是不起作用,應該是本機的dns快取引起的。

檢視nscd是否啟用: ps -ef|grep nscd

直接關閉Linux nscd 快取服務: /etc/init.d/nscd stop

2、Linux的DNS

linux本身是沒有dns快取的,想使用dns快取的話需要自己安裝一個服務程式NSCD(name service cache daemon).

nscd快取三種服務passwd group hosts,所以它會記錄三個庫,分別對應源/etc/passwd, /etc/hosts 和 /etc/resolv.conf每個庫儲存兩份快取,一份是找到記錄的,一份是沒有找到記錄的。每一種快取都儲存有生存時間(TTL).

安裝:

yum install nscd

修改配置檔案/etc/nscd.conf,開啟dns快取,修改這一行

enable-cache hosts yes。

如果啟用了nscd 服務,才有dns 快取,否則是沒有dns快取的。

開啟 、停止、 重啟服務 service nscd start | stop | restart

nscd的配置:

通過編輯/etc/nscd.conf檔案,在其中增加如下一行可以開啟本地DNS cache:

enable-cache hosts yes

阿里雲主機上的配置如下:

相關引數的解釋如下:

logfile debug-file-name:指定除錯資訊寫入的檔名。

debug-level value:設定希望的除錯級別。

threads number:這是啟動的等待請求的執行緒數。最少將建立5個執行緒。

server-user user:如果設定了該選項,nscd將作為該使用者執行,而不是作為root。如果每個使用者都使用一個單獨的快取(-S引數),將忽略該選項

enable-cache service <yes|no>:啟用或禁用制定的 服務 快取。

positive-time-to-live service value:設定 service 在指定快取中正的專案(成功的請求)的TTL(存活時間)。 Value 以秒為單位。較大的值將增加快取命中率從而減低平均響應時間,但是將增加快取的一致性問題。

negative-time-to-live service value:設定 service 在指定快取中負的專案(失敗的請求)的TTL(存活時間)。 Value 以秒為單位。如果存在由不在系統資料庫中的uid(使用者ID)(例如在以root身份解包linux 核心原始碼時)所擁有的檔案將明顯改善效能;應該維持較小的值以降低快取一致性問題。

suggested-size service value:這是內部雜湊表的大小, value 應該保持一個素數以達到優化效果。

check-files service <yes|no>:啟用或禁用檢查屬於指定 服務 的檔案的改變。這些檔案是 /etc/passwd, /etc/group, 以及/etc/hosts。

nscd 的檢視和清除

nscd快取DB檔案在/var/db/nscd下。

nscd -g 檢視統計資訊

清除 nscd快取:

nscd -i passwd
nscd -i group
nscd -i hosts

當然也先刪除快取庫或者停掉nscd服務:

rm -f /var/db/nscd/hosts

service nscd restart

或者是直接停止nscd 服務

service nscd stop。

相關文章