比较常见的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副本集搭建及服务器复用方案的更多相关文章

  1. Mongo副本集搭建

    解压mongodb-linux-x86_64-rhel70-3.2.0.tgz 将解压后的bin路径添加到系统环境变量,保证mongo.mongod等命令可用 创建副本集目录mongo/27017.2 ...

  2. 我们的一个已投产项目的高可用数据库实战 - mongo 副本集的搭建具体过程

    我们的 mongo 副本集有三台 mongo 服务器:一台主库两台从库. 主库进行写操作,两台从库进行读操作(至于某次读操作到底路由给了哪台,仲裁决定).实现了读写分离.这还不止,假设主库宕掉,还能实 ...

  3. mongodb副本集搭建过程中的问题和解决技巧

    在我以往的认知中,一个系统一旦正式上线,多半不会轻易的迁移服务器,尤其是那种涉及到多个关联应用,涉及到多台硬件服务器的系统,因为这种迁移将是牵一发而动全身的. 但是,却仍然有这种情况存在,就如我这几天 ...

  4. MongoDB副本集搭建及备份恢复

    一.MongoDB副本集(repl set)介绍 早起版本使用master-slave,一主一从和MySQL类似,但slave在此架构中为只读,当主库宕机后,从库不能自动切换为主: 目前已经淘汰了ma ...

  5. Mongo副本集的配置以及php node.js连接使用副本集

    最近弄了下mongodb的副本集, 首先说下没有认证情况的副本集,相对比较简单,因为环境有限,我在同一台服务器上做了模拟. --rest参数是打开web监控页面,比如我们这里监听37017端口,则打开 ...

  6. windows版本 MongoDB副本集搭建及开启身份验证

    ------------恢复内容开始------------ ------------恢复内容开始------------ MongoDB副本集搭建 我搭建的是一个主节点,两个副节点 构建目录结构如下 ...

  7. mongodb安装及副本集搭建

    mongodb下载地址:https://www.mongodb.com/dr/fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.7.tg ...

  8. mongodb 4.0副本集搭建

    近期有同学问mongodb副本集难不难部署,我的回答是不难,很快,几分钟搞定,比mysql MHA简单的不止一点半点. 那么到底如何部署呢?请看下文. 1.  准备工作 1.1 下载软件 选择版本并下 ...

  9. mongo副本集设置主库权重,永远为主

    mongo副本集设置主库权重,即使主库宕机了再重启也还是主库. cfg = rs.conf()     ------->(查看序列)cfg.members[0].priority = 1 (设置 ...

随机推荐

  1. mysql : utf8mb4 的问题

    微信呢称和QQ呢称上有很多火星文和emoji表情图片,这些数据,如果直接insert到mysql数据库,一般会报错,设置成utf8都不好使,必须改成utf8mb4编码,这二者的区别见: mysql u ...

  2. Qt——浅谈样式表

    优秀的程序,不仅要有严密逻辑,而且应该有美观的外表.从软件界面,便可看出你是否用心在做,是否是一个有思想的人. Qt样式表的术语和语法规则和HTML CSS有很多相似之处. 样式规则 Qt中样式规则由 ...

  3. ajax返回值中有回车换行、空格的解决方法分享

    最近在写一个页面,用jquery ajax来实现判断,刚写好测试完全没有问题,过了两天发现出现问题,判断不成了.后来发现所有alert出来的返回值前面都会加若干换行和空格.(至今不明白,同一台电脑,同 ...

  4. 开源任务管理平台TaskManager介绍

    很早之前准备写Quartz系列文章,现在终于能够实现了.从本篇开始将带你实现一款自己的任务管理平台.在工作中你曾经需要应用执行一个任务吗?这个任务每天或每周星期二晚上11:30,或许仅仅每个月的最后一 ...

  5. Json——js和C#对Json的操作

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式.博主记得几年前在华为外包项目中有一个和Android应用交互的需求,Andr ...

  6. Android开发自学笔记(Android Studio)—4.5 ProgressBar及其子类

    一.前言 ProgressBar本身代表了进度条组件,它还派生出了两个常用的组件:SeekBar和RatingBar,他们的使用方法类似,只是显示界面有一定的区别.我们看一下API文档中的说明: 从图 ...

  7. linux基础知识与技能1

    1.隐藏文件与非隐藏文件Linux中:linux中隐藏文件特点是文件名以.开头,跟文件属性无关.在linux中查看隐藏文件用ls -a命令(普通显示ls)2.相对路径与绝对路径什么是路径:路径是用来标 ...

  8. css实现了hover显示title的效果

    <div data-title="hello, world">hello...</div> <style> div { position: re ...

  9. mysql的基本命令行操作

    mysql>CREATE DATABASE imooc; //创建数据库 mysql> USE imooc ;//选择数据库 mysql> SELECT DATABASE();//查 ...

  10. os 模块

    __file__获取当前模块所在路径 一.os模块概述 Python os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的. 二.常用方法 1.os.name 输 ...