比较常见的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 (设置 ...
随机推荐
- 第三章Struts2 Action中动态方法调用、通配符的使用
01.Struts 2基本结构 使用Struts2框架实现用登录的功能,使用struts2标签和ognl表达式简化了试图的开发,并且利用struts2提供的特性对输入的数据进行验证,以及访问Servl ...
- One EEG preprocessing pipeline - EEG-fMRI paradigm
The preprocessing pipeline of EEG data from EEG-fMRI paradigm differs from that of regular EEG data, ...
- 错误提示:LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt 的解决方法
最近在win7 系统下,打算利用 cmake 生成项目文件,然后用vs2010进行编译.但是在cmake的时候出现错误弹窗:
- 去除phpcms会员登录后头部登陆条的会员名称的括号
phpcms会员登录后显示会员名称是带括号的,现在把他修改成不带括号. 找到函数库libs/functions/global.func.php,修改如下即可: function get_nicknam ...
- Golang gzip的压缩和解压
package src import ( "bytes" "compress/gzip" ) func GzipEncode(in []byte) ([]byt ...
- Swagger+AutoRest 生成web api客户端(.Net)
简介 对于.net来说,用web api来构建服务是一个不错的选择,都是http请求,调用简单,但是如果真的要在程序中调用,则还有些工作要做,比如我们需要手写httpClient调用,并映射Model ...
- IoC模式(依赖、依赖倒置、依赖注入、控制反转)
1.依赖 依赖就是有联系,有地方使用到它就是有依赖它,一个系统不可能完全避免依赖.如果你的一个类或者模块在项目中没有用到它,恭喜你,可以从项目中剔除它或者排除它了,因为没有一个地方会依赖它.下面看一个 ...
- windows服务 定时任务
1.c#程序做成windows服务 若用cmd安装: var path = Process.GetCurrentProcess().MainModule.FileName + " s&quo ...
- mac开机密码忘记了, 新建用户方法
第一步:重启电脑,然后按住shift+commond+s; 第二步:输入: fsck -ymount -uaw /rm /var/db/.AppleSetupDone reboot 第三步:根据提示创 ...
- Ubuntu 14.04 无线网卡驱动安装
安装了Ubuntu最新版本 14.04 之后,发现无线网卡不能使用,偿试安装驱动后,问题解决. 首先确定无线网卡类型: lspci -vnn -d 14e4: 比如我的网卡类型为 06:00.0 Ne ...