Điều tôi muốn đạt được là có tập lệnh /etc/init.d khởi động Mongodb đáng tin cậy hơn, ngay cả khi nó bị hỏng - nó sẽ cố gắng tự động sửa chữa trong trường hợp hệ thống đang ở trạng thái bị khóa.Khởi động lại/Tự động ghép Mongodb trong Sản xuất
Vâng, tôi có thể tự mình viết kịch bản này, nhưng tôi nghĩ có ai đó ở đó chắc đã làm điều này rồi.
Tôi nhận thấy rằng sau khi máy chủ gặp khó khăn, Mongodb ở trạng thái không khởi động lại thông qua tập lệnh /etc/init.d/mongod. Rõ ràng các tập tin khóa (s) cần phải được loại bỏ và nó cần phải được bắt đầu với tùy chọn --repair và sửa --dbpath đầu tiên, trước khi nó có thể được khởi động lại thành công. Trong một số trường hợp, người dùng cũng cần thay đổi quyền sở hữu của các tệp db cho người dùng chạy mongodb. Một vấn đề nữa là script /etc/init.d/mongod tiêu chuẩn không báo cáo một sự thất bại trong tình huống này, mà là trả về một cách vui vẻ và không chính xác với trạng thái "OK", báo cáo rằng Mongod đã được bắt đầu, mặc dù nó không phải.
$ sudo /etc/init.d/mongod start
Starting mongod: forked process: 9220
all output going to: /data/mongo/log/mongod.log
[ OK ]
$ sudo /etc/init.d/mongod status
mongod dead but subsys locked
Hệ điều hành là CentOS hoặc Fedora.
Có ai đã sửa đổi tập lệnh /etc/init.d hoặc trỏ đến tập lệnh như vậy, tự động sửa chữa trong tình huống đó không? Hoặc có công cụ nào khác hoạt động như một chú chó đồng hồ cho Mongod không?
Bất kỳ ý kiến nào về lý do tại sao ý tưởng xấu có thể tự động sửa chữa mongodb?
$ sudo /etc/init.d/mongod status
mongod dead but subsys locked
$ sudo ls -l /var/lib/mongo/mongod.lock
-rw-r--r--. 1 mongod mongod 5 Nov 19 11:52 /var/lib/mongo/mongod.lock
$ sudo tail -50 /data/mongo/log/mongod.log
**************
old lock file: /data/mongo/db/mongod.lock. probably means unclean shutdown
recommend removing file and running --repair
see: http://dochub.mongodb.org/core/repair for more information
*************
Sat Nov 19 11:55:44 exception in initAndListen std::exception: old lock file, terminating
Sat Nov 19 11:55:44 dbexit:
Sat Nov 19 11:55:44 shutdown: going to close listening sockets...
Sat Nov 19 11:55:44 shutdown: going to flush oplog...
Sat Nov 19 11:55:44 shutdown: going to close sockets...
Sat Nov 19 11:55:44 shutdown: waiting for fs preallocator...
Sat Nov 19 11:55:44 shutdown: closing all files...
Sat Nov 19 11:55:44 closeAllFiles() finished
Sat Nov 19 11:55:44 dbexit: really exiting now
cảm ơn câu trả lời chi tiết của bạn. Nhật ký trông giống như cách để đi .. phiên bản nào họ đã giới thiệu nhật ký? – Tilo
Nhật ký được giới thiệu ở mức 1.8+, chỉ cần đặt 'journal = true' trong tệp cấu hình của bạn. Trong 2.0+ journaling được kích hoạt theo mặc định. Lưu ý rằng nhật ký không phải là "miễn phí". Nó không hoạt động trên 32-bit, nó sẽ sử dụng RAM bổ sung, không gian đĩa bổ sung và IO bổ sung. Nếu bạn thực hiện rất nhiều bản cập nhật tại chỗ (như bộ đếm), điều này có thể đáng kể. Vì vậy, hãy kiểm tra chế độ ghi nhật ký trước khi bị đẩy vào sản xuất. –
Câu trả lời hay! mặc dù nó không thực sự là một kịch bản :) Các journaling có lẽ sẽ làm các trick. 32-bit không phải là vấn đề đối với tôi. Tôi sẽ thử viết nhật ký! Cảm ơn bạn đã giúp đỡ! – Tilo