如果只有一个节点或者使用Master-Slave模式,存在主机挂掉后“单点失效的问题。通过使用Mongo DB副本集,可以提高容错性和可用性~~

Areplica setin MongoDB is a group ofmongodprocesses that maintain the same data set. Replica sets provide redundancy and high availability

什么是副本集( Repilca Set )?

副本集在Mongo DB中就是一组mongod维护相同的数据集,副本集提供冗余和高可用~~

一个三个节点的副本集如下图所示:

本篇博文主要给出一个搭建三个节点Mongo DB副本集的示例,只要5个步骤即可~废话不说了,直接来战~~~

第一步 - 准备环境

准备三个虚拟机,其中一个用作Primary,另外两个用作Secondary。如上图展示的那样~

虚拟机信息如下:

Primary -172.xx.xx.107

Secondary -172.xx.xx.105172.xx.xx.106

本文的虚拟机装的是CentOS 6.7 ~

第二步 - yum安装Mongo

本文使用yum install mongodb-org命令来安装。

如果遇到No package mongodb-org available.的问题,如:

Loaded plugins: fastestmirror
Setting up Install Process
Loading mirror speeds from cached hostfile
No package mongodb-org available.
Error: nothing to do

/etc/yum.repos.d/目录下,创建一个mongodb.repo文件,指定MongoDB资源库即可。

使用vim /etc/yum.repos.d/mongodb.repo命令,创建并打开文件mongodb.repo,

[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

然后,重新使用yum install mongodb-org命令安装即可。

第三步 - 配置副本集

使用vim /etc/mongod.conf配置,每一台虚拟机上的Mongod配置文件。

在replication选项中添加oplogSizeMB 和 replSetName两个属性~

replication:
  oplogSizeMB:  1024
  replSetName:  wang

配置文件mongod.conf如下所示:

# mongod.conf

# for documentation of all options,see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# Where and how to store data.
storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:

# how the process runs
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0  # Listen to local interface only,comment to listen on all interfaces.


#security:

#operationProfiling:

replication:
  oplogSizeMB:  1024
  replSetName:  wang


#sharding:

## Enterprise-Only Options

#auditLog:

#snmp:

注意:

3台虚拟机,MongoDB配置文件mongod.conf中的replSetName名字要保持一致

在本例中,replSetName的名字为wang,这个名字可以随便取~~

第四步 - 启动

配置好副本集之后,通过mongod --config /etc/mongod.conf命令启动三个虚拟机中的Mongo服务~,如:

[root@dev04 mongodb]# mongod --config /etc/mongod.conf 
about to fork child process,waiting until server is ready for connections.
forked process: 30799
child process started successfully,parent exiting

因为107端口的虚拟机安装的MongoDB要用作Primary节点,所以,我们可以使用mongo命令来连接~

[root@dev04 mongodb]# mongo
MongoDB shell version v3.4.2
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.2
Server has startup warnings: 
2017-02-17T09:19:20.240+0800 I STORAGE  [initandlisten] 
2017-02-17T09:19:20.240+0800 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2017-02-17T09:19:20.240+0800 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
2017-02-17T09:19:20.964+0800 I CONTROL  [initandlisten] 
2017-02-17T09:19:20.964+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-02-17T09:19:20.964+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2017-02-17T09:19:20.964+0800 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user,which is not recommended.
2017-02-17T09:19:20.965+0800 I CONTROL  [initandlisten] 
2017-02-17T09:19:20.965+0800 I CONTROL  [initandlisten] 
2017-02-17T09:19:20.965+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2017-02-17T09:19:20.965+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2017-02-17T09:19:20.965+0800 I CONTROL  [initandlisten] 
2017-02-17T09:19:20.965+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2017-02-17T09:19:20.965+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2017-02-17T09:19:20.965+0800 I CONTROL  [initandlisten]

使用use admin,切换到时admin数据库,

> use admin
switched to db admin

然后通过config配置设置副本集节点成员~~

config={_id:"wang",members:[{_id:0,host:"172.xxx.xxx.107:27017"},{_id:1,host:"172.xxx.xxx.106:27017"},{_id:2,host:"172.xxx.xxx.105:27017"}]}

注:

_id:"wang",wang是副本集中取得名字。

members中添加每个副本集Mongod的_id和host信息

执行完上述信息,会出现如下信息:

> config={_id:"wang",host:"172.xxx.xxx.105:27017"}]}
{
	"_id" : "wang","members" : [
		{
			"_id" : 0,"host" : "172.xxx.xxx.107:27017"
		},{
			"_id" : 1,"host" : "172.xxx.xxx.106:27017"
		},{
			"_id" : 2,"host" : "172.xxx.xxx.105:27017"
		}
	]
}
>

然后,执行配置初始化,看到{ "ok" : 1 },则表明初始化成功~

> rs.initiate(config)
{ "ok" : 1 }

使用rs.status()查看副本节点状态~~

wang:PRIMARY> rs.status() 
{
	"set" : "wang","date" : ISODate("2017-02-17T01:30:53.128Z"),"myState" : 1,"term" : NumberLong(1),"heartbeatIntervalMillis" : NumberLong(2000),"optimes" : {
		"lastCommittedOpTime" : {
			"ts" : Timestamp(1487295047,1),"t" : NumberLong(1)
		},"appliedOpTime" : {
			"ts" : Timestamp(1487295047,"durableOpTime" : {
			"ts" : Timestamp(1487295047,"t" : NumberLong(1)
		}
	},"name" : "172.xxx.xxx.107:27017","health" : 1,"state" : 1,"stateStr" : "PRIMARY","uptime" : 693,"optime" : {
				"ts" : Timestamp(1487295047,"t" : NumberLong(1)
			},"optimeDate" : ISODate("2017-02-17T01:30:47Z"),"infoMessage" : "Could not find member to sync from","electionTime" : Timestamp(1487294966,"electionDate" : ISODate("2017-02-17T01:29:26Z"),"configVersion" : 1,"self" : true
		},"name" : "172.xxx.xxx.106:27017","state" : 2,"stateStr" : "SECONDARY","uptime" : 96,"optimeDurable" : {
				"ts" : Timestamp(1487295047,"optimeDurableDate" : ISODate("2017-02-17T01:30:47Z"),"lastHeartbeat" : ISODate("2017-02-17T01:30:52.708Z"),"lastHeartbeatRecv" : ISODate("2017-02-17T01:30:51.674Z"),"pingMs" : NumberLong(0),"syncingTo" : "172.xxx.xxx.107:27017","configVersion" : 1
		},"name" : "172.xxx.xxx.105:27017","lastHeartbeatRecv" : ISODate("2017-02-17T01:30:51.745Z"),"syncingTo" : "172.xxx.xxx.106:27017","configVersion" : 1
		}
	],"ok" : 1
}
wang:PRIMARY>

从上图圈出来的信息可以看出,一个Primary 和两个Secondary的副本集已经完成~~~

第五步 - 验证

最后一步就是用来验证了,看看数据能否同步过来~~~

写的操作是在Primary节点上操作的

在107节点上,创建一个messages的数据库,然后在message Collection中插入两条message。

wang:PRIMARY> show dbs
admin  0.000GB
local  0.000GB
wang:PRIMARY> use messages
switched to db messages
wang:PRIMARY> db.message.insert({"name":"This is a test message"})
WriteResult({ "nInserted" : 1 })
wang:PRIMARY> show dbs
admin     0.000GB
local     0.000GB
messages  0.000GB
wang:PRIMARY> db.message.insert({"name":"This is a test message111"})
WriteResult({ "nInserted" : 1 })
wang:PRIMARY>

通过可视化工具查看,Secondary节点105和106上是否可以同步Primary节点107上messages数据库的信息~~

详细信息如下:

从可视化工具的截图可以看出,两个Secondary节点105和106,与Primary节点107,拥有同样的数据集~~ 至此,Mongo DB副本集的环境搭建完成~~~

5步搞定CentOS6.7上MongoDB副本集搭建的更多相关文章

  1. Swift 如何访问 MongoDB

    Perfect开源项目参与Perfect开发Slack在线协同MongoDBMongoDB库函数是在mongo-c语言库的基础上封装而成,能够为Swift轻松访问MongoDB服务器提供便利。请确保安装并激活了最新版本的Swift3.0toolchain。注意每次向项目追加依存关系时,必须要打开Swift软件包管理器重新创建一个新的Xcode项目文件。在您的项目中声明MongoDB请在您的Perfect项目源程序开头声明并导入MongoDB函数库:创建一个MongoDB数据库连接创建到MongoDB服务器

  2. TP5(thinkPHP5)框架mongodb扩展安装及特殊操作示例

    这篇文章主要介绍了TP5(thinkPHP5)框架mongodb扩展安装及特殊操作,结合实例形式分析了MongoDB扩展的基本安装、配置、模型操作以及使用Push操作实现的数据添加、更新等方法,需要的朋友可以参考下

  3. Node.js和MongoDB实现简单日志分析系统

    这篇文章主要介绍了Node.js和MongoDB实现简单日志分析系统,本文给出了服务器端、客户端、图表生成、Shell自动执行等功能的实现代码,需要的朋友可以参考下

  4. Laravel框架中集成MongoDB和使用详解

    今天小编就为大家分享一篇Laravel框架中集成MongoDB和使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  5. Node.js中使用mongoskin操作mongoDB实例

    这篇文章主要介绍了Node.js中使用mongoskin操作mongoDB实例,Mongous是一个轻量级的nodejs mongodb驱动,需要的朋友可以参考下

  6. Node.js中使用mongoose操作mongodb数据库的方法

    如何利用mongoose将数据写入mongodb数据库呢?操作方法很简单,下面小编给大家分享Node.js中使用mongoose操作mongodb数据库的方法,感兴趣的朋友一起看看吧

  7. php如何利用pecl安装mongodb扩展详解

    这篇文章主要给大家介绍了关于php如何利用pecl安装mongodb扩展的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  8. SpringBoot MongoDB详细使用教程

    这篇文章主要介绍了SpringBoot整合Mongodb实现简单的增删查改,MongoDB是一个以分布式数据库为核心的数据库,因此高可用性、横向扩展和地理分布是内置的,并且易于使用。况且,MongoDB是免费的,开源的,感兴趣的朋友跟随小编一起看看吧

  9. CentOS上安装Node.js和mongodb笔记

    这篇文章主要介绍了CentOS上安装Node.js和mongodb笔记,本文讲解了Python安装、Node.js安装、npm安装、mongodb驱动安装、mongodb数据库操作测试代码等内容,需要的朋友可以参考下

  10. php7安装mongoDB扩展的方法分析

    这篇文章主要介绍了php7安装mongoDB扩展的方法,简单分析了php7安装MongoDB扩展的步骤与相关配置操作技巧,需要的朋友可以参考下

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部