mongoDB副本集的搭建

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介:

环境简介

    192.168.1.151      FedoraServer   用作副本集的主库,已经有数据

    192.168.1.152      FedoraServer   从库,空实例

    192.168.1.153      FedoraServer   从库,空实例

MongoDB的副本集和MySQL基于GTID的多源三实例循环主从即

  wKioL1nm_E7CCZ3PAACKsl1qQYw193.png-wh_50

但:相对与MySQL的基于Keepalive或者MHA等第三方插件来实现切换或选主,mongodb自带故障转移与切换选主功能,这个产品很有高级感


搭建步骤

  1. mongodb安装:


1
      Percona-Server-MongoDB-34-server

 2. mongodb配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
     vim  /etc/mongod .conf
     # mongod.conf, Percona Server for MongoDB
     # for documentation of all options, see:
     #      
     #mongodb的配置有个特别之处:冒号“:”后面要加空格
     # Where and how to store data.
     storage:
       dbPath:  /data/mongo/27153/data/               #指定mongodb文件存储位置
     journal:
       enabled:  true
     #  engine: mmapv1
     #  engine: PerconaFT
     #  engine: rocksdb
     engine: wiredTiger          #指定存储引擎,线虎引擎和Innodb有些相似,支持文档锁(行锁)
 
     # Storage engine various options
     #  mmapv1:
     #  wiredTiger:
 
     # where to write logging data.
     systemLog:
       quiet:  true
       destination:  file
       logAppend:  true           #日志采用追加的方式
       path:  /data/mongo/27153/log/mongod .log        #日志文件位置
 
     processManagement:
       fork:  true                #启动线程拉起主线程,与mysqld_safe进程有些相似
       pidFilePath:  /data/mongo/27153/mongod .pid      #PID文件位置
 
     # network interfaces
     net:
       port: 27153               #端口,默认27017
       bindIp: 0.0.0.0           #开放访问的IP范围
 
     security:
       authorization: enabled    #开启验证,
       keyFile:  /data/mongo/mongodb .key              #使用key文件进行副本集之间的认证
     #operationProfiling:
 
     #replication:
     replication:
       replSetName: zrz          #同步集的名称
     #sharding:
 
     ## Enterprise-Only Options:
 
     #auditLog:
 
#snmp:

 3.搭建过程:

  1.三台都关闭验证模式

 

1
2
3
4
5
  vim  /etc/mongod .conf
  注释掉验证相关的配置语句
  #security:
  #   authorization: enabled   #开启验证,
  #     keyFile: /data/mongo/mongodb.key             #使用key文件进行副本集之间的认证

  2.启动服务:

 

1
mongod -f  /etc/mongod .conf

  3.在有数据的实例上登陆:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mongo --port 27151
 
mongo>config={ "_id" : "zrz" , "members" :[{ "_id" :1,host: "192.168.1.151:27151" ,priority:100},
                                      { "_id" :2,host: "192.168.1.152:27152" ,priority:0}]}
        // 定义配置到变量config中
        //zrz 为群组名,priority为选主权重,越高越容易成为主(非故障情况下)
        
mongo>rs.initiate(config)
        // 使用rs.initiate命令初始化副本集配置
 
mongo>rs.status
        // 查看副本集配置
 
mongo>rs.add({ "_id" :3,host: "192.168.1.153:27153" ,priority:0})
        // 使用另外一种方式增加副本集

  4.开启验证:

    为了安全起见,需要对MongoDB的访问增加验证:

    步骤1:对现在primary级别的实例进行增加用户  db.createUser()

    步骤2:关闭secondary级别的实例              mongod --shutdown -f /etc/mongod.conf

    步骤3:关闭primary级别的实例                

    步骤4:修改每个实例的配置文件,开启验证。配置账户或者分发密钥,

    步骤5:先开启最后关闭的primary实例,后开启各个secondary实例  

   跨实例之间的认证有两种方式:账户与口令 或者 使用SSL密钥

     其中:账户和口令只能在mongos分片的配置服务器上使用,实例之间通过config_server验证

           密钥文件,是通过通过openssl程序生成的base64字符串,具有相同字符串的可以同步

   生成方式:

1
        openssl rand -base64 756 >  /data/mongo/mongodb .key

   变更key文件的属性,防修改:

1
        chmod  400  /data/mongo/mongodb .key

   分发给自己的小伙伴们:

1
2
        scp  /data/mongo/mongodb .key 192.168.1.152: /data/mongo/
        scp  /data/mongo/mongodb .key 192.168.1.153: /data/mongo/

   修改配置文件,指定密钥位置

1
2
3
4
5
        vim  /etc/mongod .conf
        
       security:
         authorization: enabled    #开启验证,
         keyFile:  /data/mongo/mongodb .key              #使用key文件进行副本集之间的认证

   按顺序开启服务就可以了

1
        mongod -f  /etc/mongo

常见错误及其解决方式:

 1.跨版本搭建副本集(3.0-3.4),MongoDB现在不支持

 2.从实例在加入副本集失败后,意外的产生了一些数据,导致无法被primary加入副本集

   处理方式:注释掉复制相关的配置文件,重启服务,即进入单机模式,使用db.dropDatabase()

            删除所有数据库,然后重新进入副本集启动模式既可

 3.提示已经有配置了,无法初始化,使用rs.reconfig(config{force:true})

4.使用rs.help()可以查看相关副本集的命令



密钥文件:https://docs.mongodb.com/manual/reference/configuration-options/#security.keyFile

重新配置:https://docs.mongodb.com/manual/reference/method/rs.reconfig/#rs.reconfig

复制相关命令:https://docs.mongodb.com/manual/reference/method/js-replication/


 本文转自 angry_frog 51CTO博客,原文链接:http://blog.51cto.com/l0vesql/1973850


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
存储 NoSQL Linux
玩转MongoDB—搭建MongoDB集群
如题,本次玩转MongoDB我们从搭建集群开始,话说MongoDB一共有三种搭建集群的方式,但是由于版本更新,据说在4.0版本之后第一种方式,也就是主从复制的方式被遗弃掉了,大概是因为这种方式的效率不高吧,因为目前我们使用的是5.x版本,因此就不花时间讲解第一种方式了,在其他的文章上摘录了一下,可供大家参考。重点还是要放在后两种。
639 0
玩转MongoDB—搭建MongoDB集群
|
30天前
|
NoSQL MongoDB Windows
MongoDB 读写分离——Windows MongoDB 副本集配置
MongoDB 读写分离——Windows MongoDB 副本集配置
33 0
|
4月前
|
监控 NoSQL MongoDB
【MongoDB 专栏】MongoDB 的副本集故障转移与恢复
【5月更文挑战第11天】MongoDB的副本集是高可用性关键,提供数据冗余和自动故障转移。由主节点和从节点组成,主节点处理写操作,从节点同步数据。当主节点故障,副本集通过选举产生新主节点,确保服务不间断。故障转移涉及节点优先级和数据同步状态的考量。恢复阶段解决数据不一致,重点包括节点部署监控、数据同步策略、选举机制和备份恢复计划。网络延迟和大规模数据可能带来挑战,需优化网络、性能调优和定期演练。随着技术进步,副本集的故障转移与恢复将更高效、智能,保障数据安全,支撑业务系统的稳定运行。
288 3
【MongoDB 专栏】MongoDB 的副本集故障转移与恢复
|
4月前
|
NoSQL MongoDB 数据库
国内唯一 阿里云荣膺MongoDB“2024年度DBaaS认证合作伙伴奖”
阿里云连续第五年斩获MongoDB合作伙伴奖项,也是唯一获此殊荣的中国云厂商。一起学习MongoDB副本集的选举机制以及可能会出现的特殊情况。
国内唯一 阿里云荣膺MongoDB“2024年度DBaaS认证合作伙伴奖”
|
3月前
|
存储 监控 NoSQL
MongoDB 副本集:构建可靠的数据备份与高可用性系统
MongoDB 副本集:构建可靠的数据备份与高可用性系统
|
4月前
|
监控 NoSQL 算法
【MongoDB】 MongoDB的副本集是什么?
【4月更文挑战第1天】【MongoDB】 MongoDB的副本集是什么?
|
11月前
|
NoSQL MongoDB
MongoDB分片+副本集高可用集群的启停步骤
MongoDB分片+副本集高可用集群的启停步骤
219 0
|
10月前
|
存储 NoSQL Ubuntu
21 MongoDB高级 - 复制(副本集)
21 MongoDB高级 - 复制(副本集)
55 1
|
存储 NoSQL 前端开发
MongoDB——副本集与分片
 MongoDB复制是将数据同步在多个服务器的过程。
908 0
MongoDB——副本集与分片
|
NoSQL 算法 Linux
MongoDB学习笔记(五) 集群搭建之副本集
MongoDB学习笔记(五) 集群搭建之副本集
395 0
下一篇
DDNS