mongodb部署replicasets副本集实现高可用解决方案详细过程.docx
- 文档编号:27229009
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:19
- 大小:59.47KB
mongodb部署replicasets副本集实现高可用解决方案详细过程.docx
《mongodb部署replicasets副本集实现高可用解决方案详细过程.docx》由会员分享,可在线阅读,更多相关《mongodb部署replicasets副本集实现高可用解决方案详细过程.docx(19页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- mongodb 部署 replicasets 副本 实现 可用 解决方案 详细 过程