MongoDB的环境主要包括StandAlone,Replication和Sharding。

  • StandAlone:单机环境,一般开发测试的时候用。
  • Replication:主从结构,一个Primary,多个Secondary,可能会有Arbitry。
    • Primary挂掉之后,会选举出一个Secondary作为Primary,与zookeeper类似。
    • Arbitry上面不存数据,只是为了凑数。选举算法要求节点数必须是奇数个,如果Primary+Secondary不是奇数个,就要用Arbitry凑数。
    • 写数据只能在Primary,读数据默认也在Primary,可以配置成从Secondary读,可以选最近的节点。
    • 数据在Primary上写成功之后,会将操作记录在oplog中,Secondary将oplog拷贝过去,然后照着操作一遍,就有数据了。
    • Primary和Secondary上面的数据保证最终一致性,可以为写操作配置write concern,有几个级别:在Primary上写完就认为写成功;写到oplog后认为写成功;写到一个/多个/某个/某几个Secondary之后认为写成功,等等。
  • Sharding:share nothing的结构,每台机器只存一部分数据。mongod服务器存数据,mongos服务器负责路由读写请求,元数据存在config数据库中。

因为数据量和机器量的原因,项目最终用了一个Primary,一个Secondary,一个Arbitry。我自己的开发环境是Ubuntu,测试环境是CentOS。安装的是64位的MongoDB。

Ubuntu上的安装

sudo apt-get install mongodb

CentOS上的安装

配置yum源,创建文件:/etc/yum.repos.d/mongodb.repo

[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=
enabled=

安装命令:

yum install mongo-10gen mongo-10gen-server

配置

每台机器上面的配置文件/etc/mongod.conf修改成下面的:

#数据库文件所在位置(默认)
dbpath=/var/lib/mongo
#日志所在位置(默认)
logpath=/var/log/mongo/mongod.log
#pid所在位置(默认)
pidfilepath = /var/run/mongodb/mongod.pid
#keyFile所在位置,生成方式在后面(添加)
keyFile=/var/lib/mongo/key #端口(默认)
port= #每次启动后日志追加在后面,不会新建日志文件(默认)
logappend=true
#用deamon方式启动(添加)
fork=true
#打开操作日志,用于故障恢复和持久化(默认)
journal=true #replica set的名字(添加)
replSet=test-set

在每台机器上运行:

sudo mongod -f /etc/mongod.conf

我的环境里面,Primary ip: 192.168.1.1,Secondary ip: 192.168.1.2,Arbitary ip: 192.168.1.3。在单机上可以将多个mongodb设置成不同端口,我测试了一下也是可以的。

在Primary上运行“mongo”,打开命令行,设置Replica Set:

rs.initiate(
{"_id" : "test-set",
"members" : [
{"_id" : , "host" : "192.168.1.1"},
{"_id" : , "host" : "192.168.1.2"},
{"_id" : , "host" : "192.168.1.3", "arbiterOnly" : true}
]
}); {
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" :
}

历史成功后需要等一段时间,他会选举Primary,然后查看Replica Set的状态:

test-set:PRIMARY> rs.status()
{
"set" : "test-set",
"date" : ISODate("2014-02-21T10:28:55Z"),
"myState" : ,
"members" : [
{
"_id" : ,
"name" : "192.168.1.1:27017",
"health" : ,
"state" : ,
"stateStr" : "PRIMARY",
"uptime" : ,
"optime" : Timestamp(, ),
"optimeDate" : ISODate("2014-02-21T08:48:00Z"),
"lastHeartbeat" : ISODate("2014-02-21T10:28:54Z"),
"lastHeartbeatRecv" : ISODate("2014-02-21T10:28:53Z"),
"pingMs" :
},
{
"_id" : ,
"name" : "192.168.1.2:27017",
"health" : ,
"state" : ,
"stateStr" : "SECONDARY",
"uptime" : ,
"optime" : Timestamp(, ),
"optimeDate" : ISODate("2014-02-21T08:48:00Z"),
"lastHeartbeat" : ISODate("2014-02-21T10:28:54Z"),
"lastHeartbeatRecv" : ISODate("2014-02-21T10:28:55Z"),
"pingMs" : ,
"syncingTo" : "192.168.131.15:27017"
},
{
"_id" : ,
"name" : "192.168.1.3:27017",
"health" : ,
"state" : ,
"stateStr" : "ARBITER",
"uptime" : ,
"self" : true
}
],
"ok" :
}

这样整个replica set就配置成功了,还是比较简单的。

KeyFile的设置

KeyFile是机器间用来进行权限认证的,如果没有设置KeyFile,在rs.initiate()的时候,会提示有其他机器没有ready,大概这个意思记不清了,反正有个error...

网上搜了一下这个错误,很多解释都是说,服务器异常关闭或者mongodb异常退出的时候,会留下一个锁文件"/var/lib/mongo/mongo.lock",需要把这个锁文件删除之后重启mongodb。我试了一下这个方法对我无效。

查看了一台机器上的log文件,发现里面说,有其他机器给他发送消息,但是需要在每台机器上配置key file。大概是这个意思,忘记截图了。

创建Key File用下面的语句:

openssl rand -base64 

产生的字符串存到一个文本文件中,然后把这个文件的权限chmod成600(如果权限过高不行,log里面会告诉你权限过高),然后在配置里面加上“keyFile=keyfile的路径”,重启mongodb就行了。

NUMA的问题

测试机的CPU是NUMA的,于是在运行mongod的时候命令行和log里面会有下面的提示:

WARNING: You are running on a NUMA machine.
We suggest launching mongod like this to avoid performance problems:
numactl –-interleave=all mongod [other options]

于是要把启动命令改成:

sudo numactl --interleave=all mongod -f /etc/mongod.conf

[MongoDB] 安装MongoDB配置Replica Set的更多相关文章

  1. Mongodb安装和配置

    Mongodb之安装配置 安装 Mongodb的下载地址为Mongodb官网.下载时.你能够选择是安装包或者是压缩包. 下载完毕后.双击安装包并安装. 安装完毕后.你能够在安装文件夹看到下图中所见的文 ...

  2. MongoDB 安装与配置

    MongoDB下载 官方下载链接:https://www.mongodb.com/download-center/community MongoDB安装 简单,按提示安装即可.安装方式: 1. Com ...

  3. window下mongodb安装和配置

    mongodb安装和配置 1.下载:https://www.mongodb.com 2.解压到盘的根目录下,本人解压到D盘根目录 3.在软件根目录下新建一个文件夹data 4.再新建两个文件夹db.l ...

  4. Linux下MongoDB安装和配置(二)

    1. 下载MongoDB 下载地址:https://www.mongodb.com/download-center/community 这里选择的是:mongodb-linux-x86_64-4.0. ...

  5. MongoDB安装、配置和基本使用

    一.搭建MongoDB的yum源 如果安装epel扩展源,可以安装MongoDB2.4版本 如要安装3.0版本,需要自己配置yum源,官方提供的源只支持64位系统 # vim /etc/yum.rep ...

  6. MongoDB安装与配置

    参考文档:MongoDB官方文档 版本:3.6.4 从版本3.6开始,MongoDB需要Windows Server 2008 R2,Windows 7或更高版本. 第一步,在下载中心下载最新版本的M ...

  7. 【window】mongodb安装和配置

    最近要独立开发vue+mongodb+node的小项目,项目不大,但之前没了解过mongodb还是蛮不容易的,因为以前用MySQL的时候都是用的集成化的工具,完全不用写命令去启动,用mogodb首先需 ...

  8. mongoDB 安装和配置环境变量,超详细版本

    下载mongoDB进行安装:https://www.mongodb.com/                                                 到Community Se ...

  9. 【一】mongodb安装及配置

    一.mongodb安装 1.下载并解压 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.0.tgz tar ...

随机推荐

  1. 让IE6支持min-height,max-height等的方法

    1.IE6支持max-height解决方法    IE6支持最大高度解决CSS代码:.yangshi{max-height:1000px;_height:expression((document.do ...

  2. C++构造函数后面的冒号

    构造函数后加冒号是初始化表达式:有四种情况下应该使用初始化表达式来初始化成员:1:初始化const成员2:初始化引用成员3:当调用基类的构造函数,而它拥有一组参数时 4:当调用成员类的构造函数,而它拥 ...

  3. 第三百零三节,Django框架介绍——用pycharm创建Django项目

    Django框架介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内 ...

  4. MFC中的UpdateData()

    UpdateData()是MFC的窗口函数,用来刷新数据的,参数只有一个,默认为TRUE 简单的说: UpdateData(TRUE) == 将控件的值赋值给成员变量, UpdateData(FALS ...

  5. Unity使用JsonFX插件进行序列化

    孙广东  2015.6.25 Unity and JSON – Quick Guide: 相比較XML的沉重和密集,Json更加高效. Introduction: 什么是 Json ?假设你从未使用过 ...

  6. 云计算中auto-scaling 最早的来源

    什么是弹性?首先,整合计算资源,将计算资源池化,通过虚拟机按需使用计算资源;其次,按量计费,让用户能够根据使用量按月按时甚至按秒来进行付费. 不过,光有了这两条还不够.为什么?我举个例子: 很多做运维 ...

  7. 查看Centos系统最近一次启动时间和运行时间

    1.uptime命令 [spark@Master Log_Data]$ uptime 09:18:01 up 20:17,  1 user,  load average: 0.13, 0.12, 0. ...

  8. Shell 获取Shell所在目录

    SHELL_PATH=$(cd ")";pwd) echo $SHELL_PATH

  9. keepalived双BACKUP加nopreempt失效、手动监控服务脚步。

    keepalived双BACKUP加nopreempt不起作用,两个机器同时拥有vip, 排查几天发现是防火墙问题,啃爹. 打开  vi /etc/sysconfig/iptables 插入一条:-A ...

  10. mysql数据库不能远程访问的问题

    1.先暂停防火墙,检查是不是防火墙的问题. 2. 如若不是防火墙的问题,则可能是用户权限的问题. 这里创建一个用户来用于远程连接:首先登陆你的mysql数据库 命令: mysql -uroot -p ...