MongoDB集群与LBS应用系列(一)
1. 概念
MongoDB作为著名的NoSQL,早已非常流行。它的地理应用也非常成熟,被foursquare用于生产环境也已经多时。本文主要记录今年6月份的一个地理产品中,使用MongoDB的过程和遇到的一些问题以及解决方案。我们在原型系统搭建时候,使用了三台机器,搭建MongoDB ReplicationSet 集群,作为地理数据库以使用。
2. 集群部署
2.1 硬件资源
三台操作系统为CentOS 64bit version6.4的服务器,IP地址和域名
192.168.2.22 mongodb0.ventlam.com 192.168.2.23 mongodb1.ventlam.com 192.168.2.24 mongodb2.ventlam.com
2.2 软件安装
2.2.1 创建MONGODB专有的软件源
下载并安装mongo 2.4.5版本,(3台机器分别执行)
vim /etc/yum.repos.d/10gen.repo
- 添加以下源列表
[10gen] name=10gen Repository baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64 gpgcheck=0 enabled=1
* 安装MongoDB
yum install mongo-10gen mongo-10gen-server
2.2.2 REPLICATION SET 集群搭建
部署生产环境下的MongoDB ReplicationSet ,需要数据库部署在尽可能隔离的机器上(每个数据库部署在不同的物理机器,使用不同的网络和不同的电源)。
2.2.2.1 需要配置mongodb 通过域名能够访问
修改/etc/host或者配置DNS实现(3台机器分别执行)
vim /etc/host
添加如下命令
192.168.2.22 mongodb0.ventlam.com 192.168.2.23 mongodb1.ventlam.com 192.168.2.24 mongodb2.ventlam.com
修改数据库配置文件(3台机器分别执行)
vim /etc/mongod.conf
在配置文件加入以下参数:
port = 27017 dbpath = /mnt/mongo replSet = rs0
启动数据库 (3台机器分别执行) 创建数据目录 mkdir /mnt/mongodb/,并修改配置文件启动mongodb
vim /etc/rc.d/init.d/mongod
启动
mongod service mongod start
添加开机启动
chkconfig mongod on
2.2.2.2 检查三台机器数据库是否可以互联
首先开放27017端口 (3台机器分别执行)
/sbin/iptables -I INPUT -p tcp --dport 27017 -j ACCEPT
/etc/rc.d/init.d/iptables save
然后分别检查连接情况,在所有机器输入以下命令:
mongo --host mongodb1.ventlam.com --port 27017 mongo --host mongodb2.ventlam.com --port 27017
如果都可以进入mongo shell界面,即可。否则,请检查防火墙规则。
2.2.2.3 配置repilcation set
进入mongo shell mongo 输入以下配置命令(只需要在任意一台机器执行)
rsconf = { \_id: "rs0",
members: [ { _id: 0, host: "mongodb0.ventlam.com" },
{ _id: 1, host: "mongodb1.ventlam.com" },
{ _id: 2, host: "mongodb2.ventlam.com" } ] }
2.2.2.4 初始化
rsconf rs.initiate(rsconf)
查看rsconf配置情况
rs.conf()
如果返回下列值,证明mongodb集群搭建成功
{ "_id" : "rs0", "version" : 1,
"members" : [ { "\_id" : 0, "host" : "mongodb0.ventlam.com:27017" },
{ "\_id" : 1, "host" : "mongodb1.ventlam.com:27017" },
{ "\_id" : 2, "host" : "mongodb2.ventlam.com:27017" } ] }
2.2.2.5 添加删除数据实例
rs.add("<hostname>:27017")
rs.remove("<hostname>:27017")
本作品由VentLam创作,采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。