千家信息网

mongodb 集群基础知识

发表于:2024-11-25 作者:千家信息网编辑
千家信息网最后更新 2024年11月25日,http://blog.csdn.net/luonanqin/article/details/8497860 Mongodb集群搭建的三种方式NoSQL = Not Only SQL mongodb存
千家信息网最后更新 2024年11月25日mongodb 集群基础知识

http://blog.csdn.net/luonanqin/article/details/8497860 Mongodb集群搭建的三种方式


NoSQL = Not Only SQL mongodb存储方式是文档式存储,并不是Key-Value形式。


Mongodb的三种集群方式的搭建:Replica Set / Sharding / Master-Slaver


Replica Set 副本集集群原理:(最简单的集群方式)

主节点,备节点,仲裁节点。主备节点存储数据,仲裁节点不存储数据。

客户端同时连接主节点与备节点,不连接仲裁节点。


默认设置下,主节点提供所有增删查改服务,备节点不提供任何服务。但是可以通过设置使备节点提供查询服务,这样就可以减少主节点的压力,当客户端进行数据查询时,请求自动转到备节点上。这个设置叫做Read Preference Modes,同时Java客户端提供了简单的配置方式,可以不必直接对数据库进行操作。


仲裁节点是一种特殊的节点,它本身并不存储数据,主要的作用是决定哪一个备节点在主节点挂掉之后提升为主节点,所以客户端不需要连接此节点。这里虽然只有一个备节点,但是仍然需要一个仲裁节点来提升备节点级别。


测试:一个是往主节点插入数据,能从备节点查到之前插入的数据(查询备节点可能会遇到某个问题,可以自己去网上查查看)。二是停掉主节点,备节点能变成主节点提供服务。三是恢复主节点,备节点也能恢复其备的角色,而不是继续充当主的角色。二和三都可以通过rs.status()命令实时查看集群的变化。



Sharding 分片集群:

和Replica Set类似,都需要一个仲裁节点,但是Sharding还需要配置节点和路由节点。就三种集群搭建方式来说,这种是最复杂的。


Master-Slaver 主备方式

官方已经不推荐这种方式,搭建方式也相对简单。


用过的人应该知道mongodb吃内存的问题,解决办法只能通过ulimit来控制内存使用量,但是如果控制不好的话,mongodb会挂掉。



mongodb的安装

执行脚本 install_mongodb_20160510.sh 即可安装mongodb服务。详细请看redme


mongodb集群的安装


常用命令

mongodb的启动

/opt/server/mongodb/bin/mongod -f /opt/server/mongodb/mongodb.conf

/opt/server/mongodb/bin/mongod -f /opt/server/mongodb/mongodb.conf --fork #单机环境/与配置文件有关系,具体请参看配置文件


mongodb的停止

kill -15 pid

pkill mongod


mongodb登录方式

/opt/server/mongodb/bin/mongo 192.168.1.200:27017


查看状态

rs.status()


删除节点:

rs.remove("mongodb13.kk.net:27019") #可以删除节点


添加节点:

rs.addArb("mongodb13.kk.net:27019") #可以添加节点,但这样添加的节点为仲裁


mongodb副本集如何添加一个节点使其成为备节点呢?

在主节点上操作

use admin

cfg={ _id:"wlb", members:[ {_id:0,host:'192.168.11.215:27017',priority:2}, {_id:1,host:'192.168.11.187:27017',priority:1},{_id:2,host:'192.168.11.25:27017',arbiterOnly:true}] };

rs.reconfig(cfg); #使配置生效

rs.status()



查看所有数据库

show dbs


MongoDB 创建数据库

use znx

db

show dbs #会发现创建的数据库不在列表中,要想显示需要插入数据


备节点若想查看数据库,需要执行如下命令,否则报13435错误

rs.slaveOk(true)



插入数据

db.znx.insert({"name":"dengyong"})

show dbs #会显示出znx数据库,备节点也会显示


查看全部数据表

show collections


查看全部表记录

db.znx.find()


删除pushlog这张表

> db.Pushlog.drop() #具体操作,输入db.Pushlog.d后按table键,看有啥命令

true


备节点查看数据,先执行如下命令,否则会报错

rs.slaveOk(true)


MongoDB 删除数据库

use znx

db.dropDatabase() #执行删除命令

show dbs #znx数据库已删除



参考链接:http://blog.csdn.net/chen88358323/article/details/50206651

mongodb创建用户

use admin

db.createUser({user:"wjs",pwd:"wjs",roles:[{role:"userAdminAnyDatabase",db:"admin"}]}) #创建用户


show users #查看用户 需要先use数据库


内置角色:

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

具体角色:

Read:允许用户读取指定数据库

readWrite:允许用户读写指定数据库

dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户

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

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

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

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

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

root:只在admin数据库中可用。超级账号,超级权限


db.system.users.find() #查看用户

show users



创建一个数据库znx

use znx

创建一个普通用户wxc

db.createUser({user:"wxc",pwd:"wxc",roles:[{role:"readWrite",db:"znx"}]})


释放掉MongoDB占用的内存

重启服务来释放内存,或 使用MongoDB内置的closeAllDatabases命令达到目的:

mongo> use admin

mongo> db.runCommand({closeAllDatabases:1})


监控MongoDB的内存使用情况

db.serverStatus().mem


0