conf.conf 如下
bind_ip=192.168.1.100
port = 28001
logpath=/usr/local/mongodb/logs/28001
logappend=true
dbpath=/usr/local/mongodb/datas/28001
replSet=imooc
fork = true
查看当前复制集状态
rs.status()
或者
use admin;
db.adminCommand({replSetGetStatus:1})
查看当前复制集配置文件
rs.conf()
show log rs #查看当前mongodb的日志
rs.stepDown(50) ## 把当前主节点50秒内降级为从节点
rs.isMaster() # 查看节点信息
/usr/local/mongodb/bin/mongo 10.51.105.19:28001/admin
//建立配置
config={_id:"imooc",members:[{_id:0,host:"10.51.105.19:28001"}, {_id:1,host:"10.51.105.19:28002"},{_id:2,host:"10.51.105.19:28003"}]}
//配置仲裁节点
config.members[2]={"_id":2,"host":"10.51.105.19:28003","arbiterOnly":true}
//使配置文件生效,初始化
rs.initiate(config) ### rs.reconfig(config) 重新加载配置文件
测试同步
主节点上
use study
imooc:PRIMARY> db.test.insert({"name":"xd"})
子节点上
imooc:SECONDARY> rs.slaveOk(1)
imooc:SECONDARY> use study
imooc:SECONDARY> db.test.find()
复制集配置文件参数
_id: 整数0
host:字符串 “127.0.0.1:27017“
arbiterOnly: 布尔值 true
priority:整数 0|1 该节点的优先级,如果设置为0,则永远不会升级为主节点
hidden:布尔值 true|false 或者 1|0 ,如果设置为false, 优先级 要设置为0,隐藏节点
votes:整数 0|1 具有投票
slaveDelay 整数 slaveDelay 3600 延迟节点 延迟多少秒进行复制
buildIndexes 布尔值 true|false 或者 1|0 主节点建立索引,子节点是否同步,如果设为false, 优先级 应设置为0
关于oplog
Oplog大小及意义
默认大小
64位操作系统linux,windows为当前分区可用空间的5%,体积不会超过50G
imooc:PRIMARY> use local
imooc:PRIMARY> db.oplog.rs.status()
imooc:PRIMARY> db.oplog.rs.find().sort({$natural:-1}).limit(1).pretty() //查看最近的一条数据,pretty()格式化输出
单节点启动复制后,如果要增加机器
rs.add({_id:1,host:" 10.51.105.19:28002"})
调整oplog大小
imooc:PRIMARY>rs.freeze(100)
imooc:PRIMARY>rs.stepDown(100)
然后退出kill掉这个进程,注释掉配置文件的 replSet=imooc,重新启动
>use local
>show table ## 可以看到 oplog.rs
> db.oplog.rs.find().sort({$natural:-1}).limit(1)
>db.temp.save( db.oplog.rs.find().sort({$natural:-1}).limit(1).next())
>db.oplog.rs.drop()
>db.createCollection("oplog.rs",{capped:true,size:1024 * 1024 * 1024 * 3})
>db.oplog.rs.save(db.temp.findOne())
步骤总结
1.将成员以单机模式启动
2.将oplog最新的一条记录保存到临时表中 db.temp.save( db.oplog.rs.find().sort({$natural:-1}).limit(1).next())
3.删除原来的oplog.rs集合
4.以创建封顶表的形式创建oplog.rs , db.createCollection("oplog.rs",{capped:true,size:1024 1024 1024 * 3})
5.将之前保存的原oplog中的最新操作插入到新的oplog.rs集合中 db.oplog.rs.save(db.temp.findOne())
6.将单节点模式的节点返回到复制集中
复制集状态查看
rs.status() 复制集状态查询
rs.printReplicationInfo() 查看oplog状态
rs.printSlaveReplicationInfo() 查看复制延迟
db.serverStatus() 查看状态详情
mongodb 监控工具
1.mongostat
mongostat 常用选项
--host 主机名,或者 主机名:端口
--port 端口
--username 用户(验证)
--password 密码(验证)
--authenticationDatabase 从哪个数据库进行验证
--discover 发现集群其他节点
重点关注字段
getmore 大量的排序操作在进行
faults 需要的数据不在内存中
locked db 锁比例最高的库
index miss 索引未命中
qr|qw读写产生队列,供求失衡
2.mongotop 监控当前集合读写统计信息
--host 主机名,或者 主机名:端口
--port 端口
--username 用户(验证)
--password 密码(验证)
--authenticationDatabase 从哪个数据库进行验证
安全篇
开启认证
auth 单点 auth=true
keyfile 集群之前认证
集群认证
keyfile文件的生成(内容base64编码集[a-zA-Z+/],长度1000字节,权限chmod 600 keyFile)
openssl rand -base64 102 > .keyFile
调整权限
chmod 600 .keyFile
开启认证需要在配置文件中增加
setParameter=enableLocalhostAuthBypass=1 ## 本地例外,mongo localhost:28001
keyFile=/usr/local/mongodb/.keyFile
创建用户(创建第一个用户role要为root,db为admin)
db.createUser(
{
user:'action',#字符串
pwd:'123',#字符串
roles:[{role:'root',db:'admin'}] #数组+对象,
})
创建用户后,然后登录客户端
use admin
db.auth('admin','123')
删除用户
db.dropUser(<username>) ###删除某个用户
db.dropAllUsers() ###删除当前库的所有用户
权限
built-in roles
读写
read readWrite
管理员
dbAdmin dbOwner userAdmin clusterAdmin clusterManager clusterMonitor hostManager
备份
backup restore
全局
readAnyDatabase readWriteAnyDatabase userAdminAnyDatabase dbAdminAnyDatabase
超级用户
root
自定义角色
use admin
db.createRole(
{
role:<role_name>,
privileges:[
{resource:{db:<db_name>,collection:<coll_name>},actions:[<action_name>]}
],
roles:[{role:<role_name>,db:<db_name>}]
})
db.runCommand({userInfo:'admin',showPrivileges:1}) ##查看权限详情
修改用户名密码
需要具备 changePassword changeOwnPassword
db.changeUserPassword(<user_name>,<new_password>)
db.updateUser(<user_name>,{update_object})
权限伸缩
如何增加权限
db.grantRolesToUser(
<user_name>,
[{role:<role_name>,db:<db_name>}]
)
如何收缩权限
db.revokeRolesFromUser(
<user_name>,
[{role:<role_name>,db:<db_name>}]
)
已有 0 条评论