6
基于Docker搭建MongoDB集群
source link: https://dafengge0913.github.io/docker-mongos/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
今天要帮公司搭建一个MongoDB的集群,记录一下搭建的过程。
Ubuntu 18.04.1 LTS
安装Docker
sudo apt install -y docker.io
安装完毕,查看一下Docker版本:
dafengge0913@ubuntu:~$ docker -v
Docker version 18.06.1-ce, build e68fc7a
拉取MongoDB镜像
sudo docker pull mongo
查看镜像:
dafengge0913@ubuntu:~$ sudo docker images mongo
REPOSITORY TAG IMAGE ID CREATED SIZE
mongo latest 525bd2016729 4 weeks ago 383MB
使用Docker启动MongoDB
sudo docker run -p 27017:27017 -v $PWD/db:/data/db -d mongo:latest
查看运行状态:
dafengge0913@ubuntu:~/mongo$ sudo docker ps -a --no-trunc
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bd27d09493c1fd663014410bf1cdf7227326cccb28733738311aa1cfc0cb7647 mongo:latest "docker-entrypoint.sh mongod" 23 seconds ago Up 22 seconds 0.0.0.0:27017->27017/tcp distracted_snyder
连接容器中的MongoDB:
sudo docker run -it mongo:latest mongo --host 172.17.0.1
搭建副本集和集群
集群包含两组分片副本集
每个副本集一个主节点、一个从节点、一个仲裁节点
配置副本集包含三个节点
使用一个mongos路由
为了方便 写一个启动脚本
#!/bin/sh
sudo docker run -p 27001:27018 -v $PWD/db1:/data/db -d mongo:latest --shardsvr --replSet rs1 --port 27018 --bind_ip 0.0.0.0
sudo docker run -p 27002:27018 -v $PWD/db2:/data/db -d mongo:latest --shardsvr --replSet rs1 --port 27018 --bind_ip 0.0.0.0
sudo docker run -p 27003:27018 -v $PWD/db3:/data/db -d mongo:latest --shardsvr --replSet rs1 --port 27018 --bind_ip 0.0.0.0
sudo docker run -p 27004:27018 -v $PWD/db4:/data/db -d mongo:latest --shardsvr --replSet rs2 --port 27018 --bind_ip 0.0.0.0
sudo docker run -p 27005:27018 -v $PWD/db5:/data/db -d mongo:latest --shardsvr --replSet rs2 --port 27018 --bind_ip 0.0.0.0
sudo docker run -p 27006:27018 -v $PWD/db6:/data/db -d mongo:latest --shardsvr --replSet rs2 --port 27018 --bind_ip 0.0.0.0
sudo docker run -p 27007:27018 -v $PWD/db_config_1:/data/db -d mongo:latest --configsvr --dbpath /data/db --replSet rsc --port 27018 --bind_ip 0.0.0.0
sudo docker run -p 27008:27018 -v $PWD/db_config_2:/data/db -d mongo:latest --configsvr --dbpath /data/db --replSet rsc --port 27018 --bind_ip 0.0.0.0
sudo docker run -p 27009:27018 -v $PWD/db_config_3:/data/db -d mongo:latest --configsvr --dbpath /data/db --replSet rsc --port 27018 --bind_ip 0.0.0.0
sudo docker run -p 27100:27018 -v $PWD/db_mongos_1:/data/db -d mongo:latest mongos --port 27018 --configdb rsc/172.17.0.1:27007,172.17.0.1:27008,172.17.0.1:27008 --bind_ip 0.0.0.0
初始化副本集rs1
sudo docker run -it mongo:latest mongo --host 172.17.0.1 --port 27001
> use admin
switched to db admin
> config = {_id:"rs1",members:[{_id:0,host:"172.17.0.1:27001"},{_id:1,host:"172.17.0.1:27002"},{_id:2,host:"172.17.0.1:27003",arbiterOnly:true}]}
{
"_id" : "rs1",
"members" : [
{
"_id" : 0,
"host" : "172.17.0.1:27001"
},
{
"_id" : 1,
"host" : "172.17.0.1:27002"
},
{
"_id" : 2,
"host" : "172.17.0.1:27003",
"arbiterOnly" : true
}
]
}
> rs.initiate(config)
{
"ok" : 1,
"operationTime" : Timestamp(1545715075, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1545715075, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
初始化副本集rs2
sudo docker run -it mongo:latest mongo --host 172.17.0.1 --port 27004
> use admin
> config = {_id:"rs2",members:[{_id:0,host:"172.17.0.1:27004"},{_id:1,host:"172.17.0.1:27005"},{_id:2,host:"172.17.0.1:27006",arbiterOnly:true}]}
> rs.initiate(config)
初始化配置副本集
sudo docker run -it mongo:latest mongo --host 172.17.0.1 --port 27007
> use admin
> config = {_id:"rsc",members:[{_id:0,host:"172.17.0.1:27007"}, {_id:1,host:"172.17.0.1:27008"},{_id:2,host:"172.17.0.1:27009"}]}
> rs.initiate(config)
通过mongos添加分片关系到configsvr
sudo docker run -it mongo:latest mongo --host 172.17.0.1 --port 27100
mongos> use admin
switched to db admin
mongos> db.runCommand({addshard:"rs1/172.17.0.1:27001,172.17.0.1:27002,172.17.0.1:27003"})
{
"shardAdded" : "rs1",
"ok" : 1,
"operationTime" : Timestamp(1545719532, 6),
"$clusterTime" : {
"clusterTime" : Timestamp(1545719532, 6),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
mongos> db.runCommand({addshard:"rs2/172.17.0.1:27004,172.17.0.1:27005,172.17.0.1:27006"})
{
"shardAdded" : "rs2",
"ok" : 1,
"operationTime" : Timestamp(1545719538, 5),
"$clusterTime" : {
"clusterTime" : Timestamp(1545719538, 5),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
mongos>
写一个停止用的脚本:
#!/bin/sh
sudo docker stop $(sudo docker ps -a | grep mongo | grep Up | awk '{print $1}')
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK