一. 说明:
搭建之前先了解一下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量