我在尝试使用MongoDB的副本集时的笔记

试验MongoDB的副本集时的备忘录

通过将多个数据库进程进行集群化,可以确保在机器宕机时具备冗余性以应对紧急情况。这就是所谓的故障转移。

所以,这个很容易。mongo万岁。node万岁。JavaScript万岁。

机器会使用最近的这个链接(http://qiita.com/items/4ea61f8ba0470ec3d5be)进行尝试。这次只需要关注图中下半部分的橙色区域,与路由器和虚拟IP部分无关。

MongoDBでReplica Setsを試した時のメモ

复制机清单

起初计划是3台电脑,但我们决定先用下面两台本地局域网内的电脑开始组装。之后会再增加一台。

192.168.1.11
192.168.1.12
192.168.1.13 (后来添加)

给每台机器安装npm。

sudo apt-get install mongodb
npm install mongoose@2.7.3

为了确保,版本是这样的。在mongoose的v3中,目前mongoose.connectSet变成了undefined,所以…。
※请参考下面的评论添加
添加备注 2016/10/03 如果使用mongoose@4.4.20的话

npm ls mongodb
└─┬ mongoose@2.7.3
  └── mongodb@1.1.2 

mongod -version
db version v2.0.4, pdfile version 4.5
Mon Aug 27 14:08:38 git version: nogitversion

暂时在局域网内使用两台电脑组建

首先,我们将192.168.1.11设为主服务器,192.168.1.12设为备用服务器…

我在每台电脑上都创建了相同的“db”和“log”目录,并尝试启动了mongod。

使用journal选项,将rest选项设置为可用,尝试使用端口27020。fork选项用于将进程变为守护进程。dbpath和logpath选项的用途可以直接从字面上理解。

mkdir -p ./mongodb/db1
mkdir -p ./mongodb/db1-log
mongod --rest --journal --replSet myset --port 27020 --dbpath ./mongodb/db1 --fork --logpath ./mongodb/db1-log/db.log --logappend

以下也是相同的内容

mkdir -p ./mongodb/db1
mkdir -p ./mongodb/db1-log
mongod --rest --journal --replSet myset --port 27020 --dbpath ./mongodb/db1 --fork --logpath ./mongodb/db1-log/db.log --logappend

设置

接下来,稍作休息后,将其设置为192.168.1.11。

mongo 192.168.1.11:27020

>config = {_id: 'myset', members: [
   {_id: 0, host: '192.168.1.11:27020'},
   {_id: 1, host: '192.168.1.12:27020'}
  ]
}
>rs.initiate(config);

已经完成了!

具体而言,对话会是这样的感觉。

hoge@192.168.1.11:~$ mongo 192.168.1.11:27020
MongoDB shell version: 2.0.4
connecting to: localhost:27020/test
> config = {_id: 'myset', members: [
...    {_id: 0, host: '192.168.1.11:27020'},
...    {_id: 1, host: '192.168.1.12:27020'}
...   ]
... }
{
        "_id" : "myset",
        "members" : [
                {
                        "_id" : 0,
                        "host" : "192.168.1.11:27020"
                },
                {
                        "_id" : 1,
                        "host" : "192.168.1.12:27020"
                }
        ]
}
> rs.initiate(config);
{
        "info" : "Config now saved locally.  Should come online in about a minute.",
        "ok" : 1
}

你动了吗?

hoge@192.168.1.11:~$ ps ax | grep mongo
  854 ?        Ssl   10:27 /usr/bin/mongod --config /etc/mongodb.conf
11481 pts/0    Sl+    0:00 mongod --rest --journal --replSet myset --port 27020 --dbpath ./mongodb/db1
16254 pts/1    S+     0:00 grep --color=auto mongo

hoge@192.168.1.12:~/usiku$ ps ax | grep mongo
26490 pts/4    Sl+    0:00 mongod --rest --journal --replSet myset --port 27020 --dbpath ./mongodb/db1
26796 pts/2    S+     0:00 grep --color=auto mongo

就是这个样子。顺便说一下,在这里,对每台机器的访问会显示主服务器和备用服务器提示。

hoge@192.168.1.11:~$  mongo 192.168.1.11:27020
MongoDB shell version: 2.0.4
connecting to: 192.168.1.11:27020/test
PRIMARY> 

hoge@192.168.1.12:~$ mongo 192.168.1.12:27020
MongoDB shell version: 2.0.4
connecting to: 192.168.1.12:27020/test
SECONDARY> 


exitで終了 helpでヘルプ

出了問題

当在三台机器上进行试验时,如果将PRIMARY杀掉,自动地会有SECONDARY中的一台顶替为PRIMARY并继续正常运行,就好像什么都没有发生一样…

即使在这个2台的配置中将PRIMARY杀掉,SECONDARY也不会晋升为PRIMARY。

这种配置下的投票系统在故障切换时无法确定谁应晋升为PRIMARY。(参考:http://www.mongodb.org/display/DOCS/Replica+Sets+-+Voting)

所以,如果明天有时间的话,我打算按照最初的计划再添加一台rs。

顺便提一句,如果再次给消除杀机的机器施加以下咒语的话…

mongod --rest --journal --replSet myset --port 27020 --dbpath ./mongodb/db1 --fork --logpath ./mongodb/db1-log/db.log --logappend

重新连接后,当在mongo localhost:27020上进行确认时,可以发现它已被降级为SECONDARY,而在此期间,那台一直努力工作的机器现在升级为PRIMARY。

努力就会得到认可。

尝试将arbiter机器作为第三台加入

将承担类似于192.168.1.11或12的副本的机器添加到rs.add方法中。

所以,日后如果需要的话可以随时添加多台。

然而,本次只需要通过rs.addArb方法添加一个名为arbiter的类型为辅助的机器来帮助判断在障碍发生时应该将哪台机器设为PRIMARY。

首先,192.168.1.13的命令行操作是相同的(尽管路径和日志目录名稍作修改以便更易理解)。

mkdir -p ./mongodb/db1-arbiter
mongod --rest --journal --replSet myset --port 27020 --dbpath ./mongodb/db1-arbiter --fork --logpath ./mongodb/db1-arbiter/db.log --logappend

所以,这种方法是从主机端发出的。添加为仲裁者,因此键入rs.addArb(‘192.168.1.13:27020’)。

hoge@192.168.1.11:~$  mongo 192.168.1.11:27020
MongoDB shell version: 2.0.4
connecting to: 192.168.1.11:27020/test
PRIMARY> rs.addArb('192.168.1.13:27020')

打开rs.status()并等待几秒钟至几十秒钟后,您可以查看已更改的内容。

您可以通过HTML查看信息。

当您访问 http://192.168.1.11:28020,即可访问到增加了1000的27020端口并以HTML形式显示的信息。

使用猫鼬

通常情况下,连接的方法如下,但是…

var piyodb = mongoose.createConnection('mongodb://localhost/piyo');

我們可以這樣使用。

//レプリカリスト
var ReplicaSets = ''
  + 'mongodb://192.168.1.11:27020/piyo,'
  + 'mongodb://192.168.1.12:27020/piyo,'
  + 'mongodb://192.168.1.13:27020/piyo,' //追加

// DB接続
var piyodb = mongoose.connectSet(ReplicaSets);

相关

摩擦的复制集合和多个WebSocket服务器的故障转移备注
http://qiita.com/toshirot/items/a555179e95990ca89bf7

请参考

复制集命令
http://www.mongodb.org/display/DOCS/Replica+Set+Commands

关于MongoDB的副本集概述:
http://d.hatena.ne.jp/ryopeko/20101005/1286262922
介绍MongoDB的复制和备份功能:

MongoDB的副本集:
http://d.hatena.ne.jp/rougeref/20110727

MongoDB的新功能:关于日志记录的详细信息

http://www.mongodb.org/display/DOCS/Journaling

使用MongoDB的REST接口。
链接:http://d.hatena.ne.jp/shokai/20110723/1311370610
链接:http://www.mongodb.org/display/DOCS/Http+Interface

配置MongoDB的复制集
http://inet-lab.naist.jp/mongodb-replica-set/

广告
将在 10 秒后关闭
bannerAds