自己做网站卖东西可以,wordpress支持 nginx,高级seo培训,建设银行企业银行官网一、背景
常见的mongodb集群模式有以下三种#xff1a;
主从复制#xff08;Master-Slave#xff09;模式副本集#xff08;Replica Set#xff09;模式分片#xff08;Sharding#xff09;模式
公司测试环境搭建的集群采用分片模式#xff0c;有同事反馈说#xf…一、背景
常见的mongodb集群模式有以下三种
主从复制Master-Slave模式副本集Replica Set模式分片Sharding模式
公司测试环境搭建的集群采用分片模式有同事反馈说程序写入数据库报错。 详细错误见下 Caused by: com.mongodb.MongoWriteConcernException: waiting for replication timed out; Error details: { wtimeout: true } at sdrs03 提示写入数据失败因为是分片模式所以它的数据是需要写入到两个分片服务机器上。
也就是说这个错误很可能是因为一个分片写入成功另一个写入失败所导致。
连接某个节点连接Mongodb执行命令sh.status()查看集群状态。
最后发现是某个机器的磁盘空间已满所引起的当时为了快速回复就手动删除了大日志文件。
今天有空就梳理一下问题为了便于理解画了一个部署架构图。
二、部署架构图 分片模式下三个节点是等价关系这里只举例其中一个来说。 [rootmongo_test01 data]# ps -ef | grep mongo
root 6223 14104 0 11:07 pts/0 00:00:00 grep --colorauto mongo
mongo 11016 1 1 Mar27 ? 00:43:37 /usr/local/mongodb-linux-x86_64-rhel70-4.0.27/bin/mongos -f /data/mongodb50000/cnf/mongo50000.cnf
mongo 11497 1 1 Mar27 ? 00:51:45 /usr/local/mongodb-linux-x86_64-rhel70-4.0.27/bin/mongod -f /data/mongodb11000/cnf/mongo11000.cnf
mongo 16436 1 3 Mar27 ? 01:32:02 /usr/local/mongodb-linux-x86_64-rhel70-4.0.27/bin/mongod -f /data/mongodb12000/cnf/mongo12000.cnf
mongo 19133 1 1 10:35 ? 00:00:35 /usr/local/mongodb-linux-x86_64-rhel70-4.0.27/bin/mongod -f /data/mongodb40000/cnf/mongo40000.cnf
mongo 19952 1 2 09:45 ? 00:02:15 /usr/local/mongodb-linux-x86_64-rhel70-4.0.27/bin/mongod -f /data/mongodb10000/cnf/mongo10000.cnf这里启动了五个进程每个进程端口对应见上图。
分片服务器对应端口10000/11000/12000配置服务器对应端口40000Mongos路由服务对应端口50000外部访问入口
三、详细配置
日志的保存路径和进程ID见/data/mongodb{端口}/cnf/mongo{端口}.cnf
1、分片服务
因为三个分片配置类同只是端口号不一样所以仅以10000端口示例
#SERVER
dbpath /data/mongodb10000/data
logpath /data/mongodb10000/log/mongo10000.log
pidfilepath /data/mongodb10000/run/mongo10000.pid
fork true
port 10000
quiet true
logappend true
journal true
directoryperdb true
maxConns 65536
bind_ip_all true
transportLayerasio
serviceExecutoradaptive#SLOW_LOG
profile 1
slowms 500
slowOpSampleRate 1replSet sdrs01
oplogSize 10240
shardsvr true#USER
keyFile/data/mongodb10000/cnf/keyFile
setParameterenableLocalhostAuthBypass1
setParameterfailIndexKeyTooLong1storageEnginewiredTiger
wiredTigerCacheSizeGB8
wiredTigerCollectionBlockCompressorsnappy
wiredTigerDirectoryForIndexestrue2、配置服务
复制集的名称是csvrs01端口为40000在后面的mongos会用到。
# cat /data/mongodb40000/cnf/mongo40000.cnf#SERVER
dbpath /data/mongodb40000/data
logpath /data/mongodb40000/log/mongo40000.log
pidfilepath /data/mongodb40000/run/mongo40000.pid
fork true
port 40000
quiet true
logappend true
maxConns 65536
directoryperdb true#SLOW_LOG
profile 1
slowms 500
bind_ip_all trueconfigsvr true
replSet csvrs01
storageEnginewiredTiger
wiredTigerCacheSizeGB1
oplogSize 8192#USER
keyFile/data/mongodb40000/cnf/keyFile
setParameterenableLocalhostAuthBypass13、Mongos 这里填写了配置服务列表。另外需要注意一点它的pid进程号是保存在/data/mongodb50000/run/mongos.pid而非/data/mongodb50000/run/mongodb50000.pid。
pidfilepath /data/mongodb50000/run/mongos.pid
logpath /data/mongodb50000/log/mongos.log
fork true
port 50000
quiet true
logappend true
maxConns 20000
bind_ip_all true
configdb csvrs01/192.168.10.28:40000,192.168.10.71:40000,192.168.10.72:40000#USER
keyFile/data/mongodb50000/cnf/keyFile
setParameterenableLocalhostAuthBypass1
setParametertaskExecutorPoolSize4
setParameterShardingTaskExecutorPoolMaxSize50004、初始化副本集
在任意一台机器上使用 mongo 命令行工具连接到任意配置服务器并初始化副本集sdrs01。
mongo --host 192.168.10.28:40000
use admin
cfg {_id: sdrs01,members: [{ _id: 0, host: 192.168.10.71:10000 },{ _id: 1, host: 192.168.10.72:10000 }]
}
rs.initiate(cfg)以此类推初始化副本集sdrs02和sdrs03。
mongo --host 192.168.10.28:40000
use admin
cfg {_id: sdrs02,members: [{ _id: 0, host: 192.168.10.28:11000 },{ _id: 1, host: 192.168.10.71:11000 }]
}
rs.initiate(cfg)mongo --host 192.168.10.28:40000
use admin
cfg {_id: sdrs03,members: [{ _id: 0, host: 192.168.10.28:12000 },{ _id: 1, host: 192.168.10.72:12000 }]
}
rs.initiate(cfg)5、添加分片到路由服务器mongos
使用 mongo 命令行工具连接到路由服务器并添加分片。
mongo --host 192.168.10.28:50000
use admin
sh.addShard(sdrs01/192.168.10.71:10000)
sh.addShard(sdrs01/192.168.10.72:10000)sh.addShard(sdrs02/192.168.10.28:11000)
sh.addShard(sdrs02/192.168.10.71:11000)sh.addShard(sdrs03/192.168.10.28:12000)
sh.addShard(sdrs03/192.168.10.72:12000)注意这里每个分片只选择其中的两个节点作为副本。
6、登录Mongos查看集群状态
mongo 192.168.10.28:50000 -uroot -p{密码} --authenticationDatabase admin sh.status()shards:{ _id : sdrs01, host : sdrs01/192.168.10.71:10000,192.168.10.72:10000, state : 1, tags : [ test.sh1, sdrs01 ] }{ _id : sdrs02, host : sdrs02/192.168.10.28:11000,192.168.10.71:11000, state : 1, tags : [ test.sh2, sdrs02 ] }{ _id : sdrs03, host : sdrs03/192.168.10.28:12000,192.168.10.72:12000, state : 1, tags : [ test.sh3, sdrs03 ] }四、未完待续
由于整篇文章比较冗长我先介绍Mongodb sharding分片集群的搭建及配置详情顺便梳理了其部署架构 下文我将介绍其日志治理问题。