mongodb部署replicasets副本集实现高可用解决方案详细过程.docx

上传人:b****4 文档编号:27229009 上传时间:2023-06-28 格式:DOCX 页数:19 大小:59.47KB
下载 相关 举报
mongodb部署replicasets副本集实现高可用解决方案详细过程.docx_第1页
第1页 / 共19页
mongodb部署replicasets副本集实现高可用解决方案详细过程.docx_第2页
第2页 / 共19页
mongodb部署replicasets副本集实现高可用解决方案详细过程.docx_第3页
第3页 / 共19页
mongodb部署replicasets副本集实现高可用解决方案详细过程.docx_第4页
第4页 / 共19页
mongodb部署replicasets副本集实现高可用解决方案详细过程.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

mongodb部署replicasets副本集实现高可用解决方案详细过程.docx

《mongodb部署replicasets副本集实现高可用解决方案详细过程.docx》由会员分享,可在线阅读,更多相关《mongodb部署replicasets副本集实现高可用解决方案详细过程.docx(19页珍藏版)》请在冰豆网上搜索。

mongodb部署replicasets副本集实现高可用解决方案详细过程.docx

mongodb部署replicasets副本集实现高可用解决方案详细过程

NoSQL的产生就是为了解决大数据量、高扩展性、高性能、灵活数据模型、高可用性。

但是光通过主从模式的架构远远达不到上面几点,由此MongoDB设计了副本集和分片的功能,先来用用副本集:

1,设置yum源安装

创建/etc/yum.repos.d/mongodb-enterprise.repo文件,这样就可以使用yum来安装mongodb了。

[mongodb-org-3.0]

name=MongoDBRepository

baseurl=https:

//repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.0/x86_64/

gpgcheck=1

enabled=1

gpgkey=https:

//www.mongodb.org/static/pgp/server-3.0.asc

每一个release版本的.repo文件可以在repository找到,记住奇数镜像版本(比如e.g.2.5)是开发版本,放在生成环境是不太合适的。

2,源码安装

2.1下载安装包

在官方网站可以下载到比较新的版本,下载地址:

https:

//www.mongodb.org/dr/fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.3.tgz/download;

我这里下载的是稳定版本:

mongodb-linux-x86_64-3.0.3.tgz,安装也是用的3.0.3;3.0.3的下载地址为:

2.2解压安装

tar-xvfmongodb-linux-x86_64-3.0.3.tgz-C/usr/local/

3启动3个mongodb服务

安装mongodbreplicasets,至少需要3台linux服务器,而初始化副本集合,本来应该是3台服务器,但是这里只是测试环境,启用了3个mongodb端口进程来来模拟3个mongodb的服务器达到一样的效果,在实际中,可以部署在多台mongodb服务器上,如下表所示:

Mongodb主机

服务器端口地址

默认角色

mongodb主机1

localhost:

27017

primary

mongodb主机2

localhost:

27018

secondary

mongodb主机3

localhost:

27019

secondary

开始启动3个mongodb服务:

#启动第一个mongodb27017,默认为primary服务器

mkdir-p/data/mongodb/log27017

mkdir-p/data/mongodb/data27017

/usr/local/mongodb-linux-x86_64-3.0.3/bin/mongod--replSetrepset--port27017--dbpath/data/mongodb/data27017--oplogSize2048--logpath/data/mongodb/log27017/mongod.log&

#启动第二个mongodb27018

mkdir-p/data/mongodb/log27018

mkdir-p/data/mongodb/data27018

/usr/local/mongodb-linux-x86_64-3.0.3/bin/mongod--replSetrepset--port27018--dbpath/data/mongodb/data27018--oplogSize2048--logpath/data/mongodb/log27018/mongod.log&

#启动第三个mongodb27019

mkdir-p/data/mongodb/log27019

mkdir-p/data/mongodb/data27019

/usr/local/mongodb-linux-x86_64-3.0.3/bin/mongod--replSetrepset--port27019--dbpath/data/mongodb/data27019--oplogSize2048--logpath/data/mongodb/log27019/mongod.log&

4添加replicasets配置

在任何一台mongodb实例上登录,进入admin库,执行config命令:

>useadmin

switchedtodbadmin

>

config={_id:

"repset",members:

[

...{_id:

0,host:

"mongodb_server:

27017"},

...{_id:

1,host:

"mongodb_server:

27018"},

...{_id:

2,host:

"mongodb_server:

27019"}]

...};

>config={_id:

"repset",members:

[

......{_id:

0,host:

"mongodb_server:

27017"},

......{_id:

1,host:

"mongodb_server:

27018"},

......{_id:

2,host:

"mongodb_server:

27019"}]

......};

{

"_id":

"repset",

"members":

[

{

"_id":

0,

"host":

"mongodb_server:

27017"

},

{

"_id":

1,

"host":

"mongodb_server:

27018"

},

{

"_id":

2,

"host":

"mongodb_server:

27019"

}

]

}

>

5初始化副本集

#初始化副本集配置,使用rs.initiate(config);命令

rs.initiate(config);

>rs.initiate(config);

{"ok":

1}

repset:

SECONDARY>

6查看replicasets状态

看到config配置里面的第一个默认为primary,后面的都为secondary,然后查看"optime":

Timestamp(1465641737,1),如果集合中的mongodb的optime一致,表是集群中各个mongodb数据是保持一致性的:

#随意登录一个mongodb服务

[root@oracle_master~]#/usr/local/mongodb-linux-x86_64-3.0.3/bin/mongolocalhost:

27017

MongoDBshellversion:

3.0.3

connectingto:

localhost:

27017/test

Serverhasstartupwarnings:

2016-06-10T07:

56:

33.333-0700ICONTROL[initandlisten]**WARNING:

Youarerunningthisprocessastherootuser,whichisnotrecommended.

2016-06-10T07:

56:

33.333-0700ICONTROL[initandlisten]

repset:

PRIMARY>useadmin

switchedtodbadmin

repset:

PRIMARY>

#查看状态如下:

repset:

PRIMARY>rs.status();

{

"set":

"repset",

"date":

ISODate("2016-06-10T15:

04:

54.045Z"),

"myState":

1,

"members":

[

{

"_id":

0,

"name":

"mongodb_server:

27017",

"health":

1,

"state":

1,

"stateStr":

"PRIMARY",

"uptime":

501,

"optime":

Timestamp(1465571046,1),

"optimeDate":

ISODate("2016-06-10T15:

04:

06Z"),

"electionTime":

Timestamp(1465571050,1),

"electionDate":

ISODate("2016-06-10T15:

04:

10Z"),

"configVersion":

1,

"self":

true

},

{

"_id":

1,

"name":

"mongodb_server:

27018",

"health":

1,

"state":

2,

"stateStr":

"SECONDARY",

"uptime":

47,

"optime":

Timestamp(1465571046,1),

"optimeDate":

ISODate("2016-06-10T15:

04:

06Z"),

"lastHeartbeat":

ISODate("2016-06-10T15:

04:

52.493Z"),

"lastHeartbeatRecv":

ISODate("2016-06-10T15:

04:

52.612Z"),

"pingMs":

1,

"configVersion":

1

},

{

"_id":

2,

"name":

"mongodb_server:

27019",

"health":

1,

"state":

2,

"stateStr":

"SECONDARY",

"uptime":

47,

"optime":

Timestamp(1465571046,1),

"optimeDate":

ISODate("2016-06-10T15:

04:

06Z"),

"lastHeartbeat":

ISODate("2016-06-10T15:

04:

52.642Z"),

"lastHeartbeatRecv":

ISODate("2016-06-10T15:

04:

52.642Z"),

"pingMs":

0,

"lastHeartbeatMessage":

"couldnotfindmembertosyncfrom",

"configVersion":

1

}

],

"ok":

1

}

repset:

PRIMARY>

7,查看后台日志

可以看到27107的mongodb默认成为了primary,而27018和27019的成为了secondary了:

[root@oracle_master~]#tail-f/data/mongodb/log27017/mongod.log

2016-06-11T03:

42:

19.664-0700IREPL[ReplicationExecutor]replSetelectionsucceeded,assumingprimaryrole

2016-06-11T03:

42:

19.664-0700IREPL[ReplicationExecutor]transitiontoPRIMARY

2016-06-11T03:

42:

19.686-0700IREPL[ReplicationExecutor]Membermongodb_server:

27019isnowinstateSTARTUP2

2016-06-11T03:

42:

19.738-0700IREPL[rsSync]transitiontoprimarycomplete;databasewritesarenowpermitted

2016-06-11T03:

42:

22.798-0700INETWORK[initandlisten]connectionacceptedfrom192.168.136.128:

18197#6(4connectionsnowopen)

2016-06-11T03:

42:

22.812-0700INETWORK[initandlisten]connectionacceptedfrom192.168.136.128:

18198#7(5connectionsnowopen)

2016-06-11T03:

42:

22.849-0700INETWORK[conn6]endconnection192.168.136.128:

18197(4connectionsnowopen)

2016-06-11T03:

42:

22.906-0700INETWORK[conn7]endconnection192.168.136.128:

18198(3connectionsnowopen)

2016-06-11T03:

42:

23.668-0700IREPL[ReplicationExecutor]Membermongodb_server:

27018isnowinstateSECONDARY

2016-06-11T03:

42:

23.689-0700IREPL[ReplicationExecutor]Membermongodb_server:

27019isnowinstateSECONDARY

8,验证replicasets数据一致性

(1)先进去主库primary的mongodb上,录入数据:

#登录primary主库

[root@oracle_mastermongodb]#/usr/local/mongodb-linux-x86_64-3.0.3/bin/mongolocalhost:

27017

MongoDBshellversion:

3.0.3

connectingto:

localhost:

27017/test

Serverhasstartupwarnings:

2016-06-11T03:

41:

07.938-0700ICONTROL[initandlisten]**WARNING:

Youarerunningthisprocessastherootuser,whichisnotrecommended.

2016-06-11T03:

41:

07.938-0700ICONTROL[initandlisten]

repset:

PRIMARY>

#录入数据

repset:

PRIMARY>useyes_db;

switchedtodbyes_db

repset:

PRIMARY>db.yes_users.insert({"uid":

"20160611_0001"},{"uname":

"tim.man"});

WriteResult({"nInserted":

1})

repset:

PRIMARY>

(2)去第一个备库27018上,验证数据,有了yes_users表的数据,如下:

[root@oracle_mastermongodb]#/usr/local/mongodb-linux-x86_64-3.0.3/bin/mongolocalhost:

27018

MongoDBshellversion:

3.0.3

connectingto:

localhost:

27018/test

Serverhasstartupwarnings:

2016-06-11T03:

41:

14.305-0700ICONTROL[initandlisten]**WARNING:

Youarerunningthisprocessastherootuser,whichisnotrecommended.

2016-06-11T03:

41:

14.305-0700ICONTROL[initandlisten]

repset:

SECONDARY>useyes_db;

switchedtodbyes_db

repset:

SECONDARY>showtables;

2016-06-11T04:

03:

02.088-0700EQUERYError:

listCollectionsfailed:

{"note":

"fromexecCommand","ok":

0,"errmsg":

"notmaster"}

atError(

atDB._getCollectionInfosCommand(src/mongo/shell/db.js:

646:

15)

atDB.getCollectionInfos(src/mongo/shell/db.js:

658:

20)

atDB.getCollectionNames(src/mongo/shell/db.js:

669:

17)

atshellHelper.show(src/mongo/shell/utils.js:

625:

12)

atshellHelper(src/mongo/shell/utils.js:

524:

36)

at(shellhelp2):

1:

1atsrc/mongo/shell/db.js:

646

#mongodb默认是从主节点读写数据的,副本节点上不允许读,需要设置副本节点可以读。

repset:

SECONDARY>db.getMongo().setSlaveOk();

repset:

SECONDARY>showtables;

system.indexes

yes_users

repset:

SECONDARY>db.yes_users.find();#看到有数据了

{"_id":

ObjectId("575bef8126150b8de92029eb"),"uid":

"20160611_0001"}

repset:

SECONDARY>

(3)去第二个secondary备库27019上,检查数据是否已经复制过来:

[root@oracle_mastermongodb]#/usr/local/mongodb-linux-x86_64-3.0.3/bin/mongolocalhost:

27019

MongoDBshellversion:

3.0.3

connectingto:

localhost:

27019/test

Serverhasstartupwarnings:

2016-06-11T03:

41:

20.363-0700ICONTROL[initandlisten]**WARNING:

Youarerunningthisprocessastherootuser,whichisnotrecommended.

2016-06-11T03:

41:

20.363-0700ICONTROL[initandlisten]

repset:

SECONDARY>useyes_db

switchedtodbyes_db

repset:

SECONDARY>db.getMongo().setSlaveOk();#mongodb默认是从主节点读写数据的,副本节点上不允许读,需要设置副本节点可以读。

repset:

SECONDARY>db.yes_users.find();#看到有数据了,数据已经复制过来。

{"_id":

ObjectId("575bef8126150b8de92029eb"),"uid":

"20160611_0001"}

repset:

SECONDARY>

9,验证primary、secondary自动切换

9.1自动切换示意图

官方介绍:

ReplicaSetHighAvailability

Replicasetsprovidehighavailabilityusingautomaticfailover.Failoverallowsasecondarymembertobecomeprimaryifthecurrentprimarybecomesunavailable.

9.2验证自动切换操作

当primary不可用,则自动将合适的secondary成员切换成新的primary,接下来的

(1)->(5)就来验证这个:

(1)关闭27017的mongod服务,即停止primary主库:

[root@oracle_mastermongodb]#/usr/local/mongodb-linux-x86_64-3.0.3/bin/mongolocalhost:

27017

MongoDBshellversion:

3.0.3

connectingto:

localhost:

27017/test

Serverhasstartupwarnings:

2016-06-11T03:

41:

07.938-0700ICONTROL[initandlisten]**WARNING:

Youarerunningthisprocessastherootuser,whichisnotrecommended.

2016-06-11T03:

41:

07.938-0700ICONTROL[initandlisten]

repset:

PRIMARY>useadmin

switchedtodbadmin

repset:

PRIMARY>db.shutdownServer();

2016-06-11T04:

18:

24.148-0700INETWORKDBClientCursor:

:

initcall()failed

servershouldbedown...

2016-06-11T04:

18:

24.151-0700INETWORKtryingreconnecttolocalhost:

27017(127.0.0.1)failed

2016-06-11T04:

18:

24.152-0700INETWORKreconnectlocalhost:

27017(127.0.0.1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 工作总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1