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

[经验分享] mongodb 主从复制与Replica Sets(副本集)

[复制链接]

尚未签到

发表于 2018-10-27 12:24:12 | 显示全部楼层 |阅读模式
  master : 192.168.1.102  (主机名是a1)
  slave  : 192.168.1.104   (主机名是a2)
  在master的机器上开启mongodb,
  [root@a1 bin]# ./mongod --master --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/dblogs --fork
  --master这参数是主服务必须带的参数
  在slave的服务器上开启mongodb,
  [root@a2 bin]# ./mongod --slave --source 192.168.1.102:27017  --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/logspath  --fork
  --slave      表示从服务器
  --source 192.168.1.102:27017  指向主服务的ip和端口
  接下来进行测试
  进入主服务器的mongodb
  [root@a1 bin]# ./mongo
  MongoDB shell version: 2.4.3
  connecting to: test
  添加一个数据
  > db.c1.insert({name:"user1"})
  > db.c1.find();
  { "_id" : ObjectId("5197343611a4e2f4a90b09e8"), "name" : "user1" }
  >
  进入从服务器的mongodb
  [root@a2 bin]# ./mongo
  MongoDB shell version: 2.4.3
  connecting to: test
  > db.c1.find();
  { "_id" : ObjectId("5197343611a4e2f4a90b09e8"), "name" : "user1" }
  >
  说明我们的主从配置成功。
  由于主从配置中无法设置用户验证,所以安全性比较差(不过我们可以在iptables上设置允许某ip访问该端口),下面介绍 Replica Sets 复制(副本集),这是比较安全,而且高可用性,可以自动切换,而且保证数据不丢失。
  Replica Sets 复制(副本集)
  我们设置三个mongod 事例
  A:192.168.1.102:27017
  B:192.168.1.104:20001
  C:192.168.1.104:20002
  在同一台服务器上可以挂载多个mongod,只要端口不相同即可。
  首先,创建副本集的key,必须设置key的权限为600,否则后面会报错
  A:[root@a2 bin]# echo "123456" >  /usr/local/mongodb/key/ro
  [root@a2 bin]# chmod 600  /usr/local/mongodb/key/ro
  B:[root@a1 bin]# echo "123456" >  /usr/local/mongodb/key/r1
  [root@a1 bin]# chmod 600  /usr/local/mongodb/key/ro
  C: [root@a1 bin]# echo "123456" >  /usr/local/mongodb/key/r2
  [root@a1 bin]# chmod 600  /usr/local/mongodb/key/r2
  分别开启mongod
  A: [root@a2 bin]# ./mongod --replSet rs1 --keyFile=/usr/local/mongodb/key/r0     --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/logspath --nojournal --fork
  B:  [root@a1 bin]# ./mongod --replSet rs1 --keyFile=/usr/local/mongodb/key/r0  --dbpath=/usr/local/mongodb/data/d1/ --logpath=/usr/local/mongodb/log/log1 --port 20001 --fork
  C:  [root@a1 bin]# ./mongod --replSet rs1 --keyFile=/usr/local/mongodb/key/r1  --dbpath=/usr/local/mongodb/data/d2/ --logpath=/usr/local/mongodb/log/log2 --port 20002 --fork
  随便进入一个mongodb中进行副本集的配置
  config_rs1 = {_id: 'rs1', members: [
  {_id: 0, host: '192.168.1.102:20001', priority:1},
  {_id: 1, host: '192.168.1.102:20002',priority:2},
  {_id: 2, host: '192.168.1.104:27017',priority:3}
  ]}
  > rs.initiate(config_rs1);
  由于A的priority=3,这A作为主的服务器,其他的服务器作为从服务器,当A服务器出现故障,这B就会自动替代A服务器(priority=2,权限第二大),当A恢复后,数据会自动备份到A,并且A还将作为主服务器。
  如下,当我们分别进入A,B,C mongodb中,会出现如下情况,这表示我们副本集配置成功。
  A:
  [root@a2 bin]# ./mongo
  MongoDB shell version: 2.4.3
  connecting to: test
  rs1:PRIMARY>
  B:
  [root@a1 bin]# ./mongo --port 20001
  MongoDB shell version: 2.4.3
  connecting to: 127.0.0.1:20001/test
  rs1:SECONDARY>
  C:
  [root@a1 bin]# ./mongo --port 20002
  MongoDB shell version: 2.4.3
  connecting to: 127.0.0.1:20002/test
  rs1:SECONDARY>
  如果B,C查看不了数据的话 ,输入 rs.slaveOk();就可以解决
  rs1:SECONDARY> rs.slaveOk();
  查看副本集的信息:
  rs1:PRIMARY> db.printReplicationInfo();

  configured oplog>  log length start to end: 1354secs (0.38hrs)
  oplog first event time:  Sat May 18 2013 02:04:28 GMT-0700 (PDT)
  oplog last event time:   Sat May 18 2013 02:27:02 GMT-0700 (PDT)
  now:                     Sat May 18 2013 06:28:27 GMT-0700 (PDT)
  字段说明

  configured oplog>  log length start to end: oplog日志的启用时间段
  oplog first event time: 产生时间oplog last
  event time: 最后一个事务日志的产生时间
  now: 现在的时间
  查看副本集的配置信息:
  rs1:PRIMARY> use local
  rs1:PRIMARY> db.system.replset.find()


运维网声明 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-627126-1-1.html 上篇帖子: mongodb 系统性能篇(2) 下篇帖子: MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB数据
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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