MongoDB搭建集群+设置

集群搭建

快速搭建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表示选举完成,可以正常使用

MongoDB搭建集群+设置_第1张图片

使用

使用创建网络的方式,在使用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

MongoDB搭建集群+设置_第2张图片

  • 配置初始化
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官方驱动,不是用户友好型,在使用事物的时候,考虑是否需要切换数据库
  • 上面的方式,很适合在测试环境中使用

你可能感兴趣的:(mongodb,linux,docker)