Thứ tư, 07/10/2020 | 00:00 GMT+7

Cách cài đặt MongoDB trên CentOS 8

MongoDB , còn gọi là Mongo , là một opensource database được sử dụng trong nhiều ứng dụng web hiện đại. Nó được gọi là database NoSQL vì nó không dựa trên cấu trúc database quan hệ dựa trên bảng truyền thống.

 

Thay vào đó, nó sử dụng các tài liệu giống JSON với các schemas động, nghĩa là , không giống như database quan hệ, MongoDB không yêu cầu một schemas được định nghĩa trước khi bạn thêm dữ liệu vào database . Bạn có thể thay đổi schemas bất kỳ lúc nào và thường xuyên khi cần thiết mà không cần phải cài đặt một database mới với một schemas được cập nhật.

Trong hướng dẫn này, bạn sẽ cài đặt MongoDB trên server CentOS 8, kiểm tra nó và tìm hiểu cách quản lý nó như một dịch vụ systemd .

Yêu cầu

Để hoàn thành hướng dẫn này, bạn cần một server chạy CentOS 8. Server này phải có user không phải root có quyền quản trị và firewall được cấu hình bằng firewalld . Để cài đặt điều này, hãy làm theo hướng dẫn Cài đặt Server Ban đầu cho CentOS 8 của ta .

Bước 1 - Cài đặt MongoDB

Không có gói MongoDB chính thức nào có sẵn trong repository lưu trữ CentOS tiêu chuẩn. Để cài đặt Mongo trên server của bạn, bạn cần thêm file repository trỏ đến kho chính thức của MongoDB. Sau đó, trình quản lý gói của bạn sẽ đọc file này khi tìm kiếm các gói và có thể sử dụng nó để cài đặt Mongo và bất kỳ phụ thuộc nào của nó.

Trong hướng dẫn này, ta sẽ cài đặt Mongo với trình quản lý gói DNF, vì vậy bạn cần thêm file repository vào folder /etc/yum.repos.d/ . DNF kiểm tra các file nào trong folder này kết thúc bằng hậu tố .repo khi tìm kiếm nguồn gói.

Bạn có thể sử dụng vi - một editor được sử dụng rộng rãi được cài đặt trên hệ thống CentOS theo mặc định - để tạo file repository , nhưng vi có thể hơi khó hiểu đối với những user chưa có kinh nghiệm với nó. Để thay thế, ta đề xuất nano , một trình soạn thảo thân thiện hơn với user có sẵn từ các kho CentOS tiêu chuẩn.

Để cài đặt nano với DNF, hãy chạy lệnh sau:

  • sudo dnf install nano

Trong quá trình cài đặt này, hệ thống sẽ yêu cầu bạn xác nhận muốn cài đặt phần mềm. Để làm như vậy, hãy nhấn y , sau đó ENTER :

Output
Transaction Summary ================================================================================ Install  1 Package  Total download size: 581 k Installed size: 2.2 M Is this ok [y/N]: y 

Sau khi cài đặt xong, hãy chạy lệnh sau để tạo và mở file repository để chỉnh sửa:

  • sudo nano /etc/yum.repos.d/mongodb-org.repo

Sau đó, thêm nội dung sau vào file trống. Thao tác này sẽ cài đặt version 4.4 của MongoDB (phiên bản mới nhất tại thời điểm viết bài này):

/etc/yum.repos.d/mongodb-org.repo
[mongodb-org] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc 

Lưu ý : Bạn có thể kiểm tra xem có version MongoDB mới hơn hay không bằng cách tham khảo tài liệu chính thức của database . Trong trình duyệt web, chuyển đến phần Định cấu hình hệ thống quản lý gói trong hướng dẫn cài đặt RedHat và CentOS của MongoDB.

Tại đó, bạn sẽ tìm thấy một khối mã chứa thông tin về repository cho version MongoDB mới nhất. Nếu khác với nội dung file trước đó, bạn có thể sao chép cấu hình đó và thêm vào file .repo của bạn .

Đây là những gì mỗi lệnh này thực hiện:

  • [mongodb-org] : dòng đầu tiên của file .repo là một chuỗi ký tự đơn lẻ, được bao bọc trong dấu ngoặc, đóng role là số nhận dạng cho repository
  • name : chỉ thị này xác định một tên có thể đọc được của con người để mô tả repository . Bạn có thể nhập bất kỳ tên nào bạn muốn ở đây, nhưng để rõ ràng hơn, bạn có thể nhập MongoDB Repository
  • baseurl : điểm này để URL của folder chứa của kho repodata folder , trong đó có chứa metadata của repository , có thể được tìm thấy
  • gpgcheck : đặt chỉ thị này thành 1 cho trình quản lý gói DNF bật tính năng kiểm tra chữ ký GPG trên repository này, yêu cầu nó xác minh xem bất kỳ gói nào bạn muốn cài đặt từ đó đã bị hỏng hoặc giả mạo hay chưa
  • enabled : đặt chỉ thị này thành 1 sẽ yêu cầu DNF bao gồm repository này làm nguồn gói; đặt nó thành 0 sẽ vô hiệu hóa hành vi này
  • gpgkey : chỉ thị này chỉ định URL của khóa GPG sẽ được nhập để xác minh chữ ký của các gói từ repository này

Sau khi thêm thông tin repository , hãy lưu file . Nếu bạn đã sử dụng nano để tạo file repo, hãy làm như vậy bằng cách nhấn CTRL + X , Y , sau đó ENTER .

Trước khi tiếp tục, bạn có thể kiểm tra xem DNF có thể tìm và sử dụng kho này hay không bằng cách chạy lệnh repolist của chương trình:

  • dnf repolist

Nếu repository có sẵn cho trình quản lý gói của server của bạn, bạn sẽ thấy nó được liệt kê trong kết quả :

Output
repo id                                                                           repo name AppStream                                                                         CentOS-8 - AppStream BaseOS                                                                            CentOS-8 - Base extras                                                                            CentOS-8 - Extras mongodb-org                                                                       MongoDB Repository 

Sau đó, bạn có thể cài đặt gói mongodb-org bằng lệnh này:

  • sudo dnf install mongodb-org

, bạn cần xác nhận bạn muốn cài đặt gói bằng cách nhấn y rồi nhấn ENTER . DNF cũng có thể yêu cầu bạn xác nhận việc nhập khóa ký của Mongo; nếu đúng như vậy, hãy làm như vậy bằng cách nhấn y rồi ENTER .

Sau khi lệnh kết thúc, MongoDB sẽ được cài đặt trên server của bạn. Tuy nhiên, trước khi bạn khởi động database , tài liệu MongoDB khuyên bạn nên tắt Trang khổng lồ minh bạch trên server của bạn để tối ưu hóa hiệu suất.

Bước 2 - Tắt các trang khổng lồ trong suốt để cải thiện hiệu suất

CentOS cho phép các Trang khổng lồ trong suốt (THP), một hệ thống quản lý bộ nhớ Linux, theo mặc định. THP sử dụng các trang bộ nhớ cực lớn để giảm tác động của việc tra cứu Cache Dịch Lookaside trên các máy có dung lượng bộ nhớ lớn. Tuy nhiên, hệ thống này có thể có tác động tiêu cực đến hiệu suất database và tài liệu MongoDB khuyên bạn nên tắt THP.

Để vô hiệu hóa Trang khổng lồ trong suốt trên CentOS 8, bạn có thể tạo một file đơn vị systemd sẽ vô hiệu hóa nó khi khởi động. systemd là một hệ thống init và bộ phần mềm được sử dụng trong nhiều hệ điều hành Linux mà bạn có thể kiểm soát nhiều khía cạnh của server . Trong systemd, một đơn vị đề cập đến bất kỳ tài nguyên nào mà hệ thống biết cách vận hành và quản lý. Tệp đơn vị là file cấu hình đặc biệt xác định một trong những tài nguyên này.

Tạo file này trong folder /etc/systemd/system/ với các quyền sudo :

  • sudo nano /etc/systemd/system/disable-thp.service

Trong file , bạn cần thêm một vài phần riêng biệt. Phần đầu tiên bạn sẽ thêm là phần [Unit] chứa một số thông tin chung về đơn vị dịch vụ.

Thêm các dòng được đánh dấu sau:

/etc/systemd/system/disable-thp.service
[Unit] Description=Disable Transparent Huge Pages (THP) After=sysinit.target local-fs.target Before=mongod.service 

Sau tiêu đề phần [Unit] là các tùy chọn sau:

  • Description : điều này xác định tên có thể đọc được của con người cho đơn vị
  • After : điều này đảm bảo đơn vị dịch vụ disable-thp sẽ chỉ khởi động sau khi hai mục tiêu được chỉ định - các group đơn vị systemd được định nghĩa - hoàn thành khởi động
  • Before : tùy chọn này đảm bảo dịch vụ disable-thp sẽ luôn kết thúc khởi động trước khi mongod , đơn vị dịch vụ MongoDB, khởi động

Tiếp theo, thêm phần [Service] đánh dấu vào file :

/etc/systemd/system/disable-thp.service
. . . Before=mongod.service  [Service] Type=oneshot ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null'  

Tùy chọn Type của phần này xác định rằng đơn vị này sẽ là một quy trình loại oneshot , nghĩa là nó sẽ là một tác vụ duy nhất và systemd nên đợi quá trình thoát trước khi tiếp tục.

Tùy chọn ExecStart được sử dụng để chỉ định đường dẫn đầy đủ và bất kỳ đối số nào của lệnh sẽ bắt đầu quá trình. Lệnh bao gồm ở đây sẽ mở ra một tiến trình shell và sau đó chạy lệnh giữa các dấu nháy đơn. Lệnh này lặp lại chuỗi never và sau đó chuyển nó vào lệnh tee sau. Sau đó, lệnh tee sẽ viết lại file /sys/kernel/mm/transparent_hugepage/enablednever là nội dung duy nhất của nó và chuyển bất kỳ kết quả nào tới /dev/null , một thiết bị rỗng ngay lập tức loại bỏ mọi thông tin được ghi vào nó. Đây là những gì thực sự sẽ vô hiệu hóa THP.

Sau đó, thêm phần [Install] đánh dấu này:

/etc/systemd/system/disable-thp.service
. . . ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null'  [Install] WantedBy=basic.target 

[Install] mang thông tin cài đặt cho thiết bị. Phần này chỉ có một tùy chọn, WantedBy , sẽ khiến đơn vị disable-thp bắt đầu khi server khởi động basic.target .

Lưu ý : Nếu bạn muốn tìm hiểu thêm về các đơn vị và dịch vụ systemd , ta khuyên bạn nên xem hướng dẫn của ta về Tìm hiểu Đơn vị Systemd và Tệp Đơn vị .

Toàn bộ file đơn vị dịch vụ sẽ trông như thế này khi bạn đã hoàn tất việc thêm tất cả các dòng:

/etc/systemd/system/disable-thp.service
[Unit] Description=Disable Transparent Huge Pages (THP) After=sysinit.target local-fs.target Before=mongod.service  [Service] Type=oneshot ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null'  [Install] WantedBy=basic.target 

Lưu file khi hoàn tất. Sau đó, reload systemd để làm cho hệ thống của bạn biết về dịch vụ disable-thp :

  • sudo systemctl daemon-reload

Tiếp theo, khởi động dịch vụ disable-thp :

  • sudo systemctl start disable-thp.service

Bạn có thể xác nhận THP đã bị vô hiệu hóa bằng cách kiểm tra nội dung của file /sys/kernel/mm/transparent_hugepage/enabled :

  • cat /sys/kernel/mm/transparent_hugepage/enabled

Nếu THP đã được vô hiệu hóa thành công, sẽ never được đặt trong dấu ngoặc trong kết quả :

Output
always madvise [never] 

Sau đó, kích hoạt dịch vụ disable-thp để nó sẽ tự động khởi động và tắt THP khi nào server khởi động. Lưu ý lệnh này không bao gồm .service trong định nghĩa file dịch vụ. systemctl sẽ nối hậu tố này vào bất kỳ đối số nào bạn truyền tự động nếu nó chưa có, vì vậy không cần thiết phải bao gồm nó:

  • sudo systemctl enable disable-thp

Dịch vụ disable-thp bây giờ sẽ khởi động khi nào server của bạn khởi động và tắt THP trước khi dịch vụ MongoDB bắt đầu. Tuy nhiên, bạn cần thực hiện thêm một bước nữa đảm bảo rằng THP vẫn bị vô hiệu hóa trên hệ thống.

Theo mặc định, CentOS 8 cũng đã tuned - một công cụ điều chỉnh kernel - được cài đặt và kích hoạt. tuned sử dụng một số cấu hình điều chỉnh được cấu hình sẵn có thể cải thiện hiệu suất cho một số trường hợp sử dụng cụ thể. Bạn có thể chỉnh sửa các cấu hình này hoặc tạo các cấu hình mới tùy chỉnh cho hệ thống của bạn.

Công cụ đã tuned có thể ảnh hưởng đến cài đặt THP trên hệ thống của bạn, do đó, tài liệu MongoDB cũng khuyên bạn nên tạo một cấu hình tùy chỉnh đảm bảo rằng THP không được bật đột ngột.

Bắt đầu với việc này bằng cách tạo một folder mới để chứa profile đã tuned chỉnh tùy tuned :

  • sudo mkdir /etc/tuned/no-thp

Trong folder này, hãy tạo file cấu hình có tên tuned.conf :

  • sudo nano /etc/tuned/no-thp/tuned.conf

Thêm hai phần sau vào file :

/etc/tuned/no-thp/tuned.conf
[main] include=virtual-guest  [vm] transparent_hugepages=never 

Phần đầu tiên, [main] , phải có trong mọi file cấu hình đã tuned . Ở đây, ta chỉ chỉ định một câu lệnh include sẽ khiến cấu hình no-thp kế thừa các đặc điểm của một cấu hình đã tuned khác có tên là virtual-guest .

Lưu ý : Việc kế thừa các đặc điểm của profile virtual-guest như thế này sẽ hoạt động trong nhiều trường hợp, nhưng nó có thể không tối ưu cho mọi trường hợp. Ta khuyến khích bạn xem lại tài liệu này về các cấu hình đã tuned được cung cấp để xác định xem việc kế thừa các đặc điểm của cấu hình khác có phù hợp hơn với hệ thống của bạn hay không.

Phần tiếp theo chỉ định một plugin đặc biệt - vm - được sử dụng đặc biệt để bật hoặc tắt THP dựa trên giá trị theo sau tùy chọn boolean transparent_hugepages suốt_hugepages.

Sau khi thêm các dòng này, hãy lưu file . Sau đó, kích hoạt cấu hình mới:

  • sudo tuned-adm profile no-thp

Như vậy, bạn đã vô hiệu hóa THP trên server của bạn . Đến đây bạn có thể khởi động dịch vụ MongoDB và kiểm tra chức năng của database .

Bước 3 - Khởi động dịch vụ MongoDB và kiểm tra database

Quá trình cài đặt được mô tả trong Bước 1 tự động cấu hình MongoDB để chạy dưới dạng daemon được điều khiển bởi systemd , nghĩa là bạn có thể quản lý MongoDB bằng các lệnh systemctl khác nhau. Tuy nhiên, quy trình cài đặt này không tự động khởi động dịch vụ.

Chạy lệnh systemctl sau để bắt đầu dịch vụ MongoDB:

  • sudo systemctl start mongod

Sau đó, kiểm tra trạng thái của dịch vụ:

  • sudo systemctl status mongod

Lệnh này sẽ trả về kết quả kết quả như sau, cho biết rằng dịch vụ đang hoạt động và hoạt động:

Output
● mongod.service - MongoDB Database Server    Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled; vendor preset: disabled)    Active: active (running) since Thu 2020-10-01 20:31:26 UTC; 19s ago      Docs: https://docs.mongodb.org/manual   Process: 14208 ExecStart=/usr/bin/mongod $OPTIONS (code=exited, status=0/SUCCESS)   Process: 14205 ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb (code=exited, status=0/SUCCESS)   Process: 14203 ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb (code=exited, status=0/SUCCESS)   Process: 14201 ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb (code=exited, status=0/SUCCESS)  Main PID: 14210 (mongod)    Memory: 66.6M    CGroup: /system.slice/mongod.service            └─14210 /usr/bin/mongod -f /etc/mongod.conf 

Sau khi xác nhận dịch vụ đang chạy như mong đợi, hãy bật dịch vụ MongoDB khởi động khi server khởi động :

  • sudo systemctl enable mongod

Bạn có thể xác minh thêm rằng database đang hoạt động bằng cách kết nối với server database và chạy lệnh kiểm tra . Lệnh sau sẽ kết nối với database và xuất ra version , địa chỉ server và cổng hiện tại của nó. Nó cũng sẽ trả về kết quả của lệnh Internal connectionStatus của MongoDB:

  • mongo --eval 'db.runCommand({ connectionStatus: 1 })'

connectionStatus sẽ kiểm tra và trả về trạng thái của kết nối database . Giá trị 1 cho trường ok trong phản hồi cho biết rằng server đang hoạt động như mong đợi:

Output
MongoDB shell version v4.4.1 connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("460fe822-2881-477c-b095-aa3ccb49702d") } MongoDB server version: 4.4.1 {     "authInfo" : {         "authenticatedUsers" : [ ],         "authenticatedUserRoles" : [ ]     },     "ok" : 1 } 

Ngoài ra, lưu ý database đang chạy trên cổng 27017 trên 127.0.0.1 , địa chỉ loopback cục bộ đại diện cho localhost . Đây là số cổng mặc định của MongoDB.

Tiếp theo, ta sẽ xem xét cách quản lý version server MongoDB với systemd .

Bước 4 - Quản lý Dịch vụ MongoDB

Như đã đề cập trước đây, quá trình cài đặt được mô tả trong Bước 1 cấu hình MongoDB để chạy như một dịch vụ systemd . Điều này nghĩa là bạn có thể quản lý nó bằng cách sử dụng các lệnh systemctl chuẩn như bạn làm với các dịch vụ hệ thống CentOS khác.

Nhớ lại rằng lệnh systemctl status kiểm tra trạng thái của dịch vụ MongoDB:

  • sudo systemctl status mongod

Bạn có thể dừng dịch vụ bất cứ lúc nào bằng lệnh :

  • sudo systemctl stop mongod

Để bắt đầu dịch vụ khi nó dừng, hãy chạy:

  • sudo systemctl start mongod

Bạn cũng có thể khởi động lại server khi nó đang chạy:

  • sudo systemctl restart mongod

Ở Bước 3, bạn đã bật MongoDB để tự động khởi động với server . Nếu bạn muốn tắt tính năng khởi động tự động này, hãy nhập:

  • sudo systemctl disable mongod

Sau đó, để chạy lại nó khởi động khi server khởi động , hãy chạy lại lệnh enable :

  • sudo systemctl enable mongod

Để biết thêm thông tin về cách quản lý các dịch vụ systemd , hãy xem Systemd Essentials: Làm việc với Dịch vụ, Đơn vị và Nhật ký .

Kết luận

Trong hướng dẫn này, bạn đã thêm repository MongoDB chính thức vào danh sách các repository DNF của bạn và cài đặt version mới nhất của database . Sau đó, bạn vô hiệu hóa Trang khổng lồ trong suốt để tối ưu hóa hiệu suất của database , kiểm tra chức năng của Mongo và thực hành một số lệnh systemctl .

Bước tiếp theo ngay lập tức, ta đặc biệt khuyên bạn nên tăng cường bảo mật cho cài đặt MongoDB của bạn theo hướng dẫn của ta về Cách bảo mật MongoDB trên CentOS 8 . Khi nó được bảo mật, bạn có thể cấu hình MongoDB để chấp nhận các kết nối từ xa .

Bạn có thể tìm thêm hướng dẫn về cách cấu hình và sử dụng MongoDB trong các bài viết cộng đồng DigitalOcean này . Ta cũng khuyến khích bạn xem tài liệu chính thức của MongoDB , vì đó là một tài nguyên tuyệt vời về các khả năng mà MongoDB cung cấp.


Tags:

Các tin liên quan

Cách bảo mật MongoDB trên CentOS 8
2020-10-07
Cách cấu hình quyền truy cập từ xa cho MongoDB trên CentOS 8
2020-10-07
Cách cấu hình ghi log HAProxy với Rsyslog trên CentOS 8 [Quickstart]
2020-09-22
Cách cài đặt Git trên CentOS 8
2020-04-12
Cách thiết lập và cấu hình Tổ chức phát hành chứng chỉ (CA) trên CentOS 8
2020-04-06
Cách cài đặt MariaDB trên CentOS 8
2020-04-03
Cách thiết lập firewall bằng firewalld trên CentOS 8
2020-04-03
Cách thêm và xóa người dùng trên CentOS 8
2020-04-03
Cách cài đặt Node.js trên CentOS 8
2020-04-01
Cách tạo người dùng mới hỗ trợ Sudo trên CentOS 8 [Khởi động nhanh]
2020-03-30