Mengapa server linux harus di-boot ulang untuk menangani perubahan resolv.conf dengan benar?

8

Saya tahu ini harus kurang dari pemahaman saya tapi inilah masalahnya.

Kami baru-baru ini mengubah server DNS dari 192.168.1.1 ke .2, jadi saya berkeliling ke semua 8 server linux saya dan mengubah /etc/resolv.conf untuk mencerminkan perubahan tersebut. Perhatikan bahwa semuanya statis, tidak ada DHCP yang terlibat.

Setelah melakukan perubahan, saya dapat segera menguji hasilnya menggunakan nslookup dan menggali, dan semuanya terlihat bagus. Saya melakukan restart /etc/init.d/networking - untuk me-restart subsistem jaringan - dan me-restart apache dan postfix pada masing-masing server, hanya untuk memastikan.

Beberapa hari kemudian saya mendapatkan laporan yang menyatakan bahwa situs web kami tidak lagi mengirim email. Membaca dengan teliti log saya menemukan bahwa proses mod_php tidak dapat menyelesaikan entri dns untuk mengirim email. Setelah mengalahkan kepalaku selama 30 menit, aku me-reboot server dan semuanya kembali normal.

Hari berikutnya di server yang berbeda (menggunakan CentOS daripada Ubuntu normal kami), saya mendapatkan laporan yang menyatakan bahwa email tidak melalui, dan tentu saja melihat log menunjukkan bahwa Postfix tidak dapat menyelesaikan nama. Di-boot ulang dan hampir secara instan mengirimkan semua email yang masuk.

Jadi apa yang saya lewatkan di sini? Bagian mana dari proses ini yang gagal saya pahami dengan benar?

Abu-abu
sumber

Jawaban:

11

Anda mungkin digigit oleh nscd: http://linux.die.net/man/8/nscd

Bersulang

HTTP500
sumber
Terima kasih! Sepertinya sangat mungkin inilah yang memberiku masalah. Saya bahkan tidak menyadari bahwa caching dns lokal adalah bagian dari sistem linux yang umum.
Gray
Apakah Anda benar-benar menguji? Hipotesis Jason adalah mungkin tetapi tidak pasti.
bortzmeyer
@bortzmeyer - ya, saya setuju. Jawaban Anda sendiri sama dengan yang akan saya berikan (dan memang harus dua pertanyaan terkait baru-baru ini). Itu jauh lebih mungkin di-cache keadaan res_init () daripada nscd.
Alnitak
8

Sebagian besar aplikasi mengaktifkan resolver sekali, saat startup (dengan res_init), dan tidak pernah melakukannya lagi sesudahnya. Ini bukan masalah untuk aplikasi yang berumur pendek seperti ping tetapi lebih serius untuk daemon yang berjalan lama.

Proses Apache (yang menjalankan mod_php) mungkin dalam kasus itu. Restart Apache sudah cukup.

bortzmeyer
sumber
3

resolv.conf mengarahkan resolver ke tempat mencari nama. Dalam kebanyakan kasus, ini akan menjadi resolib libc, tetapi mungkin ada kasus lain seperti vPostMaster yang menggunakan pustaka resolver DNS Python untuk pencarian SPF.

Jadi, BISA bahwa resolver caching informasi resolv.conf untuk proses yang berjalan lama, tetapi itu terdengar seperti Anda me-restart postfix, yang seharusnya menyebabkannya mulai menggunakan file resolv.conf yang baru.

Periksa /etc/nsswitch.conf Anda untuk melihat apakah ia menentukan sesuatu yang khusus terjadi untuk "host". Misalnya, garis Fedora 11 default di laptop saya adalah:

host: file mdns4_minimal [NOTFOUND = return] dns

Jadi dalam kasus ini menggunakan mdns dan / etc / hosts dan DNS. Dalam hal ini, jika perubahan DNS tidak diambil, saya ingin tahu apakah itu mdns yang menyebabkannya.

Sean

Sean Reifschneider
sumber
1

Mungkin beberapa caching terjadi. Kami memiliki masalah yang sama dengan sendmaildan hanya me-restart layanan memperbaikinya.

Terkadang lebih mudah untuk hanya me-reboot server dan menghapus semua cache di mana saja dalam sistem daripada menghabiskan semua waktu mengidentifikasi layanan mana yang cache terlalu lama. Di sisi lain, itu bisa berubah menjadi investasi ketika itu terjadi lagi dan Anda tahu layanan mana yang harus dimulai ulang.

jldugger
sumber
Saya setuju, mem-boot ulang adalah jalan keluar termudah, tetapi jika server kritis, mencari waktu untuk mem-boot ulang mungkin sulit. Terima kasih atas bantuan Anda!
Gray