Chế độ thiết lập bản sao mongodb

Cấu hình bộ bản sao MongoDB. 7 bước đơn giản

Vishal Agrawal về Sao chép dữ liệu, Hệ thống quản lý cơ sở dữ liệu, MongoDB • Ngày 14 tháng 2 năm 2022

Chế độ thiết lập bản sao mongodb

  • Hệ thống Quản lý Dữ liệu
  • MongoDB
  • Bản sao MongoDB

Cập nhật cho phiên bản v1. 12. 3. lệnh nhỏ thay đổi một lần nữa, các nhãn hiện được áp dụng ở cấp nút và không cần thêm hình ảnh mongo tùy chỉnh

Chạy Bộ bản sao MongoDB trên Docker 1. 12 Chế độ bầy đàn. Từng bước một

Với chế độ swarm, Docker 1. 12 giới thiệu một số tính năng mới thú vị để điều phối một cụm dịch vụ có tính sẵn sàng cao. Video này từ DockerCon 2016 cung cấp một cái nhìn tổng quan tuyệt vời và cũng có nhiều phiên trực tuyến tuyệt vời khác

Các dịch vụ chế độ bầy đàn Docker là một tập hợp các tác vụ (hiện tại là các vùng chứa) được phân bổ động trên toàn cụm. Điều này tốt vì nhiều lý do, nhưng nó có nghĩa là các thùng chứa ứng dụng của bạn có thể di chuyển từ hộp này sang hộp khác, để lại khối lượng dữ liệu của chúng. Đối với cơ sở dữ liệu, đó có thể là một tình huống không tối ưu. May mắn thay, nhiều hệ thống cơ sở dữ liệu đã có sẵn tính sẵn sàng cao. Tất cả những gì chúng ta phải làm là giữ các thùng chứa ở một nơi và DBMS sẽ lo phần còn lại

Chiến lược

Kế hoạch cơ bản là xác định từng thành viên của bộ bản sao là một dịch vụ riêng biệt và sử dụng các ràng buộc để ngăn việc điều phối bầy đàn di chuyển chúng khỏi khối lượng dữ liệu của chúng. Điều này bảo toàn tất cả các lợi ích hoạt động mà Docker cung cấp, đồng thời vô hiệu hóa các tính năng khôi phục lỗi dư thừa (và trong trường hợp này là có hại)

Một lưu ý ngắn gọn về các quy ước được sử dụng trong bài viết này. Tôi sẽ in đậm mọi thứ mà tôi đã nhập vào thiết bị đầu cuối. Tôi xin lỗi vì độ dài dòng và ngắt dòng của đầu ra, nhưng tôi nghĩ điều quan trọng là phải hiển thị mọi thứ đang diễn ra. Ngoài ra, đừng cố sao chép/dán bất kỳ lệnh nào từ các đoạn văn có độ rộng không cố định;

Kiểm tra môi trường

Đối với ví dụ này, tôi sẽ làm lại từ đầu với Hộp công cụ Docker 1. 12. 3 và thiết lập một Node có tính khả dụng cao. js với MongoDB 3. 2 bản sao được đặt làm kho lưu trữ dữ liệu. Tôi sẽ thực hiện việc này trên máy tính xách tay Windows 7 của mình, nhưng các lệnh sẽ giống hệt nhau trên các nền tảng khác. Điều đầu tiên cần làm là mở Docker Quickstart Terminal và tìm hiểu về vùng đất

                        ##         .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/
docker is configured to use the default machine with IP 192.168.99.100
For help getting started, check out the docs at https://docs.docker.com
Start interactive shellBlake.Mitchell@BMITCHELL7X64 MINGW64 ~
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default * virtualbox Running tcp://192.168.99.100:2376 v1.12.3
Blake.Mitchell@BMITCHELL7X64 MINGW64 ~
$ docker version
Client:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built: Wed Oct 26 23:26:11 2016
OS/Arch: windows/amd64
Server:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built: Wed Oct 26 23:26:11 2016
OS/Arch: linux/amd64

Cung cấp máy Docker

Tôi không cần máy mặc định, vì vậy tôi sẽ loại bỏ nó và tạo ba máy mới cho cụm. Vì đây là môi trường phát triển nên tôi sẽ chỉ có một nút quản lý cụm và hai nút công nhân. Trong sản xuất, nhiều người quản lý nên được sử dụng để chịu lỗi

Blake.Mitchell@BMITCHELL7X64 MINGW64 ~
$ docker-machine rm -f default
About to remove default
Successfully removed default
Blake.Mitchell@BMITCHELL7X64 MINGW64 ~
$ docker-machine create --driver virtualbox manager1
Running pre-create checks...
Creating machine...
(manager1) Copying C:\Users\Blake.Mitchell\.docker\machine\cache\boot2docker.iso to C:\Users\Blake.Mitchell\.docker\machine\machines\manager1\boot2docker.iso...
(manager1) Creating VirtualBox VM...
(manager1) Creating SSH key...
(manager1) Starting the VM...
(manager1) Check network to re-create if needed...
(manager1) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: C:\Program Files\Docker Toolbox\docker-machine.exe env manager1
Blake.Mitchell@BMITCHELL7X64 MINGW64 ~
$ docker-machine create --driver virtualbox worker1
Running pre-create checks...
Creating machine...
(worker1) Copying C:\Users\Blake.Mitchell\.docker\machine\cache\boot2docker.iso to C:\Users\Blake.Mitchell\.docker\machine\machines\worker1\boot2docker.iso...
(worker1) Creating VirtualBox VM...
(worker1) Creating SSH key...
(worker1) Starting the VM...
(worker1) Check network to re-create if needed...
(worker1) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: C:\Program Files\Docker Toolbox\docker-machine.exe env worker1
Blake.Mitchell@BMITCHELL7X64 MINGW64 ~
$ docker-machine create --driver virtualbox worker2
Running pre-create checks...
Creating machine...
(worker2) Copying C:\Users\Blake.Mitchell\.docker\machine\cache\boot2docker.iso to C:\Users\Blake.Mitchell\.docker\machine\machines\worker2\boot2docker.iso...
(worker2) Creating VirtualBox VM...
(worker2) Creating SSH key...
(worker2) Starting the VM...
(worker2) Check network to re-create if needed...
(worker2) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: C:\Program Files\Docker Toolbox\docker-machine.exe env worker2
Blake.Mitchell@BMITCHELL7X64 MINGW64 ~
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
manager1 * virtualbox Running tcp://192.168.99.100:2376 v1.12.3
worker1 - virtualbox Running tcp://192.168.99.101:2376 v1.12.3
worker2 - virtualbox Running tcp://192.168.99.102:2376 v1.12.3

PuTTY xen kẽ

Bây giờ các VM đang chạy, tôi sẽ chuyển từ Docker Quickstart Terminal sang PuTTY. Tôi thấy giao diện thân thiện với người dùng hơn nhiều. Đây là tùy chọn và không ảnh hưởng đến hoạt động của cụm bầy đàn. Tôi đã sử dụng PuTTYGen để chuyển đổi từng khóa riêng sang định dạng mà PuTTY hiểu được. Sau đó, tôi đã kết nối với từng VM qua SSH với tên người dùng “docker” và khóa riêng để xác thực. Đây là tất cả các khóa có liên quan, sau khi tôi thực hiện chuyển đổi

Blake.Mitchell@BMITCHELL7X64 MINGW64 ~
$ find .docker/machine -type f -name id_rsa\*
.docker/machine/machines/manager1/id_rsa
.docker/machine/machines/manager1/id_rsa.ppk
.docker/machine/machines/manager1/id_rsa.pub
.docker/machine/machines/worker1/id_rsa
.docker/machine/machines/worker1/id_rsa.ppk
.docker/machine/machines/worker1/id_rsa.pub
.docker/machine/machines/worker2/id_rsa
.docker/machine/machines/worker2/id_rsa.ppk
.docker/machine/machines/worker2/id_rsa.pub

Tạo đàn

Tiếp theo, tôi sẽ khởi tạo bầy đàn trên người quản lý và tham gia cùng cả hai công nhân. Hầu hết điều này đến trực tiếp từ hướng dẫn Bắt đầu với chế độ bầy đàn. Điều quan trọng là phải chỉ định tham số “ — listen-addr” khi sử dụng docker-machine và VirtualBox, vì các máy ảo được gán nhiều giao diện mạng

docker@manager1:~$ docker swarm init --listen-addr 192.168.99.100:2377 --advertise-addr 192.168.99.100:2377
Swarm initialized: current node (1w9qe9ceo8wfjyawytt4lu04m) is now a manager.
To add a worker to this swarm, run the following command:docker swarm join \
--token SWMTKN-1-2b8xrkg7ymzmb9db8yyzglkqur8k32vfoeyd64d5dppv9d6ikl-f1k3vk7ohmrl9lzgvf4ah34tj \
192.168.99.100:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions....docker@worker1:~$ docker swarm join --token SWMTKN-1-2b8xrkg7ymzmb9db8yyzglkqur8k32vfoeyd64d5dppv9d6ikl-f1k3vk7ohmrl9lzgvf4ah34tj --listen-addr 192.168.99.101:2377 --advertise-addr 192.168.99.101:2377 192.168.99.100:2377
This node joined a swarm as a worker.
...docker@worker2:~$ docker swarm join --token SWMTKN-1-2b8xrkg7ymzmb9db8yyzglkqur8k32vfoeyd64d5dppv9d6ikl-f1k3vk7ohmrl9lzgvf4ah34tj --listen-addr 192.168.99.102:2377 --advertise-addr 192.168.99.102:2377 192.168.99.100:2377
This node joined a swarm as a worker.
...docker@manager1:~$ docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 1.12.3
Storage Driver: aufs
Root Dir: /mnt/sda1/var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 0
Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host null overlay
Swarm: active
NodeID: 1w9qe9ceo8wfjyawytt4lu04m
Is Manager: true
ClusterID: c99d2hmp1sc2qhut99key1opt
Managers: 1
Nodes: 3
Orchestration:
Task History Retention Limit: 5
Raft:
Snapshot Interval: 10000
Heartbeat Tick: 1
Election Tick: 3
Dispatcher:
Heartbeat Period: 5 seconds
CA Configuration:
Expiry Duration: 3 months
Node Address: 192.168.99.100
Runtimes: runc
Default Runtime: runc
Security Options: seccomp
Kernel Version: 4.4.27-boot2docker
Operating System: Boot2Docker 1.12.3 (TCL 7.2); HEAD : 7fc7575 - Thu Oct 27 17:23:17 UTC 2016
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 995.8 MiB
Name: manager1
ID: 3HBM:NWLJ:WHID:GT7Z:ZCS4:HEX2:JATN:WGXH:K2JU:6ERB:U7HI:ULNP
Docker Root Dir: /mnt/sda1/var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
File Descriptors: 33
Goroutines: 133
System Time: 2016-11-07T03:01:47.552799151Z
EventsListeners: 0
Registry: https://index.docker.io/v1/
Labels:
provider=virtualbox
Insecure Registries:
127.0.0.0/8

Bạn có thể thấy từ đầu ra "thông tin docker", bây giờ tôi có một nhóm ba nút với một người quản lý

Chuẩn bị cho MongoDB

Để giữ cho các dịch vụ mongo được ghim vào cùng các nút với khối lượng dữ liệu của chúng, tôi đang đặt nhãn “mongo. bản sao” trên mỗi nút. Tôi sẽ sử dụng các nhãn này trong các ràng buộc khi tạo các dịch vụ sau này

docker@manager1:~$ docker node update --label-add mongo.replica=1 $(docker node ls -q -f name=manager1)
1w9qe9ceo8wfjyawytt4lu04m
docker@manager1:~$ docker node update --label-add mongo.replica=2 $(docker node ls -q -f name=worker1)
69ik3w7jzm2icbp1y9id0jaln
docker@manager1:~$ docker node update --label-add mongo.replica=3 $(docker node ls -q -f name=worker2)
eqlebvmdcofwvm827v7em4423

Bộ bản sao sẽ cần một mạng lớp phủ để cho phép các bản sao giao tiếp và chấp nhận các kết nối từ ứng dụng. Mỗi bản sao cũng cần một ổ đĩa cho dữ liệu và cấu hình. Tôi sẽ cung cấp cho mỗi tập một hậu tố số phù hợp với “mongo. nhãn bản sao cho nút bên dưới. Điều này không bắt buộc, nhưng giúp tôi theo dõi chúng

docker@manager1:~$ docker network create --driver overlay --internal mongo
brp2kd5xgul4vgyz5wtksles0
docker@manager1:~$ docker network ls
NETWORK ID NAME DRIVER SCOPE
87c4b1ec3724 bridge bridge local
68c3e2d453fe docker_gwbridge bridge local
df1270a391f5 host host local
96memqbs2j6j ingress overlay swarm
brp2kd5xgul4 mongo overlay swarm
fb1bc79742ed none null local
docker@manager1:~$ docker volume create --name mongodata1
mongodata1
docker@manager1:~$ docker volume create --name mongoconfig1
mongoconfig1
docker@manager1:~$ docker volume ls
DRIVER VOLUME NAME
local mongoconfig1
local mongodata1
...docker@worker1:~$ docker volume create --name mongodata2
mongodata2
docker@worker1:~$ docker volume create --name mongoconfig2
mongoconfig2
docker@worker1:~$ docker volume ls
DRIVER VOLUME NAME
local mongoconfig2
local mongodata2
...docker@worker2:~$ docker volume create --name mongodata3
mongodata3
docker@worker2:~$ docker volume create --name mongoconfig3
mongoconfig3
docker@worker2:~$ docker volume ls
DRIVER VOLUME NAME
local mongoconfig3
local mongodata3

Tạo dịch vụ MongoDB

Bây giờ là lúc tạo các dịch vụ MongoDB sẽ bao gồm bộ bản sao. Tôi sẽ sử dụng hình ảnh mongo chính thức từ DockerHub

docker@manager1:~$ docker service create --replicas 1 --network mongo --mount type=volume,source=mongodata1,target=/data/db --mount type=volume,source=mongoconfig1,target=/data/configdb --constraint 'node.labels.mongo.replica == 1' --name mongo1 mongo:3.2 mongod --replSet example
b29ftmx77l75owmhmkswntcmz
docker@manager1:~$ docker service create --replicas 1 --network mongo --mount type=volume,source=mongodata2,target=/data/db --mount type=volume,source=mongoconfig2,target=/data/configdb --constraint 'node.labels.mongo.replica == 2' --name mongo2 mongo:3.2 mongod --replSet example
1o08g3f0b6ub60et2u7uu9bc5
docker@manager1:~$ docker service create --replicas 1 --network mongo --mount type=volume,source=mongodata3,target=/data/db --mount type=volume,source=mongoconfig3,target=/data/configdb --constraint 'node.labels.mongo.replica == 3' --name mongo3 mongo:3.2 mongod --replSet example
715k8yuv3uodxn2cyai43uxy2
docker@manager1:~$ docker service ls
1o08g3f0b6ub mongo2 1/1 mongo:3.2 mongod --replSet example
715k8yuv3uod mongo3 1/1 mongo:3.2 mongod --replSet example
b29ftmx77l75 mongo1 1/1 mongo:3.2 mongod --replSet example
docker@manager1:~$ docker service inspect --pretty mongo1
ID: b29ftmx77l75owmhmkswntcmz
Name: mongo1
Mode: Replicated
Replicas: 1
Placement:
Constraints : node.labels.mongo.replica == 1
UpdateConfig:
Parallelism: 1
On failure: pause
ContainerSpec:
Image: mongo:3.2
Args: mongod --replSet example
Mounts:
Target = /data/db
Source = mongodata1
ReadOnly = false
Type = volume
Target = /data/configdb
Source = mongoconfig1
ReadOnly = false
Type = volume
Resources:
Networks: brp2kd5xgul4vgyz5wtksles0

Lệnh tạo từng dịch vụ hơi dài, để tôi chia nhỏ dịch vụ đầu tiên một chút. chúng tôi đang yêu cầu docker tạo một dịch vụ mới, với một phiên bản duy nhất, trên mạng “mongo”, gắn ổ đĩa “mongodata1” và “mongoconfig1”, chạy trên nút có nhãn “mongo. replica” có giá trị “1” với tên dịch vụ “mongo1”, sử dụng hình ảnh “mongo. 3. 2” và chạy lệnh “mongod -replSet example”

Sẽ mất một chút thời gian để lấy hình ảnh lần đầu tiên, hãy sử dụng cột “REPLICAS” từ “docker service ls” để xem khi nào tất cả các tác vụ dịch vụ đang chạy. (Bản sao dịch vụ Docker và bản sao MongoDB không giống nhau, bản sao trước là các tác vụ dự phòng (bộ chứa) trong một dịch vụ do bầy đàn quản lý, trong khi bản sao sau là các phiên bản MongoDB tham gia vào một bộ bản sao. )

Bắt đầu bộ bản sao

Tiếp theo, tôi sẽ thiết lập bộ bản sao MongoDB. Tôi đang làm theo hướng dẫn Deploy a Replica Set từ tài liệu. Đầu tiên tôi sẽ bắt đầu bộ bản sao với một cấu hình thành viên duy nhất, sau đó thêm hai thành viên còn lại. Vì các dịch vụ nằm trên một mạng riêng, tôi sẽ thực thi ứng dụng khách mongo đã có trong vùng chứa đang chạy để ra lệnh. Điều này cũng trình bày cách sử dụng một trong các nhãn được gán theo nhóm để xác định vùng chứa

docker@manager1:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7fafd0318920 mongo:3.2 "/entrypoint.sh mongo" 5 minutes ago Up 5 minutes mongo1.1.1hy6x18wn3x8qr2g827sjo66m
docker@manager1:~$ docker exec -it $(docker ps -qf label=com.docker.swarm.service.name=mongo1) mongo --eval 'rs.initiate({ _id: "example", members: [{ _id: 1, host: "mongo1:27017" }, { _id: 2, host: "mongo2:27017" }, { _id: 3, host: "mongo3:27017" }], settings: { getLastErrorDefaults: { w: "majority", wtimeout: 30000 }}})'
MongoDB shell version: 3.2.10
connecting to: test
{ "ok" : 1 }
docker@manager1:~$ docker exec -it $(docker ps -qf label=com.docker.swarm.service.name=mongo1) mongo --eval 'rs.status()'
MongoDB shell version: 3.2.10
connecting to: test
{
"set" : "example",
"date" : ISODate("2016-11-07T03:36:44.510Z"),
"myState" : 1,
"term" : NumberLong(1),
"heartbeatIntervalMillis" : NumberLong(2000),
"members" : [
{
"_id" : 1,
"name" : "mongo1:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 777,
"optime" : {
"ts" : Timestamp(1478489792, 2),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2016-11-07T03:36:32Z"),
"infoMessage" : "could not find member to sync from",
"electionTime" : Timestamp(1478489792, 1),
"electionDate" : ISODate("2016-11-07T03:36:32Z"),
"configVersion" : 1,
"self" : true
},
{
"_id" : 2,
"name" : "mongo2:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 22,
"optime" : {
"ts" : Timestamp(1478489792, 2),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2016-11-07T03:36:32Z"),
"lastHeartbeat" : ISODate("2016-11-07T03:36:44.448Z"),
"lastHeartbeatRecv" : ISODate("2016-11-07T03:36:43.872Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "mongo1:27017",
"configVersion" : 1
},
{
"_id" : 3,
"name" : "mongo3:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 22,
"optime" : {
"ts" : Timestamp(1478489792, 2),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2016-11-07T03:36:32Z"),
"lastHeartbeat" : ISODate("2016-11-07T03:36:44.448Z"),
"lastHeartbeatRecv" : ISODate("2016-11-07T03:36:43.874Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "mongo1:27017",
"configVersion" : 1
}
],
"ok" : 1
}
docker@manager1:~$ docker exec -it $(docker ps -qf label=com.docker.swarm.service.name=mongo1) mongo --eval 'rs.config()'
MongoDB shell version: 3.2.10
connecting to: test
{
"_id" : "example",
"version" : 1,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 1,
"host" : "mongo1:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "mongo2:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 3,
"host" : "mongo3:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : "majority",
"wtimeout" : 30000
},
"replicaSetId" : ObjectId("581ff6b54865b4277baf414d")
}
}

Đây rồi, một bộ bản sao khỏe mạnh

Đặt một ứng dụng trên đó

Bây giờ tôi đã có một bộ bản sao đang hoạt động, tôi sẽ đặt một Nút. js phía trước nó để thể hiện khả năng. Tôi sẽ sử dụng Koalab post-it board, vì nó mang lại hình ảnh đẹp và mọi thứ được lưu trữ trong MongoDB. Nhà xuất bản của Koalab không đẩy nó lên Docker Hub, vì vậy tôi đã lo việc đó

________số 8

Như bạn có thể thấy, MONGO_URL của tôi giải quyết toàn bộ bộ bản sao và tôi đã đính kèm dịch vụ này vào mạng “mongo”. Bây giờ tôi có thể truy cập cổng 8080 trên bất kỳ máy chủ bầy đàn nào của mình và tạo một bảng post-it mới. Mặc dù chỉ có hai bản sao kalahari/koalab đang chạy, nhưng sự kỳ diệu của mạng bầy đàn giúp dịch vụ có sẵn ở mọi nơi

Cảm ơn bạn đã dành thời gian đọc, tôi hy vọng nó có nhiều thông tin và cho phép bạn hưởng lợi từ bản dùng thử và sai sót của tôi. Nếu bạn có bất kỳ câu hỏi nào, vui lòng hỏi bên dưới hoặc ping tôi trên twitter