集群搭建
快速搭建mongoDB 3副本集群,并且设置副本集使用内存容量
背景
- mongodb使用事物必须用副本集的方式
- 读写分离
- 在linux环境中,docker搭建
方案
创建docker网络的方式
创建docker网络
docker network create my-mongo-cluster
docker network ls
搭建副本集
docker run -p 30001:27017 --name mongo1 --net my-mongo-cluster mongo mongod --replSet my-mongo-set
docker run -p 30002:27017 --name mongo2 --net my-mongo-cluster mongo mongod --replSet my-mongo-set
docker run -p 30003:27017 --name mongo3 --net my-mongo-cluster mongo mongod --replSet my-mongo-set
配置集群和初始化
docker exec -it mongo1 mongo
db = (new Mongo('localhost:27017')).getDB('test')
设置集群配置,选举主节点
config = {
"_id" : "my-mongo-set",
"members" : [
{
"_id" : 0,
"host" : "mongo1:27017"
},
{
"_id" : 1,
"host" : "mongo2:27017"
},
{
"_id" : 2,
"host" : "mongo3:27017"
}
]
}
初始化集群配置
rs.initiate(config)
查询配置是否成功
rs.status()
查到members中有PRIMARY表示选举完成,可以正常使用
使用
使用创建网络的方式,在使用mongo-go-driver驱动连接的时候,如果应用程序也是在docker中,需要和集群在一个docker网络
普通方式
搭建副本集
docker run -p 30001:27017 --name mongo1 mongo mongod --replSet my-mongo-set
docker run -p 30002:27017 --name mongo2 mongo mongod --replSet my-mongo-set
docker run -p 30003:27017 --name mongo3 mongo mongod --replSet my-mongo-set
如果发现mongodb占用内存过高,可以选择添加--wiredTigerCacheSizeGB xxx限制内存使用
例如:
docker run -p 30003:27017 --name mongo3 mongo mongod --replSet my-mongo-set --wiredTigerCacheSizeGB 2
配置集群和初始化
- 查询IP
docker inspect mongo1
- 配置初始化
docker exec -it mongo1 mongo
db = (new Mongo('localhost:27017')).getDB('test')
config = {
"_id" : "my-mongo-set",
"members" : [
{
"_id" : 0,
"host" : "127.12.0.8:27017"
},
{
"_id" : 1,
"host" : "127.12.0.9:27017"
},
{
"_id" : 2,
"host" : "127.12.0.6:27017"
}
]
}
rs.initiate(config)
使用
这种方式在使用的时候不需要指定docker网络,但是要知道宿主机的网络
总结
- 由于mongodb占用内存特别高,集群的方式会占用的更多,建议把集群和应用程序分开,当然生产环境可能不是简简单单的这种集群的搭建了。
- mongodb的GO官方驱动,不是用户友好型,在使用事物的时候,考虑是否需要切换数据库
- 上面的方式,很适合在测试环境中使用
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。