设为首页 收藏本站
查看: 943|回复: 0

[经验分享] mongodb之高可用架构

[复制链接]

尚未签到

发表于 2015-7-8 05:56:28 | 显示全部楼层 |阅读模式
  mongoDB 高可用
mongoDB支持在多个机器中通过异步复制达到故障转移和实现冗余。多机器中
同一时刻只有一台是用于写操作。正是由于这个情况,为mongoDB提供了数据
一致性的保障。担当主角色的机器能把读操作分发给slaves/secondaries。
mongodb 高可用可用分两种
* Master-Slave Replication
* Replica Sets
以下为两个的架构图:
DSC0000.jpg
  
DSC0001.jpg
DSC0002.jpg
  
官网中为选择这两种架构提供了以下意见:
* if using > /dev/null 2>&1 &
相关参数:
--master master mode 指定改服务角色为master
--oplogSize arg size limit (in MB) for op log 为主从复制的日志指定大少
Slave:
bin/mongod --port=9999 --logpath=/data/mongodb/mongodb.log --dbpath=/data/mongodb --directoryperdb --slave --source 192.168.10.103:9999 --only sky --slavedelay 10 >> /dev/null 2>&1 &
--slave slave mode
--source arg arg specifies master as  指定主服务器及端口
--only arg arg specifies a single database to replicate指定复制的库名字
--slavedelay arg arg specifies delay (in seconds) to be used 丛库检测主库的时间
when applying master ops to slave
--autoresync automatically resync if slave data is stale

Master:
db.printReplicationInfo() 打印状态
Slave:
db.printSlaveReplicationInfo() 打印从状态
主从间的安全性:
为其增加用户和密码,请参考:http://www.mongodb.org/display/DOCS/Master+Slave
详细请参考:http://www.mongodb.org/display/DOCS/Master+Slave

Replica Sets
Replica sets 在主从复制上做的扩展,增加了故障自动切换和自动修复成员节点。
步骤/加上参数--rest则可用web端进行数据观察/

还有其他很多相关信息。
10.106
bin/mongod --shardsvr --fork --replSet sky --port=9998 --logpath=/data/mongodb/mongodb.log --dbpath=/data/mongodb --directoryperdb --rest >> /dev/null 2>&1 &
10.107
bin/mongod --shardsvr --fork --replSet sky --port=9998 --logpath=/data/mongodb/mongodb.log --dbpath=/data/mongodb --directoryperdb --rest >> /dev/null 2>&1 &
10.103
bin/mongod --shardsvr --fork --replSet sky --port=9998 --logpath=/data/mongodb/mongodb.log --dbpath=/data/mongodb --directoryperdb --rest >> /dev/null 2>&1 &
web端图:

我这里以10.107作为主服务器
进行配置:
>config = {_id: 'sky', members: [
{_id: 0, host: '192.168.10.107:9998'},
{_id: 1, host: '192.168.10.106:9998'},
{_id: 2, host: '192.168.10.103:9998'}]
}
配置文件的语法是:
{
_id : ,
members: [
{
_id : ,
host : ,
[, priority: ]
[, arbiterOnly : true]
[, votes : ]
[, hidden : true]
[, slaveDelay : ]
[, buildIndexes : ]
[, initialSync : {
[state : 1|2,]
[_id : ,]
[name : ,]
[optime : ]}]
}
, ...
],
[settings: {
[getLastErrorDefaults: ]
[, heartbeatSleep : ]
[, heartbeatTimeout : ]
[, heartbeatConnRetries : ]
}]
}
详细参数请参考http://www.mongodb.org/display/DOCS/Replica+Set+Configuration 按需使用
>rs.initiate(config) 出现以下提示为配置成功
{
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" : 1
}
>rs.status() 查看状态
{
"set" : "sky",
"date" : ISODate("2011-01-30T05:36:00Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "192.168.10.107:9998",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"optime" : {
"t" : 1296365738000,
"i" : 1
},
"optimeDate" : ISODate("2011-01-30T05:35:38Z"),
"self" : true
},
{
"_id" : 1,
"name" : "192.168.10.106:9998",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 13,
"optime" : {
"t" : 1296365738000,
"i" : 1
},
"optimeDate" : ISODate("2011-01-30T05:35:38Z"),
"lastHeartbeat" : ISODate("2011-01-30T05:35:59Z")
},
{
"_id" : 2,
"name" : "192.168.10.103:9998",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 9,
"optime" : {
"t" : 1296365738000,
"i" : 1
},
"optimeDate" : ISODate("2011-01-30T05:35:38Z"),
"lastHeartbeat" : ISODate("2011-01-30T05:35:59Z")
}
],
"ok" : 1
}
PS:配置完后用客户端工具登录会发现 10.107 sky:PRIMARY> 其它为sky:SECONDARY> ;初始化默认id 0 为primary
状态中关键数据位
state:1表示该host是当前可以进行读写,2:不能读写
health:1表示该host目前是正常的,0:异常
可在从库上进行读写操作,发现提示为error: { "$err" : "not master and slaveok=false", "code" : 13435 }
但这运行命令查看相应状态:
>use admin
>db.runCommand({replSetGetStatus : 1});
或直接运行rs.status()
这也反应了前面所说,在物理是ms或sets 在同一时刻只有一个可读写

故障自动切换测试
把107的mongodb kill掉
状态变为
sky:SECONDARY> rs.status()
{
"set" : "sky",
"date" : ISODate("2011-01-30T06:09:51Z"),
"myState" : 2,
"members" : [
{
"_id" : 0,
"name" : "192.168.10.107:9998",
"health" : 0,
"state" : 1,
"stateStr" : "(not reachable/healthy)",
"uptime" : 0,
"optime" : {
"t" : 1296366366000,
"i" : 10
},
"optimeDate" : ISODate("2011-01-30T05:46:06Z"),
"lastHeartbeat" : ISODate("2011-01-30T06:09:34Z"),
"errmsg" : "socket exception"
},
{
"_id" : 1,
"name" : "192.168.10.106:9998",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"optime" : {
"t" : 1296366366000,
"i" : 10
},
"optimeDate" : ISODate("2011-01-30T05:46:06Z"),
"self" : true
},
{
"_id" : 2,
"name" : "192.168.10.103:9998",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 2039,
"optime" : {
"t" : 1296366366000,
"i" : 10
},
"optimeDate" : ISODate("2011-01-30T05:46:06Z"),
"lastHeartbeat" : ISODate("2011-01-30T06:09:50Z")
}
],
"ok" : 1
}
103已成为primary 一个随机切换;但107起来后依然抢回主的位置

至此,两种东西也配置了一遍。
参考文章:http://www.mongodb.org/display/DOCS/Replication

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-84187-1-1.html 上篇帖子: MongoDB源码阅读之BSON源码分析 下篇帖子: MongoDB学习资料五---MongoDB的sharding功能(转)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表