1. 环境准备

系统:CentOs7.6
安装包:​​​https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.9.tgz​

安装规划
三台服务器
of-ad-dev-001
of-ad-dev-002
of-ad-dev-003

服务器1

服务器2

服务器3

mongos

mongos

mongos

config server

config server

config server

shard server1

shard server1 副本

shard server1 副本

shard server2

shard server2 副本

shard server2 副本

shard server3

shard server3 副本

shard server3 副本

端口分配

mongos:20000
config:20001
shard1:27001
shard2:27002
shard3:27003

创建相关目录

cd /home/edison/mongodb
mkdir -p mongos/log
mkdir -p config/data
mkdir -p config/log
mkdir -p shard1/data
mkdir -p shard1/log
mkdir -p shard2/data
mkdir -p shard2/log
mkdir -p shard3/data
mkdir

配置环境变量

vim /etc/profile
##
export MONGODB_HOME=/home/edison/mongodb
export PATH=$MONGODB_HOME/bin:$PATH
##
source

输入版本号,则表示配置成功

mongod -v

2. 配置config server服务器

vi $MONGODB_HOME/conf/config.conf

## content
systemLog:
destination: file
logAppend: true
path: /home/edison/mongodb/config/log/config.log

# Where and how to store data.
storage:
dbPath: /home/edison/mongodb/config/data
journal:
enabled: true
# how the process runs
processManagement:
fork: true
pidFilePath: /home/edison/mongodb/config/log/configsrv.pid

# network interfaces
net:
port: 20001
bindIp: of-ad-dev-001

#operationProfiling:
replication:
replSetName: config

sharding:
clusterRole: configsvr

分发包

scp -r ~/mongodb edison@of-ad-dev-002:~/
scp

注意修改配置文件中的服务器地址

启动config server(三台机器都得启动)

mongod --config $MONGODB_HOME/conf/config.conf

登陆任意一台,初始化配置副本集

# 连接
mongo of-ad-dev-001:20001

# config变量
config = {
_id : "config",
members : [
{_id : 0, host : "of-ad-dev-001:20001" },
{_id : 1, host : "of-ad-dev-002:20001" },
{_id : 2, host : "of-ad-dev-003:20001" }
]
}
# 初始化副本集
rs.initiate(config)

# 查看分区状态
rs.status()

3. 配置第一个分片副本集

vi $MONGODB_HOME/conf/shard1.conf

#配置文件内容
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /home/edison/mongodb/shard1/log/shard1.log

# Where and how to store data.
storage:
dbPath: /home/edison/mongodb/shard1/data
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 20

# how the process runs
processManagement:
fork: true
pidFilePath: /home/edison/mongodb/shard1/log/shard1.pid

# network interfaces
net:
port: 27001
bindIp: of-ad-dev-001

#operationProfiling:
replication:
replSetName: shard1
sharding:
clusterRole: shardsvr

启动shard1 server(三台机器都得启动)

mongod --config $MONGODB_HOME/conf/shard1.conf

登陆任意一台服务器,初始化副本集

# 连接
mongo of-ad-dev-001:27001

# config变量
config = {
_id : "shard1",
members : [
{_id : 0, host : "of-ad-dev-001:27001" },
{_id : 1, host : "of-ad-dev-002:27001" },
{_id : 2, host : "of-ad-dev-003:27001" }
]
}
# 初始化副本集
rs.initiate(config)

# 查看分区状态
rs.status()

4. 配置第二三个分片副本集

和第一个类似,注意修改端口和文件的位置即可

5. 配置路由服务器mongos

vi $MONGODB_HOME/conf/mongos.conf

systemLog:
destination: file
logAppend: true
path: /home/edison/mongodb/mongos/log/mongos.log
processManagement:
fork: true

# network interfaces
net:
port: 20000
bindIp: of-ad-dev-001
#监听的配置服务器,只能有1个或者3个 config为配置服务器的副本集名字
sharding:
configDB: config/of-ad-dev-001:20001,of-ad-dev-002:20001,of-ad-dev-003:20001

需要注意的是configDB中的config和config server集群的名字一样
分发到另外2台机器,注意修改ip地址

scp -r ~/mongodb/conf/mongos.conf edison@of-ad-dev-002:~/mongodb/conf/mongos.conf
scp -r ~/mongodb/conf/mongos.conf edison@of-ad-dev-003:~/mongodb/conf/mongos.conf

启动(三台机器都得启动)

mongos -f $MONGODB_HOME/conf/mongos.conf

6. 启用分片

登陆任意一台mongos

mongo of-ad-dev-001:20000

#使用admin数据库
use admin

#串联路由服务器与分配副本集
sh.addShard("shard1/of-ad-dev-001:27001,of-ad-dev-002:27001,of-ad-dev-003:27001")
sh.addShard("shard2/of-ad-dev-001:27002,of-ad-dev-002:27002,of-ad-dev-003:27002")
sh.addShard("shard3/of-ad-dev-001:27003,of-ad-dev-002:27003,of-ad-dev-003:27003")

#查看集群状态
sh.status()

配置分片规则,测试

假设对music数据库中的artists集合按照name键进行分片,首先对music数据库启用分片

db.runCommand( { enablesharding :"mbase"});

对数据库启用分片后,就可以使用shardCollection()命令对集合分片了

db.runCommand( { shardcollection : "mbase.weibo_status",key : {date: 1} } );
user mbase

db.weibo_status.save({date:2017});
db.weibo_status.save({date:2018});
db.weibo_status.save({date:2019});

db.weibo_status.stats();

安全

mongodb分片集群开启安全策略​

参考博客

[1]​​www.ityouknow.com/mongodb/2017/08/05/mongodb-cluster-setup.html​​​ [2]​​http://www.ityouknow.com/mongodb/2017/08/16/install-mongodb-cluster.html​​ 好文
[3]​​https://www.jianshu.com/p/e1855a1d38b7​