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集群原理和搭建的主要内容,如果未能解决你的问题,请参考以下文章