比较常见的mongodb副本集搭建是有:常规节点、数据副本、仲裁节点组成,也就是需要三台服务器组建。常规节点即数据的主存储节点,数据副本是主存储节点的从属节点,它定期去主节点获取更新日志来更新自己。仲裁节点作用辅助选主,选主需要半数以上同意,数据副本存储的是冗余数据,而仲裁节点不需要存储数据,主节点存活时连接主节点,主节点挂掉时连接从节点。
但上述方案有一个弊端,当仲裁节点挂掉以后,集群基本就失去了选主的能力(还要看机器的数量)。
(在这里做一下纠正,也谢谢贝贝对我的指点。)
第二种方案:
一个主节点,两个从节点。从节点都定期去主节点获取更新日志。当主节点挂掉以后,会按优先级在两个从节点中选取一个当作主节点。(为什么需要两个从节点呢,我设置一个从节点未能成功,貌似一个集群最少需要三台机器,如果你有好的想法欢迎来拍)。
好了,本文重点演示第二种方案。该方案在windows环境下已正常运行过,linux还未尝试,只要有一些变通肯定也是可以的。
前提假设:有三台机器,ip分别为192.168.0.11(主),192.168.0.12(从),192.168.0.13(从)
纠正一下:也可以ip分别为192.168.0.11(主),192.168.0.12(从),192.168.0.13(选举)
首先,在mongodb目录中创建三个文件夹,分别命名为data、logs、security(也可以根据自己的习惯或需要指定文件位置和名称,但要和配置文件中设置的路径保持一致)。
第二,在security中创建一个名为key.txt的文件,在文件中随意输入十个以上字符,他会以此作为该集群中的key。
第三,在mongodb目录中创建一个配置文件(暂命名为test.conf),里边内容如下
auth=true
dbpath=E:\mongo\mytest\data
logpath=E:\mongo\mytest\logs\mg.log
directoryperdb=true
logappend=true
replSet=mytestRep
port=12116
oplogSize=5000
keyFile=E:\mongo\mytest\security\key.key
各个参数的说明见本文最后。
第四,把这个mongodb目录copy到另外两台机器上。
第五,在每台机器上的mongodb中依次执行(windows可以用在当前文件夹启动命令行)命令:
mongod --config E:\mongo\mytest\mytest.conf --install
注意配置文件中和此处的路径都必须要用绝对路径。
第六,在192.168.0.11上mongodb文件夹运行mongo 192.168.0.11:12116。保证12116端口在你的机器上是放开的。
第七,配置副本集设置。
在mongo中运行cfgmytest={ _id:"mytestRep ", members:[ {_id:0,host:'192.168.0.11:12116',priority:12}, {_id:1,host:'192.168.0.12:12116',priority:11}, {_id:2,host:'192.168.0.13:12116',priority:9}] }
priority是优先级,优先级较高的会被自动设置为主节点。
再执行:rs.initiate(cfgmytest) 。
执行完这句话时,并不能马上看到效果,你即使重新登录客户端,看到的也是


为什么是secondary呢?是因为切换需要一定的时间(我在测试时大概需要1分钟左右),这个时间可以分为两部分:选主大概在1~5s左右 (还是蛮长的,据说2.8之后的版本会优化.),剩余时间在重新初始化集群,主要耗时在分配local文件上。(这里也是来自贝贝的建议)
现在思考一个问题,一个副本集需要三台机器,但是只有一台机器再工作,其余两台完全闲置(作为灾备),是否觉得太浪费呢?
解决办法是有的,只需在上文提到的test.conf中添加两个参数,一个是服务名称、一个是服务显示名称。
serviceName=MongoDB1
serviceDisplayName=MongoDB1
这样一台机器上就可以运行多个mongodb实例了。
对于a、b、c三个mongodb实例可以把他们的主节点分别分配到三台机器上,这样三台机器就互成灾备。注意端口不要重复。
其实一个集群中的从属服务器作为系统的读服务器话(读取时相对于主服务器的数据来说会有延时),这些冗余服务器也不算是浪费。无奈我们的业务不允许延时,只能用上文的思路来更多利用服务器的性能了。
mongodb的常用参数说明
--quiet # 安静输出
--port arg # 指定服务端口号,默认端口27017
--bind_ip arg # 绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP
--logpath arg # 指定MongoDB日志文件,注意是指定文件不是目录
--logappend # 使用追加的方式写日志
--pidfilepath arg # PID File 的完整路径,如果没有设置,则没有PID文件
--keyFile arg # 集群的私钥的完整路径,只对于Replica Set 架构有效
--unixSocketPrefix arg # UNIX域套接字替代目录,(默认为 /tmp)
--fork # 以守护进程的方式运行MongoDB,创建服务器进程
--auth # 启用验证
--cpu # 定期显示CPU的CPU利用率和iowait
--dbpath arg # 指定数据库路径
--diaglog arg # diaglog选项 0=off 1=W 2=R 3=both 7=W+some reads
--directoryperdb # 设置每个数据库将被保存在一个单独的目录
--journal # 启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里
--journalOptions arg # 启用日志诊断选项
--ipv6 # 启用IPv6选项
--jsonp # 允许JSONP形式通过HTTP访问(有安全影响)
--maxConns arg # 最大同时连接数 默认2000
--noauth # 不启用验证
--nohttpinterface # 关闭http接口,默认关闭27018端口访问
--noprealloc # 禁用数据文件预分配(往往影响性能)
--noscripting # 禁用脚本引擎
--notablescan # 不允许表扫描
--nounixsocket # 禁用Unix套接字监听
--nssize arg (=16) # 设置信数据库.ns文件大小(MB)
--objcheck # 在收到客户数据,检查的有效性,
--profile arg # 档案参数 0=off 1=slow, 2=all
--quota # 限制每个数据库的文件数,设置默认为8
--quotaFiles arg # number of files allower per db, requires --quota
--rest # 开启简单的rest API
--repair # 修复所有数据库run repair on all dbs
--repairpath arg # 修复库生成的文件的目录,默认为目录名称dbpath
--slowms arg (=100) # value of slow for profile and console log
--smallfiles # 使用较小的默认文件
--syncdelay arg (=60) # 数据写入磁盘的时间秒数(0=never,不推荐)
--sysinfo # 打印一些诊断系统信息
--upgrade # 如果需要升级数据库 * Replicaton 参数
--------------------------------------------------------------------------------
--fastsync # 从一个dbpath里启用从库复制服务,该dbpath的数据库是主库的快照,可用于快速启用同步
--autoresync # 如果从库与主库同步数据差得多,自动重新同步,
--oplogSize arg # 设置oplog的大小(MB) * 主/从参数
--------------------------------------------------------------------------------
--master # 主库模式
--slave # 从库模式
--source arg # 从库 端口号
--only arg # 指定单一的数据库复制
--slavedelay arg # 设置从库同步主库的延迟时间 * Replica set(副本集)选项:
--------------------------------------------------------------------------------
--replSet arg # 设置副本集名称 * Sharding(分片)选项
--------------------------------------------------------------------------------
--configsvr # 声明这是一个集群的config服务,默认端口27019,默认目录/data/configdb
--shardsvr # 声明这是一个集群的分片,默认端口27018
--noMoveParanoia # 关闭偏执为moveChunk数据保存
# 上述参数都可以写入 mongod.conf 配置文档里例如:
dbpath = /data/mongodb
logpath = /data/mongodb/mongodb.log
logappend = true
port = 27017
fork = true
auth = true
- Mongo副本集搭建
解压mongodb-linux-x86_64-rhel70-3.2.0.tgz 将解压后的bin路径添加到系统环境变量,保证mongo.mongod等命令可用 创建副本集目录mongo/27017.2 ...
- 我们的一个已投产项目的高可用数据库实战 - mongo 副本集的搭建具体过程
我们的 mongo 副本集有三台 mongo 服务器:一台主库两台从库. 主库进行写操作,两台从库进行读操作(至于某次读操作到底路由给了哪台,仲裁决定).实现了读写分离.这还不止,假设主库宕掉,还能实 ...
- mongodb副本集搭建过程中的问题和解决技巧
在我以往的认知中,一个系统一旦正式上线,多半不会轻易的迁移服务器,尤其是那种涉及到多个关联应用,涉及到多台硬件服务器的系统,因为这种迁移将是牵一发而动全身的. 但是,却仍然有这种情况存在,就如我这几天 ...
- MongoDB副本集搭建及备份恢复
一.MongoDB副本集(repl set)介绍 早起版本使用master-slave,一主一从和MySQL类似,但slave在此架构中为只读,当主库宕机后,从库不能自动切换为主: 目前已经淘汰了ma ...
- Mongo副本集的配置以及php node.js连接使用副本集
最近弄了下mongodb的副本集, 首先说下没有认证情况的副本集,相对比较简单,因为环境有限,我在同一台服务器上做了模拟. --rest参数是打开web监控页面,比如我们这里监听37017端口,则打开 ...
- windows版本 MongoDB副本集搭建及开启身份验证
------------恢复内容开始------------ ------------恢复内容开始------------ MongoDB副本集搭建 我搭建的是一个主节点,两个副节点 构建目录结构如下 ...
- mongodb安装及副本集搭建
mongodb下载地址:https://www.mongodb.com/dr/fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.7.tg ...
- mongodb 4.0副本集搭建
近期有同学问mongodb副本集难不难部署,我的回答是不难,很快,几分钟搞定,比mysql MHA简单的不止一点半点. 那么到底如何部署呢?请看下文. 1. 准备工作 1.1 下载软件 选择版本并下 ...
- mongo副本集设置主库权重,永远为主
mongo副本集设置主库权重,即使主库宕机了再重启也还是主库. cfg = rs.conf() ------->(查看序列)cfg.members[0].priority = 1 (设置 ...
随机推荐
- 洛谷U4859matrix[单调栈]
题目描述 给一个元素均为正整数的矩阵,上升矩阵的定义为矩阵中每行.每列都是严格递增的. 求给定矩阵中上升子矩阵的数量. 输入输出格式 输入格式: 第一行两个正整数n.m,表示矩阵的行数.列数. 接下来 ...
- java发送email
package com.assess.util; import java.io.File; import java.util.ArrayList; import java.util.List; imp ...
- jmeter(三)Sample之SOAP/XML-RPC Request
项目背景:公司的微信端H5界面新开发了会员注册功能,需要对其进行压力测试 项目目标:需要承受每分钟最少6000的压力 一.建立一个测试计划(test plan) 之前有说过,jmeter打开后会自动生 ...
- Mysql数据库主从心得整理
管理mysql主从有2年多了,管理过200多组mysql主从,几乎涉及到各个版本的主从,本博文属于总结性的,有一部分是摘自网络,大部分是根据自己管理的心得和经验所写,整理了一下,分享给各位同行,希望对 ...
- ES5基础之正则表达式01:初次见面
1.正则初次见面 测试地址:https://regexper.com 第一个正则:匹配 2006-10-11 或 2006/10/11 var reg = /^\d{4}[-/]\d{2}[-/]\d ...
- 微信小程序之数据绑定(五)
[未经作者本人允许,请勿以任何形式转载] 前几篇讲述微信小程序开发工具使用.生命周期和事件. 本次讲述微信小程序数据和视图绑定 >>>数据视图绑定 做前端开发的同学,尤其是WEB前端 ...
- Oracle系列——开发中奇葩问题你遇到几个(一)
前言:在使用oracle数据进行开发的时候有没有经常出现一些很奇怪.很纳闷.很无厘头的问题呢.下面是本人使用oracle一段时间遇到的问题小节,在此做个记录,方便以后再遇到类似的问题能快速解决.如果你 ...
- c3p0数据源的使用初步及Mysql8小时问题解决
原文:http://blog.csdn.net/xby1993/article/details/23707775 c3p0号称是java界最好的数据池. c3p0的配置方式分为三种,分别是 1.set ...
- Linux 部署 nginx服务代理
原文地址:http://www.cnblogs.com/ants/p/5732337.html#_label5 参考地址:http://www.cnblogs.com/hustskyking/p/ng ...
- .eww
http://sourceforge.net/projects/ezwinports/files/ 下载libxml2的文件. 再下载的bin里复制libiconv-2.dll和libxml2-2.d ...