Có thể bạn đang lưu trữ MongoDB của mình trên một nhà cung cấp dịch vụ đám mây đáng tin cậy, chẳng hạn như Atlas vì bạn thực sự muốn tập trung vào ý tưởng của mình và ủy quyền tất cả các lĩnh vực quản lý chính như mạng, lưu trữ, truy cập, v.v.
Mọi chuyện ban đầu có vẻ ổn cho đến khi ý tưởng nhỏ của bạn bắt đầu biến thành một công việc kinh doanh và chi phí bắt đầu tăng vọt. Ngay cả khi không phải như vậy, bài đăng này vẫn sẽ cung cấp cho bạn tổng quan chung về những phức tạp kỹ thuật liên quan (và tiết kiệm được rất nhiều tiền!) Nếu bạn chuyển sang giải pháp tự lưu trữ.
BTW, chúng ta đang nói đến tiết kiệm bao nhiêu? Hãy làm một phép so sánh nhanh giữa Tập bản đồ phiên bản và MongoDB tự lưu trữ trên AWS .
Atlas (~ $ 166 / tháng)
$ 0,23 / giờ dựa trên các yêu cầu đã chọn ở trên (~ cloud.mongodb.com)
AWS (~ $ 36 / tháng)
0,0416 đô la / giờ cho ví dụ và giá bổ sung dựa trên loại EBS và bộ nhớ (~ Calculator.aws)
Tiết kiệm gần 4,5 lần chỉ về cơ sở hạ tầng!
Bây giờ bạn đã biết (các) lý do chính và vẫn đang đọc bài đăng này, mà không cần phải quảng cáo thêm, hãy đi sâu vào công nghệ.
Đường viền
- Thiết lập cơ sở hạ tầng
- Thiết lập MongoDB
- Di chuyển hàng loạt
- Delta-sync để thu hẹp thời gian chờ của công tắc kết nối (không áp dụng cho các cụm cũ)
Vì toàn bộ nội dung có thể hơi mệt mỏi ở một nơi, tôi sẽ chia điều này thành 2 bài đăng có liên quan.
1. Thiết lập cơ sở hạ tầng
Tôi sẽ đề cập bên dưới hướng dẫn thiết lập phiên bản chạy RedHat Enterprise Linux 8 trên AWS. Điều này là do MongoDB thường hoạt động tốt hơn với hệ thống tệp xfs. Đây là một bài viết để hiểu rõ hơn về nó.
Quay một phiên bản EC2
Tôi đã sử dụng t3.small
phiên bản đi kèm với 2 vCPU và 2Gb RAM mặc dù bạn có thể chọn bất kỳ trường hợp nào bạn chọn.
Khuyến nghị rằng DB của bạn nên có quyền truy cập vào ít nhất 1GB RAM và 2 lõi thực vì điều đó ảnh hưởng trực tiếp đến hiệu suất trong quá trình lưu vào bộ nhớ đệm và cơ chế đồng thời do công cụ mặc định WiredTiger xử lý . Bạn có thể đọc thêm về ghi chú sản xuất liên quan đến yêu cầu RAM và CPU tại đây .
Tổng quan về cấu hình:
- Hệ điều hành: Redhat Enterprise Linux 8 (dựa trên intel x64)
- Loại Phiên bản: t3.small
- Bộ nhớ: 10GB (hệ điều hành) + 30GB (dữ liệu) + 3GB (nhật ký) của EBS tức là 3 tập riêng biệt
Tôi cho rằng bạn đã quen với việc tạo VM trên AWS.
Bây giờ, khi phiên bản ở trạng thái đang chạy, hãy chỉ định một IP đàn hồi vào nó và sau đó chỉ cần thực hiện đăng nhập từ xa vào máy.
Chúng tôi sẽ cần IP đàn hồi để thiết lập tên máy chủ công khai cho phiên bản
$ ssh -i <PEM_FILE> ec2-user@<ELASTIC_IP>
Gắn các Tập bổ sung
Chúng tôi đã thêm 2 ổ đĩa EBS bổ sung khác ngoài FS gốc cho Dữ liệu và Nhật ký chưa được gắn kết ( Bạn có nhớ 30Gb và 3Gb không? ). Bạn có thể liệt kê các khối âm lượng bằng cách sử dụng,
$ sudo lsblk
Các khối lượng bổ sung sẽ được liệt kê ngay sau khối gốc (tham khảo các mũi tên)
Trong hình trên, bạn có thể thấy rằng các tập bổ sung được đặt tên là
- xvdb (30Gb dung lượng để lưu trữ dữ liệu)
- xvdc (3Gb dung lượng để lưu trữ nhật ký)
Bây giờ, hãy tạo hệ thống tệp trong các tập đó.
$ sudo mkfs.xfs -L mongodata /dev/xvdb
$ sudo mkfs.xfs -L mongologs /dev/xvdc
-L
là một tùy chọn bí danh để đặt nhãn âm lượng
Và sau đó gắn kết các tập.
$ sudo mount -t xfs /dev/xvdb /var/lib/mongo
$ sudo mount -t xfs /dev/xvdc /var/log/mongodb
Để những thay đổi này được phản ánh, hệ thống phải được khởi động lại. Do đó, bây giờ chúng tôi cũng cần tính bền vững của phân vùng để trong trường hợp khởi động lại không chủ ý, chúng tôi không mất bộ nhớ Cơ sở dữ liệu.
Chúng tôi có thể đạt được điều này bằng cách chỉ định các quy tắc gắn kết trong tệp fstab. Bạn có thể đọc thêm về nó tại đây.
Trước đó, hãy sao chép UUID của các phân vùng trên ( vì chúng là duy nhất và sẽ không thay đổi khi khởi động lại hệ thống )
$ sudo blkid
Sao chép các UUID được liệt kê cho / dev / xvdb và / dev / xvdc . Tham khảo “LABEL” để nhận dạng khối
Bây giờ, hãy mở /etc/fstab
và dán cấu hình ở định dạng sau.
UUID=<COPIED_UUID_FOR_DATA> /var/lib/mongo xfs defaults,nofail 0 0
UUID=<COPIED_UUID_FOR_LOGS> /var/log/mongodb xfs defaults,nofail 0 0
Cập nhật tên máy chủ
Tên máy chủ sẽ được sử dụng để xác định máy chủ cơ sở dữ liệu của bạn trên mạng. Bạn có thể sử dụng IP đàn hồi được chỉ định ở trên hoặc Tên miền (nếu có). Mở /etc/hostname
tập tin và thêm mục nhập. Ví dụ:
ip-xx.us-east-2.compute.internal **<ELASTIC_IP> <DOMAIN_1> <DOMAIN_2>** ...
Cập nhật Giới hạn quy trình (Tùy chọn)
Tùy chọn này được yêu cầu để kiểm soát số lượng kết nối tối đa được chấp nhận trong khi vẫn giữ cho hệ thống ổn định. Mở /etc/security/limits.conf
và thêm các mục sau.
* soft nofile 64000
* hard nofile 64000
* soft nproc 32000
* hard nproc 32000
Bây giờ tất cả các điều kiện tiên quyết liên quan đến cơ sở hạ tầng đã được sắp xếp, hãy khởi động lại và bắt đầu cài đặt MongoDB.
1. Thiết lập MongoDB
Thêm nguồn Repo
Tạo tệp /etc/yum.repos.d/mongodb-org.4.2.repo
và thêm thông tin chi tiết về kho lưu trữ gói sau.
[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc
Bây giờ chúng ta hãy cài đặt MongoDB.
$ sudo yum -y install mongodb-org
Tạo thư mục và thiết lập quyền
MongoDB theo mặc định sử dụng các đường dẫn sau để lưu trữ dữ liệu và nhật ký nội bộ:
/ var / lib / mongo → Dữ liệu
/ var / log / mongodb → Nhật ký
Tạo thư mục
$ sudo mkdir /var/lib/mongo
$ sudo mkdir /var/log/mongodb
Thay đổi quyền của người dùng và nhóm
$ sudo chown mongod:mongod /var/lib/mongo
$ sudo chown mongod:mongod /var/log/mongod
Tạo người dùng quản trị
daemon mongod / dịch vụ phải chạy lần đầu trước khi chúng tôi tiến hành tạo người dùng. Hãy sử dụng cấu hình mặc định (được lưu trữ trong /etc/mongod.conf
) ngay bây giờ và bắt đầu quá trình daemon.
$ sudo -u mongod mongod -f /etc/mongod.conf
Lệnh trên sẽ khởi động daemon mongod ở chế độ fork (mặc định).
Bây giờ, hãy đăng nhập vào máy chủ và tạo người dùng quản trị đầu tiên của chúng tôi.
Mở trình bao mongo
$ mongo
Sử dụng cơ sở dữ liệu "quản trị viên" để tạo quản trị viên gốc
> use admin
Tạo người dùng quản trị
> db.createUser({user: "admin", pwd: "password", roles: [{role: "root", db: "admin"}]})
Tạo người dùng thông thường
> db.createUser({user: "normal_user", pwd: "password", roles: [{role: "readWriteAnyDatabase", db: "admin"}]})
Tắt máy chủ ngay bây giờ. Chúng tôi sẽ khởi động lại với cấu hình đã sửa đổi
> db.shutDownServer()
Thiết lập xác thực
Tại đây, chúng tôi sẽ bật xác thực cơ sở dữ liệu và sửa đổi địa chỉ liên kết để máy chủ của chúng tôi có thể truy cập được trong miền công cộng. Mở /etc/mongod.conf
và thực hiện các thay đổi bên dưới.
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0 # accessible on the network address
security:
authorization: enabled # creds will be required for making db operations
Lưu cấu hình và khởi động lại máy chủ.
$ sudo -u mongod mongod -f /etc/mongod.conf
Đăng nhập thử nghiệm
Bạn có thể xác minh xem thông tin đăng nhập hoạt động bằng cách sử dụng,
$ mongo -u admin -p password
Đó là về thiết lập ban đầu! Vui lòng theo dõi bài đăng liên quan tiếp theo của tôi về quy trình di chuyển chi tiết và các mẹo để giữ cho bản sản xuất DB luôn sẵn sàng.
P.S. Cảm ơn Piyush Kumar đã giúp quản lý bài đăng này!