整体规划
软件下载及环境变量配置
参考: Mongodb4.2+Centos7 liunx单机版部署
修改文件目录
mv mongodb-linux-x86_64-rhel70-4.2.16 mongodb;
cd mongodb;
配置Config节点
在三台机器上分别操作配置config节点:
mkdir -p config/data;
mkdir -p config/log;
touch config/log/mongodb.log
进入 config目录
cd config;
touch config.conf;
vim config.conf
config.conf 文件中输入如下内容
systemLog:
destination: file
logAppend: true
path: /opt/software/mongodb4.2/mongodb/config/log/mongodb.log
storage:
dbPath: /opt/software/mongodb4.2/mongodb/config/data
journal:
enabled: true
processManagement:
fork: true # 后台进程启动
net:
port: 27019
bindIp: 0.0.0.0
sharding:
clusterRole: configsvr
replication:
replSetName: configs
启动config节点
mongod --config /opt/software/mongodb4.2/mongodb/config/config.conf
登录任一节点,初始化配置副本集
mongo 192.168.0.105:27019
登录后输入如下内容
config = {_id: 'configs', members: [
{_id: 0, host: '192.168.0.105:27019'},
{_id: 1, host: '192.168.0.102:27019'},
{_id: 2, host: '192.168.0.108:27019'}]
}
其中,"_id" : "configs"应与配置文件中配置的 replicaction.replSetName 一致
输出如下结果:
初始化配置
rs.initiate(config)
成功
配置shard1节点
在三台机器上分别操作配置shard1节点:
回到mongodb目录
mkdir -p shard1/data;
mkdir -p shard1/log;
touch shard1/log/mongodb.log
进入shard1目录
cd shard1;
touch config.conf;
vim config.conf
config.conf 文件中输入如下内容
systemLog:
destination: file
logAppend: true
path: /opt/software/mongodb4.2/mongodb/shard1/log/mongodb.log
storage:
dbPath: /opt/software/mongodb4.2/mongodb/shard1/data
journal:
enabled: true
processManagement:
fork: true # 后台进程启动
net:
port: 27010
bindIp: 0.0.0.0
sharding:
clusterRole: shardsvr
replication:
replSetName: shard1
启动shard1节点
mongod --config /opt/software/mongodb4.2/mongodb/shard1/config.conf
登录任一节点,初始化shard1副本集
mongo 192.168.0.105:27010
登录后输入如下内容:
config = {_id: 'shard1', members: [
{_id: 0, host: '192.168.0.105:27010'},
{_id: 1, host: '192.168.0.102:27010'},
{_id: 2, host: '192.168.0.108:27010'}]
}
输出如下结果:
初始化配置
rs.initiate(config)
成功
配置shard2节点
在三台机器上分别操作配置shard2节点:
回到mongodb目录
mkdir -p shard2/data;
mkdir -p shard2/log;
touch shard2/log/mongodb.log
进入shard2目录
cd shard2;
touch config.conf;
vim config.conf
config.conf 文件中输入如下内容
systemLog:
destination: file
logAppend: true
path: /opt/software/mongodb4.2/mongodb/shard2/log/mongodb.log
storage:
dbPath: /opt/software/mongodb4.2/mongodb/shard2/data
journal:
enabled: true
processManagement:
fork: true # 后台进程启动
net:
port: 27011
bindIp: 0.0.0.0
sharding:
clusterRole: shardsvr
replication:
replSetName: shard2
启动shard2节点
mongod --config /opt/software/mongodb4.2/mongodb/shard2/config.conf
登录任一节点,初始化shard2副本集
mongo 192.168.0.105:27011
登录后输入如下内容:
config = {_id: 'shard2', members: [
{_id: 0, host: '192.168.0.105:27011'},
{_id: 1, host: '192.168.0.102:27011'},
{_id: 2, host: '192.168.0.108:27011'}]
}
输出如下结果:
初始化配置
rs.initiate(config)
成功
配置shard3节点
在三台机器上分别操作配置shard3节点:
回到mongodb目录
mkdir -p shard3/data;
mkdir -p shard3/log;
touch shard3/log/mongodb.log
进入shard3目录
cd shard3;
touch config.conf;
vim config.conf
config.conf 文件中输入如下内容
systemLog:
destination: file
logAppend: true
path: /opt/software/mongodb4.2/mongodb/shard3/log/mongodb.log
storage:
dbPath: /opt/software/mongodb4.2/mongodb/shard3/data
journal:
enabled: true
processManagement:
fork: true # 后台进程启动
net:
port: 27012
bindIp: 0.0.0.0
sharding:
clusterRole: shardsvr
replication:
replSetName: shard3
启动shard3节点
mongod --config /opt/software/mongodb4.2/mongodb/shard3/config.conf
登录任一节点,初始化shard3副本集
mongo 192.168.0.105:27012
登录后输入如下内容:
config = {_id: 'shard3', members: [
{_id: 0, host: '192.168.0.105:27012'},
{_id: 1, host: '192.168.0.102:27012'},
{_id: 2, host: '192.168.0.108:27012'}]
}
输出如下结果:
初始化配置
rs.initiate(config)
成功
配置mongos节点
在三台机器上分别操作配置mongos节点:
回到mongodb目录
mkdir -p mongos/log;
touch mongos/log/mongodb.log
进入mongos目录
cd mongos;
touch config.conf;
vim config.conf
config.conf 文件中输入如下内容
systemLog:
destination: file
logAppend: true
path: /opt/software/mongodb4.2/mongodb/mongos/log/mongodb.log
#dbPath: /var/lib/mongo
processManagement:
fork: true # # 后台进程启动
net:
port: 27017
bindIp: 0.0.0.0
#监听的配置服务器,只能有1个或者3个 configs为配置服务器的副本集名字
sharding:
configDB: configs/192.168.0.105:27019,192.168.0.102:27019,192.168.0.108:27019
启动mongos节点, 注意,此处是mongos命令,不是mogod
mongos --config /opt/software/mongodb4.2/mongodb/mongos/config.conf
添加分片
以上搭建了配置服务器、路由服务器,分片服务器,不过应用程序连接到mongos路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效。
片键是集合的一个键,MongoDB根据这个键拆分数据。例如,如果选择基于“user_id”进行分片,MongoDB会根据不同的user_id进行分片。选择片键可以认为是选择集合中数据的顺序。它与索引是个相似的概念:随着集合的不断增长,片键就会成为集合上最重要的索引。只有被索引过的键才能够作为片键.
连接任一路由服务器
mongo 192.168.0.105:27017
使用admin数据库添加分片
sh.addShard("shard1/192.168.0.105:27010,192.168.0.102:27010,192.168.0.108:27010")
sh.addShard("shard2/192.168.0.105:27011,192.168.0.102:27011,192.168.0.108:27011")
sh.addShard("shard3/192.168.0.105:27012,192.168.0.102:27012,192.168.0.108:27012")
查看集群状态
sh.status()
测试分片效果
chunksize默认大小为64M ,为了展示效果,修改默认配置为1M
use config
db.settings.save({ "_id" : "chunksize", "value" : 1 })
激活分片功能
为test数据库开启分片,并指定一个集合users对其进行分片,选择一个片键user_id
sh.enableSharding("test")
sh.shardCollection("test.users", {user_id: 1})
插入数据观察分片效果
use test;
for (var i = 1; i <= 100000; i++) db.users.save({user_id:i,username:"userName"+i});
这里插入过程可能要等一小会
查看集合信息
db.users.stats();
查看分片信息
db.printShardingStatus() 或 sh.status()
更多详细信息:sh.status({"verbose":1})
结束
停止集群时先停止mongs,
登录客户端执行如下命令
mongo localhost:27017;
use admin;
db.shutdownServer();
再停止其他节点
mongod --shutdown --config /opt/software/mongodb4.2/mongodb/shard1/config.conf
mongod --shutdown --config /opt/software/mongodb4.2/mongodb/shard2/config.conf
mongod --shutdown --config /opt/software/mongodb4.2/mongodb/shard3/config.conf
mongod --shutdown --config /opt/software/mongodb4.2/mongodb/config/config.conf
重新启动,先启动config节点,再启动分片节点,最后启动mongos 节点
mongod --config /opt/software/mongodb4.2/mongodb/config/config.conf
mongod --config /opt/software/mongodb4.2/mongodb/shard1/config.conf
mongod --config /opt/software/mongodb4.2/mongodb/shard2/config.conf
mongod --config /opt/software/mongodb4.2/mongodb/shard3/config.conf
mongos --config /opt/software/mongodb4.2/mongodb/mongos/config.conf
至此,Mongodb分片集群搭建完毕