MongoDB单机搭建
MongoDB集群搭建
MongoDB集群添加验证
主机 | 角色 |
---|---|
10.0.86.220 | 主节点 |
10.0.86.210 | 从节点 |
10.0.86.240 | 仲裁节点 |
这里对配置文件进行一下说明:
MongoDB服务支持命令行配置参数和配置文件两种启动方式, 为便于管理, 推荐使用配置文件进行服务参数的配置. 自Mongo2.6版起, 官方推荐使用YAML格式的配置参数: MongoDB官方YAML配置文件参数说明; 旧版配置文件格式依然可用但不建议使用: .MongoDB官方旧版配置文件参数说明
我这里用的是旧版的格式,有兴趣也可以尝试yaml格式,
下面是本集群使用的配置文件mongod.conf:
port=27017 #端口
dbpath= /usr/local/sdb/mongodb-linux-x86_64-4.0.9/db #数据库存文件存放目录
logpath= /usr/local/sdb/mongodb-linux-x86_64-4.0.9/mongodb.log #日志文件存放路径
logappend=true #使用追加的方式写日志
fork=true #不以守护程序的方式启用,即不在后台运行
replSet=sdb #Replica Set的名字 集群名称
maxConns=100 #最大同时连接数
> #auth=true #启用验证
> #keyFile=/usr/local/sdb/mongodb-linux-x86_64-4.0.9/access.key
journal=true #每次写入会记录一条操作日志(通过journal可以重新构造出写入的数据)。
#即使宕机,启动时wiredtiger会先将数据恢复到最近一次的checkpoint点,然后重放后续的journal日志来恢复。
storageEngine=wiredTiger #存储引擎有mmapv1、wiretiger、mongorocks
bind_ip = 10.0.86.220 #这样就可外部访问了,例如从win10中去连虚拟机中的MongoDB
和以前的配置一样,只是加了auth和keyFile的属性,暂时先注释掉
集群配置完成后, 仍然在主节点的mongo控制台中添加三个用户:数据库管理员, 集群管理员和访问特定数据库的用户.
在一个节点执行就可以
在bin目录下
./mongo 10.0.86.220 #进入mongo控制台
> use admin #使用内置的admin库
> db.createUser({user:"admin",pwd:"admin",roles:[{role:"readWriteAnyDatabase",db:"admin"},
{role:"dbAdminAnyDatabase",db:"admin"},{role:"userAdminAnyDatabase",db:"admin"}]})
> db.createUser( #创建集群管理员
{
user:"cluster",
pwd:"cluster",
roles:[{role:"clusterAdmin",db:"admin"},{role:"clusterManager",db:"admin"},{role:"clusterMonitor",db:"admin"}]
}
)
> use testdb #切换到testdb数据库,不用事先创建
> db.createUser( #创建特定库的特定用户
{
user:"test",
pwd:"test",
roles:[{role:"readWrite",db:"testdb"},{role:"dbAdmin",db:"testdb"},{role:"userAdmin",db:"testdb"}]
}
)
> use admin
> db.system.users.find() #查看创建的用户
MongoDB的用户和数据库是绑定的, 必须指定某个用户归属于哪个数据库, 即在roles字段的每个role中指定db字段.
数据库管理员通常需要具有读写,管理任意数据库和管理任意用户的role, 后续可以登录此用户进行数据库和用户的增删改查.
集群管理员通常需要具有集群管理和集群监控的role, 只有集群管理员可以关闭集群.
普通用户根据用途不同可以对特定或者多个数据库拥有各种不同的role, 本例中的test用户既可以读写testdb库, 同时也是testdb库的管理员.
主节点上添加的用户应该能够在从节点上查询到(需要先键入rs.slaveOk()命令).
用户添加完成后需要关闭所有节点(先关闭仲裁和从节点, 再关闭主节点, 避免主节点切换)
生成keyFile(keyFile的用途是作为所有mongod后台进程允许加入集群的凭证, 所有集群中的节点共用一个keyFile, 避免其他mongod加入集群):
在一个节点执行
openssl rand -base64 756 > /mgrs/conf/access.key #生成keyFile, keyFile的长度必须在6-1024个字符之间
chmod 400 /mgrs/conf/access.key #keyFile文件权限为只读
scp /usr/local/sdb/access.key [email protected]:/usr/local/sdb #用scp将keyFile复制到其他服务器
scp/usr/local/sdb/access.key [email protected]:/usr/local/sdb
取消三个节点上的auth和keyFile的注释:
依次启动主节点, 从节点和仲裁节点
在配置文件中修改:
spring:
data:
mongodb:
uri: mongodb://test:[email protected]:27017,10.0.86.210:27017/testdb?replicaSet=sdb&slaveOk=true&readPreference=secondaryPreferred