Sau khi phát triển thành công ứng dụng và trước khi cống hiến hết mình cho việc sản xuất MongoDB, hãy xem xét các hướng dẫn nhanh này để đảm bảo luồng trôi chảy và hiệu quả cũng như đạt được hiệu suất tối ưu.
1) Tùy chọn triển khai
Lựa chọn phần cứng phù hợp
Để có hiệu suất tối ưu, bạn nên sử dụng SSD hơn là HDD. Cần quan tâm xem bộ lưu trữ của bạn là cục bộ hay từ xa và thực hiện các biện pháp cho phù hợp. Tốt hơn là sử dụng RAID để bảo vệ các lỗi phần cứng và sơ đồ khôi phục, nhưng đừng hoàn toàn dựa vào nó, vì nó không cung cấp bất kỳ biện pháp bảo vệ nào chống lại các lỗi bất lợi. Để thực thi trên đĩa, RAID-10 rất phù hợp về mặt hiệu suất và tính khả dụng, vốn thường thiếu ở các mức RAID khác. Phần cứng phù hợp là khối xây dựng cho ứng dụng của bạn để có hiệu suất được tối ưu hóa và tránh bất kỳ sự cố lớn nào.
Lưu trữ đám mây
Một loạt các nhà cung cấp đám mây có sẵn cung cấp các máy chủ cơ sở dữ liệu MongoDB được cài đặt sẵn. Việc lựa chọn lựa chọn tốt nhất là bước khởi đầu để ứng dụng của bạn phát triển và tạo ấn tượng đầu tiên trên thị trường mục tiêu. MongoDB Atlas là một trong những lựa chọn có thể cung cấp giải pháp hoàn chỉnh cho giao diện đám mây với các tính năng như triển khai các nút của bạn và ảnh chụp nhanh dữ liệu của bạn được lưu trữ trong Amazon S3. ClusterControl là một tùy chọn có sẵn tốt khác để dễ dàng triển khai và mở rộng quy mô. Trong đó cung cấp nhiều tính năng như dễ dàng thêm và xóa các nút, thay đổi kích thước các phiên bản và sao chép cụm sản xuất của bạn. Bạn có thể dùng thử ClusterControl tại đây mà không bị tính phí. Các tùy chọn khả dụng khác là RackSpace ObjectRocket và MongoStitch.
2) RAM
Các mục được truy cập thường xuyên được lưu vào bộ nhớ đệm trong RAM để MongoDB có thể cung cấp thời gian phản hồi tối ưu. RAM thường phụ thuộc vào lượng dữ liệu bạn sẽ lưu trữ, số lượng bộ sưu tập và chỉ mục. Đảm bảo rằng bạn có đủ RAM để chứa các chỉ mục của mình, nếu không nó sẽ ảnh hưởng đáng kể đến hiệu suất ứng dụng của bạn trong quá trình sản xuất. Nhiều RAM hơn có nghĩa là ít lỗi trang hơn và thời gian phản hồi tốt hơn.
3) Lập chỉ mục
Đối với các ứng dụng bao gồm các yêu cầu ghi thường xuyên, việc lập chỉ mục đóng một vai trò quan trọng. Theo MongoDB docs:
“Nếu thao tác ghi sửa đổi trường được lập chỉ mục, MongoDB cập nhật tất cả các chỉ mục có trường được sửa đổi làm khóa”
Vì vậy, hãy cẩn thận khi chọn chỉ mục vì nó có thể ảnh hưởng đến hiệu suất DB của bạn.
Ví dụ về lập chỉ mục:Mục nhập mẫu trong cơ sở dữ liệu nhà hàng
{
"address": {
"building": "701",
"street": "Harley street",
"zipcode": "71000"
},
"cuisine": "Bakery",
"grades": [
{ "date": { "$date": 1393804800000 }, "grade": "A", "score": 2 },
{ "date": { "$date": 1378857600000 }, "grade": "A", "score": 6 },
{ "date": { "$date": 1358985600000 }, "grade": "A", "score": 10 },
{ "date": { "$date": 1322006400000 }, "grade": "A", "score": 9 },
{ "date": { "$date": 1299715200000 }, "grade": "B", "score": 14 }
],
"name": "Bombay Bakery",
"restaurant_id": "187521"
}
-
Tạo chỉ mục trên một trường
> db.restaurants.createIndex( { "cuisine": 1 } ); { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
Trong ví dụ trên, chỉ mục thứ tự tăng dần được tạo trên trường ẩm thực.
-
Tạo chỉ mục trên nhiều trường
> db.restaurants.createIndex( { "cuisine": 1 , "address.zipcode": -1 } ); { "createdCollectionAutomatically" : false, "numIndexesBefore" : 2, "numIndexesAfter" : 3, "ok" : 1 }
Ở đây chỉ mục phức hợp được tạo trên các trường ẩm thực và mã zip. Số -ve xác định thứ tự giảm dần.
4) Chuẩn bị cho việc mài giũa
MongoDB phân vùng dữ liệu thành các máy khác nhau bằng cách sử dụng một cơ chế được gọi là sharding. Bạn không nên thêm sharding ngay từ đầu trừ khi bạn đang mong đợi các bộ dữ liệu khổng lồ. Hãy nhớ để giữ cho hiệu suất ứng dụng của bạn phù hợp, bạn cần có một phím sharding tốt, theo các mẫu dữ liệu của bạn vì nó ảnh hưởng trực tiếp đến thời gian phản hồi của bạn. Cân bằng dữ liệu giữa các phân đoạn là tự động. Tuy nhiên, tốt hơn hết bạn nên chuẩn bị và có kế hoạch phù hợp. Vì vậy, bạn có thể hợp nhất bất cứ khi nào ứng dụng của bạn yêu cầu.
5) Các phương pháp hay nhất cho cấu hình hệ điều hành
- Hệ thống Tệp XFS
- Đây là hệ thống tệp nhật ký 64 bit có khả năng mở rộng cao, hiệu suất cao. Cải tiến hiệu suất I / O bằng cách cho phép các hoạt động I / O ít hơn và lớn hơn.
- Đặt giới hạn bộ mô tả tệp.
- Tắt các trang khổng lồ trong suốt và Bộ nhớ truy cập không đồng nhất (NUMA).
- Thay đổi thời gian lưu giữ mặc định của TCP thành 300 giây (đối với Linux) và 120 giây (đối với Azure).
Hãy thử các lệnh này để thay đổi thời gian lưu giữ mặc định;
Đối với Linux
sudo sysctl -w net.ipv4.tcp_keepalive_time=<value>
Đối với Windows
Nhập lệnh này vào Command Prompt với tư cách là Quản trị viên, trong đó
reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\ /t REG_DWORD /v KeepAliveTime /d <value>
6) Đảm bảo tính khả dụng cao bằng cách sử dụng Nhân rộng
Tiếp tục sản xuất mà không nhân rộng có thể khiến ứng dụng của bạn bị lỗi đột ngột. Nhân rộng sẽ xử lý vấn đề nếu một nút bị lỗi. Quản lý các hoạt động đọc, ghi cho các phiên bản MongoDB phụ của bạn theo nhu cầu ứng dụng của bạn.
Hãy ghi nhớ những điều này khi nhân bản:
- Để có tính khả dụng cao, hãy triển khai nhóm bản sao của bạn thành tối thiểu ba trung tâm dữ liệu.
- Đảm bảo rằng các phiên bản MongoDB có 0 hoặc 1 phiếu bầu.
- Đảm bảo kết nối mạng hai chiều đầy đủ giữa tất cả các phiên bản MongoDB.
Ví dụ về cách tạo một tập hợp bản sao với 4 phiên bản MongoDB cục bộ:
-
Tạo 4 phiên bản MongoDB cục bộ
Đầu tiên, tạo thư mục dữ liệu
mkdir -p /data/m0 mkdir -p /data/m1 mkdir -p /data/m2 mkdir -p /data/m3
-
Bắt đầu 4 phiên bản cục bộ
mongod --replSet cluster1 --port 27017 --dbpath /data/m0 mongod --replSet cluster2 --port 27018 --dbpath /data/m1 mongod --replSet cluster1 --port 27019 --dbpath /data/m2 mongod --replSet cluster1 --port 27020 --dbpath /data/m3
-
Thêm các phiên bản vào cụm và bắt đầu
mongo myhost:34014 myConfig = {_id: ‘cluster1’, members: [ {_id: 0, host: ‘myhost1:27017’}, {_id: 1, host: ‘myhost2:27018’}, {_id: 2, host: ‘myhost3:27019’}, {_id: 3, host: ‘myhost4:27020’}] } rs.initiate(myConfig);
Các biện pháp bảo mật
7) Máy an toàn
Các cổng mở trên máy lưu trữ MongoDB dễ bị tấn công bởi các cuộc tấn công độc hại khác nhau. Hơn 30 nghìn cơ sở dữ liệu MongoDB đã bị xâm nhập trong một cuộc tấn công bằng ransomware do cấu hình bảo mật thích hợp bị chậm. Trong khi tiếp tục sản xuất, hãy đóng các cổng công khai của máy chủ MongoDB của bạn. Tuy nhiên, bạn nên mở một cổng cho mục đích SSh.
Bật xác thực trên phiên bản MongoDB:
-
Khởi chạy tệp mongod.conf trong trình chỉnh sửa yêu thích của bạn.
-
Nối các dòng này vào cuối tệp cấu hình.
security: authorization: enabled
-
Nối các dòng này vào cuối tệp cấu hình.
service mongod restart
-
Xác nhận trạng thái
service mongod status
Hạn chế quyền truy cập bên ngoài
Mở lại tệp mongod.conf để đặt các IP hạn chế truy cập vào máy chủ của bạn.
bind_ip=127.0.0.1
Bằng cách thêm dòng này, điều đó có nghĩa là bạn chỉ có thể truy cập máy chủ của mình thông qua 127.0.0. (là localhost). Bạn cũng có thể thêm nhiều IP trong tùy chọn liên kết.
bind_ip=127.0.0.1,168.21.200.200
Nó có nghĩa là bạn có thể truy cập từ localhost và mạng riêng của mình.
8) Bảo vệ bằng mật khẩu
Để thêm một lớp bảo mật bổ sung cho máy của bạn, hãy bật kiểm soát truy cập và thực thi xác thực. Mặc dù thực tế là bạn đã hạn chế máy chủ MongoDB chấp nhận các kết nối từ thế giới bên ngoài, nhưng vẫn có khả năng có bất kỳ tập lệnh độc hại nào xâm nhập vào máy chủ của bạn. Vì vậy, đừng ngần ngại đặt tên người dùng / mật khẩu cho cơ sở dữ liệu của bạn và chỉ định các quyền cần thiết. Kiểm soát truy cập được bật sẽ chỉ cho phép người dùng thực hiện các hành động được xác định bởi vai trò của họ.
Dưới đây là các bước để tạo người dùng và gán quyền truy cập cơ sở dữ liệu với các vai trò cụ thể.
Trước tiên, chúng tôi sẽ tạo một người dùng (trong trường hợp này là quản trị viên) để quản lý tất cả người dùng và cơ sở dữ liệu, sau đó chúng tôi sẽ tạo chủ sở hữu cơ sở dữ liệu cụ thể chỉ có đặc quyền đọc và ghi trên một phiên bản cơ sở dữ liệu MongoDB.
Tạo người dùng quản trị để quản lý những người dùng khác cho các phiên bản cơ sở dữ liệu
-
Mở trình bao Mongo của bạn và chuyển sang cơ sở dữ liệu quản trị:
use admin
-
Tạo người dùng cho cơ sở dữ liệu quản trị
db.createUser({ user: "admin", pwd: "admin_password", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
-
Xác thực người dùng mới được tạo
db.auth("admin", "admin_password")
-
Tạo người dùng phiên bản cụ thể:
use database_1 db.createUser({ user: "user_1", pwd: "your_password", roles: [{ role: "dbOwner", db: "database_1" }] })
-
Bây giờ hãy xác minh xem người dùng đã được tạo thành công hay chưa.
db.auth("user_1", "your_password") show collections
Đó là nó! Bạn đã bảo mật thành công các phiên bản cơ sở dữ liệu của mình bằng xác thực thích hợp. Bạn có thể thêm bao nhiêu người dùng tùy thích theo cùng một quy trình.
9) Mã hóa và Bảo vệ Dữ liệu
Nếu bạn đang sử dụng Wiredtiger làm công cụ lưu trữ thì bạn có thể sử dụng mã hóa của nó khi cấu hình nghỉ để mã hóa dữ liệu của mình. Nếu không, thì mã hóa phải được thực hiện trên máy chủ lưu trữ bằng hệ thống tệp, thiết bị hoặc mã hóa vật lý.
10) Giám sát việc triển khai của bạn
Khi bạn đã hoàn thành việc triển khai MongoDB vào sản xuất, thì bạn phải theo dõi hoạt động hiệu suất để ngăn chặn sớm các sự cố có thể xảy ra. Có một loạt các chiến lược mà bạn có thể điều chỉnh để theo dõi hiệu suất dữ liệu của mình trong môi trường sản xuất.
-
MongoDB bao gồm các tiện ích, trả về số liệu thống kê về hiệu suất và hoạt động của phiên bản. Các tiện ích được sử dụng để xác định các vấn đề và phân tích các hoạt động bình thường.
-
Sử dụng mongostat để nắm bắt việc sắp xếp các loại hoạt động và lập kế hoạch năng lực.
-
Để theo dõi báo cáo và hoạt động đọc-ghi, mongotop được khuyến khích.
mongotop 15
Lệnh này sẽ trả về kết quả sau mỗi 15 giây.
ns total read write 2018-04-22T15:32:01-05:00
admin.system.roles 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms
local.me 0ms 0ms 0ms
local.oplog.rs 0ms 0ms 0ms
local.replset.minvalid 0ms 0ms 0ms
local.startup_log 0ms 0ms 0ms
local.system.indexes 0ms 0ms 0ms
local.system.namespaces 0ms 0ms 0ms
local.system.replset 0ms 0ms 0ms
ns total read write 2018-04-22T15:32:16-05:00
admin.system.roles 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms
local.me 0ms 0ms 0ms
local.oplog.rs 0ms 0ms 0ms
local.replset.minvalid 0ms 0ms 0ms
local.startup_log 0ms 0ms 0ms
local.system.indexes 0ms 0ms 0ms
local.system.namespaces 0ms 0ms 0ms
local.system.replset 0ms 0ms 0ms
Dịch vụ giám sát MongoDB (MMS) là một tùy chọn khả dụng khác giám sát cụm MongoDB của bạn và giúp bạn thuận tiện trong việc quan sát các hoạt động triển khai sản xuất.
Và tất nhiên có ClusterControl của Somenines, hệ thống tự động hóa và quản lý cơ sở dữ liệu mã nguồn mở. ClusterControl cho phép dễ dàng triển khai các cụm với cài đặt bảo mật tự động và giúp việc khắc phục sự cố cơ sở dữ liệu của bạn trở nên đơn giản bằng cách cung cấp tính năng tự động hóa quản lý dễ sử dụng, bao gồm sửa chữa và phục hồi các nút bị hỏng, nâng cấp tự động, v.v. Bạn có thể bắt đầu với Phiên bản Cộng đồng (miễn phí mãi mãi) của nó, nhờ đó bạn có thể triển khai và giám sát MongoDB cũng như tạo các cố vấn tùy chỉnh để điều chỉnh nỗ lực giám sát của bạn đối với những khía cạnh cụ thể đối với thiết lập của bạn. Tải xuống miễn phí tại đây.