Mongodb init script docker

Trong bài đăng này, chúng ta sẽ tìm hiểu cách thiết lập bộ bản sao MongoDB bằng Docker. Chúng ta cũng sẽ tìm hiểu cách sử dụng docker-compose để tự động hóa quy trình này

Mongodb init script docker

Khi lưu trữ dữ liệu trong MongoDB, chúng ta có thể có nhiều máy chủ Mongo (được gọi là bản sao) giữ một bản sao của dữ liệu được lưu trữ. Bằng cách này, ngay cả khi một trong các máy chủ gặp sự cố, chúng tôi vẫn có bản sao lưu để truy xuất dữ liệu từ

quảng cáo

Kỹ thuật này được sử dụng để làm cho các ứng dụng trở nên linh hoạt hơn trước các lỗi cơ sở dữ liệu, vì ứng dụng có thể tiếp tục chạy ngay cả khi một máy chủ cơ sở dữ liệu bị lỗi

Nếu bạn chỉ muốn xem tệp

docker images
9 cuối cùng, bạn có thể bỏ qua

Cài đặt#

Đầu tiên, chúng ta cần cài đặt Docker trên hệ thống của mình. Nếu đang sử dụng máy tính cá nhân, bạn có thể cài đặt Docker desktop

Để xác minh rằng bạn đã cài đặt docker, hãy chạy

docker -v

Điều này sẽ xuất ra số phiên bản

Tiếp theo, chúng ta cần đảm bảo rằng docker daemon của chúng ta đang chạy. Nếu bạn chạy lệnh

docker images

quảng cáo

Bạn sẽ có thể xem danh sách các hình ảnh bạn hiện có trên hệ thống của mình

Tiếp theo, chúng tôi sẽ nhận được phiên bản mới nhất của hình ảnh Mongo chính thức, bằng cách chạy

docker pull mongo

Tuyệt quá. Bây giờ chúng ta đã sẵn sàng định cấu hình máy chủ Mongo của mình

Tổng quan về kiến ​​trúc bản sao#

Chúng tôi sẽ có ba vùng chứa từ hình ảnh Mongo, tất cả đều nằm trong mạng vùng chứa Docker của riêng họ

Hãy đặt tên cho chúng là

docker pull mongo
0,
docker pull mongo
1 và
docker pull mongo
2. Đây sẽ là ba phiên bản Mongo của bộ bản sao của chúng tôi

Chúng tôi cũng sẽ hiển thị từng cái trong số chúng cho máy cục bộ của chúng tôi để chúng tôi có thể truy cập chúng bằng giao diện trình bao Mongo từ máy cục bộ của chúng tôi

Mỗi trong số ba bộ chứa Mongo sẽ có thể giao tiếp với tất cả các bộ chứa khác trong mạng

quảng cáo

architecture diagram

Tạo một mạng mới#

Để xem tất cả các mạng hiện có trên hệ thống của bạn, hãy chạy lệnh

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
2a4e341c6039        bridge              bridge              local
4fbef5286425        host                host                local
8062e4e7cdca        none                null                local

Chúng tôi sẽ thêm một mạng mới có tên là

docker pull mongo
3

$ docker network create my-mongo-cluster

Mạng mới bây giờ sẽ được thêm vào danh sách các mạng của bạn

docker -v
0

Thiết lập Container của chúng tôi#

Để khởi động vùng chứa đầu tiên của chúng tôi,

docker pull mongo
0 hãy chạy lệnh

docker -v
2

Hãy xem từng phần của lệnh này làm gì

  • ______35. Bắt đầu vùng chứa từ hình ảnh Quảng cáo
  • docker pull mongo
    
    6. Hiển thị cổng 27017 trong vùng chứa của chúng tôi, dưới dạng cổng 30001 trên máy chủ cục bộ
  • docker pull mongo
    
    7. đặt tên vùng chứa này là “mongo1”
  • docker pull mongo
    
    8. Thêm vùng chứa này vào mạng “my-mongo-cluster”
  • docker pull mongo
    
    9. tên của hình ảnh chúng tôi đang sử dụng để sinh ra vùng chứa này
  • $ docker network ls
    NETWORK ID          NAME                DRIVER              SCOPE
    2a4e341c6039        bridge              bridge              local
    4fbef5286425        host                host                local
    8062e4e7cdca        none                null                local
    
    0. Chạy mongod trong khi thêm phiên bản mongod này vào bộ bản sao có tên “my-mongo-set”

Thiết lập 2 vùng chứa khác bằng cách chạy

docker -v
9

Hãy nhớ chạy từng lệnh này trong một cửa sổ đầu cuối riêng biệt, vì chúng tôi không chạy các vùng chứa này ở trạng thái tách rời

Cấu hình sao chép cơ sở dữ liệu #

Bây giờ chúng ta đã thiết lập và chạy tất cả các phiên bản Mongo của mình, hãy thêm chúng vào một bộ bản sao

Kết nối với vỏ Mongo trong bất kỳ vùng chứa nào

docker images
0

Lệnh này sẽ mở trình bao Mongo trong bộ chứa

docker pull mongo
0 đang chạy của chúng tôi (nhưng bạn cũng có thể chạy nó từ bộ chứa
docker pull mongo
1 hoặc
docker pull mongo
2)

Bên trong vỏ Mongo, trước tiên chúng tôi tạo cấu hình của mình

docker images
4

quảng cáo

Khóa

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
2a4e341c6039        bridge              bridge              local
4fbef5286425        host                host                local
8062e4e7cdca        none                null                local
4 đầu tiên trong cấu hình, phải giống với cờ
$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
2a4e341c6039        bridge              bridge              local
4fbef5286425        host                host                local
8062e4e7cdca        none                null                local
5 được đặt cho các phiên bản mongod của chúng tôi, đó là
$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
2a4e341c6039        bridge              bridge              local
4fbef5286425        host                host                local
8062e4e7cdca        none                null                local
6 trong trường hợp của chúng tôi. Sau đó, chúng tôi liệt kê tất cả các
$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
2a4e341c6039        bridge              bridge              local
4fbef5286425        host                host                local
8062e4e7cdca        none                null                local
7 chúng tôi muốn trong bộ bản sao của mình

Vì chúng tôi đã thêm tất cả các phiên bản Mongo vào mạng docker của mình. Tên của họ trong mỗi trình phân giải bộ chứa thành địa chỉ IP tương ứng của họ trong mạng

docker pull mongo
3

Cuối cùng, bắt đầu bộ bản sao bằng cách chạy lệnh sau trong trình bao Mongo

docker images
0

Nếu lệnh thành công, lời nhắc của bạn sẽ thay đổi để phản ánh rằng cơ sở dữ liệu hiện tại là một phần của bộ bản sao

docker images
1

Điều này có nghĩa là trình bao hiện được liên kết với cơ sở dữ liệu

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
2a4e341c6039        bridge              bridge              local
4fbef5286425        host                host                local
8062e4e7cdca        none                null                local
9 trong cụm
$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
2a4e341c6039        bridge              bridge              local
4fbef5286425        host                host                local
8062e4e7cdca        none                null                local
6 của chúng tôi

Hãy chơi xung quanh với bộ bản sao mới của chúng tôi để đảm bảo nó hoạt động như dự kiến. (Tôi đang bỏ qua dấu nhắc

$ docker network create my-mongo-cluster
1 để dễ đọc)

Trước tiên, hãy chèn một tài liệu vào cơ sở dữ liệu chính của chúng tôi

docker images
2

Sau đó, chúng tôi tạo một kết nối mới tới một trong các cơ sở dữ liệu thứ cấp của chúng tôi (nằm trên

docker pull mongo
1) và kiểm tra xem tài liệu của chúng tôi đã được sao chép chưa

docker images
3

quảng cáo

Chúng tôi chạy lệnh

$ docker network create my-mongo-cluster
3 để trình bao biết rằng chúng tôi đang cố tình truy vấn cơ sở dữ liệu không phải là cơ sở dữ liệu chính của chúng tôi

Có vẻ như tài liệu tương tự cũng có trong trường trung học của chúng tôi

Sử dụng Docker Compose#

Chúng tôi có thể tự động hóa các bước được mô tả ở trên bằng cách sử dụng Docker soạn thảo

Trước tiên, chúng ta cần tạo một tệp

docker images
9 khai báo ba máy chủ bản sao, cũng như một máy chủ khởi tạo chạy mã để định cấu hình các bộ bản sao

docker images
4

quảng cáo

Để bắt đầu lắp ráp này, bạn có thể chạy

docker images
5

Sau khi các vùng chứa hoàn tất thiết lập, bạn sẽ thấy một số thông báo “Kết nối được chấp nhận” trông như thế này

docker images
6

Sau này, bạn có thể liệt kê các vùng chứa đang hoạt động bằng cách chạy

docker images
7

Tên vùng chứa có thể thay đổi dựa trên tên thư mục hiện tại của bạn. Bạn có thể chọn bất kỳ bộ chứa mongo nào và chạy trình bao mongo bằng cách thực thi

docker images
8

Thay thế

$ docker network create my-mongo-cluster
5 bằng tên vùng chứa của bạn

Tiến về phía trước#

Sử dụng Docker, chúng tôi có thể thiết lập và chạy bản sao Mongo trong ~5 phút

Mặc dù thiết lập này rất tuyệt để thử nghiệm với các bộ bản sao, nhưng cần thực hiện một số biện pháp phòng ngừa trước khi chuyển nó sang sản xuất

quảng cáo
  1. Không có cơ sở dữ liệu nào có bất kỳ biện pháp bảo mật quản trị nào. Đảm bảo thêm người dùng và mật khẩu khi triển khai giải pháp này trên các máy chủ sản xuất
  2. Các vùng chứa bản sao khác nhau nên được lưu giữ trên các máy chủ vật lý khác nhau. Chạy ít nhất một bộ chứa trên một máy chủ khác và truy cập nó thông qua địa chỉ IP và cổng bên ngoài của nó (trong trường hợp của chúng tôi, các cổng đối mặt bên ngoài dành cho các bộ chứa bên ngoài lần lượt là
    $ docker network create my-mongo-cluster
    
    6,
    $ docker network create my-mongo-cluster
    
    7 và
    $ docker network create my-mongo-cluster
    
    8 cho
    docker pull mongo
    
    0,
    docker pull mongo
    
    1 và
    docker pull mongo
    
    2)
  3. Nếu chúng tôi xóa nhầm một trong các vùng chứa của mình, dữ liệu cũng sẽ biến mất. Sử dụng khối lượng Docker và đặt
    docker -v
    
    02 thích hợp khi chạy
    docker -v
    
    03 sẽ ngăn điều này xảy ra

Cuối cùng, thay vì chạy một loạt các tập lệnh shell, bạn có thể thấy thuận tiện hơn khi tự động hóa toàn bộ quy trình này bằng cách sử dụng các công cụ tự động hóa đa vùng chứa như docker-compose