关于MongoDB分布式高可用集群实现
来源:互联网 发布:淘宝流量钱包不能用了 编辑:程序博客网 时间:2024/06/11 19:33
一、环境准备
1.本例使用3台Linux主机,IP地址如下:
2.根据需要,开启相应主机防火墙的相关端口。本次需要用到3台主机,所以开启这3台主机的以下端口:
二、搭建分布式集群
2.1配置shard1的Replica Sets:
#在serverC上启动shard1-3
用mongo连接其中一台主机的27018端口的mongod,初始化复制集shard1:
./mongo --port 27018
2.2 配置shard2的Replica Sets
#在serverB上启动shard2-2
#在serverC上启动shard2-3
用mongo连接其中一台主机(建议在ServerB上)的27019端口的mongod,初始化复制集shard2:
./mongo --port 27019
3.配置configserver
#在3台主机中分别启动配置服务
用mongo连接其中一台主机的20000端口的mongod,初始化复制集configdb:
./mongo –port 20000
4.配置routerserver
#在3台主机中分别运行mongos服务
5.配置分片(shardcluster)
#连接到其中一台机器的端口27017的mongos进程,并切换到admin数据库添加分片shard1和shard2:
./mongo --port 27017
#激活数据库(work)和集合(status)的分片功能:
6.验证
#查看shard1的集合work.status和shard2的文档数几乎均分,且之和等于路由节点下查看的文档数:
./mongo --port 27018 work
./mongo --port 27019 work
./mongo work
#查看分片的状态:
三、常见问题
1.【问题描述】执行初始化副本集时报错:
【解决方法】
开启防火墙的相关端口
2.【问题描述】初始化副本集报错:
【解决方法】
如果设置主机A为仲裁节点,那么不要在A主机上执行初始化操作,否则会报上述错误。
3.【问题描述】启动路由器mongos报错:
【解决方法】
从Mongodb3.2之后,启动mongos时需使用副本集名称,否则会报上述错误。例如:
1.本例使用3台Linux主机,IP地址如下:
点击(此处)折叠或打开
- Server A: 192.168.1.231
- Server B: 192.168.1.232
- Server C: 192.168.1.233
2.根据需要,开启相应主机防火墙的相关端口。本次需要用到3台主机,所以开启这3台主机的以下端口:
点击(此处)折叠或打开
- -A INPUT -m state --state NEW -m tcp -p tcp --dport 27017 -j ACCEPT
- -A INPUT -m state --state NEW -m tcp -p tcp --dport 27018 -j ACCEPT
- -A INPUT -m state --state NEW -m tcp -p tcp --dport 27019 -j ACCEPT
- -A INPUT -m state --state NEW -m tcp -p tcp --dport 20000 -j ACCEPT
二、搭建分布式集群
运用MongoDB的复制集(ReplicaSets)+分片(Sharding)就能实现MongoDB分布式高可用的集群。
分片(sharding)能够增加更多的机器来应对不断增加的负载和数据,也不影响应用。
复制集(Replica Sets)能确保每个分片节点都具有自动备份、自动故障恢复能力。
1.集群的环境
架构图:
主机设计:
2.配置Replica Sets
创建数据目录:
点击(此处)折叠或打开
- mkdir -p /data/{shard1-1,shard2-1,config} #在serverA上
- mkdir -p /data/{shard1-2,shard2-2,config} #在serverB上
- mkdir -p /data/{shard1-3,shard2-3,config} #在serverC上
2.1配置shard1的Replica Sets:
#在serverA上启动shard1-1
点击(此处)折叠或打开
- ./mongod --fork --shardsvr --port 27018 --dbpath /data/shard1-1/ --logpath /data/shard1-1/shard1-1.log --logappend --replSet shard1 --directoryperdb
点击(此处)折叠或打开
- ./mongod --fork --shardsvr --port 27018 --dbpath /data/shard1-2/ --logpath /data/shard1-2/shard1-2.log --logappend --replSet shard1 --directoryperdb
#在serverC上启动shard1-3
点击(此处)折叠或打开
- ./mongod --fork --shardsvr --port 27018 --dbpath /data/shard1-3/ --logpath /data/shard1-3/shard1-3.log --logappend --replSet shard1 --directoryperdb
用mongo连接其中一台主机的27018端口的mongod,初始化复制集shard1:
./mongo --port 27018
点击(此处)折叠或打开
- >config={_id:'shard1',members:[
- {_id:0,host:'192.168.1.231:27018',priority:2},
- {_id:1,host:'192.168.1.232:27018',priority:1},
- {_id:2,host:'192.168.1.233:27018',arbiterOnly:true}]
- }
- >rs.initiate(config)
2.2 配置shard2的Replica Sets
#在serverA上启动shard2-1
点击(此处)折叠或打开
- ./mongod --fork --shardsvr --port 27019 --dbpath /data/shard2-1/ --logpath /data/shard2-1/shard2-1.log --logappend --replSet shard2 --directoryperdb
#在serverB上启动shard2-2
点击(此处)折叠或打开
- ./mongod --fork --shardsvr --port 27019 --dbpath /data/shard2-2/ --logpath /data/shard2-2/shard2-2.log --logappend --replSet shard2 --directoryperdb
#在serverC上启动shard2-3
点击(此处)折叠或打开
- ./mongod --fork --shardsvr --port 27019 --dbpath /data/shard2-3/ --logpath /data/shard2-3/shard2-3.log --logappend --replSet shard2 --directoryperdb
用mongo连接其中一台主机(建议在ServerB上)的27019端口的mongod,初始化复制集shard2:
./mongo --port 27019
点击(此处)折叠或打开
- >config={_id:'shard2',members:[
- {_id:0,host:'192.168.1.231:27019',arbiterOnly:true},
- {_id:1,host:'192.168.1.232:27019',priority:1},
- {_id:2,host:'192.168.1.233:27019',priority:2}]
- }
- >rs.initiate(config)
3.配置configserver
#在3台主机中分别启动配置服务
点击(此处)折叠或打开
- ./mongod --configsvr --port 20000 --dbpath /data/config/ --logpath /data/config/config.log –replSet configdb --logappend --fork
用mongo连接其中一台主机的20000端口的mongod,初始化复制集configdb:
./mongo –port 20000
点击(此处)折叠或打开
- >configdb1={_id:'configdb',members:[
- {_id:0,host:'192.168.1.231:20000',priority:3},
- {_id:1,host:'192.168.1.232:20000',priority:1},
- {_id:2,host:'192.168.1.233:20000',priority:2}]
- }
- >rs.initiate(configdb1)
4.配置routerserver
#在3台主机中分别运行mongos服务
点击(此处)折叠或打开
- ./mongos --configdb configdb/192.168.1.231:20000,192.168.1.232:20000,192.168.1.233:20000 --port 27017 --logpath /data/mongos.log --logappend –fork
5.配置分片(shardcluster)
#连接到其中一台机器的端口27017的mongos进程,并切换到admin数据库添加分片shard1和shard2:
./mongo --port 27017
点击(此处)折叠或打开
- >use admin
- >db.runCommand({addshard:"shard1/192.168.1.231:27018,192.168.1.232:27018,192.168.1.233:27018"})
- >db.runCommand({addshard:"shard2/192.168.1.231:27019,192.168.1.232:27019,192.168.1.233:27019"})
#激活数据库(work)和集合(status)的分片功能:
点击(此处)折叠或打开
- > db.runCommand({enablesharding:"work"})
- >db.runCommand({shardcollection:"work.status",key:{_id:1}})
6.验证
#查看shard1的集合work.status和shard2的文档数几乎均分,且之和等于路由节点下查看的文档数:
./mongo --port 27018 work
点击(此处)折叠或打开
- >db.status.count()
./mongo --port 27019 work
点击(此处)折叠或打开
- >db.status.count()
./mongo work
点击(此处)折叠或打开
- >db.status.count()
#查看分片的状态:
点击(此处)折叠或打开
- > printShardingStatus()
三、常见问题
1.【问题描述】执行初始化副本集时报错:
点击(此处)折叠或打开
- > rs.initiate(config)
- {
- "ok" : 0,
- "errmsg" : "replSetInitiate quorum check failed because not all proposed set members responded affirmatively: 192.168.1.232:27018 failed with No route to host, 192.168.1.233:27018 failed with No route to host",
- "code" : 74,
- "codeName" : "NodeNotFound"
- }
【解决方法】
开启防火墙的相关端口
点击(此处)折叠或打开
- -A INPUT -m state --state NEW -m tcp -p tcp --dport 27017 -j ACCEPT
- -A INPUT -m state --state NEW -m tcp -p tcp --dport 27018 -j ACCEPT
- -A INPUT -m state --state NEW -m tcp -p tcp --dport 27019 -j ACCEPT
- -A INPUT -m state --state NEW -m tcp -p tcp --dport 20000 -j ACCEPT
2.【问题描述】初始化副本集报错:
点击(此处)折叠或打开
- > rs.initiate(config)
- {
- "ok" : 0,
- "errmsg" : "This node, 192.168.1.231:27019, with _id 0 is not electable under the new configuration version 1 for replica set shard2",
- "code" : 93,
- "codeName" : "InvalidReplicaSetConfig"
- }
【解决方法】
如果设置主机A为仲裁节点,那么不要在A主机上执行初始化操作,否则会报上述错误。
3.【问题描述】启动路由器mongos报错:
点击(此处)折叠或打开
- ./mongos --configdb 192.168.1.231:20000,192.168.1.232:20000,192.168.1.233:20000 --port 27017 --logpath /data/mongos.log --logappend --forkFailedToParse: mirrored config server connections are not supported; for config server replica sets be sure to use the replica set connection stringtry './mongos --help' for more information
【解决方法】
从Mongodb3.2之后,启动mongos时需使用副本集名称,否则会报上述错误。例如:
点击(此处)折叠或打开
- ./mongos –configdb 副本集名称/192.168.1.231:20000,192.168.1.232:20000,192.168.1.233:20000 --port 27017 --logpath /data/mongos.log --logappend --fork
0
上一篇:MongoDB权威指南
下一篇:Oracle排错总结
相关热门文章
- redis如何清除所有的key...
- Redis安装部署
- Mongodb 字段类型转换
- pymongo 使用小结
- Redis图形监控工具--RedisLive...
- linux dhcp peizhi roc
- 关于Unix文件的软链接
- 求教这个命令什么意思,我是新...
- sed -e "/grep/d" 是什么意思...
- 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
0 0
- 关于MongoDB分布式高可用集群实现
- 高可用分布式集群
- 第9周 Mongodb数据库高可用,分布式集群部署
- 搭建高可用mongodb集群
- 高可用的MongoDB集群
- 搭建高可用MongoDB集群
- 搭建高可用mongodb集群
- 搭建高可用MongoDB集群
- 搭建高可用mongoDB集群
- 高可用的MongoDB集群
- mongodb高可用集群方案
- Redis高可用分布式集群
- redis高可用分布式集群
- MongoDB高可用架构 集群权限控制
- 架构高可用mongodb 集群文档
- 搭建高可用的MongoDB集群
- 搭建高可用的MongoDB集群
- 严澜:搭建高可用的MongoDB集群
- js SetTimeOut示例
- 使用 RMAN 同步数据库
- 137. Single Number II
- git常用的命令
- 如何做到敏捷个人
- 关于MongoDB分布式高可用集群实现
- 分布式系统中的一致性协议之两阶段提交协议(2PC)
- JAVA-多态
- Mac下搭建php开发环境教程
- Oracle排错总结
- JVM内存模型
- 一款开源的密码管理器
- Oracle中Restore和Recovery的区别
- [SMOJ1787]逆序对
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
书法字查询
春字毛笔书法
唐字书法
歌字书法
藤字书法
书法堂字
园字书法
个字书法
在线转书法字
鹤字书法
奋字书法
祸字书法
陈字书法
独字书法
苏字书法
书法字素
雅字毛笔书法
秦字书法
琪字书法
湘字书法
书法字生成器
原字书法
巨字书法
灿字书法
书法字寿
书法德字
书法年字怎么写
书法字年
溪字书法
家中挂什么书法字为好
哥字书法
宋字书法
浣字书法
月书法字
书法字婷
书法孝字
器字书法
书法管字
博字的书法
书法酒字
楷体字书法