Linux下如何配置MongoDB副本集
导读:本文共3883.5字符,通常情况下阅读需要13分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: MongoDB复制是将数据同步在多个服务器的过程。复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。复制还允许您从硬件故障和服务中断中恢复数据。配置环境这个教程里,我们会配置一个包括一个主节点以及两个副节点的副本集。为了达到这个目的,我们使用了3个运行在 VirtualBox 上的虚拟机。我会在这些虚拟机上安装... ...
目录
(为您整理了一些要点),点击可以直达。MongoDB复制是将数据同步在多个服务器的过程。复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。复制还允许您从硬件故障和服务中断中恢复数据。
配置环境
这个教程里,我们会配置一个包括一个主节点以及两个副节点的副本集。
为了达到这个目的,我们使用了3个运行在 VirtualBox 上的虚拟机。我会在这些虚拟机上安装 Ubuntu 14.04,并且安装 MongoDB 官方包。
我会在一个虚拟机实例上配置好所需的环境,然后将它克隆到其他的虚拟机实例上。因此,选择一个名为 master 的虚拟机,执行以下安装过程。
首先,我们需要给 apt 增加一个 MongoDB 密钥:
$sudoapt-keyadv--keyserverhkp://keyserver.ubuntu.com:80--recv7F0CEB10
然后,将官方的 MongoDB 仓库添加到 source.list 中:
$sudosu#echo"debhttp://repo.mongodb.org/apt/ubuntu"$(lsb_release-sc)"/mongodb-org/3.0multiverse"|sudotee/etc/apt/sources.list.d/mongodb-org-3.0.list
接下来更新 apt 仓库并且安装 MongoDB。
$sudoapt-getupdate$sudoapt-getinstall-ymongodb-org
现在对 /etc/mongodb.conf 做一些更改
auth=truedbpath=/var/lib/mongodblogpath=/var/log/mongodb/mongod.loglogappend=truekeyFile=/var/lib/mongodb/keyFilereplSet=myReplica
第一行的作用是表明我们的数据库需要验证才可以使用。keyfile 配置用于 MongoDB 节点间复制行为的密钥文件。replSet 为副本集设置一个名称。
接下来我们创建一个用于所有实例的密钥文件。
$echo-n"MyRandomStringForReplicaSet"|md5sum>keyFile
这将会创建一个含有 MD5 字符串的密钥文件,但是由于其中包含了一些噪音,我们需要对他们清理后才能正式在 MongoDB 中使用。
$echo-n"MyReplicaSetKey"|md5sum|grep-o"[0-9a-z]\+">keyFile
grep 命令的作用的是把将空格等我们不想要的内容过滤掉之后的 MD5 字符串打印出来。
现在我们对密钥文件进行一些操作,让它真正可用。
$sudocpkeyFile/var/lib/mongodb$sudochownmongodb:nogroupkeyFile$sudochmod400keyFile
接下来,关闭此虚拟机。将其 Ubuntu 系统克隆到其他虚拟机上。
这是克隆后的副节点1和副节点2。确认你已经将它们的MAC地址重新初始化,并且克隆整个硬盘。
请注意,三个虚拟机示例需要在同一个网络中以便相互通讯。因此,我们需要它们弄到“互联网”上去。
这里推荐给每个虚拟机设置一个静态 IP 地址,而不是使用 DHCP。这样它们就不至于在 DHCP 分配IP地址给他们的时候失去连接。
像下面这样编辑每个虚拟机的 /etc/networks/interfaces 文件。
在主节点上:
autoeth2ifaceeth2inetstaticaddress192.168.50.2netmask255.255.255.0
在副节点1上:
autoeth2ifaceeth2inetstaticaddress192.168.50.3netmask255.255.255.0
在副节点2上:
autoeth2ifaceeth2inetstaticaddress192.168.50.4netmask255.255.255.0
由于我们没有 DNS 服务,所以需要设置设置一下 /etc/hosts 这个文件,手工将主机名称放到此文件中。
在主节点上:
127.0.0.1localhostprimary192.168.50.2primary192.168.50.3secondary1192.168.50.4secondary2
在副节点1上:
127.0.0.1localhostsecondary1192.168.50.2primary192.168.50.3secondary1192.168.50.4secondary2
在副节点2上:
127.0.0.1localhostsecondary2192.168.50.2primary192.168.50.3secondary1192.168.50.4secondary2
使用 ping 命令检查各个节点之间的连接。
$pingprimary$pingsecondary1$pingsecondary2
配置副本集
验证各个节点可以正常连通后,我们就可以新建一个管理员用户,用于之后的副本集操作。
在主节点上,打开 /etc/mongodb.conf 文件,将 auth 和 replSet 两项注释掉。
dbpath=/var/lib/mongodblogpath=/var/log/mongodb/mongod.loglogappend=true#auth=truekeyFile=/var/lib/mongodb/keyFile#replSet=myReplica
在一个新安装的 MongoDB 上配置任何用户或副本集之前,你需要注释掉 auth 行。默认情况下,MongoDB 并没有创建任何用户。而如果在你创建用户前启用了 auth,你就不能够做任何事情。你可以在创建一个用户后再次启用 auth。
修改 /etc/mongodb.conf 之后,重启 mongod 进程。
$sudoservicemongodrestart
现在连接到 MongoDB master:
$mongo:27017
连接 MongoDB 后,新建管理员用户。
>useadmin>db.createUser({user:"admin",pwd:"})
重启 MongoDB:
$sudoservicemongodrestart
再次连接到 MongoDB,用以下命令将 副节点1 和副节点2节点添加到我们的副本集中。
>useadmin>db.auth("admin","myreallyhardpassword")>rs.initiate()>rs.add("secondary1:27017")>rs.add("secondary2:27017")
现在副本集到手了,可以开始我们的项目了。参照 官方驱动文档 来了解如何连接到副本集。如果你想要用 Shell 来请求数据,那么你需要连接到主节点上来插入或者请求数据,副节点不行。如果你执意要尝试用副本集操作,那么以下错误信息就蹦出来招呼你了。
myReplica:SECONDARY>myReplica:SECONDARY>showdatabases2015-05-10T03:09:24.131+0000EQUERYError:listDatabasesfailed:{"note":"fromexecCommand","ok":0,"errmsg":"notmaster"}atError()atMongo.getDBs(src/mongo/shell/mongo.js:47:15)atshellHelper.show(src/mongo/shell/utils.js:630:33)atshellHelper(src/mongo/shell/utils.js:524:36)at(shellhelp2):1:1atsrc/mongo/shell/mongo.js:47
如果你要从 shell 连接到整个副本集,你可以安装如下命令。在副本集中的失败切换是自动的。
$mongoprimary,secondary1,secondary2:27017/?replicaSet=myReplica
如果你使用其它驱动语言(例如,JavaScript、Ruby 等等),格式也许不同。
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
Linux下如何配置MongoDB副本集的详细内容,希望对您有所帮助,信息来源于网络。