mongodb集群(Replica Sets+Sharding)
2014-11-07 10:55
363 查看
Shard:
使用replica sets,确保每个数据结点都具有备份、自动容错转移、自动恢复能力。
Config:
使用3个配置服务器,确保元数据完整性;
Route:
使用3个路由进程,实现负载均衡,提高客户端接入性能;
开放的端口如下:
首先将3台服务器时间保证一致性。
安装mongodb
先给serverA、serverB、serverC安装mongodb:
cd /usr/local/src
tar -zxvf mongodb-linux-x86_64-2.6.4.tgz
mv mongodb-linux-x86_64-2.6.4 /usr/local/mongodb264
ln -s /usr/local/mongodb264/bin/* /usr/sbin
创建数据目录:
在serverA上:
mkdir -p /mongodb/db/shard11
mkdir -p /mongodb/db/shard21
mkdir -p /mongodb/config
mkdir -p /var/log/mongodb
在serverB上:
mkdir -p /mongodb/db/shard12
mkdir -p /mongodb/db/shard22
mkdir -p /mongodb/config
mkdir -p /var/log/mongodb
在serverC上:
mkdir -p /mongodb/db/shard13
mkdir -p /mongodb/db/shard23
mkdir -p /mongodb/config
mkdir -p /var/log/mongodb
配置复制集(replica sets):
配置shard1所用到的replica sets:
在serverA上:
#/usr/local/mongodb264/bin/mongod --shardsvr --replSet shard1 --port 27017 --maxConns 20000 --dbpath /mongodb/db/shard11 --oplogSize 4096 --logpath /var/log/mongodb/shard11.log --logappend --fork
在serverB上:
/usr/local/mongodb264/bin/mongod --shardsvr --replSet shard1 --port 27017 --maxConns 20000 --dbpath /mongodb/db/shard12 --oplogSize 4096 --logpath /var/log/mongodb/shard12.log --logappend --fork
在serverC上:
/usr/local/mongodb264/bin/mongod --shardsvr --replSet shard1 --port 27017 --maxConns 20000 --dbpath /mongodb/db/shard13 --oplogSize 4096 --logpath /var/log/mongodb/shard13.log --logappend --fork
用mongo连接其中一台机器的27017端口的mongod,初始化replica sets “shard1”:
#source /etc/profile
# mongo --port 27017
配置shard2所用到的replica sets:
在serverA上:
#/usr/local/mongodb264/bin/mongod --shardsvr --replSet shard2 --port 27018 --maxConns 20000 --dbpath /mongodb/db/shard21 --oplogSize 4096 --logpath /var/log/mongodb/shard21.log --logappend --fork
在serverB上:
#/usr/local/mongodb264/bin/mongod --shardsvr --replSet shard2 --port 27018 --maxConns 20000 --dbpath /mongodb/db/shard22 --oplogSize 4096 --logpath /var/log/mongodb/shard22.log --logappend --fork
在serverC上:
/usr/local/mongodb264/bin/mongod --shardsvr --replSet shard2 --port 27018 --maxConns 20000 --dbpath /mongodb/db/shard23/ --oplogSize 4096 --logpath /var/log/mongodb/shard23.log --logappend --fork
用mongo连接其中一台机器的27018端口的mongod,初始化replica sets “shard2”:
#source /etc/profile
#mongo --port 27018
配置3台config server:
分别在serverA、serverB、serverC上执行:
#/usr/local/mongodb264/bin/mongod --configsvr --dbpath /mongodb/config --port 20000 --logpath /var/log/mongodb/config.log --logappend --fork
配置3台route process:
分别在serverA、serverB、serverC上执行:
#/usr/local/mongodb264/bin/mongos --configdb 10.200.3.116:20000,10.200.3.117:20000,10.200.3.118:20000 --port 30000 --chunkSize 64 --logpath /var/log/mongodb/mongos.log --logappend --fork
配置shard cluster(集群)
连接到其中一台服务器的30000的mongos进程,并切换到admin数据库做一下配置
#mongo --port 30000
至此,mongod集群就部署完毕,接下来的是一些补充内容。
测试分片是否成功:
由于在启动mongos的时候-chunkSize值设置的是64M,所以要数据满64M的时候才会分片,为了直观的看到效果,实验的时候可以将这个值改为1M,然后往mouyu库的t1表插入数据,观看效果。
插入表方法:
mongos> use mouyu;
mongos> for(i=1;i<=100000;i++) db.t1.save({_id:i,name:"aaabbbcccdddeeeeffffff"+i})
mongos>sh.status(); ##查看chunks项是不是有两个shard,如果是就ok了
为了便于管理,在每台服务器上写好启动脚本:
在serverA上:
#cd /usr/local/mongodb264/
#vim shard11_start.sh
/usr/local/mongodb264/bin/mongod --shardsvr --replSet shard1 --port 27017 --maxConns 20000 --dbpath /mongodb/db/shard11 --oplogSize 4096 --logpath /var/log/mongodb/shard11.log --logappend --fork
#vim shard21_start.sh
/usr/local/mongodb264/bin/mongod --shardsvr --replSet shard2 --port 27018 --maxConns 20000 --dbpath /mongodb/db/shard21 --oplogSize 4096 --logpath /var/log/mongodb/shard21.log --logappend --fork
#vim config_start.sh
/usr/local/mongodb264/bin/mongod --configsvr --dbpath /mongodb/config --port 20000 --logpath /var/log/mongodb/config.log --logappend --fork
#vim mongos_start.sh
/usr/local/mongodb264/bin/mongos --configdb 10.200.3.116:20000,10.200.3.117:20000,10.200.3.118:20000 --port 30000 --chunkSize 64 --logpath /var/log/mongodb/mongos.log --logappend --fork
给这几个脚本赋予可执行权限,注意启动顺序为: sh shard11_start.sh--- sh shard21_start.sh---sh config_start.sh----sh mongos_start.sh
最后在serverB和serverC上执行类似的操作。
Mongodb优化:
1、Vim /etc/profile
echo "0" > /proc/sys/vm/zone_reclaim_mode
/sbin/blockdev --setra 64 /dev/sdb (实际存放mongodb数据库的磁盘)
2、vim /etc/sysctl.conf
vm.swappiness = 0(将值改为0,不让使用交换分区)
3、连接池默认stack size为10240,意思就是每个连接需要使用10M,如果连接数多了,会相当的耗内存,所以调整为每个连接使用1M。
Vim /etc/profile.d/app.sh
ulimit -SHs 1024
常用命令
查看复制集信息
rs.status()
查看复制集优先级
rs.config()
查看数据库
show dbs;
切换/创建数据库
use db1;
删除当前使用的数据库
db.dropDatabase();
查看集合
show collections;
看当前使用的数据库
db.getName();
db
显示当前db状态
db.stats();
当前db版本
db.version();
创建集合
db.createCollection("coll_1");
查看当前数据库的集合
show collections;
添加数据(若存在主键,insert()不做操作,而save()则更改原来的内容为新内容)
db.coll_1.insert({age:1, name:"aaa"});
db.coll_1.save({age:1, name:"aaa"});
删除数据
db.coll_1.remove({})
修改数据
db.coll_1.update({"id":"aaa"}, {"name","abcdefg"}, false,true)
查询集合中的数据
db.coll_1.find({"age":{"$gt":60}});
db.coll_1.count();
修改复制集优先级(在主库上操作)
conf=rs.conf()
conf.members[0].priority=3
conf.members[1].priority=2
conf.members[2].priority=1
conf.members[3].priority=0.5
rs.reconfig(conf)
管理维护sharding:
1. 列出所有的shard server
> db.runCommand({ listshards: 1 })
2. 查看sharding信息:
>printShardingStatus()
3. 判断是否sharding:
>db.runCommand({ isdbgrid:1 })
4.查看分片信息
>sh.status();
使用replica sets,确保每个数据结点都具有备份、自动容错转移、自动恢复能力。
Config:
使用3个配置服务器,确保元数据完整性;
Route:
使用3个路由进程,实现负载均衡,提高客户端接入性能;
开放的端口如下:
主机 | IP | 服务及端口 |
Server A | 10.200.3.116 | mongod shard11:27017 mongod shard21:27018 mongod config1:20000 mongs1:30000 |
Server B | 10.200.3.117 | mongod shard12:27017 mongod shard22:27018 mongod config2:20000 mongs2:30000 |
Server C | 10.200.3.118 | mongod shard13:27017 mongod shard23:27018 mongod config3:20000 mongs3:30000 |
安装mongodb
先给serverA、serverB、serverC安装mongodb:
cd /usr/local/src
tar -zxvf mongodb-linux-x86_64-2.6.4.tgz
mv mongodb-linux-x86_64-2.6.4 /usr/local/mongodb264
ln -s /usr/local/mongodb264/bin/* /usr/sbin
创建数据目录:
在serverA上:
mkdir -p /mongodb/db/shard11
mkdir -p /mongodb/db/shard21
mkdir -p /mongodb/config
mkdir -p /var/log/mongodb
在serverB上:
mkdir -p /mongodb/db/shard12
mkdir -p /mongodb/db/shard22
mkdir -p /mongodb/config
mkdir -p /var/log/mongodb
在serverC上:
mkdir -p /mongodb/db/shard13
mkdir -p /mongodb/db/shard23
mkdir -p /mongodb/config
mkdir -p /var/log/mongodb
配置复制集(replica sets):
配置shard1所用到的replica sets:
在serverA上:
#/usr/local/mongodb264/bin/mongod --shardsvr --replSet shard1 --port 27017 --maxConns 20000 --dbpath /mongodb/db/shard11 --oplogSize 4096 --logpath /var/log/mongodb/shard11.log --logappend --fork
在serverB上:
/usr/local/mongodb264/bin/mongod --shardsvr --replSet shard1 --port 27017 --maxConns 20000 --dbpath /mongodb/db/shard12 --oplogSize 4096 --logpath /var/log/mongodb/shard12.log --logappend --fork
在serverC上:
/usr/local/mongodb264/bin/mongod --shardsvr --replSet shard1 --port 27017 --maxConns 20000 --dbpath /mongodb/db/shard13 --oplogSize 4096 --logpath /var/log/mongodb/shard13.log --logappend --fork
用mongo连接其中一台机器的27017端口的mongod,初始化replica sets “shard1”:
#source /etc/profile
# mongo --port 27017
config={_id:'shard1',members:[ ... {_id:0,host:'10.200.3.116:27017',priority:3}, ... {_id:1,host:'10.200.3.117:27017',priority:1}, ... {_id:2,host:'10.200.3.118:27017',priority:2}] ... } { "_id" : "shard1", "members" : [ { "_id" : 0, "host" : "10.200.3.116:27017", "priority" : 3 }, { "_id" : 1, "host" : "10.200.3.117:27017", "priority" : 1 }, { "_id" : 2, "host" : "10.200.3.118:27017", "priority" : 2 } ] } > rs.initiate(config) { "info" : "Config now saved locally. Should come online in about a minute.", "ok" : 1 } > exit
配置shard2所用到的replica sets:
在serverA上:
#/usr/local/mongodb264/bin/mongod --shardsvr --replSet shard2 --port 27018 --maxConns 20000 --dbpath /mongodb/db/shard21 --oplogSize 4096 --logpath /var/log/mongodb/shard21.log --logappend --fork
在serverB上:
#/usr/local/mongodb264/bin/mongod --shardsvr --replSet shard2 --port 27018 --maxConns 20000 --dbpath /mongodb/db/shard22 --oplogSize 4096 --logpath /var/log/mongodb/shard22.log --logappend --fork
在serverC上:
/usr/local/mongodb264/bin/mongod --shardsvr --replSet shard2 --port 27018 --maxConns 20000 --dbpath /mongodb/db/shard23/ --oplogSize 4096 --logpath /var/log/mongodb/shard23.log --logappend --fork
用mongo连接其中一台机器的27018端口的mongod,初始化replica sets “shard2”:
#source /etc/profile
#mongo --port 27018
> config={_id:'shard2',members:[ ... {_id:0,host:'10.200.3.116:27018',priority:1}, ... {_id:1,host:'10.200.3.117:27018',priority:3}, ... {_id:2,host:'10.200.3.118:27018',priority:2}] ... } { "_id" : "shard2", "members" : [ { "_id" : 0, "host" : "10.200.3.116:27018", "priority" : 1 }, { "_id" : 1, "host" : "10.200.3.117:27018", "priority" : 3 }, { "_id" : 2, "host" : "10.200.3.118:27018", "priority" : 2 } ] } > rs.initiate(config) { "info" : "Config now saved locally. Should come online in about a minute.", "ok" : 1 } >exit
配置3台config server:
分别在serverA、serverB、serverC上执行:
#/usr/local/mongodb264/bin/mongod --configsvr --dbpath /mongodb/config --port 20000 --logpath /var/log/mongodb/config.log --logappend --fork
配置3台route process:
分别在serverA、serverB、serverC上执行:
#/usr/local/mongodb264/bin/mongos --configdb 10.200.3.116:20000,10.200.3.117:20000,10.200.3.118:20000 --port 30000 --chunkSize 64 --logpath /var/log/mongodb/mongos.log --logappend --fork
配置shard cluster(集群)
连接到其中一台服务器的30000的mongos进程,并切换到admin数据库做一下配置
#mongo --port 30000
mongos> use admin switched to db admin mongos> db.runCommand({addshard:"shard1/10.200.3.116:27017,10.200.3.117:27017,10.200.3.118:27017"}); { "shardAdded" : "shard1", "ok" : 1 } mongos>db.runCommand({addshard:"shard2/10.200.3.116:27018,10.200.3.117:27018,10.200.3.118:27018"}); { "shardAdded" : "shard2", "ok" : 1 }
激活数据库及集合的分片: mongos> db.runCommand({enablesharding:"mouyu"}) ####激活mouyu库的分片 { "ok" : 1 } mongos> db.runCommand({shardcollection:"mouyu.t1",key:{_id:1}}) ####给mouyu库的t1表分片 { "collectionsharded" : "mouyu.t1", "ok" : 1 }
至此,mongod集群就部署完毕,接下来的是一些补充内容。
测试分片是否成功:
由于在启动mongos的时候-chunkSize值设置的是64M,所以要数据满64M的时候才会分片,为了直观的看到效果,实验的时候可以将这个值改为1M,然后往mouyu库的t1表插入数据,观看效果。
插入表方法:
mongos> use mouyu;
mongos> for(i=1;i<=100000;i++) db.t1.save({_id:i,name:"aaabbbcccdddeeeeffffff"+i})
mongos>sh.status(); ##查看chunks项是不是有两个shard,如果是就ok了
为了便于管理,在每台服务器上写好启动脚本:
在serverA上:
#cd /usr/local/mongodb264/
#vim shard11_start.sh
/usr/local/mongodb264/bin/mongod --shardsvr --replSet shard1 --port 27017 --maxConns 20000 --dbpath /mongodb/db/shard11 --oplogSize 4096 --logpath /var/log/mongodb/shard11.log --logappend --fork
#vim shard21_start.sh
/usr/local/mongodb264/bin/mongod --shardsvr --replSet shard2 --port 27018 --maxConns 20000 --dbpath /mongodb/db/shard21 --oplogSize 4096 --logpath /var/log/mongodb/shard21.log --logappend --fork
#vim config_start.sh
/usr/local/mongodb264/bin/mongod --configsvr --dbpath /mongodb/config --port 20000 --logpath /var/log/mongodb/config.log --logappend --fork
#vim mongos_start.sh
/usr/local/mongodb264/bin/mongos --configdb 10.200.3.116:20000,10.200.3.117:20000,10.200.3.118:20000 --port 30000 --chunkSize 64 --logpath /var/log/mongodb/mongos.log --logappend --fork
给这几个脚本赋予可执行权限,注意启动顺序为: sh shard11_start.sh--- sh shard21_start.sh---sh config_start.sh----sh mongos_start.sh
最后在serverB和serverC上执行类似的操作。
Mongodb优化:
1、Vim /etc/profile
echo "0" > /proc/sys/vm/zone_reclaim_mode
/sbin/blockdev --setra 64 /dev/sdb (实际存放mongodb数据库的磁盘)
2、vim /etc/sysctl.conf
vm.swappiness = 0(将值改为0,不让使用交换分区)
3、连接池默认stack size为10240,意思就是每个连接需要使用10M,如果连接数多了,会相当的耗内存,所以调整为每个连接使用1M。
Vim /etc/profile.d/app.sh
ulimit -SHs 1024
常用命令
查看复制集信息
rs.status()
查看复制集优先级
rs.config()
查看数据库
show dbs;
切换/创建数据库
use db1;
删除当前使用的数据库
db.dropDatabase();
查看集合
show collections;
看当前使用的数据库
db.getName();
db
显示当前db状态
db.stats();
当前db版本
db.version();
创建集合
db.createCollection("coll_1");
查看当前数据库的集合
show collections;
添加数据(若存在主键,insert()不做操作,而save()则更改原来的内容为新内容)
db.coll_1.insert({age:1, name:"aaa"});
db.coll_1.save({age:1, name:"aaa"});
删除数据
db.coll_1.remove({})
修改数据
db.coll_1.update({"id":"aaa"}, {"name","abcdefg"}, false,true)
查询集合中的数据
db.coll_1.find({"age":{"$gt":60}});
db.coll_1.count();
修改复制集优先级(在主库上操作)
conf=rs.conf()
conf.members[0].priority=3
conf.members[1].priority=2
conf.members[2].priority=1
conf.members[3].priority=0.5
rs.reconfig(conf)
管理维护sharding:
1. 列出所有的shard server
> db.runCommand({ listshards: 1 })
2. 查看sharding信息:
>printShardingStatus()
3. 判断是否sharding:
>db.runCommand({ isdbgrid:1 })
4.查看分片信息
>sh.status();
相关文章推荐
- 【Mongodb】 Sharding Replica Sets 分片集群生产环境安装与介绍!
- Mongodb Replica Sets + Sharding 分片集群架构部署
- MongoDB 常见集群部署Replica Sets + Sharding
- MongoDB学习之旅三十:Replica Sets + Sharding
- Mongodb集群配置(sharding with replica set)
- Mongodb安装搭建Replica Set+Sharding集群
- Mongodb集群部署---Replica Set+Sharding
- 利用Mongodb的复制集搭建高可用分片,Replica Sets + Sharding的搭建过程
- 利用Mongodb的复制集搭建高可用分片,Replica Sets + Sharding的搭建过程
- mongodb集群之 replica sets 副本集
- 第十章:MongoDB Replica Sets + Sharding搭建
- MongoDB学习整理之Replica Sets + Sharding
- Mongodb集群配置(sharding with replica set)
- Mongodb Replica Set + Sharding集群
- MongoDB Replica Sets + Sharding 方案 及 chunks块 和 片键分析
- mongodb分片集群(sharding with replica set)配置
- Mongodb集群配置(sharding with replica set)
- Mongodb的Replica Sets + Sharding Architect
- MongoDB高可用架构:Replica Sets+Sharding