ในกรณีที่คอนฟิกให้ลีนุกซ์ตรวจสอบ user, group (authenticate) จาก LDAP Server ทุกครั้งที่มีการอ้างอิง เช่นการสร้างไฟล์ หรือแสดงรายชื่อไฟล์ด้วยคำสั่ง ls ของ user หรืออื่นๆ ที่เกี่ยวข้องกับ user, group เครื่องจะต้องมีการสอบถามจาก LDAP ทุกครั้ง ทำให้บางครั้งอาจเพิ่มโหลดมากเกินไปบนตัว LDAP Server
เพื่อเพิ่มประสิทธิภาพในการตรวจสอบ user, group จาก LDAP แนะนำให้รันเซอร์วิส nscd (name service cache daemon) บนเครื่อง โดยโปรแกรมนี้จะทำหน้าที่เก็บข้อมูล cache ไว้บนเครื่องตัวเอง ถ้าถามซ้ำกับข้อมูลเดิมที่มีอยู่ใน cache แล้ว ภายในระยะเวลาที่กำหนดไว้ (time to live) จะไม่มีการส่งไปถาม LDAP Server อีก
ข้อเสียของการรันเซอร์วิส nscd อย่างหนึ่งคือ เรื่องการตั้งค่าเวลา (time to live) ทำให้บางครั้งอาจไม่ได้ข้อมูลที่ล่าสุด เช่นดีฟอลต์เวลาที่ cache ไว้สำหรับการเก็บข้อมูลของ user คือ 600 วินาที สำหรับการค้นหาข้อมูลที่สำเร็จ (positive-time-to-live) ถ้ามีการเปลี่ยนแปลงข้อมูลของ user บน LDAP Server จะต้องรอจนเวลานี้ผ่านไป ข้อมูล cache ใน nscd ถึงจะปรับปรุงเป็นข้อมูลใหม่
ปรับปรุงเวอร์ชั่น nscd
ใช้คำสั่ง rpm เพื่อตรวจสอบเวอร์ชั่นของ nscd ที่ติดตั้งอยู่
[root@ldap-client ~]# rpm -q nscd nscd-2.8-3.i386
คำแนะนำ ก่อนที่จะรันเซอร์วิส nscd แนะนำให้ปรับปรุงเป็นเวอร์ชั่นล่าสุด เช่น Fedora 9 เวอร์ชั่นล่าสุดที่เขียนบทความนี้คือ nscd-2.8-8
[root@ldap-client ~]# rpm -Uvh nscd-2.8-8.i386.rpm Preparing... ########################################### [100%] 1:nscd ########################################### [100%]
คอนฟิกไฟล์ /etc/nscd.conf
ไฟล์คอนฟิกจากการติดตั้ง nscd จะเก็บ cache ของ passwd, group, hosts, services ในที่นี้เราจะเปลี่ยนคอนฟิกเพื่อให้เก็บ cache เฉพาะ passwd, group จาก LDAP
[root@ldap-client ~]# cat /etc/nscd.conf # # /etc/nscd.conf # server-user nscd debug-level 0 paranoia no
enable-cache passwd yes positive-time-to-live passwd 600 negative-time-to-live passwd 20 suggested-size passwd 211 check-files passwd yes persistent passwd yes shared passwd yes max-db-size passwd 33554432 auto-propagate passwd yes
enable-cache group yes positive-time-to-live group 3600 negative-time-to-live group 60 suggested-size group 211 check-files group yes persistent group yes shared group yes max-db-size group 33554432 auto-propagate group yes
enable-cache hosts no enable-cache services no
คำแนะนำการคอนฟิกไฟล์ nscd.conf
- ดีฟอลต์คอนฟิกจากการติดตั้ง จะเป็บ cache ของ user (passwd) เป็นเวลา 600 วินาที สำหรับข้อมูลที่ค้นหาได้สำเร็จ (positive-time-to-live) แต่จะเก็บ cache ของ user ที่ค้นหาไม่สำเร็จ (ไม่มีข้อมูลใน LDAP) เป็นเวลา 20 วินาที
- ดีฟอลต์คอนฟิกจากการติดตั้ง จะเป็บ cache ของ group เป็นเวลา 3600 วินาที สำหรับข้อมูลที่ค้นหาได้สำเร็จ (positive-time-to-live) แต่จะเก็บ cache ของ group ที่ค้นหาไม่สำเร็จ (ไม่มีข้อมูลใน LDAP) เป็นเวลา 60 วินาที
- ต้องรอเวลา time-to-live เหล่านี้หมดไป จนกว่า nscd จะทำการตรวจสอบข้อมูลจาก LDAP ใหม่อีกครั้ง ก่อนการใช้งานจริงแนะนำให้ทดลองปรับค่าแล้วดูผลลัพธ์ที่ได้
รันเซอร์วิส nscd
ใช้คำสั่ง service เพื่อรันเซอร์วิส nscd
[root@fc9-k2 ~]# service nscd start Starting nscd: [ OK ]
ข้อมูล cache ของ nscd จะถูกเก็บไว้ใน /var/db/nscd/
[root@fc9-k2 ~]# ls -l /var/db/nscd/ total 432 -rw------- 1 root root 217016 2008-11-28 15:39 group -rw------- 1 root root 217016 2008-11-28 15:39 passwd
ทดสอบ nscd cache
ใช้คำสั่ง time เพื่อเปรียบเทียบความเร็ว ระหว่างการดึงข้อมูล user จาก LDAP ในครั้งแรก และครั้งที่สอง ดึงข้อมูลจาก cache ของ nscd
[root@fc9-k2 ~]# time id user01 uid=1011(user01) gid=513(Domain Users) groups=513(Domain Users)
real 0m0.046s user 0m0.000s sys 0m0.007s
[root@fc9-k2 ~]# time id user01 uid=1011(user01) gid=513(Domain Users) groups=513(Domain Users)
real 0m0.007s user 0m0.000s sys 0m0.005s