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()
备节点查看数据,先执行如下命令,否则会报错
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"}]}) #创建用户
内置角色:
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"}]})