Mongodb分片集群 安装部署 实时监控命令
一.mongodb分片集群部署:
Ps:本文共涉及12个实例,端口较多,注意更改配置文件中的端口号。
1.环境:三台服务器,每台服务器一个mongos实例,一个configsvr实例,两个shard实例,,将三台服务器上的configsvr做副本集,将6个shard实例做两个副本集保证分片集群的高可用。
主机名 |
ip地址 |
Mongos |
Configsvr |
shard |
Mongo1 |
192.168.146.25 |
端口:27018 |
端口:27017 |
shard1主节点:27019 shard2从节点:27020 |
Mongo2 |
192.168.146.26 |
端口:27018 |
端口:27017 |
shard1从节点:27019 shard2主节点:27020 |
Mongo3 |
192.168.146.27 |
端口:27018 |
端口:27017 |
shard1从节点:27019 shard2从节点:27020
|
2.configsvr配置(添加红色框中部分,注意修改端口号):
- cat /data/mongodb/27017/mongodb.conf
3.复制此配置文件到另外两个节点相同目录下:
- scp /data/mongodb/27017/mongodb.conf 192.168.146.26:/data/mongodb/27017/
- scp /data/mongodb/27017/mongodb.conf 192.168.146.27:/data/mongodb/27017/
4.启动三台服务器的configsvr。
- mongod -f /data/mongodb/27017/mongodb.conf
- mongod -f /data/mongodb/27017/mongodb.conf
- mongod -f /data/mongodb/27017/mongodb.conf
5.分片群集的configsvr角色搭建副本集保证高可用:
- #mongo 192.168.146.25:27017
>config={_id:”testconf”,configsvr:true,members:[{_id:0,host:”192.168.146.25:27017”},{_id:1,host:”192.168.146.26:27017”},{_id:2,host:”192.168.146.27:27017”}]}
>rs.initiate(“config”)
>rs.status()
- 其他从节点查看数据:
>rs.slaveOk()
>show dbs
6.router(mongos)配置(配置文件中删除storage存储模块,添加sharding模块,指定configsvr地址,使用”副本集/ip:port”的方式指定,配置多个router,任何一个都能正常获取数据):
- cat /data/mongodb/27018/mongodb.conf
7.复制router配置文件到其他节点:
- scp /data/mongodb/27018/mongodb.conf 192.168.146.26:/data/mongodb/27018/
- scp /data/mongodb/27018/mongodb.conf 192.168.146.27:/data/mongodb/27018/
8.三台节点启动router:
- mongos -f /data/mongodb/27018/mongodb.conf
- mongos -f /data/mongodb/27018/mongodb.conf
- mongos -f /data/mongodb/27018/mongodb.conf
9.shardsvr配置(三台服务器,组成两个shard副本集,共6个实例,第一个副本集:testdata1,第二个副本集testdata2):
- 配置第一个shard副本集:cat /data/mongodb/27019/mongodb.conf
10.将第一个shardsvr副本集配置文件复制给其他节点:
- scp /data/mongodb/27019/mongodb.conf 192.168.146.26:/data/mongodb/27019/
- scp /data/mongodb/27019/mongodb.conf 192.168.146.27:/data/mongodb/27019/
11.配置第二个shard副本集:cat /data/mongodb/27020/mongodb.conf
12.将第二个shardsvr副本集配置文件复制给其他节点:
- scp /data/mongodb/27020/mongodb.conf 192.168.146.26:/data/mongodb/27020/
- scp /data/mongodb/27020/mongodb.conf 192.168.146.27:/data/mongodb/27020/
13.启动三台服务器上两个shard副本集的所有节点:
- mongod -f /data/mongodb/27019/mongodb.conf
- mongod -f /data/mongodb/27019/mongodb.conf
- mongod -f /data/mongodb/27019/mongodb.conf
- mongod -f /data/mongodb/27020/mongodb.conf
- mongod -f /data/mongodb/27020/mongodb.conf
- mongod -f /data/mongodb/27020/mongodb.conf
14.配置角色(192.168.146.25:27019为testdata1副本集的primary;192.168.146.26:27020为testdata2副本集的primary):
- # mongo 192.168.146.25:27019
>config={_id:”testdata1”,members:[{_id:0,host:”192.168.146.25:27019”},{_id:1,host:”192.168.146.26:27019”},{_id:2,host:”192.168.146.27:27019”}]}
>rs.initiate(“config”)
>rs.status()
- # mongo 192.168.146.26:27020
>config={_id:”testdata2”,members:[{_id:0,host:”192.168.146.25:27020”},{_id:1,host:”192.168.146.26:27020”},{_id:2,host:”192.168.146.27:27020”}]}
>rs.initiate(“config”)
>rs.status()
二.分片群集的使用:
1.mongos添加shard副本集及节点:
- #mongo 192.168.146.25:27018
mongos>sh.addShard(“testdata1/192.168.146.25:27019,192.168.146.26:27019,192.168.146.27:27019”)
mongos>sh.addShard(“testdata2/192.168.146.25:27020,192.168.146.26:27020,192.168.146.27:27020”)
mongos>sh.status()
2.默认用户通过mongos向服务器添加数据时默认是没有分片存储,操作都是在路由角色里面。此时需要对需要分片的库和表进行操作,才可以真正进行分片:
- mongos>use admin
- mongos>db.runCommand({shardcollection:"mytest.test1",key:{_id:"hashed"}})
- mongos>db.runCommand({enablesharding:"mytest"})
3.模拟通过mongos向后端mytest.test1表插入1000条数据,然后去后端两个shard副本集中观察是否分片成功:
- mongos> use mytest
- mongos> for (i=1;i<=1000;i++){db.test1.insert({name:"mytest1",age:i})}
- mongos> db.test1.find().count()
- #mongo 192.168.146.25:27019
>use admin
>db.test1.find().count()
>511
- #mongo 192.168.146.26:27020
>use admin
>db.test1.find().count()
>489
三.mongodb监控命令:
1.mongostat:
- mongostat --help
- mongostat --host 192.168.146.25 --port 27018 :实时监控主机mongo状态
2.serverstatus:
- >db.serverStatus() : 查看所有的监控信息
- >db.serverStatus().network :查看网络流量信息
- >db.serverStatus().opcounters :统计增删改查次数
- >db.serverStatus().connections : 统计连接
3.非交互模式下:
- echo “db.serverStatus().opcounters” |mongo --host 127.0.0.1:27018