副本集的搭建

创建多实例目录

  1. [root@redis03 ~]# mkdir /server/mongodb/2801{7,8,9}/{conf,logs,pid,data} -p

编辑多实例配置文件

  1. [root@redis03 ~]# vim /server/mongodb/28017/conf/mongo.conf
  2. systemLog:
  3. destination: file
  4. logAppend: true
  5. path: /server/mongodb/28017/logs/mongodb.log
  6. #path: /server/mongodb/28018/logs/mongodb.log
  7. #path: /server/mongodb/28019/logs/mongodb.log
  8. storage:
  9. journal:
  10. enabled: true
  11. dbPath: /server/mongodb/28017/data
  12. #dbPath: /server/mongodb/28018/data
  13. #dbPath: /server/mongodb/28019/data
  14. directoryPerDB: true
  15. wiredTiger:
  16. engineConfig:
  17. cacheSizeGB: 1
  18. directoryForIndexes: true
  19. collectionConfig:
  20. blockCompressor: zlib
  21. indexConfig:
  22. prefixCompression: true
  23. processManagement:
  24. fork: true
  25. pidFilePath: /server/mongodb/28017/pid/mongod.pid
  26. #pidFilePath: /server/mongodb/28018/pid/mongod.pid
  27. #pidFilePath: /server/mongodb/28019/pid/mongod.pid
  28. net:
  29. port: 28017
  30. #port: 28018
  31. #port: 28019
  32. bindIp: 127.0.0.1,172.16.1.121
  33. replication:
  34. #类似于binlog,指定大小
  35. oplogSizeMB: 1024
  36. #副本记得名称,集群名称
  37. replSetName: dba

启动多实例

  1. [root@redis03 ~]# chown -R mongo.mongo /server/mongodb/
  2. [root@redis03 ~]# su - mongo
  3. [mongo@redis03 ~]$ mongod -f /server/mongodb/28017/conf/mongo.conf
  4. [mongo@redis03 ~]$ mongod -f /server/mongodb/28018/conf/mongo.conf
  5. [mongo@redis03 ~]$ mongod -f /server/mongodb/28019/conf/mongo.conf
  6. #验证
  7. [mongo@redis03 ~]$ netstat -lntp
  8. tcp 0 0 172.16.1.121:27017 0.0.0.0:* LISTEN 20881/mongod
  9. tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 20881/mongod
  10. tcp 0 0 172.16.1.121:28017 0.0.0.0:* LISTEN 328121/mongod
  11. tcp 0 0 127.0.0.1:28017 0.0.0.0:* LISTEN 328121/mongod
  12. tcp 0 0 172.16.1.121:28018 0.0.0.0:* LISTEN 321218/mongod
  13. tcp 0 0 127.0.0.1:28018 0.0.0.0:* LISTEN 321218/mongod
  14. tcp 0 0 172.16.1.121:28019 0.0.0.0:* LISTEN 32981/mongod
  15. tcp 0 0 127.0.0.1:28019 0.0.0.0:* LISTEN 32981/mongod

登录多实例

  1. [mongo@redis03 ~]$ mongo 172.16.1.121:28017
  2. [mongo@redis03 ~]$ mongo 172.16.1.121:28018
  3. [mongo@redis03 ~]$ mongo 172.16.1.121:28019

初始化副本集

  1. #配置副本集
  2. config = {
  3. _id : "dba",
  4. members : [
  5. {_id:0, host:"172.16.1.121:28017"},
  6. {_id:1, host:"172.16.1.121:28018"},
  7. {_id:2, host:"172.16.1.121:28019"},
  8. ]
  9. }
  10. #读取副本集
  11. rs.initiate(config)

查看副本集状态

  1. dba:PRIMARY> rs.status()
  2. # 健康状态 1表示正常 0表示故障
  3. "health" : 1,
  4. # 表示状态 1是主库 2是从库 3表示恢复数据中 7表示投票者 8表示down机
  5. "state" : 1,
  6. # 标注是主库还是从库
  7. "stateStr" : "PRIMARY",
  8. # 集群启动时间
  9. "uptime" : 579,
  10. # 另一种格式的时间
  11. "optime" : {
  12. "ts" : Timestamp(15905121779, 1),
  13. "t" : NumberLong(1)
  14. },
  15. # 上一次心跳传过来数据的时间
  16. "optimeDate" : ISODate("2020-05-27T15:36:19Z"),
  17. # 检测上一次心跳时间
  18. "lastHeartbeat" : ISODate("2020-05-27T15:36:25.815Z"),
  19. #查看集群与主节点
  20. dba:PRIMARY> rs.isMaster()
  21. #oplog信息
  22. dba:PRIMARY> rs.printReplicationInfo()
  23. configured oplog size: 1024MB
  24. log length start to end: 1543secs (0.43hrs)
  25. oplog first event time: Wed May 27 2020 23:26:46 GMT+0800 (CST)
  26. oplog last event time: Wed May 27 2020 23:52:29 GMT+0800 (CST)
  27. now: Wed May 27 2020 23:52:38 GMT+0800 (CST)
  28. #查看延时从库信息
  29. dba:PRIMARY> rs.printSlaveReplicationInfo()
  30. source: 10.0.0.121:28018
  31. syncedTo: Wed May 27 2020 23:54:19 GMT+0800 (CST)
  32. 0 secs (0 hrs) behind the primary
  33. source: 10.0.0.121:28019
  34. syncedTo: Wed May 27 2020 23:54:19 GMT+0800 (CST)
  35. 0 secs (0 hrs) behind the primary
  36. #打印副本集配置文件
  37. dba:PRIMARY> rs.config()

主库创建数据,从库查看数据

  1. # 主库插入数据
  2. db.table.insertMany([{"name":"gcc","age":10},{"name":"zzy","age":9},{"name":"hxh","age":11}])
  3. # 主库查看数据
  4. dba:PRIMARY> show tables
  5. table
  6. dba:PRIMARY> db.table.find()
  7. # 从库查看数据
  8. dba:SECONDARY> show databases
  9. 2020-05-27T23:43:40.020+0800 E QUERY [thread1] Error: listDatabases failed:{
  10. "operationTime" : Timestamp(1590594219, 1),
  11. "ok" : 0,
  12. "errmsg" : "not master and slaveOk=false",
  13. "code" : 13435,
  14. "codeName" : "NotMasterNoSlaveOk",
  15. "$clusterTime" : {
  16. "clusterTime" : Timestamp(1590594219, 1),
  17. "signature" : {
  18. "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
  19. "keyId" : NumberLong(0)
  20. }
  21. }
  22. }
  23. # 连查看库都会被拒绝,因为从库不提供读写
  24. # 执行命令(从库都要执行)
  25. dba:SECONDARY> rs.slaveOk()
  26. dba:SECONDARY> show databases
  27. admin 0.000GB
  28. cluster 0.000GB
  29. config 0.000GB
  30. local 0.000GB
  31. # 每次重新连接都要执行以上命令才能读取
  32. # 可以配置永久生效
  33. [root@redis03 ~]# vim ~/.mongorc.js
  34. rs.slaveOk()

副本集实现高可用

故障切换测试

  1. # 主库使用 localhost 连接,执行关闭数据库的操作(使用 ip 连接是不能执行的)
  2. [mongo@redis03 ~]$ mongo localhost:28017
  3. dba:PRIMARY> use admin
  4. switched to db admin
  5. dba:PRIMARY> db.shutdownServer()
  6. # 查看其他从库中会有一台从库,变成主库
  7. # 故障转移实现了,但是我的程序连接 mongodb 的配置还需要修改怎么办??

程序怎么实现连接切换的

  1. 1.如果使用的是单节点,那么程序里面直接配置写死mongodb ip 和端口即可
  2. 2.如果是副本集集群的形式,在程序里面写的就是一个列表,列表里面写
  3. mongo_reip = [172.16.1.121:28017,172.16.1.121:28018,172.16.1.121:28019]
  4. 程序会去使用命令询问谁是主节点,得到结果后在写入数据

恢复主库

  1. #重新启动主库,他会自动判断谁是主库,自动成为新的从库
  2. 注意:三台节点,只能坏一台,坏两台就有问题了

指定节点提升优先级

  1. # 原来的主库配置高,性能好,想恢复之后还让他是主库怎么办
  2. # 查看优先级
  3. dba:PRIMARY> rs.conf()
  4. # 权重值
  5. "priority" : 1,
  6. # 临时修改配置文件
  7. dba:PRIMARY> config=rs.conf()
  8. # 修改配置文件中 id 为 0 的priority值为 10
  9. dba:PRIMARY> config.members[0].priority=10
  10. # 配置文件生效
  11. dba:PRIMARY> rs.reconfig(config)
  12. # 新版本调整完直接切换主库,旧版本需要主动降级
  13. dba:PRIMARY> rs.stepDown()
  14. # 恢复权重
  15. dba:PRIMARY> config=rs.conf()
  16. dba:PRIMARY> config.members[0].priority=1
  17. dba:PRIMARY> rs.reconfig(config)

扩容与删减节点

配置一台新的节点

  1. # 创建目录
  2. [root@redis03 ~]# mkdir /server/mongodb/28016/{conf,logs,pid,data} -p
  3. # 配置新节点
  4. [root@redis03 ~]# cp /server/mongodb/28017/conf/mongo.conf /server/mongodb/28016/conf/
  5. [root@redis03 ~]# sed -i 's#28017#28016#g' /server/mongodb/28016/conf/mongo.conf
  6. # 启动新节点
  7. [root@redis03 ~]# chown -R mongo.mongo /server/mongodb/
  8. [root@redis03 ~]# su - mongo
  9. [mongo@redis03 ~]$ mongod -f /server/mongodb/28016/conf/mongo.conf

将新节点加入集群

  1. #主库操作
  2. dba:PRIMARY> rs.add("172.16.1.121:28016")
  3. {
  4. "ok" : 1,
  5. "operationTime" : Timestamp(1590597530, 1),
  6. "$clusterTime" : {
  7. "clusterTime" : Timestamp(1590597530, 1),
  8. "signature" : {
  9. "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
  10. "keyId" : NumberLong(0)
  11. }
  12. }
  13. }
  14. # 查看集群状态
  15. dba:PRIMARY> rs.status()
  16. # 注意:四个节点也不能坏两台机器

删除节点

  1. # 主库操作
  2. dba:PRIMARY> rs.remove("172.16.1.121:28016")
  3. {
  4. "ok" : 1,
  5. "operationTime" : Timestamp(1590597842, 1),
  6. "$clusterTime" : {
  7. "clusterTime" : Timestamp(1590597842, 1),
  8. "signature" : {
  9. "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
  10. "keyId" : NumberLong(0)
  11. }
  12. }
  13. }
  14. # 查看集群状态
  15. dba:PRIMARY> rs.status()

添加仲裁节点

  1. # 创建目录
  2. [root@redis03 ~]# mkdir /server/mongodb/28015/{conf,logs,pid,data} -p
  3. # 配置新节点
  4. [root@redis03 ~]# cp /server/mongodb/28017/conf/mongo.conf /server/mongodb/28015/conf/
  5. [root@redis03 ~]# sed -i 's#28017#28015#g' /server/mongodb/28015/conf/mongo.conf
  6. # 启动新节点
  7. [root@redis03 ~]# chown -R mongo.mongo /server/mongodb/
  8. [root@redis03 ~]# su - mongo
  9. [mongo@redis03 ~]$ mongod -f /server/mongodb/28015/conf/mongo.conf
  10. # 主库操作加入仲裁节点
  11. dba:PRIMARY> rs.addArb(("10.0.0.121:28015")
  12. # 查看该库是否有数据
  13. # 注意,五个节点时,可以坏两个节点

MongoDB 副本集搭建 & 副本集扩容的更多相关文章

  1. MongoDB Sharding(二) -- 搭建分片集群

    在上一篇文章中,我们基本了解了分片的概念,本文将着手实践,进行分片集群的搭建 首先我们再来了解一下分片集群的架构,分片集群由三部分构成: mongos:查询路由,在客户端程序和分片之间提供接口.本次实 ...

  2. Mongodb副本集搭建经验

    一.环境配置经验 1.一般安装的副本集的时候,主实例可以有数据库和用户:从实例不能.仲裁机不能有任何数据库包括用户 2.搭建副本集的时候Host使用外网IP,否则使用Mongodb VUE 1.6.9 ...

  3. MongoDB副本集搭建及备份恢复

    一.MongoDB副本集(repl set)介绍 早起版本使用master-slave,一主一从和MySQL类似,但slave在此架构中为只读,当主库宕机后,从库不能自动切换为主: 目前已经淘汰了ma ...

  4. MongoDb的副本集搭建教程(个人操作笔记)

    很多公司都在用MongoDb ,一直没有时间研究,最近好好的整了一下,做下笔记,直接上操作步骤,关于Mongodb的理论知识可以搜索其他资料,也可以联系我索取 mongoDB官方已经不建议使用主从模式 ...

  5. MongoDB集群搭建-副本集

    MongoDB集群搭建-副本集 概念性的知识,可以参考本人博客地址: 一.Master-Slave方案: 主从: 二.Replica Set方案: 副本集: 步骤:(只要按步骤操作,100%成功) 1 ...

  6. mongodb副本集搭建过程中的问题和解决技巧

    在我以往的认知中,一个系统一旦正式上线,多半不会轻易的迁移服务器,尤其是那种涉及到多个关联应用,涉及到多台硬件服务器的系统,因为这种迁移将是牵一发而动全身的. 但是,却仍然有这种情况存在,就如我这几天 ...

  7. mongodb安装及副本集搭建

    mongodb下载地址:https://www.mongodb.com/dr/fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.7.tg ...

  8. MongoDB 3.4 高可用集群搭建(二)replica set 副本集

    转自:http://www.lanceyan.com/tech/mongodb/mongodb_repset1.html 在上一篇文章<MongoDB 3.4 高可用集群搭建(一):主从模式&g ...

  9. mongodb配置副本集(多台服务器间的副本集搭建) replica[ˈrɛplɪkə]

    副本集具有多个副本保证了容错性,就算一个副本挂掉了还有很多副本存在,并且解决了“主节点挂掉了,整个集群内会自动切换”的问题.我们来看看mongoDB副本集的架构图: 由图可以看到客户端连接到整个副本集 ...

随机推荐

  1. linux中进制转换

    方式一:使用$[]或$(()) 格式为:$[base#number]或$((base#number)),其中base为进制,number为对应进制数. 这种方式输入2进制.16进制等,但只能输出为10 ...

  2. 命令模式与go-redis command设计

    目录 一.什么是命令(Command)模式 二.go-redis command相关代码 三.总结 一.什么是命令(Command)模式 命令模式是行为型设计模式的一种,其目的是将一个请求封装为一个对 ...

  3. 2V升5V的升压芯片,两款芯片电路图

    2V的输入电压,是可以用来做5V输出的升压电路,但是2V的供电设备很少,不知道还有什么东西是2V电压的,还需要升压到5V的电路系统. 两款2V升5V的芯片电路图: 第1, PW5100升压芯片,输出电 ...

  4. Python安装教程之anaconda篇

    [导读]我们知道,Python的功能非常强大.那么对于迫切想学习Python的新手同学来说,第一件事情可能需要了解python是什么?能用来做什么?语法结构是怎样的?这些我们几句话很难介绍清楚,后续会 ...

  5. 阿里云OSS对象存储服务(一)

    一.开通"对象存储OSS"服务 申请阿里云账号 实名认证 开通"对象存储OSS"服务 进入管理控制台 二.控制台使用 1.创建Bucket 命名:guli-fi ...

  6. 转 14 jmeter性能测试实战--数据库MySQL

    14 jmeter性能测试实战--数据库MySQL   需求 测试用户表(对用户表select操作) 测试步骤 1.MySQL驱动下载并安装. 2.测试计划面板点击"浏览"按钮,将 ...

  7. Flink可靠性的基石-checkpoint机制详细解析

    Checkpoint介绍 checkpoint机制是Flink可靠性的基石,可以保证Flink集群在某个算子因为某些原因(如 异常退出)出现故障时,能够将整个应用流图的状态恢复到故障之前的某一状态,保 ...

  8. 配接Cisco设备

  9. Ubuntu 能ping通DNS 地址 无法解析域名

    ping通qq百度都行,唯独谷歌不行, 主机能够ping通google的dns服务器地址 8.8.8.8,却无法解析域名   $ ping www.google.co.uk ping: unknown ...

  10. error Unexpected use of comma operator no-sequences解决过程

    error Unexpected use of comma operator no-sequences解决过程 报错内容: ERROR in ./pages/course/_id.vue friend ...