日期:2014-05-16  浏览次数:20454 次

[实验]MongoDB Replication ReplSet Shard总结

最近在做mongoDB的一些配置 也就玩玩的 照着已有事例做的

这里就总结一下做的过程 顺便就当做个人的笔记了 内容不怎么好 做完之后的简单总结 需要的可以看看

哪里有错希望能提出 谢谢^_^

?

笔记中的 --参数 都是在mongod时使用.

?

一份通用的配置文件 笔记中记录用:

使用直接用 mongod -f 配置文件位置

?

#日志存放位置
logpath=/cc/mongodb/log/mongodb.log
#数据库文件位置
dbpath=/cc/data/master
#每次启动覆盖日志,true为不覆盖
logappend=false
#不打印CPU详细信息
cpu=false 
journal=true
journalCommitInterval=100
rest=true
#以守护进程启动
fork=true
auth=false
#不添加新建一个会占用4G左右 添加这个参数占用会变小
smallfiles=true
port=27017

?更多参数请看:http://www.cnblogs.com/WilliamWang/archive/2012/10/20/configuration-options.html

?

?

Replication



?

?

简单点说是主从节点的复制

存在一个master node和一些slave node

master node可以做增删改查的操作 而slave node只能做查找 实际应用的时候就可以用多个从节点做读的负载

?

主从节点建立:

?

1、建立启动主节点:

--master(表示主节点)

--port 端口(port可以记录在配置文件里)

?

2、建立启动从节点:

--port 确定个端口(在同一台机子上别弄重了)?

--slave(表示从节点)

--source 指向主节点(本机的话localhost:主节点端口)

查看复制情况:

db.printReplicationInfo()

?

?

?

ReplSet:



?

副本集里 没有主从之分

由一个活动节点和N个备份节点组成

一旦活动节点挂了 备份节点中会选取一个接管活动节点(成为新的活动节点)

?

创建(还是一样 同机上多节点 --port 要不一样 可以在配置文件中指定):

1、建立节点并为副本集取名

? ? ?--replSet 名字(同一副本集的节点名要相同)

?

2、初始化

初始化命令只执行一次:

mongo 进入对应的节点(随便进入哪一个都行 地位是平等的)

参数={"_id":"副本集名称(和--replSet的名字相同)",members:[{_id:0,host:"127.0.0.1:1111"},{_id:1,host:"127.0.0.1:2222"},....]}

用rs.initiate(参数)

查看状态 rs.status()

?

备份节点无法查询和其他操作 因为不是活动节点 不提供服务

节点类型:

standard:常规节点 有数据副本 可以参与投票 可以成为活动节点

passive:有数据副本 参与投票 但不能成为活跃节点

arbiter:只参与投票 不接受复制数据 ?不能成为活跃节点

?

?

?

?

Shard:



?(图中的node 取名叫s1纯粹是乱起 叫 node1 也行 s没有任何意思 请不要在意)

分片:将数据拆分,将其分散到不同机器上的过程

mongodb支持自动分片

片键的选择(该键值作为数据拆分的依据)

?

建立分片:

1、选片键

2、建立并启动分片节点(mongod)

3、创建并启动配置服务器(configdb 就是一个node 和普通node建立无差别)

4、启动mongos路由进程(用mongos)

5、添加分片(详见以下的)

(生产环境至少多个mongos 3个配置服务器 ?开发时各用一个就够了)

?

第4步过程:

mongos --port XXXX --configdb localhost:port(对应的configdb的ip和端口)

添加:登陆到mongos上添加(用mongo --port mongos的端口)

注意要先 use admin 不然命令执行也许会有错误

db.runCommand({addshard:"地址:端口",allowLocal:true})

启动分片功能:

db.runCommand({"enablesharding":"数据库名"})

启动片键:

db.runCommand({"shardcollection":"数据库名.集合名",key:{"userName":1}})?

使用时连接mongos所在端口

各个切片(Shard都可以读写数据 在mongos上都可以查到各个分片的数据)?

1 楼 shingo7 1 小时前  
图画的有点不对劲,或者说有歧义