Scaling MongoDB with sharding, replication and caching.
Python
Запустить контейнеры MongoDB с двумя шардами и репликацией и кешем, используя файл docker-compose:
# перейдите в директорию /architecture-sprint-2/sharding-repl-cache
# поднимите контейнеры из описанных образов в файле compose.yaml:
docker compose up
Инициализируем конфиг сервер для кластера MongoDB:
Инициализируем первый шард кластера MongoDB на порту 27018:
# подключитесь к контейнеру мастера первого шарда кластера MongoDB
docker exec -it shard1_primary mongosh --port 27018
# инициализируйте первый шард с репликасетом 1 мастер 2 реплики
> rs.initiate({
_id: "shard1ReplSet",
members: [
{ _id: 0, host: "shard1_primary:27018" },
{ _id: 1, host: "shard1_secondary1:27018" },
{ _id: 2, host: "shard1_secondary2:27018" }
]
})
Инициализируем второй шард кластера MongoDB на порту 27020:
# подключитесь к контейнеру мастера второго шарда кластера MongoDB
docker exec -it shard2_primary mongosh --port 27020
# инициализируйте второй шард с репликасетом 1 мастер 2 реплики
> rs.initiate({
_id: "shard2ReplSet",
members: [
{ _id: 0, host: "shard2_primary:27020" },
{ _id: 1, host: "shard2_secondary1:27020" },
{ _id: 2, host: "shard2_secondary2:27020" }
]
})
Инициализируем роутер mongos на порту 27017:
# подключитесь к роутеру узлов инстансов MondoDB
docker exec -it mongos mongosh --port 27017
# добавьте первый и второй шард роутеру кластера MongoDB
> sh.addShard("shard1ReplSet/shard1_primary:27018")
> sh.addShard("shard2ReplSet/shard2_primary:27020")
# включите шардирование у базы данных somedb
> sh.enableSharding("somedb");
# создайте новую шардированую коллекцию helloDoc
> sh.shardCollection("somedb.helloDoc", { "name" : "hashed" } )
# вы можете проверить статус шардирования с помощью команды:
> sh.status()
# наполните базу данных "somedb" тестовыми данными
# подключитесь к только что созданной коллекции somedb
> use somedb
# выполните скрипт для записи тестовых данных
> for(var i = 0; i < 1000; i++) db.helloDoc.insert({age:i, name:"ly"+i})
# проверьте наполнение коллекции "somedb" тестовыми данными, должно быть 1000 записей
> db.helloDoc.countDocuments()
# конфигурируем кластер Redis для кеширования
# подключитесь внутрь контенейнера любого хоста Redis, например redis_1:
> docker exec -it redis_1 bash
# выполните команду для инициализиации кластера Redis, для автоответа о согласии на создании используйте команду echo
> echo "yes" | redis-cli --cluster create redis_1:6379 redis_2:6379 redis_3:6379 redis_4:6379 redis_5:6379 redis_6:6379 --cluster-replicas 1
# для того, чтобы убедиться, что Redis кластер корректно сконфигурировался, выполните команды:
# подключитесь внутрь контенейнера любого хоста Redis, например redis_1:
> docker exec -it redis_1 bash
# выведите описание кластера
> redis-cli -c -h redis_1 -p 6379 cluster nodes
# также выведите подробное описание Redis кластера
> redis-cli -c -h redis_1 -p 6379 cluster info
# если cluster_state:ok, cluster_slots_assigned:16384, cluster_slots_ok:16384, то всё прошло успешно