文章目录
1.5.1生成keyfile文件(用于副本集群成员之间的安全验证)
2.5.1生成keyfile文件(用于副本集群成员之间的安全验证)
1.Linux下docker启动mongodb副本集
1.1拉取mongodb镜像
1.2创建集群成员数据挂载目录
/data/mongo /data/mongo2 /data/mongo3 /data/mongo4
1.3安装容器
mongodb的镜像名称为mongo,副本集名称为rs,执行命令:
docker run --name mongodb -p 27017:27017 -v /data/mongo/:/data/db/ -d mongo mongod --replSet rs
docker run --name mongodb2 -p 27018:27017 -v /data/mongo2/:/data/db/ -d mongo mongod --replSet rs
docker run --name mongodb3 -p 27019:27017 -v /data/mongo3/:/data/db/ -d mongo mongod --replSet rs
docker run --name mongodb4 -p 27020:27017 -v /data/mongo4/:/data/db/ -d mongo mongod --replSet rs
1.4配置集群关系
1.4.1进入容器内部
执行命令进入到mongodb的容器内部:
docker exec -it mongodb /bin/bash
1.4.2连接mongodb
执行命令连接mongodb:
mongo
1.4.3配置集群关系
执行命令:
config={
"_id":"rs",
"members":[
{"_id":0,"host":"127.0.0.1:27017","priority":10},
{"_id":1,"host":"127.0.0.1:27018","priority":9},
{"_id":2,"host":"127.0.0.1:27019","priority":8},
{"_id":3,"host":"127.0.0.1:27020","priority":0,arbiterOnly:true}
]
}
rs.initiate(config)
备注:priority为节点的权重(用于选举), arbiterOnly:true表示为仲裁节点不参与选举
1.4.4查看集群状态
rs.status()
1.4.5添加超级管理员账号
use admin
db.createUser({
user:"admin",
pwd:"123456",
roles:[
{role:"root",db:"admin"}, {role:"userAdminAnyDatabase",db:"admin"},
{role:"dbOwner", db: "admin"},{role:"clusterAdmin",db: "admin" },
{role:"userAdminAnyDatabase",db: "admin"},{role:"dbAdminAnyDatabase",db: "admin"}
]
})
1.4.6添加指定数据库管理员账号
该指定数据库的名称为dbname
use dbname
db.createUser({
user:"root",
pwd:"123456",
roles:[
{role:"readWrite",db:"dbname"}, {role: "dbAdmin", db: "dbname"},
{role:"dbOwner",db: "dbname" },{role: "read",db: "dbname" }
]
})
1.5开启用户名密码认证
1.5.1生成keyfile文件(用于副本集群成员之间的安全验证)
将key文件放到集群中的每个成员中,记住必须保持一致,权限设置成600;
openssl rand -base64 745 > ./mongo-keyfile
cp mongo-keyfile /data/mongo/ mongo-keyfile
chmod 600 /data/mongo/ mongo-keyfile
cp mongo-keyfile /data/mongo2/ mongo-keyfile
chmod 600 /data/mongo2/ mongo-keyfile
cp mongo-keyfile /data/mongo3/ mongo-keyfile
chmod 600 /data/mongo3/ mongo-keyfile
cp mongo-keyfile /data/mongo4/ mongo-keyfile
chmod 600 /data/mongo4/ mongo-keyfile
注意:该keyfile文件的权限必须为600
1.5.2运行容器并开启认证
原容器未启用安全认证,直接删除后创建新容器
docker rm mongodb
docker rm mongodb2
docker rm mongodb3
docker rm mongodb4
重新创建容器并启动
docker run --name mongodb -p 27017:27017 -v /data/mongo/:/data/db/ -d mongo mongod --replSet rs --auth --keyFile /data/db/mongo-keyfile --restart=always
docker run --name mongodb2 -p 27018:27017 -v /data/mongo2/:/data/db/ -d mongo mongod --replSet rs --auth --keyFile /data/db/mongo-keyfile --restart=always
docker run --name mongodb3 -p 27019:27017 -v /data/mongo3/:/data/db/ -d mongo mongod --replSet rs --auth --keyFile /data/db/mongo-keyfile --restart=always
docker run --name mongodb4 -p 27020:27017 -v /data/mongo4/:/data/db/ -d mongo mongod --replSet rs --auth --keyFile /data/db/mongo-keyfile --restart=always
2.Windows下配置mongodb副本集
2.1下载安装包
选择项目需要的版本,下载MongoDB安装包。
官网链接:https://www.mongodb.com/download-center/community
2.2为副本集每个成员创建必要的数据目录
E:\mongodb\mongo
E:\mongodb\mongo2
E:\mongodb\mongo3
E:\mongodb\mongo4
2.3创建成员实例
进入安装包bin目录,副本集名称为rs,
第一个成员,打开一个命令行窗口,不要关闭窗口
mongod --replSet rs --port 27017 --dbpath E:\mongodb\mongo
第二个成员,重新打开一个命令行窗口,不要关闭窗口
mongod --replSet rs --port 27018 --dbpath E:\mongodb\mongo2
第三个成员,重新打开一个命令行窗口,不要关闭窗口
mongod --replSet rs --port 27019 --dbpath E:\mongodb\mongo3
第四个成员,重新打开一个命令行窗口,不要关闭窗口
mongod --replSet rs --port 27020 --dbpath E:\mongodb\mongo4
2.4配置集群关系
2.4.1进入一个成员实例
在安装包bin目录执行命令:
mongo –port 27017
2.4.2配置集群关系
config={
"_id":"rs",
"members":[
{"_id":0,"host":"127.0.0.1:27017","priority":10},
{"_id":1,"host":"127.0.0.1:27018","priority":9},
{"_id":2,"host":"127.0.0.1:27019","priority":8},
{"_id":3,"host":"127.0.0.1:27020","priority":0,arbiterOnly:true}
]
}
rs.initiate(config)
备注:priority为节点的权重(用于选举), arbiterOnly:true表示为仲裁节点不参与选举
2.4.3查看集群状态
rs.status()
2.4.4添加超级管理员账号
use admin
db.createUser({
user:"admin",
pwd:"123456",
roles:[
{role:"root",db:"admin"}, {role:"userAdminAnyDatabase",db:"admin"},
{role:"dbOwner", db: "admin"},{role:"clusterAdmin",db: "admin" },
{role:"userAdminAnyDatabase",db: "admin"},{role:"dbAdminAnyDatabase",db: "admin"}
]
})
2.4.5添加指定数据库管理员账号
该指定数据库的名称为dbname
use dbname
db.createUser({
user:"root",
pwd:"123456",
roles:[
{role:"readWrite",db:"dbname"}, {role: "dbAdmin", db: "dbname"},
{role:"dbOwner",db: "dbname" },{role: "read",db: "dbname" }
]
})
2.5开启用户名密码认证
2.5.1生成keyfile文件(用于副本集群成员之间的安全验证)
生成key文件放到集群中的每个成员中,记住必须保持一致;
E:\mongodb\mongo\mongo-keyfile
E:\mongodb\mongo2\mongo-keyfile
E:\mongodb\mongo3\mongo-keyfile
E:\mongodb\mongo4\mongo-keyfile
2.5.2创建服务,开启用户认证
2.5.2.1用sc命令创建服务
sc create mongo binpath= "C:\mongodb-win32-x86_64-windows-4.4.1\bin\mongod.exe --replSet rs --port 27017 --dbpath E:\mongodb\mongo --auth --keyFile E:\mongodb\mongo\mongo-keyfile --service "
sc create mongo2 binpath= "C:\mongodb-win32-x86_64-windows-4.4.1\bin\mongod.exe --replSet rs --port 27018 --dbpath E:\mongodb\mongo2 --auth --keyFile E:\mongodb\mongo2\mongo-keyfile --service"
sc create mongo3 binpath= "C:\mongodb-win32-x86_64-windows-4.4.1\bin\mongod.exe --replSet rs --port 27019 --dbpath E:\mongodb\mongo3 --auth --keyFile E:\mongodb\mongo3\mongo-keyfile --service"
sc create mongo4 binpath= "C:\mongodb-win32-x86_64-windows-4.4.1\bin\mongod.exe --replSet rs --port 27020 --dbpath E:\mongodb\mongo4 --auth --keyFile E:\mongodb\mongo4\mongo-keyfile --service"
2.5.2.2开启服务
net start mongo
net start mongo2
net start mongo3
net start mongo4