docker快速搭建mongo复制集
2023-12-14 00:40:39
    		docker快速搭建mongo复制集
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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
    	本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!