基于MongoDb创建NoSQL分布式的数据库

1,在Ubuntu上安装MongoDB

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list
sudo apt-get update
sudo apt-get install -y mongodb-org

2, 创建3个虚拟机,分别是wzq-mongo1, wzq-mongo2, wzq-mongo3.

其中三个虚拟机分别对应的IP如下

wzq-mongo1  - 》 192.168.0.60,

wzq-mongo2 -》   192.168.0.64,

wzq-mongo3 -》    192.168.0.69

3, 在每个虚拟机上,编辑mongodb.conf

sudo vim /etc/mongodb.conf
改变如下设置

replSet = rs0


bind_ip = 192.168.0.60
由于mongodb 3.0会通过主机名称启动,所以有时候需要修改hosts里面主机名对应的ip

将主机名对应的

127.0.1.1  wzq-mongo1


修改为

192.168.0.60 wzq-mongo1

然后重启mongodb

	sudo service mongod restart


4, 在wzq-mongo1上启动mongodb

	mongo 192.168.0.60
5, 初始化replication

	mongo> rs.initiate()

6, 然后在这个新的rs上面添加成员,分别如下

rs0:PRIMARY> rs.add("192.168.0.60:27017")
rs0:PRIMARY> rs.add("192.168.0.64:27017")
rs0:PRIMARY> rs.add("192.168.0.69:27017")

7, 查看目前的状态

rs0:PRIMARY> rs.status()

会得到如下的结果

rs0:PRIMARY> rs.status()
{
	"set" : "rs0",
	"date" : ISODate("2015-03-23T14:47:56.002Z"),
	"myState" : 1,
	"members" : [
		{
			"_id" : 0,
			"name" : "192.168.0.60:27017",
			"health" : 1,
			"state" : 1,
			"stateStr" : "PRIMARY",
			"uptime" : 2303,
			"optime" : Timestamp(1427121702, 1),
			"optimeDate" : ISODate("2015-03-23T14:41:42Z"),
			"electionTime" : Timestamp(1427121785, 1),
			"electionDate" : ISODate("2015-03-23T14:43:05Z"),
			"configVersion" : 89294,
			"self" : true
		},
		{
			"_id" : 1,
			"name" : "192.168.0.69:27017",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 290,
			"optime" : Timestamp(1427121702, 1),
			"optimeDate" : ISODate("2015-03-23T14:41:42Z"),
			"lastHeartbeat" : ISODate("2015-03-23T14:47:54.312Z"),
			"lastHeartbeatRecv" : ISODate("2015-03-23T14:47:54.059Z"),
			"pingMs" : 811,
			"configVersion" : 89294
		},
		{
			"_id" : 2,
			"name" : "192.168.0.64:27017",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 290,
			"optime" : Timestamp(1427121702, 1),
			"optimeDate" : ISODate("2015-03-23T14:41:42Z"),
			"lastHeartbeat" : ISODate("2015-03-23T14:47:55.770Z"),
			"lastHeartbeatRecv" : ISODate("2015-03-23T14:47:55.810Z"),
			"pingMs" : 992,
			"configVersion" : 89294
		}
	],
	"ok" : 1
}


8, 测试

rs0:PRIMARY> db.test.insert({name:"wang",code:"w"})
这样就可以在另外两个虚拟机上查看新添加的结果


恭喜你,

在这个过程中,有可能出现如下的问题


问题一

Failed global initialization: BadValue Invalid or no user locale set. Please ensure LANG and/or LC_* environment variables are set correctly.
解决办法

$ export LC_ALL=C



问题二

Error: error: { "$err" : "not master and slaveOk=false", "code" : 13435 }

解决办法

rs.slaveOk()



问题三

一个结点一直是RECOVERING的状态

一般的解决办法是

1,从主结点上,把这个SECONDARY结点删除

rs.remove("192.168.0.64:27017")

2,关闭这个mongodb

3, 删除这个secondary结点上面的数据文件

删除/var/lib/mongodb 下面的所有的文件

4,重启这个secondary结点

5,在主结点上添加这个secondary结点

rs0:PRIMARY> rs.add("192.168.0.64:27017")


问题四, 修改replica set的配置

如果在配置文件里面修改了配置,但是在启动replica set的时候,还是使用旧的配置,

那就可以通过如下的语句在mongo里面强制使用新的配置

conf = rs.conf()
cfg.members[0].host="192.168.0.64:27018"
cfg.members[1].host="192.168.0.69:27018"
cfg.members[2].host="192.168.0.60:27018"
rs.reconfig(cfg,{force:true})







你可能感兴趣的:(mongodb,数据,NoSQL,分布式,initialization)