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

[经验分享] MongoDB 主从架构

[复制链接]

尚未签到

发表于 2018-10-24 12:59:10 | 显示全部楼层 |阅读模式
  主从架构
  mongodb支持传统的master-slave架构。master节点负责数据的读写,slave没有写入权限。没有自动故障转移功能,需要指定master和slave端,不推荐在生产中使用。
  主从复制的优点:

  •   从服务器可以执行查询工作,降低主服务器访问压力
  •   在从服务器执行备份,避免备份期间锁定主服务器的数据
  •   当主服务器出现故障时,可以快速切换到从服务器,减少当机时间.
  MongoDB支持在多个机器中通过异步复制到底故障转移和实现冗余,多台机器中同一时刻只有一台是用于写操作,这为mongoDB提供了数据一致性的保障.担当Primary角色的机器能把读操作分发给slave机器.
  主从架构的配置
  环境:CentOS6.5 MongoDB3.4
  master配置文件
  master.conf
dbpath=/data/mongo/master  
logpath=/var/log/mongo/master/mongodb.log
  
port=27017
  
bind_ip=127.0.0.1
  
master=true
  
fork=true  //后台运行mongodb服务
  slave配置文件
dbpath=/data/mongo/slave  
logpath=/var/log/mongo/slave/mongodb.log
  
port=27018
  
bind_ip=127.0.0.1
  
slave=true
  
fork=true //后台运行mongodb服务
  
source=127.0.0.1:27017 //配置主的ip和端口
  分别启动master和slave
mongo --config master.conf  
mongo --config slave.conf
  分别登录master和slave
mongo 127.0.0.1:27017  
mongo 127.0.0.1:27018
  master上执行show dbs
> show dbs  
admin            0.000GB
  
local            0.005GB
  slave上执行show dbs报错
> show dbs  
2018-04-19T11:31:35.982+0800 E QUERY    [thread1] Error: listDatabases failed:{
  
        "ok" : 0,
  
        "errmsg" : "not master and slaveOk=false",
  
        "code" : 13435,
  
        "codeName" : "NotMasterNoSlaveOk"
  
} :
  
_getErrorWithCode@src/mongo/shell/utils.js:25:13
  
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
  
shellHelper.show@src/mongo/shell/utils.js:782:19
  
shellHelper@src/mongo/shell/utils.js:672:15
  
@(shellhelp2):1:1
  这个报错是因为默认情况下slave上没有读写权限,可以在slave上执行下面的命令解决
> rs.slaveOk() //2.6版本设置方法不一样  
> show dbs
  
admin            0.000GB
  
local            0.000GB
  测试:
  在主库上创建数据库 masterslavetest 并创建一些测试数据
> use masterslave  
switched to db masterslave
  
> for (i = 5000; i < 100000; i++) {
  
... db.users.insert({
  
... &quot;i&quot;: i,
  
... &quot;userName&quot;: &quot;user&quot; + i,
  
...
  
... &quot;age&quot;: Math.floor(Math.random() * 120),
  
... &quot;created&quot;: new Date(),
  
... total: Math.floor(Math.random() * 100) * i
  
... })
  
... }
  
WriteResult({ &quot;nInserted&quot; : 1 })
  在两个实例上分别执行 以下命令 可以看到在两个数据库上的数据保持一致,这时在主数据库上执行CRUD等操作时,从库数据依然与主库一致
db.users.find()
DSC0000.jpg

  slave上同样执行上面的命令
DSC0001.jpg

  测试在slave节点上面添加一条数据看看
> db.mycoll.insert({&quot;i&quot;:9999,&quot;username&quot;:&quot;test&quot;,&quot;age&quot;:30})  
WriteResult({ &quot;writeError&quot; : { &quot;code&quot; : 10107, &quot;errmsg&quot; : &quot;not master&quot; } })
  可以看到slave节点没有写入权限。
  关掉master上的mongodb进程看看
> show dbs  
2018-04-19T11:58:43.464+0800 E QUERY    [thread1] Error: listDatabases failed:{
  
        &quot;ok&quot; : 0,
  
        &quot;errmsg&quot; : &quot;not master and slaveOk=false&quot;,
  
        &quot;code&quot; : 13435,
  
        &quot;codeName&quot; : &quot;NotMasterNoSlaveOk&quot;
  
} :
  
_getErrorWithCode@src/mongo/shell/utils.js:25:13
  
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
  
shellHelper.show@src/mongo/shell/utils.js:782:19
  
shellHelper@src/mongo/shell/utils.js:672:15
  
@(shellhelp2):1:1
  
> rs.slaveOk()
  
>
  
>
  
> show dbs
  
admin        0.000GB
  
local        0.000GB
  
masterslave  0.005GB
  由上面测试可以知道,master节点如果挂了,从节点不能自动接管服务,变成master角色。需要手动修改配置文件,设置为master,重启服务才能进行读写。



运维网声明 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.iyunv.com/thread-625955-1-1.html 上篇帖子: Docker mongodb Dockerfile ubuntu-fox64194167的博客 下篇帖子: MongoDB复制集架构
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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