MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Tối ưu hóa môi trường Linux của bạn cho MongoDB

Hiệu suất của MongoDB phụ thuộc vào cách nó sử dụng các tài nguyên cơ bản. Nó lưu trữ dữ liệu trên đĩa, cũng như trong bộ nhớ. Nó sử dụng tài nguyên CPU để thực hiện các hoạt động và một mạng để giao tiếp với các máy khách của nó. Cần có đầy đủ các nguồn lực để hỗ trợ tính sinh động chung của nó. Trong bài viết này, chúng tôi sẽ thảo luận về các yêu cầu tài nguyên khác nhau đối với hệ thống cơ sở dữ liệu MongoDB và cách chúng tôi có thể tối ưu hóa chúng để có hiệu suất tối đa.

Yêu cầu đối với MongoDB

Ngoài việc cung cấp các tài nguyên quy mô lớn như RAM và CPU cho cơ sở dữ liệu, việc điều chỉnh Hệ điều hành cũng có thể cải thiện hiệu suất ở một mức độ nào đó. Các tiện ích quan trọng cần thiết để thiết lập môi trường MongoDB bao gồm:

  1. Đủ dung lượng đĩa
  2. Bộ nhớ đầy đủ
  3. Kết nối mạng tuyệt vời.

Hệ điều hành phổ biến nhất cho MongoDB là Linux, vì vậy chúng ta sẽ xem xét cách tối ưu hóa hệ điều hành này cho cơ sở dữ liệu.

Tình trạng khởi động lại.

Có nhiều kỹ thuật điều chỉnh có thể được áp dụng cho Linux. Tuy nhiên, vì một số thay đổi diễn ra mà không cần khởi động lại máy chủ của bạn, bạn nên khởi động lại sau khi thực hiện các thay đổi để đảm bảo chúng được áp dụng. Trong phần này, các triển khai điều chỉnh mà chúng ta sẽ thảo luận là:

  1. Ngăn xếp mạng
  2. Daemon NTP
  3. Giới hạn người dùng Linux
  4. Hệ thống tệp và các tùy chọn
  5. Bảo mật
  6. Bộ nhớ ảo

Ngăn xếp mạng

Giống như bất kỳ phần mềm nào khác, kết nối mạng tuyệt vời cung cấp giao diện trao đổi tốt hơn cho các yêu cầu và phản hồi với máy chủ. Tuy nhiên, MongoDB không được ưa chuộng với các điều chỉnh mạng hạt nhân mặc định của Linux. Như tên mô tả, đây là sự sắp xếp của nhiều lớp có thể được phân loại thành 3 lớp chính:Vùng người dùng, Vùng nhân và Vùng thiết bị. Vùng người dùng và vùng nhân được gọi là máy chủ lưu trữ vì các tác vụ của chúng được thực hiện bởi CPU. Vùng thiết bị có nhiệm vụ gửi và nhận gói tin thông qua một giao diện gọi là Thẻ giao diện mạng. Để có hiệu suất tốt hơn với môi trường MongoDB, máy chủ lưu trữ phải được giới hạn trong giới hạn giao diện mạng 1Gbps. Trong trường hợp này, những gì chúng tôi phải điều chỉnh là cài đặt thông lượng tương đối bao gồm:

  1. net.core.somaxconn (tăng giá trị)
  2. net.ipv4.tcp_max_syn_backlog (tăng giá trị)
  3. net.ipv4.tcp_fin_timeout (giảm giá trị)
  4. net.ipv4.tcp_keepalive_intvl (giảm giá trị)
  5. net.ipv4.tcp_keepalive_time (giảm giá trị)

Để thực hiện những thay đổi này vĩnh viễn, hãy tạo tệp mới /etc/sysctl.d/mongodb-sysctl.conf nếu tệp không tồn tại và thêm các dòng này vào tệp.

net.core.somaxconn = 4096
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_max_syn_backlog = 4096

Sau đó, chạy lệnh với quyền root user / sbin / sysctl -p để áp dụng các thay đổi vĩnh viễn.

NTP Daemon

Giao thức thời gian mạng (NTP) là một kỹ thuật mà đồng hồ phần mềm của hệ thống Linux được đồng bộ hóa với các máy chủ thời gian internet. MongoDB, là một cụm, phụ thuộc vào tính nhất quán về thời gian giữa các nút. Vì lý do này, điều quan trọng là NTP phải được chạy vĩnh viễn trên các máy chủ MongoDB. Tầm quan trọng của cấu hình NTP là đảm bảo máy chủ phục vụ liên tục trong một thời gian nhất định sau khi ngắt kết nối mạng. Theo mặc định, NTP được cài đặt ở phía máy khách nên để MongoDB cài đặt NTP trên hệ thống Linux có phiên bản Debian / Ubuntu, chỉ cần chạy lệnh:

$ sudo apt-get install ntp

Bạn có thể truy cập ntp.conf để xem cấu hình của daemon NTP cho các hệ điều hành khác nhau.

Giới hạn người dùng Linux

Đôi khi lỗi từ phía người dùng có thể ảnh hưởng đến toàn bộ hệ thống máy chủ và máy chủ. Để tránh điều này, hệ thống Linux được thiết kế để thực hiện một số giới hạn tài nguyên hệ thống liên quan đến các quy trình được thực thi trên cơ sở mỗi người dùng. Điều này là hiển nhiên, sẽ không thích hợp để triển khai MongoDB trên các cấu hình hệ thống mặc định như vậy vì nó sẽ yêu cầu nhiều tài nguyên hơn so với cung cấp mặc định. Bên cạnh đó, MongoDB thường là quá trình chính để sử dụng phần cứng bên dưới, do đó, nó sẽ là chủ yếu để tối ưu hóa hệ thống Linux cho mục đích sử dụng chuyên dụng đó. Cơ sở dữ liệu ThE sau đó có thể khai thác đầy đủ các tài nguyên có sẵn.

Tuy nhiên, sẽ không thuận tiện nếu vô hiệu hóa các ràng buộc giới hạn này hoặc đặt chúng ở trạng thái không giới hạn. Ví dụ:nếu bạn gặp phải tình trạng thiếu bộ nhớ CPU hoặc RAM, một lỗi nhỏ có thể dẫn đến sự cố lớn và dẫn đến các tính năng khác bị lỗi - ví dụ:SSH, thứ quan trọng trong việc giải quyết vấn đề ban đầu.

Để đạt được ước tính tốt hơn, bạn nên hiểu các yêu cầu ràng buộc ở cấp cơ sở dữ liệu. Ví dụ:ước tính số lượng người dùng sẽ đưa ra yêu cầu đối với cơ sở dữ liệu và thời gian xử lý. Bạn có thể tham khảo Những điều chính cần theo dõi cho MongoDB. Giới hạn thích hợp nhất cho các quy trình người dùng tối đa và tệp mở là 64000. Để đặt các giá trị này, hãy tạo một tệp mới nếu tệp đó không tồn tại dưới dạng /etc/security/limits.d và thêm các dòng này vào

mongod       soft        nofile       64000
mongod       hard        nofile       64000
mongod       soft        nproc        64000
mongod       hard        nproc        64000

Để bạn áp dụng các thay đổi này, hãy khởi động lại mongod của bạn vì các thay đổi chỉ áp dụng cho các trình bao mới.

Hệ thống tệp và tùy chọn

MongoDB sử dụng 3 loại hệ thống tệp là ext3, ext4 và XFS cho dữ liệu cơ sở dữ liệu trên đĩa. Đối với công cụ lưu trữ WiredTiger được sử dụng cho phiên bản MongoDB lớn hơn 3, XFS được sử dụng tốt nhất thay vì ext4 được coi là gây ra một số vấn đề về độ ổn định trong khi ext3 cũng bị tránh do hiệu suất phân bổ trước kém. MongoDB không sử dụng kỹ thuật hệ thống tệp mặc định để thực hiện cập nhật siêu dữ liệu thời gian truy cập như các hệ thống khác. Do đó, bạn có thể tắt cập nhật thời gian truy cập để tiết kiệm một lượng nhỏ hoạt động IO trên đĩa được sử dụng bởi các cập nhật này.

Điều này có thể được thực hiện bằng cách thêm một ký hiệu cờ vào trường tùy chọn hệ thống tệp trong tệp etc / fstab cho đĩa phục vụ dữ liệu MongoDB.

$ grep "/var/lib/mongo" /proc/mounts
/dev/mapper/data-mongodb /var/lib/mongo ext4 rw, seclabel, noatime, data=ordered 0 0

Thay đổi này chỉ có thể được thực hiện khi bạn khởi động lại hoặc khởi động lại MongoDB.

Bảo mật

Trong số một số tính năng bảo mật mà hệ thống Linux có, ở cấp hạt nhân là Linux được tăng cường bảo mật. Đây là cách triển khai Kiểm soát Truy cập Bắt buộc chi tiết. Nó cung cấp một cầu nối với chính sách bảo mật để xác định xem một hoạt động có nên tiến hành hay không. Thật không may, nhiều người dùng Linux đặt mô-đun kiểm soát truy cập này chỉ để cảnh báo hoặc họ vô hiệu hóa nó hoàn toàn. Điều này thường do một số trở ngại liên quan chẳng hạn như lỗi bị từ chối cấp phép không mong muốn. Mô-đun này, hầu như nhiều người bỏ qua nó, đóng một vai trò quan trọng trong việc giảm các cuộc tấn công cục bộ vào máy chủ. Với tính năng này được bật và chế độ tương ứng được đặt thành tích cực, nó sẽ cung cấp nền an toàn cho MongoDB của bạn. Do đó, bạn nên bật chế độ SELinux và cũng áp dụng chế độ Ép buộc, đặc biệt là khi bắt đầu cài đặt. Để thay đổi chế độ SELinux thành Enforcing:chạy lệnh

$ sudo setenforce Enforcing

Bạn có thể kiểm tra chế độ SELinux đang chạy bằng cách chạy

$ sudo getenforce
Vài người trở thành MongoDB DBA - Đưa MongoDB vào Sản xuất Tìm hiểu về những điều bạn cần biết để triển khai, giám sát, quản lý và mở rộng MongoDBDownload miễn phí

Bộ nhớ ảo

Tỷ lệ bẩn

MongoDB sử dụng công nghệ bộ đệm để tăng cường tìm nạp nhanh dữ liệu. Trong trường hợp này, các trang bẩn được tạo ra và một số bộ nhớ sẽ được yêu cầu để chứa chúng. Do đó, tỷ lệ bẩn trở thành tỷ lệ phần trăm của tổng bộ nhớ hệ thống có thể chứa các trang bẩn. Trong hầu hết các trường hợp, giá trị mặc định nằm trong khoảng (25 - 35)%. Nếu giá trị này bị vượt qua, thì các trang được cam kết trên đĩa và có tác dụng tạo tạm dừng cứng. Để tránh điều này, bạn có thể đặt hạt nhân luôn chuyển dữ liệu thông qua một tỷ lệ khác được gọi là dirty_background_ratio có giá trị nằm trong khoảng (10% - 15%) vào đĩa trong nền mà không nhất thiết phải tạo tạm dừng cứng.

Mục đích ở đây là đảm bảo hiệu suất truy vấn chất lượng. Do đó, bạn có thể giảm tỷ lệ nền nếu hệ thống cơ sở dữ liệu của bạn yêu cầu bộ nhớ lớn. Nếu tạm dừng cứng được cho phép, bạn có thể bị trùng lặp dữ liệu hoặc một số dữ liệu có thể không được ghi trong thời gian đó. Bạn cũng có thể giảm kích thước bộ nhớ cache để tránh dữ liệu được ghi vào đĩa theo từng đợt nhỏ thường xuyên có thể làm tăng lưu lượng đĩa. Để kiểm tra giá trị hiện đang chạy, bạn có thể chạy lệnh này:

$ sysctl -a | egrep “vm.dirty.*_ratio”

và bạn sẽ được giới thiệu những thứ như thế này.

vm.dirty_background_ratio = 10
vm.dirty_ratio = 20

Sự thích thú

Nó là một giá trị nằm trong khoảng từ 1 đến 100 mà hành vi của Trình quản lý bộ nhớ ảo có thể bị ảnh hưởng. Đặt nó thành 100 có nghĩa là hoán đổi mạnh mẽ vào đĩa và đặt nó thành 0 sẽ chỉ đạo hạt nhân hoán đổi chỉ để tránh các vấn đề hết bộ nhớ. Phạm vi mặc định cho Linux là 50-60, trong đó không thích hợp cho các hệ thống cơ sở dữ liệu. Trong thử nghiệm của riêng tôi, đặt giá trị từ 0 đến 10 là tối ưu. Bạn luôn có thể đặt giá trị này trong /etc/sysctl.conf

vm.swappiness = 5

Sau đó, bạn có thể kiểm tra giá trị này bằng cách chạy lệnh

$ sysctl vm.swappiness

Để bạn áp dụng những thay đổi này, hãy chạy lệnh / sbin / sysctl -p hoặc bạn có thể khởi động lại hệ thống của mình.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách xuất kết quả truy vấn MongoDB sang tệp CSV

  2. Số lượng nhóm với MongoDB sử dụng khung tổng hợp

  3. Sửa lỗi "$ pullAll yêu cầu một đối số mảng nhưng đã được cung cấp một đôi" trong MongoDB

  4. lưu ảnh vào mongodb

  5. Trong MongoDB, làm cách nào để bạn sử dụng $ set để cập nhật giá trị lồng nhau / tài liệu nhúng?