您的位置:首页 > 数据库 > Mongodb

MongoDB分片

2016-09-24 18:16 351 查看
`环境准备

ip 服务
192.168.5.111 shard1-master shard2-slave shard3-仲裁
192.168.5.112 shard2-master shard3-slave shard1-仲裁
192.168.5.113 shard3-master shard1-slave shard2-仲裁
192.168.5.151 mongos
192.168.5.152 mongos
192.168.5.111 config-server
192.168.5.112 config-server
192.168.5.113 config-server

服务 端口
shard1 29001
shard2 29002
shard3 29003

mongos 27017
config 28000

1.创建目录 把mongodb解压到/data1/bin

配置环境变量export PATH=$PATH:/opt/mongodb/bin

2.创建目录
shard-server
mkdir -p /opt/mongodb/{shard1,shard2,shard3}/{data,log}

config-server
mkdir -p /opt/mongodb/configsvr/{data,log}

mongos-server
mkdir -p /opt/mongodb/mongos/{data,log}

启动3台config-server 必须是奇数台

/opt/mongodb/bin/mongod --configsvr --dbpath /opt/mongodb/configsvr/data --fork --logpath /opt/mongodb/configsvr/log/configsvr.log --logappend --port 28000

启动2台mongos-server

/opt/mongodb/bin/mongos --configdb 192.168.5.111:28000,192.168.5.112:28000,192.168.5.113:28000 --port 27017 --fork --logpath /opt/mongodb/mongos/log/mongos.log

禁用NUMA
第一次先正常启动,第二次加numactl启动
numactl --interleave=all mongod [ options ]

配置各个分片的副本集

在每个mongod server 分别设置分片1服务器及副本集shard1

参数 --chunkSize 100 默认是64MB,取值范围是1 MB 到 1024 MB

numactl --interleave=all /opt/mongodb/bin/mongod --shardsvr --replSet shard1 --port 29001 --dbpath /opt/mongodb/shard1/data --logpath /opt/mongodb/shard1/log/shard1.log --fork --journal --oplogSize 5000 --storageEngine wiredTiger --directoryperdb --wiredTigerDirectoryForIndexes --wiredTigerCacheSizeGB 2 --wiredTigerCollectionBlockCompressor zlib --wiredTigerJournalCompressor zlib

numactl --interleave=all /opt/mongodb/bin/mongod --shardsvr --replSet shard2 --port 29002 --dbpath /opt/mongodb/shard2/data --logpath /opt/mongodb/shard2/log/shard2.log --fork --journal --oplogSize 5000 --storageEngine wiredTiger --directoryperdb --wiredTigerDirectoryForIndexes --wiredTigerCacheSizeGB 2 --wiredTigerCollectionBlockCompressor zlib --wiredTigerJournalCompressor zlib

numactl --interleave=all /opt/mongodb/bin/mongod --shardsvr --replSet shard3 --port 29003 --dbpath /opt/mongodb/shard3/data --logpath /opt/mongodb/shard3/log/shard3.log --fork --journal --oplogSize 5000 --storageEngine wiredTiger --directoryperdb --wiredTigerDirectoryForIndexes --wiredTigerCacheSizeGB 2 --wiredTigerCollectionBlockCompressor zlib --wiredTigerJournalCompressor zlib

=================================================================================================
ip 服务
192.168.5.111 shard1-master shard2-slave shard3-仲裁
192.168.5.112 shard2-master shard3-slave shard1-仲裁
192.168.5.113 shard3-master shard1-slave shard2-仲裁

ID靠前的为主

#设置第一个分片副本集
mongo --port 29001

#使用admin数据库
use admin

#定义副本集配置
config = { _id:"shard1", members:[
{_id:0,host:"192.168.5.111:29001"},
{_id:1,host:"192.168.5.113:29001"},
{_id:2,host:"192.168.5.112:29001",arbiterOnly:true}
]
}

rs.initiate(config)
注意:最后不要加分号

#设置第二个分片副本集
mongo --port 29002

#使用admin数据库
use admin

#定义副本集配置
config = { _id:"shard2", members:[
{_id:0,host:"192.168.5.112:29002"},
{_id:1,host:"192.168.5.111:29002"},
{_id:2,host:"192.168.5.113:29002",arbiterOnly:true}
]
}

rs.initiate(config)

=================================================================================================

#设置第三个分片副本集
mongo --port 29003

#使用admin数据库
use admin

#定义副本集配置
config = { _id:"shard3", members:[
{_id:0,host:"192.168.5.113:29003"},
{_id:1,host:"192.168.5.112:29003"},
{_id:2,host:"192.168.5.111:29003",arbiterOnly:true}
]
}

rs.initiate(config)

=================================================================================================

使分片生效
连接到mongos

mongo 192.168.5.151:27017
use admin

串联mongos与分配副本集

db.runCommand( { addshard : "shard1/192.168.5.111:29001,192.168.5.112:29001,192.168.5.113:29001"});

db.runCommand( { addshard : "shard2/192.168.5.111:29002,192.168.5.112:29002,192.168.5.113:29002"});

db.runCommand( { addshard : "shard3/192.168.5.111:29003,192.168.5.112:29003,192.168.5.113:29003"});

#查看分片服务器的配置
db.runCommand( { listshards : 1 } )

#查看集群信息
sh.status()

db.printShardingStatus()

参数说明:
第一:shards 分成三片,shard1 shard2 shard3
第二:databases: partitioned表示是否分区
第三:chunks: 分成了一段。都在shard0000

创建t2库users集合分片
use t2

创建索引
db.users.ensureIndex({"username":1})

标识数据库t2可以启用分片,但实际上并没有进行分片
sh.enableSharding("t2")

sh.shardCollection("t2.users",{"username":1})

for (var i=0; i<100; i++) {
db.users.insert({"username" : "user"+i, "created_at" : new Date()});
}
单行方式
for (var i=0; i<10000; i++) { db.users.insert({"username" : "user"+i, "created_at" : new Date()}); }

========================================================================
标识数据库testdb可以启用分片,但实际上并没有进行分片
sh.enableSharding("testdb")

查看分片信息
sh.status()
sh.status({verbose:true}) 查看分片详细信息

#再对集合进行分片,name字段是片键
sh.shardCollection("testdb.table1",{"name":1})

#插入数据
use testdb
for (var i = 1; i <= 10; i++) {
db.table1.save({id:i,"test1":"testval1"}) }

#查看集合table1分片分布情况
db.table1.stats()

#查看数据库分片状态 需要先选择一个数据库
use db1
db.stats()

db.runCommand( { shardcollection : "testdb.table1",key : {id: 1} } )

书上的for
for (var i=0; i<100000; i++) {
db.user.insert({"username" : "user"+i, "created_at" : new Date()});
}

db.user.count()

========================================================================

安装失败清理数据

mongod-server

rm -rf /opt/mongodb/shard1/data/*
rm -rf /opt/mongodb/shard2/data/*
rm -rf /opt/mongodb/shard3/data/*
rm -rf /opt/mongodb/shard1/log/*
rm -rf /opt/mongodb/shard2/log/*
rm -rf /opt/mongodb/shard3/log/*

config-server
rm -rf /opt/mongodb/configsvr/data/*
rm -rf /opt/mongodb/configsvr/log/*

mongos-server
rm -rf /opt/mongodb/mongos/data/*
rm -rf /opt/mongodb/mongos/log/*
`
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  monogdb 分片