MongoDB副本集部署

单节点部署

此部分的前提是你已经下载并且安装好了MongoDB,并能够正常运行。单节点上运行一个副本集,只能作为开发和测试使用,不能作为生产环境。

下面我们建立一个以rs0为名称的副本集。其中配置环境为ubuntu 12.10和MongoDB 2.4。

步骤:

1.        用下面的命令建立三个文件夹:

mkdir -p /srv/mongodb/rs0-0 /srv/mongodb/rs0-1 /srv/mongodb/rs0-2

2.        启动三个mongod进程,注意端口号不能相同,且未被占用。你可以使用三个终端来连接同一台Linux,然后分别在每个终端运行一条命令,一次来模拟使用的是三台服务器。

以下是启动三个mongod进程的命令:

mongod --port 27017 --dbpath /srv/mongodb/rs0-0 --replSet rs0 --smallfiles --oplogSize 128 --logpath /var/log/mongod1.log --fork
mongod --port 27018 --dbpath /srv/mongodb/rs0-1 --replSet rs0 --smallfiles --oplogSize 128--logpath /var/log/mongod2.log --fork
mongod --port 27019 --dbpath /srv/mongodb/rs0-2 --replSet rs0 --smallfiles --oplogSize 128--logpath /var/log/mongod3.log --fork

replSet参数后面跟着的是副本集名称;

smallfilesoplogSize是为了降低磁盘的占用率,在这里仅用于测试,生产环境并不推荐;

logpath参数指定的是日志保存的路径;

--fork是指将这个进程作为后台进程运行。

3.        现在启动一个mongo进程,连接上刚才启动的那三个进程的其中一个:

mongo --port 27017

4.        建立一个副本集的配置对象,用于初始化副本集。对象内容如下所示:

rsconf = {
_id: "rs0",
members: [
{
_id: 0,
host: "<hostname>:27017"
}
]
}

其中hostname是指你的服务器名称,或者ip地址。因为是本地,所以可以用localhost。


5.        用rs.initiate()这个方法来初始化副本集:

rs.initiate( rsconf )

6.        运行上条命令后会提示稍等一段时间才能够看到结果。现在用rs.conf()查看副本集群信息:

rs.conf()

你会发现只有一个节点成员,这就是你当前操作的节点。

7.        现在再用rs.add()命令把剩下的两个mongod进程添加到副本集中:

rs.add("<hostname>:27018")
rs.add("<hostname>:27019")

注意要将hostname替换成你的服务器名称。稍等片刻。

然后用rs.status()查看当前的副本集群信息,会发现现在副本集成员有三个了。至此单节点副本集就部署完成了。

你可以尝试先插入一些测试数据,然后关掉其中一个mongod进程,模拟节点故障。然后用mongo连接到新的主节点,再尝试往数据库插入或读取信息,看是否能正常读写。

多节点部署

多节点的生产环境与单节点的测试开发环境部署相差不大,只是mongod运行在不同的服务器上,但需确保在每个节点能够用名称解析。为了防止每次运行mongod的时候要添加繁多的参数,可以将参数保存到一个文件中,启动时用--config指定配置文件即可。

步骤

1.        首先指定三台服务器的名字,并将其加入到hostname文件中。其中服务器的IP地址和名称可以根据自己的实际环境进行修改。

服务器1:mdb1,10.6.12.79

服务器2:mdb2,10.6.12.80

服务器3:mdb3,10.6.12.81

服务器4:mdb4,10.6.12.82

配置好以后,用ping命令来相互测试是否能够解析服务器名称。

2.        编辑测试文件,文件名自定,这里命名为config.conf。内容如下:

port = 27017
#需要监听的客户端IP地址,即只接受来自这部分的IP连接,提高了安全性。(默认为接受所有的IP请求)
bind_ip = 10.6.12.79
dbpath = /srv/mongodb
fork = true
replSet = rs0

3.        将配置文件用scp命令复制到其他的两台服务器,并使用如下命令启动mongod进程:

mongod --config /src/config.conf 

其中/src/config.conf为配置文件的路径。

4.        用mongo连接到其中一台的mongod进程,并用rs.initiate()来初始化副本集:

> rs.initiate()
{
	"info2" : "no configuration explicitly specified -- making one",
	"me" : "mdb2:27017",
	"info" : "Config now saved locally.  Should come online in about a minute.",
	"ok" : 1
}

5.        用rs.conf()查看当前状况:

> rs.conf()
{
	"_id" : "rs0",
	"version" : 1,
	"members" : [
		{
			"_id" : 0,
			"host" : "mdb2:27017"
		}
	]
}

6.        用rs.add()来添加其他的三个节点到副本集中:

> rs.add("mdb1:27017")
{ "ok" : 1 }
rs0:PRIMARY> rs.add("mdb3:27017")
{ "ok" : 1 }

同时再添加一台仲裁节点:

rs0:PRIMARY> rs.addArb("mdb4:27017")
{ "ok" : 1 }

从上面的内容中可以看到,开始的时候没有出现rs0:PRIMARY,当添加了一个成员后这个节点就成为主节点了,这其实也说明你添加的节点已经成功加入到了这个副本集中。

至此集群节点部署完成。但在实际应用中,因为需要在不同的服务器上来回操作,所以建议使用脚本来自动启动部署过程。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值