mongodb cluster docker compose

2025-12-07 0 730

MongoDB [自动init]与Docker组成的碎片集群

星历史

PSS样式(主要 – 次级 – 次要)

  • 需要PSA吗?在这里检查
  • 如果您需要使用KeyFile身份验证设置群集,请在此处检查

Deepwiki

https://*deepwiki.*c*om/minhhungit/mongodbclusterdockercompose

目录

  • ❓mongo组件?
  • 安装
    • 在线命令
    • 逐步手动
  • 为数据库启用碎片/碎片键
  • ✅验证
    • 验证碎片集群的状态
    • 验证每个碎片的副本设置的状态
    • 检查数据库状态
  • ?更多命令
    • 普通启动
    • 重置群集
    • 清理Docker-Compose
  • 截屏
  • ?捐赠^^
  • 反思

警告(Windows&OS X)

Windows和OS X上的默认Docker设置使用VirtualBox VM托管Docker守护程序。不幸的是,VirtualBox用来在主机系统和Docker容器之间共享文件夹的机制与MongoDB使用的内存映射文件不兼容(请参见Vbox Bug,docs.mongodb.org和相关的jira.mongodb.org bug)。这意味着不可能运行将数据目录映射到主机的mongoDB容器。

– Docker Hub(来源此处或此处)


笔记:

如果要修改配置文件,在Windows上,您可能需要使用EOL转换UNIX(LF)模式保存这些文件。您可以使用Notepad ++进行编辑菜单=> EOL转换=> unix


❓mongo组件?

  • config Server(3成员副本集):configsvr01,configsvr02,configsvr03
  • 3个碎片(每个3个成员PSS副本集):
    • shard01-a,shard01-b,shard01-c
    • shard02-a,shard02-b,shard02-c
    • shard03-a,shard03-b,shard03-c
  • 2个路由器(Mongos):Router01,Router02

安装?

在线命令(便利)

克隆此存储库,在存储夹上打开PowerShell或CMD并运行:

docker-compose up -d && while true ; do docker exec -it router-01 bash -c \" echo \'sh.status()\' | mongosh --port 27017 \" && break || sleep 2 ; done

逐步手动

启动所有容器

我必须再次提醒您错过了?如果您需要设置钥匙文件身份验证的群集,请在此处检查

克隆此存储库,在存储夹上打开PowerShell或CMD并运行:

docker-compose up -d

该命令将在 /脚本文件夹中触发某些入门点文件以自动启动shard cluster /replicas …

核实

  1. 检查群集初始化:
  • 开始群集后,初始化可能需要大约30秒。
  • 如果过程需要更长的时间,请检查容器日志是否进行故障排除。
  1. 运行验证命令:使用以下命令验证碎片状态:
 while true ; do docker exec -it router-01 bash -c \" echo \'sh.status()\' | mongosh --port 27017 \" && break || sleep 2 ; done
  • 此命令使用路由器-01容器上的sh.status()连续检查碎片状态。
  • 它每2秒重试,直到状态成功检索为止。
  • 在此步骤中检查更多信息✅验证)

为您的数据库启用碎片/碎片键?

docker-compose exec router01 mongosh --port 27017

// Enable sharding for database ` MyDatabase `
sh.enableSharding( \" MyDatabase \" )

// Setup shardingKey for collection ` MyCollection ` **
db.adminCommand( { shardCollection: \" MyDatabase.MyCollection \" , key: { oemNumber: \" hashed \" , zipCode: 1, supplierId: 1 }, numInitialChunks: 3 } )

✔️完成了!!!

顺便说一句,如果您想尝试将MongoDB群集与主机计算机(正在运行Docker)连接MongoDB群集,这是MongoDB连接字符串

mongodb://127.0.0.1:27117,127.0.0.1:27118

如果您是.NET开发人员,则在MongoDB群集中有一个示例读/写数据:https://github.com/minhhungit/mongodb-cluster-docker-docker-docker-compose/tree/master/master/client


笔记

如果遇到错误“ Docker.errors.dockerexception:获取服务器API版本时的错误”,并且使用的WSL(Windows子系统为Linux)需要在Windows Docker Desktop中启用“ WSL”的“ WSL”(wsl -> resative-> Resources-> wsl-> wsl集成 – >启用与Distos的集成)。

链接:https://stackoverflow.com/a/65347214/3007147

如果您收到“ e query [thread1] syntaxerror:未终止的字符串literal @(shellHelp2)”之类的错误,则可能是由于:

在UNIX上,如果您的脚本具有DOS/Windows端线(CRLF)而不是线路(LF)的UNIX端(LF),则将获得此错误。

要修复它,请在脚本文件夹中修改脚本文件,删除newline,将多行更改为一行。

或在记事本++编辑菜单中使用UNIX模式保存文件=> eol Conversion => unix

链接:https://stackoverflow.com/a/51728442/3007147

?验证?

✅验证碎片集群的状态?

docker-compose exec router01 mongosh --port 27017
sh.status ()

样本结果:

  sharding version: {
        \"_id\" : 1,
        \"minCompatibleVersion\" : 5,
        \"currentVersion\" : 6,
        \"clusterId\" : ObjectId(\"5d38fb010eac1e03397c355a\")
  }
  shards:
        {  \"_id\" : \"rs-shard-01\",  \"host\" : \"rs-shard-01/shard01-a:27017,shard01-b:27017,shard01-c:27017\",  \"state\" : 1 }
        {  \"_id\" : \"rs-shard-02\",  \"host\" : \"rs-shard-02/shard02-a:27017,shard02-b:27017,shard02-c:27017\",  \"state\" : 1 }
        {  \"_id\" : \"rs-shard-03\",  \"host\" : \"rs-shard-03/shard03-a:27017,shard03-b:27017,shard03-c:27017\",  \"state\" : 1 }
  active mongoses:
        \"4.0.10\" : 2
  autosplit:
        Currently enabled: yes
  balancer:
        Currently enabled:  yes
        Currently running:  no
        Failed balancer rounds in last 5 attempts:  0
        Migration Results for the last 24 hours:
                No recent migrations
  databases:
        {  \"_id\" : \"config\",  \"primary\" : \"config\",  \"partitioned\" : true }

✅验证每个碎片的副本设置的状态?

您应该看到1个主要的2个次级

docker exec -it shard-01-node-a bash -c \" echo \'rs.status()\' | mongosh --port 27017 \" 
docker exec -it shard-02-node-a bash -c \" echo \'rs.status()\' | mongosh --port 27017 \" 
docker exec -it shard-03-node-a bash -c \" echo \'rs.status()\' | mongosh --port 27017 \" 

样本结果:

MongoDB shell version v4. 0.11
connecting to: mongodb: // 127.0 . 0.1 : 27017 / ?gssapiServiceName = mongodb
Implicit session: session { \" id \" : UUID( \" dcfe5d8f-75ef-45f7-9595-9d72dc8a81fc \" ) }
MongoDB server version: 4.0 . 11
{
        \" set \" : \" rs-shard-01 \" ,
        \" date \" : ISODate( \" 2019-08-01T06:53:59.175Z \" ) ,
        \" myState \" : 1 ,
        \" term \" : NumberLong( 1 ) ,
        \" syncingTo \" : \" \" ,
        \" syncSourceHost \" : \" \" ,
        \" syncSourceId \" : -1 ,
        \" heartbeatIntervalMillis \" : NumberLong( 2000 ) ,
        \" optimes \" : {
                \" lastCommittedOpTime \" : {
                        \" ts \" : Timestamp( 1564642438 , 1 ) ,
                        \" t \" : NumberLong( 1 )
                } ,
                \" readConcernMajorityOpTime \" : {
                        \" ts \" : Timestamp( 1564642438 , 1 ) ,
                        \" t \" : NumberLong( 1 )
                } ,
                \" appliedOpTime \" : {
                        \" ts \" : Timestamp( 1564642438 , 1 ) ,
                        \" t \" : NumberLong( 1 )
                } ,
                \" durableOpTime \" : {
                        \" ts \" : Timestamp( 1564642438 , 1 ) ,
                        \" t \" : NumberLong( 1 )
                }
        } ,
        \" lastStableCheckpointTimestamp \" : Timestamp( 1564642428 , 1 ) ,
        \" members \" : [
                {
                        \" _id \" : 0 ,
                        \" name \" : \" shard01-a:27017 \" ,
                        \" health \" : 1 ,
                        \" state \" : 1 ,
                        \" stateStr \" : \" PRIMARY \" ,
                        \" uptime \" : 390 ,
                        \" optime \" : {
                                \" ts \" : Timestamp( 1564642438 , 1 ) ,
                                \" t \" : NumberLong( 1 )
                        } ,
                        \" optimeDate \" : ISODate( \" 2019-08-01T06:53:58Z \" ) ,
                        \" syncingTo \" : \" \" ,
                        \" syncSourceHost \" : \" \" ,
                        \" syncSourceId \" : -1 ,
                        \" infoMessage \" : \" \" ,
                        \" electionTime \" : Timestamp( 1564642306 , 1 ) ,
                        \" electionDate \" : ISODate( \" 2019-08-01T06:51:46Z \" ) ,
                        \" configVersion \" : 2 ,
                        \" self \" : true ,
                        \" lastHeartbeatMessage \" : \" \"
                } ,
                {
                        \" _id \" : 1 ,
                        \" name \" : \" shard01-b:27017 \" ,
                        \" health \" : 1 ,
                        \" state \" : 2 ,
                        \" stateStr \" : \" SECONDARY \" ,
                        \" uptime \" : 142 ,
                        \" optime \" : {
                                \" ts \" : Timestamp( 1564642428 , 1 ) ,
                                \" t \" : NumberLong( 1 )
                        } ,
                        \" optimeDurable \" : {
                                \" ts \" : Timestamp( 1564642428 , 1 ) ,
                                \" t \" : NumberLong( 1 )
                        } ,
                        \" optimeDate \" : ISODate( \" 2019-08-01T06:53:48Z \" ) ,
                        \" optimeDurableDate \" : ISODate( \" 2019-08-01T06:53:48Z \" ) ,
                        \" lastHeartbeat \" : ISODate( \" 2019-08-01T06:53:57.953Z \" ) ,
                        \" lastHeartbeatRecv \" : ISODate( \" 2019-08-01T06:53:57.967Z \" ) ,
                        \" pingMs \" : NumberLong( 0 ) ,
                        \" lastHeartbeatMessage \" : \" \" ,
                        \" syncingTo \" : \" shard01-a:27017 \" ,
                        \" syncSourceHost \" : \" shard01-a:27017 \" ,
                        \" syncSourceId \" : 0 ,
                        \" infoMessage \" : \" \" ,
                        \" configVersion \" : 2
                } ,
                {
                        \" _id \" : 2 ,
                        \" name \" : \" shard01-c:27017 \" ,
                        \" health \" : 1 ,
                        \" state \" : 2 ,
                        \" stateStr \" : \" SECONDARY \" ,
                        \" uptime \" : 142 ,
                        \" optime \" : {
                                \" ts \" : Timestamp( 1564642428 , 1 ) ,
                                \" t \" : NumberLong( 1 )
                        } ,
                        \" optimeDurable \" : {
                                \" ts \" : Timestamp( 1564642428 , 1 ) ,
                                \" t \" : NumberLong( 1 )
                        } ,
                        \" optimeDate \" : ISODate( \" 2019-08-01T06:53:48Z \" ) ,
                        \" optimeDurableDate \" : ISODate( \" 2019-08-01T06:53:48Z \" ) ,
                        \" lastHeartbeat \" : ISODate( \" 2019-08-01T06:53:57.952Z \" ) ,
                        \" lastHeartbeatRecv \" : ISODate( \" 2019-08-01T06:53:57.968Z \" ) ,
                        \" pingMs \" : NumberLong( 0 ) ,
                        \" lastHeartbeatMessage \" : \" \" ,
                        \" syncingTo \" : \" shard01-a:27017 \" ,
                        \" syncSourceHost \" : \" shard01-a:27017 \" ,
                        \" syncSourceId \" : 0 ,
                        \" infoMessage \" : \" \" ,
                        \" configVersion \" : 2
                }
        ] ,
        \" ok \" : 1 ,
        \" operationTime \" : Timestamp( 1564642438 , 1 ) ,
        \" $gleStats \" : {
                \" lastOpTime \" : Timestamp( 0 , 0 ) ,
                \" electionId \" : ObjectId( \" 7fffffff0000000000000001 \" )
        } ,
        \" lastCommittedOpTime \" : Timestamp( 1564642438 , 1 ) ,
        \" $configServerState \" : {
                \" opTime \" : {
                        \" ts \" : Timestamp( 1564642426 , 2 ) ,
                        \" t \" : NumberLong( 1 )
                }
        } ,
        \" $clusterTime \" : {
                \" clusterTime \" : Timestamp( 1564642438 , 1 ) ,
                \" signature \" : {
                        \" hash \" : BinData( 0 , \" AAAAAAAAAAAAAAAAAAAAAAAAAAA= \" ) ,
                        \" keyId \" : NumberLong( 0 )
                }
        }
}
bye

✅检查数据库状态?

docker-compose exec router01 mongosh --port 27017
use MyDatabase
db.stats ()
db.MyCollection.getShardDistribution ()

样本结果:

{
        \"raw\" : {
                \"rs-shard-01/shard01-a:27017,shard01-b:27017,shard01-c:27017\" : {
                        \"db\" : \"MyDatabase\",
                        \"collections\" : 1,
                        \"views\" : 0,
                        \"objects\" : 0,
                        \"avgObjSize\" : 0,
                        \"dataSize\" : 0,
                        \"storageSize\" : 4096,
                        \"numExtents\" : 0,
                        \"indexes\" : 2,
                        \"indexSize\" : 8192,
                        \"fsUsedSize\" : 12439990272,
                        \"fsTotalSize\" : 62725787648,
                        \"ok\" : 1
                },
                \"rs-shard-03/shard03-a:27017,shard03-b:27017,shard03-c:27017\" : {
                        \"db\" : \"MyDatabase\",
                        \"collections\" : 1,
                        \"views\" : 0,
                        \"objects\" : 0,
                        \"avgObjSize\" : 0,
                        \"dataSize\" : 0,
                        \"storageSize\" : 4096,
                        \"numExtents\" : 0,
                        \"indexes\" : 2,
                        \"indexSize\" : 8192,
                        \"fsUsedSize\" : 12439994368,
                        \"fsTotalSize\" : 62725787648,
                        \"ok\" : 1
                },
                \"rs-shard-02/shard02-a:27017,shard02-b:27017,shard02-c:27017\" : {
                        \"db\" : \"MyDatabase\",
                        \"collections\" : 1,
                        \"views\" : 0,
                        \"objects\" : 0,
                        \"avgObjSize\" : 0,
                        \"dataSize\" : 0,
                        \"storageSize\" : 4096,
                        \"numExtents\" : 0,
                        \"indexes\" : 2,
                        \"indexSize\" : 8192,
                        \"fsUsedSize\" : 12439994368,
                        \"fsTotalSize\" : 62725787648,
                        \"ok\" : 1
                }
        },
        \"objects\" : 0,
        \"avgObjSize\" : 0,
        \"dataSize\" : 0,
        \"storageSize\" : 12288,
        \"numExtents\" : 0,
        \"indexes\" : 6,
        \"indexSize\" : 24576,
        \"fileSize\" : 0,
        \"extentFreeList\" : {
                \"num\" : 0,
                \"totalSize\" : 0
        },
        \"ok\" : 1,
        \"operationTime\" : Timestamp(1564004884, 36),
        \"$clusterTime\" : {
                \"clusterTime\" : Timestamp(1564004888, 1),
                \"signature\" : {
                        \"hash\" : BinData(0,\"AAAAAAAAAAAAAAAAAAAAAAAAAAA=\"),
                        \"keyId\" : NumberLong(0)
                }
        }
}

?更多命令?

docker exec -it mongo-config-01 bash -c \" echo \'rs.status()\' | mongosh --port 27017 \"


docker exec -it shard-01-node-a bash -c \" echo \'rs.help()\' | mongosh --port 27017 \"
docker exec -it shard-01-node-a bash -c \" echo \'rs.status()\' | mongosh --port 27017 \" 
docker exec -it shard-01-node-a bash -c \" echo \'rs.printReplicationInfo()\' | mongosh --port 27017 \" 
docker exec -it shard-01-node-a bash -c \" echo \'rs.printSlaveReplicationInfo()\' | mongosh --port 27017 \"

✦正常启动?

群集仅在第一次运行中初始化。

可以简单地使用Docker-Compose或Docker-Compose -D来实现随后的启动-D

✦重置群集?

要删除所有数据并重新定位集群,请确保容器被停止,然后:

docker-compose rm

✦清理Docker-Compose?

docker-compose down -v --rmi all --remove-orphans

屏幕截图?


?捐赠^^?

如果您喜欢我的作品并且想支持,那么您可以随时给我买咖啡☕️

我会很感激❤️❤️❤️


反向?

  • https://git*h*ub*.com/jfollenfant/mongodb-sharding-docker-compose
  • https://vibl**o.as*ia/p/cai-dat-mongo-cluster-voi-docker-m68z0nn25kg

下载源码

通过命令行克隆项目:

git clone https://github.com/minhhungit/mongodb-cluster-docker-compose.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 开发教程 mongodb cluster docker compose https://www.zuozi.net/31679.html

PluginFramework
上一篇: PluginFramework
docnet
下一篇: docnet
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务