MongoDB是一个NoSQL数据库,具有内置的复制和分片等强大功能。这使您可以通过在其中分发内容,将您的数据库扩展到尽可能多的服务器。 在安装任何MongoDB相关软件之前,我们需要确保我们的硬件被正确选择,软件被微调。
硬盘驱动器
如果您可以选择选择要使用的硬盘驱动器,请使用RAID1中的企业级双SSD驱动器。正如我们以前所述,他们是伟大的表现,实际上救你的钱。 在Linux中编辑您的/ etc / fstab文件,并确保禁用将在MongoDB中使用的安装上的访问时间日志记录。在第4列添加noatime: 重新安装分区:[root@mongodb1 ~]# mount -o remount /验证新设置是否生效:
[root@mongodb1 ~]# mount
/dev/sda on / type ext4 (rw,noatime)
2. CPU和内存
在管理程序上将MongoDB设置为VM将允许您以后扩展RAM和CPU核心。应分配的CPU内核和RAM的数量取决于您的基础架构需求和预算。3.优化
最有用的提示是优化您的数据库查询:- 为常用搜索或排序的查询添加索引。
- 使用MongoDB的explain()命令。
- 限制搜索结果和返回的限制字段。
安装
此过程在mongodb1,mongodb2和mongodb3上将是相同的。在CentOS上安装MongoDB非常简单。通过编辑添加以下存储库/etc/yum.repos.d/10gen.repo
[10gen] name=10gen baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64 gpgcheck=0 enabled=1现在安装软件包:
[root@mongodb1 ~]# yum -y install mongo-10gen mongo-10gen-server启用MongoDB在重新启动时启动,并启动服务:
[root@mongodb1 ~]# chkconfig mongod on && service mongod start
Starting mongod: forked process: 1387 all output going to: /var/log/mongo/mongod.log child process started successfully, parent exiting [ OK ]现在你应该能够看到关于http:// SERVER:28017 /
设置主从副本集
我们将分配mongodb1作为主服务器。将“master = true”添加到/etc/mongod.conf并执行service mongod restart而mongodb2和mongodb3将被设置为从机。将“slave = true”,“source = mongodb1”添加到/etc/mongod.conf并执行
service mongod restart现在,我们应该使用密码保护此数据库,或者向端口27017(MongoDB)和28017(Web界面)添加iptables规则。 要创建具有密码的用户:
> use test
> db.addUser('admin', 'password'); { "user" : "admin", "readOnly" : false, "pwd" : "90f500568434c37b61c8c1ce05fdf3ae", "_id" : ObjectId("50eaae88790af41ffffdcc58") }我们还应该添加防火墙规则来限制其他MongoDB服务器,我们的IP,并保存:
[root@mongodb1 ~]# iptables -N MongoDB [root@mongodb1 ~]# iptables -I INPUT -s 0/0 -p tcp --dport 27017 -j MongoDB [root@mongodb1 ~]# iptables -I INPUT -s 0/0 -p tcp --dport 28017 -j MongoDB [root@mongodb1 ~]# iptables -I MongoDB -s 127.0.0.1 -j ACCEPT [root@mongodb1 ~]# iptables -I MongoDB -s 192.34.57.64 -j ACCEPT [root@mongodb1 ~]# iptables -I MongoDB -s 192.34.56.123 -j ACCEPT [root@mongodb1 ~]# iptables -I MongoDB -s 192.34.57.162 -j ACCEPT [root@mongodb1 ~]# iptables -A MongoDB -s 0/0 -j DROP [root@mongodb1 ~]# /etc/init.d/iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]在其他MongoDB服务器(mongodb2,mongodb3)上重复此过程。 如果你在前端使用PHP,你需要为PHP安装MongoDB模块:
[root@webserver ~]# pecl install mongo [root@webserver ~]# echo extension=mongo.so >> `php -i | grep /php.ini | awk '{print $5}'` [root@webserver ~]# service httpd restart
使用数据填充数据库
现在我们可以开始测试我们的新设置。您可以通过键入mongo从命令shell访问数据库:[root@mongodb1 ~]# mongo
MongoDB shell version: 2.2.2 connecting to: test让我们输入纽约时报畅销书列表到数据库进行测试:
> db.books.save( { title: 'Safe Haven', author: 'Nicholas Sparks' } ) > db.books.save( { title: 'Gone Girl', author: 'Gillian Flynn' } ) > db.books.save( { title: 'The Coincidence Of Callie And Kayden', author: 'Jessica Sorensen' } ) > db.books.save( { title: 'Fifty Shades of Grey', author: 'E.L. James' } ) > db.books.save( { title: 'Hopeless', author: 'Colleen Hoover' } )显示所有结果:
> db.books.find() { "_id" : ObjectId("50eaaa4b633625147f205994"), "title" : "Safe Haven", "author" : "Nicholas Sparks" } { "_id" : ObjectId("50eaaa62633625147f205995"), "title" : "Gone Girl", "author" : "Gillian Flynn" } { "_id" : ObjectId("50eaaa8d633625147f205996"), "title" : "The Coincidence Of Callie And Kayden", "author" : "Jessica Sorensen" } { "_id" : ObjectId("50eaaaa0633625147f205997"), "title" : "Fifty Shades of Grey", "author" : "E.L. James" } { "_id" : ObjectId("50eaaab3633625147f205998"), "title" : "Hopeless", "author" : "Colleen Hoover" }您应该能够在mongodb2和mongodb3上看到相同的条目,因为它们是副本集: 您可以输入这些图书的各种值,例如发布商的名称,ISBN号码,平均客户评分,书面语言等。但是,为了优化查询,最好限制结果数量和返回的字段数。 例如,为了只返回2个结果,我们在结束时使用limit():
> db.books.find( {}, { title : 1 , author: 1 } ).sort( { timestamp : -1 } ).limit(2) { "_id" : ObjectId("50eaaa4b633625147f205994"), "title" : "Safe Haven", "author" : "Nicholas Sparks" } { "_id" : ObjectId("50eaaa62633625147f205995"), "title" : "Gone Girl", "author" : "Gillian Flynn" }一旦达到当前设置的最大容量,就可以开始分割数据库。我们将在未来的博文中讨论这个问题。
作者:Bulat Khamitov