设为首页 加入收藏

TOP

搭建高可用MongoDB集群副本(一)
2015-11-21 02:07:55 来源: 作者: 【 】 浏览:5
Tags:搭建 可用 MongoDB 集群 副本

工作中使用到了mongo,就自己研究了一下,总结了一下,会遇到的一些问题,有不对的地方还请各位牛人指导。

简单说一下

副本集具有多个副本保证了容错性,就算一个副本挂掉了还有很多副本存在

主节点挂掉了,整个集群内会自动切换

副本集中的副本节点在主节点挂掉后通过心跳机制检测到后,就会在集群内发起主节点的选举机制,自动选举一位新的主服务器

?

我们来看看mongoDB副本集的架构图:(注:此图是网上切下来的,比我画的好)

?

\

主服务器挂掉后的架构如下图:

?

\

?

如下是我的布署操作

?

我用的是VMware 11虚拟机

系统是CentOS-6.3-x86_64 系统

使用的数据库是 mongodb-linux-x86_64-2.0.4

用了三个虚拟系统

ip 192.168.216.128 192.168.216.129 192.168.216.130

用到的端品分别是 10001 10002 10003

192.168.216.128当副本集主节点 其它做为副本集副本节点

?

开始布署

1、 分别在每个系统中使用 su切换用户身份如下图:

\

2、切记一定要在每个系统中关闭系统防火墙,因为在后面配置副本集时,这三台系统会互相求请,如果未关防火墙,配置是通不过的,这也是我在配置时遇到的问题

命令: service iptables stop

如图:

\

?

3,把你下载的mongodb的安装程序包上传到每个系统然后解压

?

4. 分别在每个系统下创建副本集文件夹

如何该命令执行不了请检查权限

?

mkdir -p replSet/data

?

5.分别在每个系统上启动mongodb 并使用 ps -aux|grep mongod 命令查看是否启动

mongodb-linux-x86_64-2.0.4/bin/mongod --replSet application --dbpath replSet/data/ --port 10001 -logpath replSet/replSet.log -fork

mongodb-linux-x86_64-2.0.4/bin/mongod --replSet application --dbpath replSet/data/ --port 10002 --logpath replSet/replSet.log -fork

mongodb-linux-x86_64-2.0.4/bin/mongod --replSet application --dbpath replSet/data/ --port 10003 --logpath replSet/replSet.log -fork

?

如其中一个切图:

\

?

6.初始化副本集

在其中一个系统中登陆mongodb

命令 mongodb-linux-x86_64-2.0.4/bin/mongo 192.168.216.128:10001

使用admin数据库

如下图:

\

?

定义副本集配置变量,这里的 _id:”application” 和上面命令参数“ –replSet application” 要保持

config ={_id:"application",members:[{_id:0,host:"192.168.216.128:10001"},{_id:1,host:"192.168.216.129:10002"},{_id:2,host:"192.168.216.130:10003"}]}

如图命令和输出

\

?

初始化副本配置

命令: rs.initiate(config);

输出结果:

{
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" : 1
}

如果输出如下:表示192.168.216.129:10002端口访问不到请检查该系统下10002端口的mongodb是否启动

rs.initiate(config);
{
"errmsg" : "couldn't initiate : need all members up to initiate, not ok : 192.168.216.129:10002",
"ok" : 0
}

?

查看集群节点的状态

命令: rs.status(); 输出结果如下图 \

?

此时整个副本集已经搭建成功

7.开始测试

在主节点上连接到数据库

命令:mongodb-linux-x86_64-2.0.4/bin/mongo 192.168.216.128:10001

?

建立test 数据库。

命令: use test; 往testdb表插入数据。 命令: db.testdb.insert({"mongodb":"mongodbtest"}) 在副本节点 192.168.216.129 192.168.216.130 上连接到mongodb查看数据是否复制过来。 如我在130上查看命令如下 mongodb-linux-x86_64-2.0.4/bin/mongo 192.168.216.130:10003 进入后输入如下命令进入test数据库 use test 执行 db.testdb.find()查看表 报如下错: error: { "$err" : "not master and slaveok=false", "code" : 13435 } 解决办法如下 输入 rs.slaveOk(); 然后再执行如上查看表操作 #输出如下 { "_id" : ObjectId("55bb3495ce19b28f7ea77e81"), "mongodb" : "mongodbtest" } 操作如下切图 \

8.测试副本集故障转移功能,也就是主节点挂掉后,副节点变为主节点

先停落主节点 128

我是直接kill 掉

在主节点系统上:

命令: ps -aux|grep mongod 查出mongodb启动的端口并杀掉

我查出的端口是 25305

命令 : kill -9 25305

?

如图

\

?

连接到其它两个系统进入mongodb数据库,会有其中一个变为主节点,辨认是否为主机点 如:出现primary表示为主节点

?

如下查看示范例子

\

?

查看整个集群的状态,可以看到128为状态不可达。

mongodb-linux-x86_64-2.0.4/bin/mongo 192.168.216.129:10002

rs.status();

输出如下

?

{
"set" : "application",
"date" : ISODate("2015-07-31T09:04:00Z"),
"myState" : 1,
"syncingTo" : "192.168.216.128:10001",
"members" : [
{
"_id" : 0,
"name" : "192.168.216.128:10001",
"health" : 0,
"state" : 8,
"stateStr" : "(not reachable/healthy)",
"uptime" : 0,
"optime" : {
"t" : 1438332053000,
"i" : 1
},
"optimeDate" : ISODate("2015-07-31T08:40:53Z"),
"lastHeartbeat" : ISODate("2015-07-31T09:00:17Z"),
"pingMs" : 0,
"errmsg" : "socket exception"
},
{
"_id" : 1,
"name" : "192.168.216

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇【Hibernate一】概述及入门 下一篇nodejs安装redis数据库及配置

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: