Docker进行MongoDB三副本搭建

使用Docker部署MongoDB副本集

mongodb从4.0开始支持事务,最近在使用mongodb的过程中,发现在单节点状态下,无法支持事务,只有配置了副本集才支持事务,故留下搭建MongoDB单机三节点副本集的记录。

1. 创建目录

mkdir -p /apps/mongo-rs/{data01,data02,data03,key,backup}

2. 创建密钥

cd /apps/mongo-rs
openssl rand -base64 756 > key/mongo-rs.key
chmod 400 key/mongo-rs.key 
chown polkitd:input key/mongo-rs.key 

3. 创建mongodb三节点

docker run --name mongo-rs01 -p 30010:27017 -v /apps/mongo-rs/data01:/data/db -v /apps/mongo-rs/backup:/data/backup -v /apps/mongo-rs/key:/data/key -v /etc/localtime:/etc/localtime -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=PWD2020 -d mongo --replSet mongo-rs --auth --keyFile /data/key/mongo-rs.key --bind_ip_all

docker run --name mongo-rs02 -p 30011:27017 -v /apps/mongo-rs/data02:/data/db -v /apps/mongo-rs/backup:/data/backup -v /apps/mongo-rs/key:/data/key -v /etc/localtime:/etc/localtime -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=PWD2020 -d mongo --replSet mongo-rs --auth --keyFile /data/key/mongo-rs.key --bind_ip_all

docker run --name mongo-rs03 -p 30012:27017 -v /apps/mongo-rs/data03:/data/db -v /apps/mongo-rs/backup:/data/backup -v /apps/mongo-rs/key:/data/key -v /etc/localtime:/etc/localtime -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=PWD2020 -d mongo --replSet mongo-rs --auth --keyFile /data/key/mongo-rs.key --bind_ip_all

创建了三个mongodb节点,并指定使用相同密钥文件

4. 配置副本集

docker exec -it mongo-rs01 bash

mongo
use admin
db.auth("admin","PWD2020")

var config={
     _id:"mongo-rs",
     members:[
         {_id:0,host:"192.168.1.201:30010"},
         {_id:1,host:"192.168.1.201:30011"},
		 {_id:2,host:"192.168.1.201:30012",arbiterOnly:true}
]};
rs.initiate(config)
rs.status()

arbiterOnly:true 表示该节点为仲裁节点,只负责投票,不负责存储数据
执行rs.initiate()方法,初始化副本集,同时执行该方法的节点为主节点
rs.status()可查看副本集节点状态

5. 验证数据同步

在主节点插入数据

use test
db.test.insert({name:"mongo rs test"})

在从节点查询数据

docker exec -it mongo-rs02 bash

mongo
use admin
db.auth("admin","PWD2020")
db.getMongo().setSlaveOk()
use test
db.test.find()

以上完成副本集的搭建

6. 附:其它操作

6.1 备份数据

docker exec -it mongo-rs01 bash
mongodump -d test-u admin -p PWD2020 --authenticationDatabase=admin -o /data/backup

6.2 恢复数据

docker exec -it mongo-rs01 bash
mongorestore -d test -u admin -p PWD2020 --authenticationDatabase=admin --dir /data/backup/test

6.3 创建用户

docker exec -it mongo-rs01 bash
mongo
use admin
db.auth("admin","PWD2020");
use test
db.createUser({ user: 'test', pwd: 'test2020', roles: [ { role: "readWrite", db: "test" } ] });
  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Docker上安装MongoDB副本集,你可以按照以下步骤进行操作: 1. 首先,创建一个网络以便于容器之间的通信,可以使用以下命令创建网络: ``` docker network create mongo-cluster ``` 2. 然后,创建一个配置服务器的容器。使用以下命令创建容器: ``` docker run --name config-server -d \ --net=mongo-cluster \ --privileged=true \ -p 20011:20011 \ -v /docker/mongo-cluster/config-server:/data/db \ mongo:latest \ --configsvr --replSet rs_config_server --bind_ip_all ``` 3. 接下来,创建三个数据节点的容器。使用以下命令创建容器: ``` docker run --name data-node1 -d \ --net=mongo-cluster \ --privileged=true \ -p 20021:20021 \ -v /docker/mongo-cluster/data-node1:/data/db \ mongo:latest \ --shardsvr --replSet rs_data_node --bind_ip_all docker run --name data-node2 -d \ --net=mongo-cluster \ --privileged=true \ -p 20022:20022 \ -v /docker/mongo-cluster/data-node2:/data/db \ mongo:latest \ --shardsvr --replSet rs_data_node --bind_ip_all docker run --name data-node3 -d \ --net=mongo-cluster \ --privileged=true \ -p 20023:20023 \ -v /docker/mongo-cluster/data-node3:/data/db \ mongo:latest \ --shardsvr --replSet rs_data_node --bind_ip_all ``` 4. 运行以下命令以配置和启动副本集: ``` docker exec -it config-server mongo --port 20011 rs.initiate( { _id: "rs_config_server", configsvr: true, members: [ { _id : 0, host : "config-server:20011" } ] } ) ``` ``` docker exec -it data-node1 mongo --port 20021 rs.initiate( { _id : "rs_data_node", members: [ { _id : 0, host : "data-node1:20021" } ] } ) ``` ``` docker exec -it data-node2 mongo --port 20022 rs.add("data-node1:20021") ``` ``` docker exec -it data-node3 mongo --port 20023 rs.add("data-node1:20021") ``` 5. 最后,创建一个mongos路由服务器的容器。使用以下命令创建容器: ``` docker run --name mongos -d \ --net=mongo-cluster \ --privileged=true \ -p 27017:27017 \ -v /docker/mongo-cluster/mongos:/data/db \ mongo:latest \ --configdb rs_config_server/config-server:20011 --bind_ip_all ``` 现在你已经成功安装了MongoDB副本集。你可以使用以下命令连接到mongos服务器并进行操作: ``` docker exec -it mongos mongo --port 27017 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值