MongoDB/主从/副本集

主从复制:
主节点写入数据,从通过读取主的oplog得到复制信息,开始复制数据并且将复制信息写入到自己的oplog。oplog是一个特殊的固定大小的collection,固定大小意味着,新的操作记录的写入会导致最老的操作记录的删除,以保证oplog的大小。这个值如果不去设置,会自动根据硬盘大小的5%来设定。
Local库容量设置。我们知道Local库主要存放oplog,oplog用于数据的同步和复制,oplog同样要消耗内存的,因此选择一个合适的oplog值很重要。
如果是高插入高更新,并带有延时从库的副本集需要一个较大的oplog值(比如50G);如果没有延时从库,并且数据更新速度不频繁,则可以适当调小oplog值(比如5G)。总之,oplog值大小的设置取决于具体业务应用场景。
master启动配置文件:

port=27018 #指定端口
fork=true #后台运行
dbpath=/home/map/mongodb/data #规定数据库的位置
logpath=/home/map/mongodb/logs/mongodb.log #规定数据库的日志文件
master=true #设置主
# bind_ip=127.0.0.1,192.168.0.4 #允许的地址 为了安全
nohttpinterface=true #禁止http访问

slave启动配置文件:

port=27018 #指定端口
fork=true #后台运行
dbpath=/home/map/mongodb/mongo #规定数据库的位置
logpath=/home/map/mongodb/mlog/mongodb.log #规定数据库的日志文件
slave=true #声明从
source=192.168.0.4:27018 #规定从属于哪个ip  注意:ip是主服务器的  最好用内网ip
# bind_ip=127.0.0.1,192.168.0.4 #允许的地址 为了安全
nohttpinterface=true #禁止http访问

测试:

测试 主执行
use word
db.wsd.save({name:”aaa”})
db.wsd.find()

在从服务器执行
show dbs;
local  0.078GB
word   0.078GB  #如果出现主的数据  说明同步成功
use word
db.wsd.find()  #查到数据说明同步成功
{ “_id” : ObjectId(“55cc43470278a3d7b1c6f2c0″), “name” : “aaa” }

主从复制的其他设置项:

  • only 从节点指定复制某个数据库,默认是复制全部数据库
  • slavedelay 从节点设置主数据库同步数据的延迟(单位是秒)
  • fastsync 从节点以主数据库的节点快照为节点启动从数据库
  • autoresync 从节点如果不同步则从新同步数据库(即选择当通过热添加了一台从服务器之后,从服务器选择是否更新主服务器之间的数据)
  • oplogSize 主节点设置oplog的大小(主节点操作记录存储到local的oplog中)

动态的添加或删除从节点:
我们在我们上面的从节点的local数据库中,存在一个集合sources。这个集合就保存了我这个服务器的主服务器。


挂接主服务:
db.sources.insert({“host”:”127.0.0.1:8888”})
删除已经挂接的主节点:
db.sources.remove({“host”:”127.0.0.1:8888”})

副本集:

  • 通常在部署 MongoDB 时, 哪怕目前只用到一个实例, 但为了方便扩展也可以将其部署为一个只有一个成员的副本集. 这样扩展规模时就不需要停机创建副本集而直接添加成员即可。
  • 副本集没有特定的主数据库。如果哪个Primary数据库宕机了,集群中就会推选出一个从属库作为主库。原来的Primary库恢复后成为从属库。
  • 在副本集的环境中,要是所有的Secondary都宕机了,只剩下Primary。最后Primary会变成Secondary,不能提供服务。所以最小的副本集也应该具备一个primary节点和两个secondary节点。两个节点的副本集不具备真正的故障转移能力。
  • 副本集要求参与选举投票(vote)的节点数为奇数,当我们只有两个(或偶数)的节点参与仲裁,这时需引入仲裁者(arbiter)。因为偶数情况下如果打成平局,那么每个成员都需要再等待30秒才能开始下一次选举。
  • 最大50节点,但是只能有7个投票节点,其他是non-voting节点。
  • 当集群中有1个primary节点,1个secondary节点和1个arbit节点,如果primary节点挂了,secondary节点也会自动成为primary节点。利用仲裁节点可以实现最少的机器开销达到两个节点热备的效果。
  • 挑有数据的机器进行初始化,如果一个副本集有大于一台机器有数据则不能创建副本集。
  • 默认情况下,Secondary是不提供服务的,即不能读和写。在特殊情况下需要读的话则需要:rs.slaveOk() ,只对当前连接有效。

配置文件:

port=27018 #指定端口
fork=true #后台运行
dbpath=/home/map/mongodb/data #规定数据库的位置
logpath=/home/map/mongodb/logs/mongodb.log #规定数据库的日志文件
replSet=replSetName #设置副本集的名字,同一个副本集成员都用一样的名字

登录验证:
当你的MongoDB启用了身份验证时,在多节点环境(副本、分片)下,mongoDB强制副本成员必要提供节点间验证的凭证才能相互通信。
在初始化节点

openssl rand -base64 21 > /usr/local/mongodb/keyfile
chmod 600 /usr/local/mongodb/keyfile

把keyfile文件复制到所有节点的/usr/local/mongodb/keyfile目录下,修改文件权限为600
在上面的配置文件里添加

auth=true
keyFile=/usr/local/mongodb/keyfile

初始化:

config={"_id":"replSetName",
     "members":[
         {"_id":0,"host":"ip1:port1","priority":1},  
         {"_id":1,"host":"ip2:port2","priority":1},  
         {"_id":2,"host":"ip3:port3","priority":1},  
     ]
}
rs.initiate(config);//初始化副本集就完成了
//"_id": 副本集的名称
//"members": 副本集的服务器列表
//"_id": 服务器的唯一ID
//"host": 服务器主机
//"priority": 是优先级,默认为1,优先级0为被动节点,不能成为活跃节点。//优先级不位0则按照有大到小选出活跃节点。
//"arbiterOnly": true/false 仲裁节点,只参与投票,不接收数据,也不能成为活跃节点。
//buildIndexes: 是否可以建立索引
//slaveDelay:延迟多长时间开始复制最新数据

增删节点:
在活跃的主机上

rs.status()
//查看副本集状态
rs.add("ip:port")
//删除副本
rs.remove("ip:port")
//查看配置
rs.config()
#重新加载配置文件,强制了副本集进行一次选举,优先级高的成为Primary。
cfg=rs.conf()
cfg.members[1].priority=2
rs.reconfig(cfg)

读写分离:
读写分离是通过修改程序的driver的,应用程序驱动通过read reference来设定如何对副本集进行读取操作,默认的,客户端驱动所有的读操作都是直接访问Primary节点。

  • primary
    主节点,默认模式,读操作只在主节点,如果主节点不可用,报错或者抛出异常。
  • primaryPreferred
    首选主节点,大多情况下读操作在主节点,如果主节点不可用,如故障转移,读操作在从节点。
  • secondary
    从节点,读操作只在从节点, 如果从节点不可用,报错或者抛出异常。
  • secondaryPreferred
    首选从节点,大多情况下读操作在从节点,特殊情况(如单主节点架构)读操作在主节点。
  • nearest
    最邻近节点,读操作在最邻近的成员,可能是主节点或者从节点。

参考 :
http://www.cnblogs.com/qiyebao/p/5157615.html
http://www.cnblogs.com/zhoujinyi/p/3554010.html
http://www.jianshu.com/p/5b97ec07a279

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355

推荐阅读更多精彩内容

  • 分布式系统面临的第一个问题就是数据分布,即将数据均匀地分布到多个存储节点。另外,为了保证可靠性和可用性,需要将数据...
    olostin阅读 4,578评论 2 26
  • NoSql数据库优缺点 在优势方面主要体现在下面几点: 简单的扩展 快速的读写 低廉的成本 灵活的数据模型 在不足...
    dreamer_lk阅读 2,730评论 0 6
  • 个人自行阅读时候,翻译的文档。因为比较渣,如果有更合理或者错误的地方烦劳告知,我会做修改。Oracle Data ...
    窝窝的小黑屋阅读 1,225评论 0 3
  • 繁华尘世中,谁能为我织就一帘幽梦。 梦里的山清水秀,云淡风清, 梦里有幽幽弯月,点点繁星。 春有时鸣山涧的飞鸟, ...
    陌上花开V缓缓归矣阅读 284评论 0 0
  • 此刻 远方一无所有 你静下脚步 心中长出迷雾 雨后 秋街有消瘦的树 像你转身后 冷却的领悟 穿透另一场雨 与你相遇...
    杨昊田阅读 512评论 67 50