Linux 使用nscd構建域名解析緩存,加快域名

構建域名解析緩存的必要性

在部署服務器時,很多應用程序都需要調用域名解析服務,一般是通過配置/etc/resolv.conf來指定DNS服務器的IP。但如果程序發起的請求量較大,那麼服務器就容易被這些DNS服務器禁止訪問;同時每次都去訪問外部DNS服務器,會導致延時增大,遇到網絡問題時,還會發生解析不成功的現象。這種情況下,需要配置一個透明的DNS解析緩存服務,以達到如下效果:

  • 優化DNS響應速度。通過緩存DNS的服務請求結果,後續相同的DNS請求不再通過訪問任何外部網絡服務器來獲得結果,減少了網絡訪問的延時。

  • 減少DNS對外部網絡的依賴。在緩存週期內,相同DNS請求不再發生網絡通信行為,可以減少短暫的外部網絡不可用時導致的影響。

NSCD安裝配置方法

NSCD(名稱服務緩存進程)不需要對應程序或解析器做任何修改,/etc/resolv.conf也不需要做任何變化,對於系統部署的影響最小。

因此NSCD成為Linux環境中最廣泛的域名緩存軟件。

安裝可以使用yum進行安裝操作:

Linux 使用nscd構建域名解析緩存,加快域名

[root@ansible ~]# yum -y install nscd

Loaded plugins: fastestmirror

Loading mirror speeds from cached hostfile

* epel: mirrors.ustc.edu.cn

Package nscd-2.17-196.el7.x86_64 already installed and latest version

Nothing to do

nscd的核心配置文件是:/etc/nscd.conf

其中核心配置為:

Linux 使用nscd構建域名解析緩存,加快域名

[root@ansible ~]# sed -n '/hosts/p' /etc/nscd.conf

# Currently supported cache names (services): passwd, group, hosts, services

enable-cachehostsyes

positive-time-to-livehosts 3600

negative-time-to-livehosts 20

suggested-sizehosts211

check-fileshostsyes

persistenthostsyes

sharedhostsyes

max-db-sizehosts33554432

[root@ansible ~]#

其中:

  • enable-cache:指定對DNS解析進行緩存

  • positive-time-to-live:是指對解析成功的DNS結果進行緩存的時間,以秒為單位

  • negative-time-to-live:是指對解析失敗的DNS結果進行緩存的時間。例如網絡故障導致的DNS解析失敗或者請求的DNS條目沒有配置等。

  • suggested-size:NSCD內部的哈希表的大小,如果緩存條目數量遠大於默認的211(如果10倍以上,則修改此值)

  • check-files:是否檢查/etc/hosts文件的變化

  • persistent:是否在重啟NSCD進程時保留已緩存的條目

  • shared:是否允許客戶端直接查詢NSCD的內存鏡像已獲得結果。

  • max-db-size:DNS的緩存大小,已字節為單位。

域名解析緩存驗證

在部署了NSCD後,可以使用如下命令檢查結果:

Linux 使用nscd構建域名解析緩存,加快域名

Linux 使用nscd構建域名解析緩存,加快域名

[root@ansible ~]# sed '/^#/d;/^$/d' /etc/nscd.conf

server-usernscd

debug-level0

paranoiano

enable-cachehostsyes

positive-time-to-livehosts 3600

negative-time-to-livehosts 20

suggested-sizehosts211

check-fileshostsyes

persistenthostsyes

sharedhostsyes

max-db-sizehosts33554432

[root@ansible ~]# systemctl restart nscd

[root@ansible ~]# nscd -g

nscd configuration:

2 server debug level

16m 46s server runtime

10 current number of threads

32 maximum number of threads

6 number of times clients had to wait

no paranoia mode enabled

3600 restart internal

5 reload count

passwd cache:

no cache is enabled

yes cache is persistent

yes cache is shared

0 suggested size

0 total data pool size

0 used data pool size

600 seconds time to live for positive entries

20 seconds time to live for negative entries

0 cache hits on positive entries

0 cache hits on negative entries

0 cache misses on positive entries

0 cache misses on negative entries

0% cache hit rate

0 current number of cached values

0 maximum number of cached values

0 maximum chain length searched

0 number of delays on rdlock

0 number of delays on wrlock

0 memory allocations failed

yes check /etc/passwd for changes

group cache:

no cache is enabled

yes cache is persistent

yes cache is shared

0 suggested size

0 total data pool size

0 used data pool size

3600 seconds time to live for positive entries

60 seconds time to live for negative entries

0 cache hits on positive entries

0 cache hits on negative entries

0 cache misses on positive entries

0 cache misses on negative entries

0% cache hit rate

0 current number of cached values

0 maximum number of cached values

0 maximum chain length searched

0 number of delays on rdlock

0 number of delays on wrlock

0 memory allocations failed

yes check /etc/group for changes

hosts cache:

yes cache is enabled

yes cache is persistent

yes cache is shared

211 suggested size

216064 total data pool size

1512 used data pool size

36000 seconds time to live for positive entries

20 seconds time to live for negative entries

0 cache hits on positive entries

0 cache hits on negative entries

61 cache misses on positive entries

2 cache misses on negative entries

0% cache hit rate

11 current number of cached values

19 maximum number of cached values

1 maximum chain length searched

0 number of delays on rdlock

0 number of delays on wrlock

0 memory allocations failed

yes check /etc/hosts for changes

services cache:

no cache is enabled

yes cache is persistent

yes cache is shared

0 suggested size

0 total data pool size

0 used data pool size

28800 seconds time to live for positive entries

20 seconds time to live for negative entries

0 cache hits on positive entries

0 cache hits on negative entries

0 cache misses on positive entries

0 cache misses on negative entries

0% cache hit rate

0 current number of cached values

0 maximum number of cached values

0 maximum chain length searched

0 number of delays on rdlock

0 number of delays on wrlock

0 memory allocations failed

yes check /etc/services for changes

netgroup cache:

no cache is enabled

yes cache is persistent

yes cache is shared

0 suggested size

0 total data pool size

0 used data pool size

28800 seconds time to live for positive entries

20 seconds time to live for negative entries

0 cache hits on positive entries

0 cache hits on negative entries

0 cache misses on positive entries

0 cache misses on negative entries

0% cache hit rate

0 current number of cached values

0 maximum number of cached values

0 maximum chain length searched

0 number of delays on rdlock

0 number of delays on wrlock

0 memory allocations failed

yes check /etc/netgroup for changes

[root@ansible ~]#


分享到:


相關文章: