mongoDB副本集的搭建

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介:

环境简介

    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版本,因此就不花时间讲解第一种方式了,在其他的文章上摘录了一下,可供大家参考。重点还是要放在后两种。
577 0
玩转MongoDB—搭建MongoDB集群
|
23天前
|
监控 NoSQL 算法
【MongoDB】 MongoDB的副本集是什么?
【4月更文挑战第1天】【MongoDB】 MongoDB的副本集是什么?
|
6月前
|
NoSQL MongoDB
MongoDB分片+副本集高可用集群的启停步骤
MongoDB分片+副本集高可用集群的启停步骤
139 0
|
5月前
|
存储 NoSQL Ubuntu
21 MongoDB高级 - 复制(副本集)
21 MongoDB高级 - 复制(副本集)
29 1
|
存储 NoSQL 前端开发
MongoDB——副本集与分片
 MongoDB复制是将数据同步在多个服务器的过程。
849 0
MongoDB——副本集与分片
|
NoSQL 算法 Linux
MongoDB学习笔记(五) 集群搭建之副本集
MongoDB学习笔记(五) 集群搭建之副本集
351 0
|
存储 运维 监控
ELK搭建(十一):搭建MongoDB运行情况监控平台
mongoDB作为基于磁盘的非关系型数据库,JSON格式数据存储方式,具有优秀的查询效率。越来越多的场景使用到了MongoDB。在生产运维中,更需要我们能够实时的掌握mongo的运行情况,以方便我们数据库运行问题做出及时的调整和补救。
269 0
ELK搭建(十一):搭建MongoDB运行情况监控平台
|
存储 NoSQL 前端开发
vue2全家桶+koa2+mongodb搭建一个简单伪全栈博客
本来不想推的,看到github上有个项目很简单,都有300 star,推推看咯。
vue2全家桶+koa2+mongodb搭建一个简单伪全栈博客
|
存储 NoSQL Shell
MongoDB副本集、分片集的伪分布式部署(保姆级教程)(二)
MongoDB副本集、分片集的伪分布式部署(保姆级教程)(二)
252 0
MongoDB副本集、分片集的伪分布式部署(保姆级教程)(二)
|
存储 缓存 NoSQL
MongoDB副本集、分片集的伪分布式部署(保姆级教程)(一)
MongoDB副本集、分片集的伪分布式部署(保姆级教程)(一)
589 0
MongoDB副本集、分片集的伪分布式部署(保姆级教程)(一)