mongodb3.2.3 复制集安装步骤
mongodb 复制集 测试
node1: 172.18.20.161 47000 (主)
node2: 172.18.20.162 47000 (副)
node3: 172.18.20.163 47000 (副)
node4: 172.18.20.164 47000 (投票)
解压mongodb包,并移到相应用目录。
配置文件:
dbpath = /home/oyabc/mongodb/data/ # 指定数据库路径
logpath = /home/oyabc/mongodb/logs/logs.log # 日志路径
logappend = true # 以追加的方式写日志
port = 47000 # 指定端口号,默认47018
fork = true # 以子进程方式运行
quiet = true # disables all but the most critical entries in output/log file.
#auth = true # 增加验证选项
#bind_ip = 127.0.0.1,172.18.12.2,172.18.12.3
#keyFile= /home/oyabc/mongodb/keyFile
directoryperdb = true # 每个db 存放在单独的目录中
wiredTigerDirectoryForIndexes = true
maxConns = 1000000
nohttpinterface = true
rest = false
profile=1
slowms=1000
storageEngine=wiredTiger
###Replication Options
replSet = im1
oplogSize = 4096
auth keyFile 配置完成后在加权限
启动:
/home/oyabc/mongodb/mongodb323/bin/mongod -f /home/oyabc/mongodb/conf/mongodb.conf
在PRIMARY上登陆并设置权限:
/home/oyabc/mongodb/mongodb323/bin/mongo --port 47000
cfg={ _id:"im1",
members:[
{_id:0,host:'172.18.20.161:47000',priority:2},
{_id:1,host:'172.18.20.162:47000',priority:1},
{_id:2,host:'172.18.20.163:47000',priority:1},
{_id:3,host:'172.18.20.164:47000',arbiterOnly:true}
]
};
> rs.initiate(cfg)
检查状态:
rs.status();
设置权限
use admin
1. 创建管理员账号(全局账号)
use admin //管理员账号只能在admin账户下创建
db.createUser({user:'admin',pwd:'admin',roles:['userAdminAnyDatabase','dbAdminAnyDatabase', 'readAnyDatabase','readWriteAnyDatabase']});
2. 创建数据库账号
use api //创建数据库
db.createUser({user:'api',pwd:'api',roles:[{role:'dbOwner',db:'api'}]})
以上只在 PRIMARY 上操作, 用户,数据等会同步到其他副本上。
所有mongodb重启。
/home/oyabc/mongodb/mongodb323/bin/mongo --port 47000
use admin
db.auth('admin', 'admin'); // 认证
当副本不可用时可以设置 rs.slaveOk();
=======================================
停止服务:
use admin
db.shutdownServer();
给用户授权:
db.grantRolesToUser( "admin" , [ { role: "dbOwner", db: "test" } ]) ;
db.grantRolesToUser( "admin" , ['userAdminAnyDatabase','dbAdminAnyDatabase']) ;
db.grantRolesToUser( "admin" , ['readAnyDatabase','readWriteAnyDatabase']) ;
创建用户:
db.createUser(user, writeConcern)
user这个文档创建关于用户的身份认证和访问信息;
writeConcern这个文档描述保证MongoDB提供写操作的成功报告。
· user文档,定义了用户的以下形式:
{ user: "<name>",
pwd: "<cleartext password>",
customData: { <any information> },
roles: [
{ role: "<role>", db: "<database>" } | "<role>",
...
]
}
user文档字段介绍:
user字段,为新用户的名字;
pwd字段,用户的密码;
cusomData字段,为任意内容,例如可以为用户全名介绍;
roles字段,指定用户的角色,可以用一个空数组给新用户设定空角色;
在roles字段,可以指定内置角色和用户定义的角色。
Built-In Roles(内置角色):
1. 数据库用户角色:read、readWrite;
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 备份恢复角色:backup、restore;
5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超级用户角色:root
// 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
7. 内部角色:__system
PS:关于每个角色所拥有的操作权限可以点击上面的内置角色链接查看详情。
Database User Roles 普通用户角色
read
readWrite
Database Administration Roles管理员角色
dbAdmin可以管理数据库
dbOwner单数据库最大权限,dbAdmin,userAdmin
userAdmin可管理当前数据库用户
Cluster Administration Roles管理员角色
clusterAdmin
clusterManager
clusterMonitor
hostManager
Backup and Restoration Roles 备份和恢复角色
backup
restore
All-Database Roles 所有数据库角色
readAnyDatabase在admin下建立,可以读取所有数据库的信息
readWriteAnyDatabase在admin下建立,可以读写所有数据库的信息
userAdminAnyDatabase在admin下建立,可以管理所有数据库的用户
dbAdminAnyDatabase在admin下建立,可以管理所有数据库的信息(类似于所有数据库的dbAdmin账户)
· writeConcern文档(官方说明)
w选项:允许的值分别是 1、0、大于1的值、"majority"、<tag set>;
j选项:确保mongod实例写数据到磁盘上的journal(日志),这可以确保mongd以外关闭不会丢失数据。设置true启用。
wtimeout:指定一个时间限制,以毫秒为单位。wtimeout只适用于w值大于1。
例如:在products数据库创建用户accountAdmin01,并给该用户admin数据库上clusterAdmin和readAnyDatabase的角色,products数据库上readWrite角色。
use products
db.createUser( { "user" : "accountAdmin01",
"pwd": "cleartext password",
"customData" : { employeeId: 12345 },
"roles" : [ { role: "clusterAdmin", db: "admin" },
{ role: "readAnyDatabase", db: "admin" },
"readWrite"
] },
{ w: "majority" , wtimeout: 5000 } )
验证:
mongo -u accountAdmin01 -p yourpassward --authenticationDatabase products