docker快速搭建mongo复制集

发布时间:2023年12月17日

1.启动复制集

创建网络:
docker network create mongo-net
以副本方式启动三个mongo示例 复制集名称一定要相同
docker run  --name mongo-server-28017 --net mongo-net -p 28017:27017 -v /mongodb/data1:/data/db -e mongo_initdb_root_username=root -e mongo_initdb_root_password=root -d mongo:4.4.10 --replSet rs0 
docker run  --name mongo-server-28018 --net mongo-net -p 28018:27017 -v /mongodb/data2:/data/db -e mongo_initdb_root_username=root -e mongo_initdb_root_password=root -d mongo:4.4.10 --replSet rs0  
docker run  --name mongo-server-28019 --net mongo-net -p 28019:27017 -v /mongodb/data3:/data/db -e mongo_initdb_root_username=root -e mongo_initdb_root_password=root -d mongo:4.4.10 --replSet rs0 

上述命令中:

  • 创建network不是必须的,主要是方便在容器中使用彼此的名称可以访问
  • –name mongo-server-28017 指定容器名称
  • –net mongo-net 指定同一个网络内
  • -p 28017:27017 物理机端口:容器示例端口
  • -v /mongodb/data1:/data/db 挂载目录
  • -e mongo_initdb_root_username=root -e mongo_initdb_root_password=root 指定初始密码
  • –replSet rs0 指定复制集名称(同一个复制集的名称必须相同)

2.配置

// 进入容器内部
docker exec -it mongo-server-28017 bash
// 在主节点服务器上 连接到MongoDB  
mongo --host localhost --port 27017 --shell  
use admin  
// 在shell中输入以下命令来创建一个具有足够权限的用户(这里我们使用"root"作为用户名和"password"作为密码)  
db.createUser({user: "root", pwd: "root", roles: ["root"]}) 
// 然后,退出shell,并重新连接,这次使用新创建的用户进行验证  
exit 
mongo --host localhost --port 27017 --username root --password root --shell 

2.1 初始化副本集配置

// 初始化副本集
rs.initiate({_id: "rs0", members: [{_id: 0, host: "mongo-server-28017:27017"}, {_id: 1, host: "mongo-server-28018:27017"}, {_id: 2, host: "mongo-server-28019:27017"}]})
// 检查members属性
rs.status() 
  • rs.initiate 是初始化复制集的方法。
  • {_id: “rs0”, members: […]} 是复制集的配置。其中,_id 是复制集的名称,members 是复制集的成员列表。
  • {_id: 0, host: “mongo-server-28017:27017”} 是一个成员的配置,其中_id是成员的ID,host是该成员的地址和端口。

2.2 强制修改副本集配置

rs.reconfig({_id: "rs0", members: [{_id: 0, host: "mongo-server-28017:27017"}, {_id: 1, host: "mongo-server-28018:27017"}, {_id: 2, host: "mongo-server-28019:27017"}]},{force:true})
  • rs.reconfig 是重新配置复制集的方法。
  • {_id: “rs0”, members: […]} 是新的复制集配置。其中,_id 是复制集的名称,members 是复制集的成员列表。
  • {_id: 0, host: “mongo-server-28017:27017”} 是一个成员的配置,其中_id是成员的ID,host是该成员的地址和端口。
  • {force: true} 是一个可选参数,当设置为true时,它将会强制重新配置复制集,即使这个操作可能会导致数据丢失或服务中断。

3.验证

// MongoDB 主节点进行写入
mongo --port 28017
rs0:PRIMARY> db.user.insert([{name:"fox"},{name:"mongo"}])
// MongoDB 从节点进行读
mongo --port 28018
rs0:SECONDARY> rs.secondaryOk()
rs0:SECONDARY> db.user.find()
查看当前节点角色:
db.isMaster()

4.问题

// 如果安装有问题,使用以下命令卸载重装
docker stop mongo-server-28017 mongo-server-28018 mongo-server-28019
docker rm mongo-server-28017 mongo-server-28018 mongo-server-28019
文章来源:https://blog.csdn.net/qq_45003354/article/details/134982705
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。