mongo副本集搭建及服务器复用方案

  比较常见的mongodb副本集搭建是有:常规节点、数据副本、仲裁节点组成,也就是需要三台服务器组建。常规节点即数据的主存储节点,数据副本是主存储节点的从属节点,它定期去主节点获取更新日志来更新自己。仲裁节点的作用是为客户端指明连接方向(选择主还是选择从),主节点存活时连接主节点,主节点挂掉时连接从节点。

但上述方案有一个弊端,当仲裁节点挂掉以后,整个集群同样面临挂掉的危险。

第二种方案:一个主节点,两个从节点。从节点都定期去主节点获取更新日志。当主节点挂掉以后,会按优先级在两个从节点中选取一个当作主节点。(为什么需要两个从节点呢,我设置一个从节点未能成功,貌似一个集群最少需要三台机器,如果你有好的想法欢迎来拍)。

好了,本文重点演示第二种方案。该方案在windows环境下已正常运行过,linux还未尝试,只要有一些变通肯定也是可以的。

前提假设:有三台机器,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分钟左右)。

现在思考一个问题,一个副本集需要三台机器,但是只有一台机器再工作,其余两台完全闲置(作为灾备),是否觉得太浪费呢?

解决办法是有的,只需在上文提到的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

时间: 2024-11-11 06:09:38

mongo副本集搭建及服务器复用方案的相关文章

mongo副本集搭建

任意一台:>use admin >cfg={ _id:"mongo-repl", members:[ {_id:0,host:'192.168.32.101:27017',priority:2}, {_id:1,host:'192.168.32.102:27017',priority:1}, {_id:2,host:'192.168.32.101:27018',arbiterOnly:true}]} 初始化副本集:rs.initiate(cfg) 需要做主库上操作:use

mongo副本集原理,搭建

#进入mongo mongo   默认端口27017启动的mongo服务,直接进入 mongo --port=27027   指定端口27027启动mongo服务,需加端口号启动 mongo 103.56.195.5:27017   登录指定主机的mongo服务,可以以此测试对端防火墙是否放通,mongo服务器端口 #mongo副本集启动参数: [[email protected] db]# ps aux |grep mongo root     112542  0.7  0.1 1058417

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

我们的 mongo 副本集有三台 mongo 服务器:一台主库两台从库.主库进行写操作,两台从库进行读操作(至于某次读操作究竟路由给了哪台,仲裁决定),实现了读写分离.这还不止,如果主库宕掉,还能实现不需要用户干预的情况下,将主库自动切换到另外两台从库中的某一台,真正实现了 db 的高可用. 1. 背景 1.1 环境 CPU核数:4 内存配置:8G 带宽:100MB 磁盘:系统盘 40G,数据盘 180G 操作系统版本:Ubuntu 14.04 64位 1.2 系统部署结构图 2. MongoD

MongoDB 3.2.8 副本集搭建

记录一下,MongoDB的角色创建及配置,以便以后使用 简介 Replica Set,中文翻译叫做副本集,不过我并不喜欢把英文翻译成中文,总是感觉怪怪的.其实简单来说就是集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据需要和主节点一致 Mongodb(M)表示主节点,Mongodb(S)表示备节点,Mongodb(A)表示仲裁节点.主备节点存储数据,仲裁节点不存储数据.客户端同时连接主节点与备节点,不连接仲裁节点. 默认设置下,主节点提供所有增删查改服务,备

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

在我以往的认知中,一个系统一旦正式上线,多半不会轻易的迁移服务器,尤其是那种涉及到多个关联应用,涉及到多台硬件服务器的系统,因为这种迁移将是牵一发而动全身的. 但是,却仍然有这种情况存在,就如我这几天主要负责的事,就是一个系统的全部服务器迁移中的部分机器迁移,还有一部分由别人负责. 这个系统涉及到flume数据采集,storm数据分析,rabbitmq消息分发,ehcache缓存提升系统性能,mongodb副本集存储数据,tomcat管理系统应用等,架构基本如下: 而这里我主要负责的是rabbi

MongoDB副本集搭建及备份恢复

一.MongoDB副本集(repl set)介绍 早起版本使用master-slave,一主一从和MySQL类似,但slave在此架构中为只读,当主库宕机后,从库不能自动切换为主: 目前已经淘汰了master-slave模式,改为副本集,这种模式下有一个主(primary),和多个从(secondary),只读,支持给他们设置权重,当主宕掉后,权重最高的从切换为主: 在此架构中还可以建立一个仲裁(arbiter)的角色,它只负责裁决,而不存储数据 在此架构中读写数据都是在主上,要想实现负载均衡的

mongo副本集mongos启动报错

背景 项目采用mongo副本集的形式存储数据,经常出现无故断电导致某个副本mongos启动不起来的问题. 环境介绍 mongodb副本集:mongo01:192.168.36.218mongo02:192.168.36.219mongo03:192.168.36.220 报错信息 mongo03副本上mongos启动不起来,执行命令报错: [[email protected] ~]# mongos --configdb 192.168.36.218:20000,192.168.36.219:20

【未完】mongodb安装+副本集搭建+数据导入

参考文档:1-centos6.5下MongoDB2.6.4安装配置记录 http://blog.csdn.net/ligaofeng/article/details/39374333 2-mongodb中的副本集搭建实践 http://www.cnblogs.com/visionwang/p/3290435.html

Docker mongo副本集环境搭建

1.MongoDB Docker 镜像安装 docker pull mongo 2.Docker容器创建 MongoDB Docker 容器创建有以下几个问题: 1- MongoDB 容器基本创建方法和数据目录挂载 2- MongoDB 容器的数据迁移 3- MongoDB 设置登录权限问题 docker run -p 27017:27017 -v <LocalDirectoryPath>:/data/db --name docker_mongodb -d mongo --replSet &q