[Mo]MongoDB分片副本集搭建
Posted M小小虾米
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Mo]MongoDB分片副本集搭建相关的知识,希望对你有一定的参考价值。
环境规划如下:
SERVER x.40 |
SERVER x.55 |
SERVER x.127 |
mongos:20000 |
mongos:20000 |
mongos:20000 |
config:21000 |
config:21000 |
config:21000 |
shard1:27001主节点 |
shard1:27001 副节点 |
shard1:27001 仲裁 |
shard2:27002 仲裁 |
shard2:27002 主节点 |
shard2:27002 副节点 |
shard3:27003 副节点 |
shard3:27003 仲裁 |
shard3:27003 主节点 |
操作步骤:
1.三个节点都安装Mongodb
tar -xzvf mongodb-linux-x86_64-rhel62-3.4.14.tgz -C /usr/local/
mv mongodb-linux-x86_64-rhel62-3.4.14 mongodb
分别在每台机器建立conf、mongos、config、shard1、shard2、shard3六个目录,因为mongos不存储数据,只需要建立日志文件目录即可。
mkdir -p /usr/local/mongodb/conf
mkdir -p /usr/local/mongodb/mongos/log
mkdir -p /usr/local/mongodb/config/{log,date}
mkdir -p /usr/local/mongodb/shard1/{log,date}
mkdir -p /usr/local/mongodb/shard2/{log,date}
mkdir -p /usr/local/mongodb/shard3/{log,date}
2.三个节点配置config server并启动
vi /usr/local/mongodb/conf/config.conf
## 配置文件内容
pidfilepath = /usr/local/mongodb/config/log/configsrv.pid #设置PID
dbpath = /usr/local/mongodb/config/data #设置数据保存路径
logpath = /usr/local/mongodb/config/log/con.log #设置日志路径
logappend = true #设置日志写入方式
bind_ip = 0.0.0.0
port = 21000 #设置config的端口
fork = true
configsvr = true
replSet=configs #副本集名称
maxConns=20000 #设置最大连接数
#启动:
mongod -f /usr/local/mongodb/conf/config.conf
3.登录任意一台配置服务器,初始化配置副本集
mongo --port 21000
config = {
_id : "configs",
members : [
{_id : 0, host : "192.168.x.40:21000" },
{_id : 1, host : "192.168.x.55:21000" },
{_id : 2, host : "192.168.x.127:21000" }
]
}
#初始化副本集
rs.initiate(config) #3.4以后设置分片必须要配置副本集,否则失败
4.三个节点都配置分片副本集
设置第一个分片副本集
配置文件
vi /usr/local/mongodb/conf/shard1.conf
#配置文件内容
pidfilepath = /usr/local/mongodb/shard1/log/shard1.pid
dbpath = /usr/local/mongodb/shard1/data
logpath = /usr/local/mongodb/shard1/log/shard1.log
logappend = true
bind_ip = 0.0.0.0
port = 27001
fork = true
httpinterface=true
rest=true
replSet=shard1
shardsvr = true
maxConns=20000
启动三台服务器的shard1 server
mongod -f /usr/local/mongodb/conf/shard1.conf
5.登陆任意一台服务器,初始化副本集
mongo --port 27001
#使用admin数据库
use admin
#定义副本集配置,第三个节点设置为仲裁节点。
config = {
_id : "shard1",
members : [
{_id : 0, host : "192.168.x.40:27001" },
{_id : 1, host : "192.168.x.55:27001" },
{_id : 2, host : "192.168.x.127:27001", arbiterOnly:true }]}
#初始化副本集配置
rs.initiate(config);
6.同理,设置第二个分片和第三个分片副本集并初始化
7.设置Mongs路由服务器
vi /usr/local/mongodb/conf/mongos.conf
pidfilepath = /usr/local/mongodb/mongos/log/mongos.pid
logpath = /usr/local/mongodb/mongos/log/mongos.log #路由不存储数据,所以只设置日志即可
logappend = true
bind_ip = 0.0.0.0
port = 20000
fork = true
configdb = configs/192.168.x.40:21000,192.168.x.55:21000,192.168.x.127:21000
maxConns=20000
启动三台服务器的mongos server
mongos -f /usr/local/mongodb/conf/mongos.conf
8.设置三节点的分片和路由配置服务器串联成集群
登陆任意一台mongos
mongo --port 20000
#使用admin数据库
use admin
#串联路由服务器与分片副本集
sh.addShard("shard1/192.168.x.40:27001,192.168.x.55:27001,192.168.x.127:27001")
sh.addShard("shard2/192.168.x.40:27002,192.168.x.55:27002,192.168.x.127:27002")
sh.addShard("shard3/192.168.x.40:27003,192.168.x.55:27003,192.168.x.127:27003")
#查看集群状态
sh.status()
9.启用分片
#设置POSDB数据库分片生效
db.runCommand( { enablesharding :"posdb"});
#设置数据库posdb里test表根据id自动分片到shard1,2,3中
db.runCommand( { shardcollection : "posdb.test",key : {id: 1} } )
db.runCommand( { shardcollection : "posdb.test",key : {id: “hashed"} } )
测试分片配置结果
mongo 127.0.0.1:20000
use posdb;
#插入测试数据
for (var i = 1; i <= 100000; i++)
db.test.save({id:i,"test":"val1"});
#查看分片情况
db.test.stats();
{
"sharded" : true,
"ns" : "posdb.test",
"count" : 100000,
"numExtents" : 13,
"size" : 5600000,
"storageSize" : 22372352,
"totalIndexSize" : 6213760,
"indexSizes" : {
"_id_" : 3335808,
"id_1" : 2877952
},
"avgObjSize" : 56,
"nindexes" : 2,
"nchunks" : 3,
"shards" : {
"shard1" : {
"ns" : "posdb.test",
"count" : 42183,
"size" : 0,
...
"ok" : 1
},
"shard2" : {
"ns" : "posdb.test",
"count" : 38937,
"size" : 2180472,
...
"ok" : 1
},
"shard3" : {
"ns" : "posdb.test",
"count" :18880,
"size" : 3419528,
...
"ok" : 1
}
},
"ok" : 1
}
搭建成功!
以上是关于[Mo]MongoDB分片副本集搭建的主要内容,如果未能解决你的问题,请参考以下文章