文章目录

1.Linux下docker启动mongodb副本集

1.1拉取mongodb镜像

1.2创建集群成员数据挂载目录

1.3安装容器

1.4配置集群关系

1.4.1进入容器内部

1.4.2连接mongodb

1.4.3配置集群关系

1.4.4查看集群状态

1.4.5添加超级管理员账号

1.4.6添加指定数据库管理员账号

1.5开启用户名密码认证

1.5.1生成keyfile文件(用于副本集群成员之间的安全验证)

1.5.2运行容器并开启认证

2.Windows下配置mongodb副本集

2.1下载安装包

2.2为副本集每个成员创建必要的数据目录

2.3创建成员实例

2.4配置集群关系

2.4.1进入一个成员实例

2.4.2配置集群关系

2.4.3查看集群状态

2.4.4添加超级管理员账号

2.4.5添加指定数据库管理员账号

2.5开启用户名密码认证

2.5.1生成keyfile文件(用于副本集群成员之间的安全验证)

2.5.2创建服务,开启用户认证


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