MongoDB 3.2.x, 3.4.x replica set on ubuntu 16.04 tutorial

Mongodb replica set là một giải pháp để đảm bảo hệ thống luôn đáp ứng tốt, kể cả khi server có vấn đề.

Đôi điều về replica set

  • Với replica set, ta sẽ cần 1 server chính primary, ít nhất 1 server phụ secondary và 1 server trọng tài arbitrator.
  • Dữ liệu được đồng bộ giữa server primary và các secondary.
  • Mọi thao tác ghi đều được thực hiện ở server primary, đọc thì tuỳ mình cấu hình, mặc định là đọc ở primary luôn.
  • Khi kết nối tới primary có vấn đề (rớt mạng, server sập, hết ổ cứng, tràn bộ nhớ, server bảo trì…), đám secondary sẽ tự bầu với nhau để đưa 1 ông secondary lên làm primary. Tụi nó sẽ bầu với nhau theo thể chế dân chủ, ông nào được nhiều phiếu nhất thì trúng cử, nhưng đôi khi sẽ có trường hợp 2 ông cùng phiếu, lúc này ông arbitrator sẽ lên tiếng, chọn ra người đủ đức đủ tài :v
  • Nên để số lượng secondary là số lẻ.

Cài đặt mongodb

Mở file /etc/systemd/system/mongodb.service và điền vào nội dung:

Khi cài đặt xong, mongodb service sẽ được chạy, nên mình cần tắt đi để cấu hình đã:

Cấu hình tên miền để dễ dùng sau này

Những con số loằng ngoằng của địa chỉ IP khó nhớ, khó dùng, nên mình sẽ đổi nó sang tên miền.

IP Tên miền Kiểu server mongo
23.23.23.1 mongo1.appconus.com primary
23.23.23.2 mongo2.appconus.com secondary
23.23.23.3 mongo3.appconus.com arbitrator

Trên từng server, cài đặt hostname tương ứng:
Primary

Xoá hết nội dung trong đó và điền vào:

Các server khác làm tương tự.

Trên server primary:

Làm tương tự với 2 server còn lại, nhớ điều chỉnh dòng 127.0.0.1 thành domain tương ứng là mongo2mongo3.

Cấu hình mongodb

Trên Cả 3 server, mở file /etc/mongod.conf và chỉnh sửa như sau:

  • Dòng 23, bindIp: thay IP của các servers trong replica set để tụi nó liên lạc với nhau.
  • Dòng 24: khai báo mongo server sẽ được chạy ở chế độ replica set với tên là appconus_rs.
  • Lưu ý: với cấu hình trên, mongodb sẽ chạy ở cổng 27017, nên nếu bạn có bật tường lửa thì nhớ mở cổng này ra cho các server còn lại trong replcia set.

Ok, bây giờ khởi động mongodb ở cả 3 server:

Trên primary server, mở mongo cli client:

Khởi tạo replica set, server nào chạy lệnh này sẽ trở thành primary đầu tiên:

Thêm secondary vào:

Thêm trọng tài arbitrator vào:

Đến đây là xong rồi, ta có thể kiểm tra qua về thiết lập hệ thống:

Kiểm tra trạng thái của replica set:

Test xem hệ thống chạy ổn chưa

primary, ghi dữ liệu vào:

Để đảm bảo rằng đã lưu thành công, đọc dữ liệu ra thử:

Ok, giờ sang secondary:

Kết quả sẽ y như bên kia:

Cần có lệnh rs.slaveOk() vì mặc định, không được phép đọc dữ liệu từ secondary ra, nên mình phải báo để replica set cho phép mình đọc tạm thời ở phiên đăng nhập này thôi.

Kiểm tra việc bầu cử

primary, ép thằng primary trở thành secondary:

Rồi sang secondary sẽ thấy nó được nâng cấp thành primary.

Khi primary cũ online trở lại, nó sẽ được join tự động vào hệ thống với vai trò secondary.

Cập nhật thành viên

Muốn thêm thành viên vào replica set thì chỉ việc login vào primary xong thêm như khi nãy mình thêm secondaryabritrator thôi.

Còn nếu muốn xoá thì dùng lệnh remove:

Thêm tí nữa

Bài viết trên dùng cho mongodb 3.2.x, anh em nào muốn dùng cho 3.4.x cũng ok, nâng cấp lên theo link này: https://docs.mongodb.com/manual/release-notes/3.4-upgrade-standalone/

Đến đây là cơ bản xong rồi, có thể kê cao gối mà ngủ rồi. Bài tới mình sẽ viết về việc backup và restore db cho replica set, công việc cũng tiêu tốn khá nhiều thời gian mày mò của anh em, mời các bạn đón đọc.

Tham khảo:
[1] https://docs.mongodb.com/manual/administration/replica-sets/
[2] https://docs.mongodb.com/manual/core/replica-set-oplog/#replica-set-oplog-sizing

Lập trình và hơn thế nữa

Spread the love
  •  
  •  
  •  
  •  
  •  

Leave a Reply

Be the First to Comment!

Notify of
avatar