安装MongoDB配置ReplicaSet
来源:互联网 发布:淘宝免费视频教程 编辑:程序博客网 时间:2024/05/17 05:17
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-10gen
CentOS上的安装
配置yum源,创建文件:/etc/yum.repos.d/mongodb.repo
[mongodb]
name
=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1
安装命令:
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=27017
#每次启动后日志追加在后面,不会新建日志文件(默认)
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"
: 1,
"host"
:
"192.168.1.1"
},
{
"_id"
: 2,
"host"
:
"192.168.1.2"
},
{
"_id"
: 3,
"host"
:
"192.168.1.3"
,
"arbiterOnly"
:
true
}
]
});
{
"info"
:
"Config now saved locally. Should come online in about a minute."
,
"ok"
: 1
}
历史成功后需要等一段时间,他会选举Primary,然后查看Replica Set的状态:
test-
set
:
PRIMARY
> rs.status()
{
"set"
:
"test-set"
,
"date"
: ISODate(
"2014-02-21T10:28:55Z"
),
"myState"
: 7,
"members"
: [
{
"_id"
: 1,
"name"
:
"192.168.1.1:27017"
,
"health"
: 1,
"state"
: 1,
"stateStr"
:
"PRIMARY"
,
"uptime"
: 4086,
"optime"
:
Timestamp
(1392972480, 1),
"optimeDate"
: ISODate(
"2014-02-21T08:48:00Z"
),
"lastHeartbeat"
: ISODate(
"2014-02-21T10:28:54Z"
),
"lastHeartbeatRecv"
: ISODate(
"2014-02-21T10:28:53Z"
),
"pingMs"
: 0
},
{
"_id"
: 2,
"name"
:
"192.168.1.2:27017"
,
"health"
: 1,
"state"
: 2,
"stateStr"
:
"SECONDARY"
,
"uptime"
: 3997,
"optime"
:
Timestamp
(1392972480, 1),
"optimeDate"
: ISODate(
"2014-02-21T08:48:00Z"
),
"lastHeartbeat"
: ISODate(
"2014-02-21T10:28:54Z"
),
"lastHeartbeatRecv"
: ISODate(
"2014-02-21T10:28:55Z"
),
"pingMs"
: 0,
"syncingTo"
:
"192.168.131.15:27017"
},
{
"_id"
: 3,
"name"
:
"192.168.1.3:27017"
,
"health"
: 1,
"state"
: 7,
"stateStr"
:
"ARBITER"
,
"uptime"
: 5781,
"self"
:
true
}
],
"ok"
: 1
}
这样整个replica set就配置成功了,还是比较简单的。
KeyFile的设置
KeyFile是机器间用来进行权限认证的,如果没有设置KeyFile,在rs.initiate()的时候,会提示有其他机器没有ready,大概这个意思记不清了,反正有个error...
网上搜了一下这个错误,很多解释都是说,服务器异常关闭或者mongodb异常退出的时候,会留下一个锁文件"/var/lib/mongo/mongo.lock",需要把这个锁文件删除之后重启mongodb。我试了一下这个方法对我无效。
查看了一台机器上的log文件,发现里面说,有其他机器给他发送消息,但是需要在每台机器上配置key file。大概是这个意思,忘记截图了。
创建Key File用下面的语句:
openssl rand -base64 741
产生的字符串存到一个文本文件中,然后把这个文件的权限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配置ReplicaSet
- Mongodb的安装、主从配置、replicaSet配置
- Mongodb的安装、主从配置、replicaSet配置
- Mongodb的安装、主从配置、replicaSet配置
- Mongodb的安装、主从配置、replicaSet配置
- Mongodb的安装、主从配置、replicaSet配置
- Mongodb的安装、主从配置、replicaSet配置 linux
- 【Linux版】Mongodb的安装、主从配置、replicaSet配置
- mongodb的安装、单主机配置、主从配置、replicaSet副本集配置
- MongoDB ReplicaSet
- Basic ReplicaSet Deployment of MongoDB
- Mongodb ReplicaSet + Sharding集群实现
- 关于mongodb的replicaSet模式----mongodb
- mongoDB single db convert to replicaSet
- Mongodb中replicaset的搭建以及部署
- Mongodb在replicaset的secondary上补建索引
- MongoDB---简单的几步搭建ReplicaSet
- mongo配置副本集(replicaSet)
- 浅谈协方差矩阵
- tcp/ip模型
- CANoe学习3
- CALayer 和 CAGradientLayer简单使用
- 从此以后,使用Git
- 安装MongoDB配置ReplicaSet
- mybatis学习笔记 (部分资源来自网络)
- 七款Debug工具推荐:iOS开发必备的调试利器
- 安卓接口回调
- Reverse Linked List 链表逆转 简单题
- word2007不显示“审阅”选项卡
- ViewGroup 详解
- pdf文件转换成jpg方法详解
- K-means算法的实现