副本集的管理(二)

太阳11个月前技术文章282


五、用户管理

MongoDB默认是不开启用户认证模式的,但是为了数据库的安全和管理,我们需要开启用户认证。

数据库用户角色:read、readWrite;
数据库管理角色:dbAdmin、dbOwner、userAdmin;
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManage;
备份恢复角色:backup、restore;
所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超级用户角色:root
内部角色:__system
1、用户权限说明

权限

说明

Read

允许用户读取指定数据库

readWrite

允许用户读写指定数据库

dbAdmin

允许用户在指定数据库执行管理函数(索引创建删除,查看统计,访问system.profile)

userAdmin

允许用户想system.user集合写入,可以在指定数据库中管理用户

clusterAdmin

只在admin数据库中可用,赋予用户所有分片和复制相关的函数的管理权限

readAnyDatabase

只在admin数据库中可用,赋予用户所有数据库的读取权限

readWriteAnyDatabase

只在admin数据库中可用,赋予用户所有数据库的读写权限

userAdminAnyDatabase

只在admin数据库中可用,赋予用户所有数据库的userAdmin权限

dbAdminAnyDatabase

只在admin数据库可用,赋予用户所有数据库的dbAdmin权限

root

只在admin数据库中可用,超级权限

2、创建用户

语法:

    1.创建用户
>use admin
> db.createUser({"user":"root","pwd":"123","roles":[{role:"root",db:"admin"}]})
Successfully added user: {
	"user" : "root",
	"roles" : [
		{
			"role" : "root",
			"db" : "admin"
		}
	]
}

    2.验证用户
> db.auth("root","123")
1

    3.查看所有创建用户
rs0:PRIMARY> use admin
switched to db admin
rs0:PRIMARY> show users
{
	"_id" : "admin.root",
	"user" : "root",
	"db" : "admin",
	"roles" : [
		{
			"role" : "root",
			"db" : "admin"
		}
	]
}
4.如果一个用户需要有备份恢复的权限,那么需要额外授予

db.createRole({role:'sysadmin',roles:[], privileges:[ {resource:{anyResource:true},actions:['anyAction']}]})
db.grantRolesToUser( "root" , [ { role: "sysadmin", db: "admin" } ]) 

具体权限如下:
rs0:PRIMARY> show users
{
    "_id" : "admin.root",
    "user" : "root",
    "db" : "admin",
    "roles" : [
	    {
		    "role" : "sysadmin",
		    "db" : "admin"
	    },
	    {
		    "role" : "root",
		    "db" : "admin"
	    }
    ]
}
3、配置文件
# cat /usr/local/repl/mongod.conf
auth = true
keyFile=/data/mongodb-3.4.18/KeyFile.file
4、注意点:
    1.root用户必须进入admin数据创建
    2.对于单独某个数据库的用户创建,需要进入指定数据库下进行创建
    3.创建超级用户后需要修改配置文件重启服务才能生效
5、集群配置用户认证
3.6版本以下:
    1.集群之间的复制增加keyFile认证
    # openssl rand -base64 756 > /data/mongodb-3.4.18/KeyFile.file
    # chmod 400 /data/mongodb-3.4.18/KeyFile.file
    
    2.修改配置文件
    # cat /usr/local/repl/mongod.conf
    auth = true
    keyFile=/data/mongodb-3.4.18/KeyFile.file
    
    3.重启服务器
    
4.0版本以上:
    1.集群之间的复制增加keyFile认证
    # openssl rand -base64 90 -out ./testKeyFile.file
    # chmod 600 testKeyFile.file                一定要更改成 600 权限,否正会报错
    
    2.修改配置文件
    # cat /usr/local/repl/mongod.conf
    auth = true
    keyFile=/data/mongodb-3.4.18/testKeyFile.file
    
    3.重启服务器

六、计算空间消耗

1、查看某个数据库统计信息

db.stats() / db.runCommand({dbStats : 1,scale : 1073741824})

rs0:PRIMARY> use test
switched to db test
rs0:PRIMARY> db.stats()
{
	"db" : "test",
	"collections" : 13,                 //集合数
	"views" : 0,
	"objects" : 106703,                 //文档数
	"avgObjSize" : 76.03043025969279,   //每个文档的平均大小(字节为单位)
	"dataSize" : 8112675,               //未压缩数据总大小;MMAPv1存储引擎下,datasize包含预分配空间和填充因子,该大小因文档减小而减小;WiredTiger存储引擎下,datasize可能要比storagesize大,该大小会随着文档的减小而减小
	"storageSize" : 2797568,            //集合占用空间总大小,该值不会随着文档的remove或者减小而减小,如果存储引擎开启compression的情况下,该值可能会比dataSize小。
	"numExtents" : 0,
	"indexes" : 14,                     //索引数目
	"indexSize" : 2560000,              //索引大小
	"fsUsedSize" : 29936922624,
	"fsTotalSize" : 37688381440,
	"ok" : 1,
	"operationTime" : Timestamp(1557390462, 1),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1557390462, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
}

db.runCommand({dbStats : 1,scale : 1073741824})         //scale指定单位为G(1024*1024*1024)
[
    {
        db: "local",                            //数据库名
        collections: 8,                         //集合数
        objects: 1225442,
        avgObjSize: 7050.300224735239,
        dataSize: 8.046379320323467,
        storageSize: 5.111701965332031,         //如果该空间大小异常大,说明该空间碎片话比较严重
        numExtents: 0,
        indexes: 6,
        indexSize: 2.25067138671875E-4,
        ok: 1.0
    }
]
2、查看某个集合的统计信息

db.xx.stats() /db.runCommand({"collStats":"oplog.rs",scale:1048576})

rs0:PRIMARY> db.dsir.stats()
{
"ns" : "test.dsir",
"size" : 2280000,               //datasize
"count" : 30000,
"avgObjSize" : 76,
"storageSize" : 737280,
"capped" : false,
"wiredTiger" : {
},
"nindexes" : 1,                 //mmapv1存储引擎
"totalIndexSize" : 675840,      //index大小
"indexSizes" : {
"_id_" : 675840
}
}
db.runCommand({"collStats":"oplog.rs",scale:1048576})          //查看oplog.rs集合的大小,scale指定单位
[
    {
        ns: "local.oplog.rs",
        count: 1251026,
        size: 8200,
        avgObjSize: 6873,
        storageSize: 5233,
        capped: true,
        max: -1,
        maxSize: 8192,
        sleepCount: 0,
        sleepMS: 0,
        guardLastUpdate: 1562914335,
        oplogDeleteGuard: 1562914291,
        oplogMinOptime: 1562916035,


相关文章

EMR集群主机/opt/bignode目录占用巨大并持续增长

EMR集群主机/opt/bignode目录占用巨大并持续增长

问题现象:如下qa环境集群中,master节点出现如下磁盘告警处理步骤:登陆到该节点服务器,首先定位是哪个目录占用系统盘空间较大定位是由于:/opt/bignode/blocklet_indexing...

k8s Krew 插件开发详解

前言:前面我们已经了解过krew插件的作用以及一些比较常用的插件,接下来我们讲一下如何开发krew插件。1、熟悉kubens 插件在开发krew插件之前,我们先通过kubens插件来熟悉krew,我们...

CDH实操--HDFS高可用设置

CDH实操--HDFS高可用设置

1 概述        在HDFS集群中NameNode存在单点故障(SPOF),对于只有一个NameNode的集群,如果NameNode机...

压测实操--TestDFSIO压测hdfs读写方案

压测实操--TestDFSIO压测hdfs读写方案

TestDFSIO主要是对hdfs的I/O性能进行测试,通过使用MapReduce作业来完成测试,作为并行读写文件进行I/O性能测试。每个map任务用于读或写每个文件,map的输出用于收集与处理文件相...

WAF 透明接入模式

WAF 透明接入模式

透明接入模式只需将需要防护的网站信息添加到WAF,无需修改域名的DNS解析设置,即可实现WAF防护。如果您的源站服务器为ECS服务器或者部署在阿里云公网SLB上,那么除了使用CNAME接入模式,还可以...

Hadoop 重新编译-解决root用户提交任务报错Running as root is not allowed

Hadoop 重新编译-解决root用户提交任务报错Running as root is not allowed

本文主要解决Hadoop root用户无法提交问题Running as root is not allowedLinux架构:arm或者x86都可以Jdk版本:jdk1.8cmake版本:3.19Ha...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。