Docker中mongodb集群原理和搭建

Posted IT男也玩文艺

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker中mongodb集群原理和搭建相关的知识,希望对你有一定的参考价值。

                       Mongodb集群及单点维护文档

Mongodb 目前存在单点和集群两种

单点:

目标机器:192.168.155.130

方式:     docker容器:

启动命令:docker run   -p  27017:27017 -v  /mongodb_db:/data/db  --name docker_mongodb  -d mongo

启动脚本位置:/home/appuser/mongodb_start.sh

进入docker 内部:docker   exec -it 180a   /bin/bash

使用命令进入交互式数据库:mongo

创建数据库:use xxxx

            db.unilink.insert({"name":"1"})                   :只有插入数据创建的数据库才会存在

创建用户:db.createUser({user:"root", pwd: "1q2w3e4r", roles: [{ role: "dbAdmin", db: "xxxx" }]})

集群

机器IP :192.168.155.108  192.168.155.143   192.168.155.114

实例个数:12个

方式:docker容器

原理

采用的是Replica Sets+Sharded Cluster的集群,具有高可用,故障转移,分布式存储等特性,这里我们采用三台物理机来搭建集群

                           

1     三台物理机,每台物理机拥有完整的分片集群配置,都可独立运行

2     配置服务器:使用3个配置服务器确保元数据完整性。

3     路由(mongos)进程:使用3个路由进程实现平衡,提高客户端接入性能

4     3 个分片进程:Shard11,Shard12,Shard13组成一个副本集,提供Sharding 中 Shard1 的功能。

5     3 个分片进程:Shard21,Shard22,Shard23组成一个副本集,提供Sharding 中 Shard2 的功能。构建一个 mongoDB Sharding Cluster 需要三种角色:shard 服务器(ShardServer)、配置服务器(config Server)、路由进程(Route Process)

Share 服务器

Shared服务器即存储实际数据的分片,每个shared可以是一个mongod实例,也可以

是一组mongod实例构成的replication sets 为了实现每个shared内部的故障,自动转换mongdb 官方建议每个shared为一组relication  sets

配置服务器

为了将一个特定的collection 存储在多个shard中,,需要为噶collection指定一个shard key 决定改条记录属于哪个  chunk配置服务器可以存储,每个shard节点的配置信息,每个shard节点的配置信息,每个chunk的shard key范围,chunk在个shard的分布情况跟,集群中所有的DB和collection的sharding配置信息

路由(mongos)进程

他是一个前端路由,客户端由此介入,首先询问配置服务器需要到哪个shard上

查询或保存记录,然后连接相应的shard执行操作,最后将结果返回客户端,客户只需要将原本发给mongod的查询或者更新请求原封不动的发给路由进程,不需要关系所操作单点记录存储在那个shard上

创建过程

在192.168.155.108   192.168.155.143  192.168.155.114 三台机器上分别安装docker环境

并且在切换到home用户下

使用脚本创建目录

/home/mkdir.sh

此脚本用来创建docker容器映射使用的文件,会分别创建 congfig-serverx  mongosx  shard1x shard2x 四个文件夹,并且在四个文件夹下会分别创建三个文件为backup config  db  三个文件夹又会在config文件夹下创建config.conf的配置文件

脚本内容:

每台机器的脚本会根据文件名不同而有差异

创建配置服务器

分别在三台物理机进入括号内的文件夹执行以下命令

192.168.155.108:(/home/config-server1):

docker run --restart=always --privileged=true-p 10021:27019 -v $PWD/config:/etc/mongod -v $PWD/db:/data/db -d --namepro-file-server-config1 mongo:4.0.0 -f /etc/mongod/config.conf --configsvr--replSet "rs-file-server-config-server" --bind_ip_all

192.168.155.143:(/home/config-server2):

docker run --restart=always --privileged=true-p 10022:27019 -v $PWD/config:/etc/mongod -v $PWD/db:/data/db -d --namepro-file-server-config2 mongo:4.0.0 -f /etc/mongod/config.conf --configsvr--replSet "rs-file-server-config-server" --bind_ip_all

192.168.155.114:(/home/config-server3):

docker run --restart=always --privileged=true-p 10023:27019 -v $PWD/config:/etc/mongod -v $PWD/db:/data/db -d --namepro-file-server-config3 mongo:4.0.0 -f /etc/mongod/config.conf --configsvr--replSet "rs-file-server-config-server" --bind_ip_all

初始化配置集群

使用工具Robo 3T 连接192.168.155.108:10021

执行

rs.initiate({

    _id:"rs-file-server-config-server",

    configsvr: true,

    members: [

        { _id : 0, host : "192.168.155.108:10021"},

        { _id : 1, host :"192.168.155.143:10022" },

        { _id : 2, host :"192.168.155.114:10023" }

    ]

});

执行完毕之后执行rs.status()查看状态副本集是否成功。

创建shard1分片服务器

192.168.155.108:(/home/shard11):

docker run --restart=always --privileged=true-p 10031:27018 -v $PWD/config:/etc/mongod -v $PWD/backup:/data/backup -v$PWD/db:/data/db -d --name pro-file-server-shard11 mongo:4.0.0 -f/etc/mongod/config.conf --shardsvr --replSet "rs-file-server-shard1-server"--bind_ip_all

192.168.155.143:(/home/shard12):

docker run --restart=always --privileged=true -p10032:27018 -v $PWD/config:/etc/mongod -v $PWD/backup:/data/backup -v$PWD/db:/data/db -d --name pro-file-server-shard12 mongo:4.0.0 -f/etc/mongod/config.conf --shardsvr --replSet"rs-file-server-shard1-server" --bind_ip_all

192.168.155.114:(/home/shard13):

docker run --restart=always --privileged=true-p 10033:27018 -v $PWD/config:/etc/mongod -v $PWD/backup:/data/backup -v$PWD/db:/data/db -d --name pro-file-server-shard13 mongo:4.0.0 -f/etc/mongod/config.conf --shardsvr --replSet"rs-file-server-shard1-server" --bind_ip_all

初始化shard集群

使用工具Robo 3T 连接192.168.155.108:10031

执行

rs.initiate({

    _id:"rs-file-server-shard1-server",

    members: [

        { _id : 0, host :"192.168.155.108:10031" },

        { _id : 1, host :"192.168.155.143:10032" },

        { _id : 2, host : "192.168.155.114:10033"}

    ]

});

执行完毕之后执行rs.status()查看状态副本集是否成功。

创建shard2分片服务器

192.168.155.108:(/home/shard21):

docker run --restart=always --privileged=true-p 10041:27018 -v $PWD/config:/etc/mongod -v $PWD/backup:/data/backup -v$PWD/db:/data/db -d --name pro-file-server-shard21 mongo:4.0.0 -f/etc/mongod/config.conf --shardsvr --replSet"rs-file-server-shard2-server" --bind_ip_all

192.168.155.143:(/home/shard22):

dockerrun --restart=always --privileged=true -p 10042:27018 -v$PWD/config:/etc/mongod -v $PWD/backup:/data/backup -v $PWD/db:/data/db -d--name pro-file-server-shard22 mongo:4.0.0 -f /etc/mongod/config.conf--shardsvr --replSet "rs-file-server-shard2-server" --bind_ip_all

192.168.155.114:(/home/shard23):

docker run --restart=always --privileged=true-p 10043:27018 -v $PWD/config:/etc/mongod -v $PWD/backup:/data/backup -v$PWD/db:/data/db -d --name pro-file-server-shard23 mongo:4.0.0 -f/etc/mongod/config.conf --shardsvr --replSet"rs-file-server-shard2-server" --bind_ip_all

然后使用客户端连接到192.168.155.108:10041,执行以下命令初始化副本集

rs.initiate({

    _id:"rs-file-server-shard2-server",

    members: [

        { _id : 0, host :"192.168.155.108:10041" },

        { _id : 1, host : "192.168.155.143:10042"},

        { _id : 2, host :"192.168.155.114:10043" }

    ]

});

执行完毕之后执行rs.status()查看状态副本集是否成功

创建mongos服务器

192.168.155.108:(/home/mongos1)

docker run --restart=always --privileged=true-p 10011:27017 -v $PWD/config:/etc/mongod -v $PWD/db:/data/db -d --entrypointmongos --name pro-file-server-mongos1 mongo:4.0.0 -f /etc/mongod/config.conf--configdbrs-file-server-config-server/192.168.155.108:10021,192.168.155.143:10022,192.168.155.114:10023--bind_ip_all

192.168.155.143:(/home/mongos2)

docker run --restart=always --privileged=true-p 10012:27017 -v $PWD/config:/etc/mongod -v $PWD/db:/data/db -d --entrypointmongos --name pro-file-server-mongos2 mongo:4.0.0 -f /etc/mongod/config.conf--configdb rs-file-server-config-server/192.168.155.108:10021,192.168.155.143:10022,192.168.155.114:10023--bind_ip_all

192.168.155.114:(/home/mongos3)

docker run --restart=always --privileged=true-p 10013:27017 -v $PWD/config:/etc/mongod -v $PWD/db:/data/db -d --entrypointmongos --name pro-file-server-mongos3 mongo:4.0.0 -f /etc/mongod/config.conf--configdbrs-file-server-config-server/192.168.155.108:10021,192.168.155.143:10022,192.168.155.114:10023--bind_ip_all

确保mongos服务起来之后,连接到192.168.155.108:10011执行以下命令添加分片服务器信息

sh.addShard("rs-file-server-shard1-server/192.168.155.108:10031,192.168.155.143:10032,192.168.155.114:10033")

sh.addShard("rs-file-server-shard2-server/192.168.155.108:10041,192.168.155.143:10042,192.168.155.114:10043")

 

此时mongodb集群搭建完毕

sh.enableSharding("xxxxx")             创建数据库

sh.shardCollection("xxxxx.user",{"_id": "hashed" })

在springcloud中application.yaml填写mongos的IP

192.168.155.108:10011,192.168.155.143:10012,192.168.155.114:10013

 


以上是关于Docker中mongodb集群原理和搭建的主要内容,如果未能解决你的问题,请参考以下文章

Linux/Ubuntu 搭建mongodb集群(副本集)

MongoDB 搭建副本集

MongoDB分片集群原理搭建及测试详解

MongoDBV3.0.7版本(shard+replica)集群的搭建及验证

结合Docker 搭建tomcat 集群

使用 Docker 搭建 Hadoop 集群 和 Spark On Yarn