Hướng dẫn docker-compose mongodb replica set single node - docker-compose bản sao mongodb đặt nút đơn
Tôi đã phải làm một cái gì đó tương tự như xây dựng các thử nghiệm xung quanh các thay đổi chỉ có sẵn khi chạy Mongo dưới dạng bộ bản sao. Tôi không nhớ mình đã lấy cái này từ đâu, vì vậy tôi không thể giải thích chi tiết nhưng nó có hiệu quả với tôi. Đây là thiết lập của tôi: Dockerfile
docker-compose.yml
Chạy 4 và bạn nên tốt.Chuỗi kết nối: 5Lưu ý: Bạn không nên sử dụng điều này trong sản xuất rõ ràng, điều chỉnh khóa "12345678" trong Dockerfile nếu bảo mật là một mối quan tâm. Nếu bạn đang sử dụng MongoDB và nếu bạn giống tôi, bạn có thể sử dụng hình ảnh Docker để kiểm tra nhanh thay vì thực hiện cài đặt MongoDB đầy đủ. May mắn thay, chạy Mongo trên Docker rất dễ dàng. Đầu tiên, hãy tải hình ảnh docker pull mongo Tiếp theo, nếu bạn muốn dữ liệu tồn tại, thì bạn sẽ sử dụng khối lượng Docker hoặc ánh xạ thư mục của hộp lưu trữ Mongo vào thư mục trên máy của bạn. Vì vậy, lần tới khi bạn có thể "xem" dữ liệu của bạn. Vị trí mặc định của thư mục dữ liệu MongoDB là /data /db và cổng mặc định là 27017. Để giữ cho mọi thứ đơn giản, chúng tôi sẽ sử dụng các giá trị mặc định này. Chúng tôi sẽ chạy nó trong một bộ bản sao nút duy nhất, vượt qua cờ --Eplsset được hiển thị bên dưới. Cuối cùng, để thuận tiện cho hoạt động, chúng tôi sẽ đặt tên cho hình ảnh của chúng tôi một cái gì đó để chúng tôi có thể giới thiệu nó bằng tên. $ docker run -d --name gutlo-mongo -v /data/mongo:/data/db -p 27017:27017 mongo --replSet rs0 Bây giờ chúng tôi có một container docker chạy. $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 56468ef53d83 mongo "docker-entrypoint.s…" 4 Seconds ago Up 1 second 0.0.0.0:27017->27017/tcp gutlo-mongo Lưu ý một vài điều. ID container. Nó giống như "tên máy chủ", chúng tôi sẽ tìm ra kết nối với container trên bash prompt và tìm tên máy chủ của nó (lệnh linux/unix để tìm ra tên máy) docker exec -it gutlo-mongo hostname 56468ef53d83h Lưu ý lời nhắc mặc định cho biết root@ - cũng là ID container được hiển thị trong lệnh Docker PS ở trên. Bây giờ nếu bạn đang chạy container này lần đầu tiên trên máy, thư mục cơ sở dữ liệu /data /Mongo trống và nó sẽ được khởi tạo như một phần của việc bắt đầu container. Bạn sẽ phải "khởi tạo" bộ bản sao giống như bất kỳ bộ bản sao Mongo nào mongo> rs.initiate () Nếu khởi tạo thành công, bạn sẽ nhận được lời nhắc rằng bạn đang ở bản sao RS0, kết nối với chính rs0:PRIMARY> Cho đến nay, rất tốt và mọi thứ "chỉ làm việc". Bây giờ đến bắt. Nếu bạn dừng và tháo container, thùng chứa sẽ biến mất nhưng bộ dữ liệu của bạn - bao gồm cả bộ sưu tập lưu trữ tên của tên máy chủ hình ảnh Docker - sẽ được lưu. Vì vậy, lần tới khi bạn bắt đầu container, nó sẽ mong đợi cùng một tên máy chủ. Nhưng Docker "tạo ra" tên mỗi lần để bạn thực sự sẽ có được một tên khác. Luôn luôn Tại sao tên máy chủ Docker lại quan trọng? Chà, bởi vì nếu bạn đang chạy một bản sao nút duy nhất trong Mongo, bộ bản sao (là một bộ nút) cần biết ai là thành viên của bộ. tức là tên máy riêng của nó. Nói cách khác, nó cần lưu trữ tên máy của nút như một thành viên. Điều này được lưu như một phần của cơ sở dữ liệu trong một bộ sưu tập hệ thống. Trong truy vấn bên dưới, hãy chú ý khóa "máy chủ" giống như lệnh tên máy chủ ở trên hoặc ID container trong Docker PS. mongosh --quiet rs0:PRIMARY> use local switched to db local rs0:PRIMARY> db.system.replset.find({},{"members":1} { "_id" : "rs0", "members" : [ { "_id" : 0, "host" : "56468ef53d83:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "slaveDelay" : NumberLong(0), "votes" : 1 } ] }) Bây giờ chúng ta hãy dừng lại và khởi động lại container. Chúng tôi sẽ có một ID container khác. $ docker rm -f gutlo-mongo $ docker run -d --name gutlo-mongo -v /data/mongo:/data/db -p 27017:27017 mongo --replSet rs0 $docker exec -it gutlo-mongo hostname 25599e3f7780 Vì vậy, chúng tôi có một ID container / tên máy chủ mới của Docker 25599E3F7780 thay vì 55468EF53D83. Do đó, khi bạn bắt đầu Mongo, nó không phải là một phần của bản sao vì nó có tên máy chủ cũ được lưu trong repset. Hãy chắc chắn rằng nó thực sự là trường hợp - truy vấn bộ sưu tập một lần nữa. Nếu bạn cố gắng khởi tạo bộ bản sao, bạn sẽ gặp lỗi 0Bây giờ chúng ta cần thay đổi tên máy chủ thành tên máy chủ Docker mới. Trong cuộc sống thực, điều này tương tự như di chuyển bản sao của bạn từ máy này sang máy khác. Có một bước đơn giản được mô tả trong Hướng dẫn sử dụng MongoDB. Dưới đây là một tập lệnh shell nhỏ mà bạn có thể chạy trong thùng chứa MongoDB của mình mỗi khi nó được đưa lên - với một tên máy chủ mới. Hãy nhớ lại rằng Mongo Shell cho phép sử dụng biến môi trường UNIX 1 2Bây giờ tập lệnh trên cần được chạy từ vỏ container Docker để nó nắm bắt được tên máy chủ thích hợp. Vì vậy, nó cần phải được sao chép ở đó trước. 3Voila! Bây giờ bạn đã trở lại trong bộ bản sao và có thể xem cùng một dữ liệu đã lưu! Tại sao điều quan trọng là chạy trong bộ bản sao? Vâng, vì có một số tính năng nhất định như Stream Stream rất hữu ích trong việc thực hiện CDC từ Mongo đến một số cơ sở dữ liệu khác, chỉ có thể được sử dụng ở chế độ bản sao. Thêm vào đó - "hoàn toàn cho niềm vui" cũng là một lý do chính đáng. Vui lòng cho tôi biết nếu bạn có bất kỳ ý kiến hoặc đề xuất nào - tất cả các bình luận - đều được chào đón! |