Tại sao máy chủ linux phải được khởi động lại để xử lý đúng sự thay đổi trong độ phân giải?


8

Tôi biết điều này chỉ là sự thiếu hiểu biết của tôi nhưng đây là vấn đề.

Gần đây chúng tôi đã thay đổi máy chủ DNS từ 192.168.1.1 thành .2, vì vậy tôi đã đi vòng quanh tất cả 8 máy chủ linux của mình và thay đổi /etc/resolv.conf để phản ánh sự thay đổi. Lưu ý rằng tất cả đều tĩnh, không có DHCP liên quan.

Sau khi thực hiện thay đổi, tôi có thể kiểm tra ngay kết quả bằng cách sử dụng nslookup và đào, và tất cả đều có vẻ tốt. Tôi đã thực hiện /etc/init.d/networking restart - để khởi động lại hệ thống con mạng - và khởi động lại apache và postfix trên mỗi máy chủ, để chắc chắn.

Vài ngày sau tôi nhận được một báo cáo nói rằng các trang web của chúng tôi sẽ không gửi email nữa. Tìm hiểu nhật ký tôi thấy rằng quy trình mod_php không thể giải quyết các mục dns để gửi thư. Sau khi đập đầu vào đó khoảng 30 phút, tôi khởi động lại máy chủ và mọi thứ trở lại bình thường.

Ngày hôm sau trên một máy chủ khác (sử dụng CentOS chứ không phải Ubuntu bình thường của chúng tôi), tôi nhận được một báo cáo nói rằng các email không được xử lý và chắc chắn nhìn vào nhật ký cho thấy Postfix không thể giải quyết tên. Khởi động lại và nó gần như ngay lập tức cung cấp tất cả các thư xếp hàng.

Vậy tôi còn thiếu gì ở đây? Phần nào của quá trình này tôi đã không hiểu chính xác?

Câu trả lời:


11

Bạn có thể đã bị cắn bởi nscd: http://linux.die.net/man/8/nscd

Chúc mừng


Cảm ơn! Dường như rất có thể đây là điều khiến tôi gặp vấn đề. Tôi thậm chí còn không biết bộ nhớ đệm dns cục bộ là một phần của hệ thống linux phổ biến.
Xám

Bạn đã thực sự kiểm tra? Giả thuyết của Jason là có thể nhưng không chắc chắn.
bortzmeyer

@bortzmeyer - vâng, tôi đồng ý. Câu trả lời của riêng bạn giống như tôi đã đưa ra (và thực sự phải có hai câu hỏi liên quan gần đây). Nó có nhiều khả năng được lưu trữ trạng thái res_init () hơn nscd.
Alnitak

8

Hầu hết các ứng dụng định hướng trình phân giải một lần, khi khởi động (với res_init) và không bao giờ thực hiện lại sau đó. Nó không phải là vấn đề đối với các ứng dụng có tuổi thọ ngắn như ping nhưng nghiêm trọng hơn đối với các trình tiện ích chạy dài.

Quá trình Apache (chạy mod_php) có lẽ trong trường hợp đó. Khởi động lại Apache sẽ có đủ.


3

độ phân giải chỉ đạo các trình phân giải về nơi tìm tên. Trong hầu hết các trường hợp, đây sẽ là trình phân giải libc, nhưng có thể có các trường hợp khác như vPostMaster sử dụng thư viện trình phân giải DNS Python để tra cứu SPF.

Vì vậy, nó CÓ THỂ được rằng giải quyết được bộ nhớ đệm thông tin resolv.conf cho quá trình dài chạy, nhưng nó có vẻ như bạn khởi động lại postfix, mà nên đã gây ra nó để bắt đầu sử dụng một tập tin resolv.conf tươi.

Kiểm tra /etc/nsswitch.conf của bạn để xem liệu nó có chỉ định điều gì đặc biệt xảy ra cho "máy chủ" không. Ví dụ: dòng Fedora 11 mặc định trên máy tính xách tay của tôi là:

máy chủ: tệp mdns4_minimal [NOTFOUND = return] dns

Vì vậy, trong trường hợp này, nó sử dụng mdns cũng như / etc / hosts và DNS. Trong trường hợp này, nếu các thay đổi DNS không được chọn, tôi tự hỏi liệu đó có phải là mdns gây ra nó không.

Sean


1

Có lẽ một số bộ nhớ đệm đang diễn ra. Chúng tôi đã có một vấn đề tương tự sendmailvà chỉ cần khởi động lại dịch vụ đã khắc phục nó.

Đôi khi, việc khởi động lại máy chủ sẽ dễ dàng hơn và xóa tất cả các bộ đệm đó ở bất kỳ đâu trong hệ thống hơn là dành toàn bộ thời gian để xác định dịch vụ nào đang lưu trong bộ nhớ cache quá lâu. Mặt khác, nó có thể trở thành một khoản đầu tư khi nó xảy ra một lần nữa và bạn biết nên khởi động lại dịch vụ nào.


Tôi đồng ý, khởi động lại là cách dễ nhất, nhưng nếu máy chủ quan trọng tìm thời gian để khởi động lại có thể khó khăn. Cảm ơn bạn đã giúp đỡ!
Xám
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.