一. 说明:

搭建之前先了解一下MongoDB分片群集主要有如下三个组件:

Shard:分片服务器,用于存储实际的数据块,实际生产环境中一个shard server 角色可以由几台服务器组成一个Peplica Set 承担,防止主机单点故障。
Config Server:配置服务器,存储了整个分片群集的配置信息,其中包括chunk信息。
Routers:前端路由,客户端由此接入,且让整个群集看上去像单一数据库,前端应用可以透明使用。

二. 系统环境

Centos7.2、MongoDB4.4.4

三. 服务器的安装及配置(3台服务器执行相同操作)

1.把安装包传入并解压(放到data下就可)

tar xzvf mongodb-linux-x86_64-rhel70-4.4.4.tgz
官方网址:https://www.mongodb.com/download-center/community
mv mongodb-linux-x86_64-rhel70-4.4.4 mongodb

2.设置环境变量

echo ‘export PATH=$PATH:/data/mongodb/bin’ >> /etc/profile

保存后执行source /etc/profile
3.创建路由、配置、分片等的相关目录与文件
启动配置文件存放的文件夹:mkdir -p /data/mongodb/etc
配置服务数据存放目录:mkdir -p /data/mdata/config
分片服务数据存放目录:mkdir -p /data/mdata/shard
日志文件夹:mkdir -p /data/mlog/
配置服务日志存放目录:touch /data/mlog/config.log
路由服务日志存放目录:touch /data/mlog/mongos.log
分片服务数据存放目录:touch /data/mlog/shard.log
四. 配置服务器部署(3台服务器执行相同操作)
1.在/data/mongodb/etc/下创建config.conf

dbpath=/data/mdata/config #数据文件存放目录
logpath=/data/mlog/config.log #日志文件存放目录
port=27018 #端口
fork=true
logappend = true
bind_ip = 0.0.0.0 #允许任意机器连接
wiredTigerCacheSizeGB=8 #内存最大占用8G
replSet=configs #复制集名称
maxConns=5000
configsvr=true

2.配置复制集
分别启动配置服务(/data/mongodb/bin下)

./mongod -f /data/mongodb/etc/config.conf

3.连接mongo,只需在任意一台机器执行即可:

./mongo --host 172.20.1.230 --port 27018

切换数据库:

use admin

初始化复制集:

rs.initiate({_id:“configs”,members:[{_id:0,host:“172.20.1.229:27018”},{_id:1,host:“172.20.1.230:27018”},{_id:0,host:“172.20.1.231:27018”}]})

其中_id:"configs"的configs是上面config.conf配置文件里的复制集名称,把三台服务器的配置服务组成复制集。
查看状态:

rs.status()

等几十秒左右,执行上面的命令查看状态,2台机器的配置服务就已形成复制集,其中1台为PRIMARY,其他1台为SECONDARY。

五. 分片服务部署(2台服务器执行相同操作)
在/data/mongodb/etc/下创建shard.conf

dbpath=/SDXL/mdata/shard #数据,其他对应修改
logpath=/SDXL/mlog/shard.log #日志,其他对应修改
port=27001 #端口,shard1:27001 shard2:27002
logappend=true
fork=true #可后台
maxConns=5000
#storageEngine=mmapv1
shardsvr=true
#replSet=shard1 #要同域,其他对应修改
bind_ip=0.0.0.0
wiredTigerCacheSizeGB=16

./mongod -f /SDXL/mongodb/etc/shard.conf

六. 路由服务部署(2台服务器执行相同操作)
在/SDXL/mongodb/etc目录创建mongos.conf

logpath=/SDXL/mlog/mongos.log
logappend = true
port = 27017
fork = true
configdb = configs/172.20.1.229:27018,172.20.1.230:27018,172.20.1.231:27018
maxConns=20000
bind_ip=0.0.0.0
auth=true

2.启动mongos
分别在两台服务器启动(bin下)

./mongos -f /data/mongodb/etc/mongos.conf

3.启动分片功能
连接mongo

./mongo --host 172.20.1.229 --port 27017

4.开启认证 MongoDB 默认安装完成以后,只允许本地连接,同时不需要使用任何账号密码就可以直接连接MongoDB,这样就容易被黑,所以为了避免这些不必要的麻烦,所以我们需要给Mongo设置一个账号密码;

use admin
switched to db admin
db.createUser({user:“root”,pwd:“root”,roles:[“root”]})
Successfully added user: { “user” : “root”, “roles” : [ “root” ] }

5.认证登录

db.auth(“root”, “root”)

4.建立用户名密码
./mongo --host 172.20.1.229 --port 27017

use admin
db.createUser(
{ user: “root”,
pwd: “root”,
roles: [ { role: “userAdminAnyDatabase”, db: “admin” } ]
}
)

切换数据库

use test
添加分片,只需在一台机器执行即可
sh.addShard(“172.20.1.229:27001”)
sh.addShard(“172.20.1.230:27001”)
sh.addShard(“172.20.1.231:27001”)
查看集群状态
sh.status()

5.启用数据库分片
use test
sh.enableSharding(“test”)

6.测试

use test

插入测试数据

for (var i = 1; i <= 100000; i++)
db.table1.save({id:i,“test1”:“testval1”});

查看分片情况

db.table1.stats();

主要参数 “sharded” : true及各个分片的count量