IP地址 | 路由服务器(Routers) | 配置服务器(Config Server) | Shard1 | Shard2 | Shard3 |
---|---|---|---|---|---|
192.168.125.119 | 27017 | 27018 | 27001 | 27002 | 27003 |
192.168.125.120 | 27017 | 27018 | 27001 | 27002 | 27003 |
192.168.125.121 | 27017 | 27018 | 27001 | 27002 | 27003 |
部署分片群集
三台物理服务器安装及配置
1、下载解压MongoDB
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.0.tgz tar zxvf mongodb-linux-x86_64-4.0.0.tgz -C /opt mv /opt/mongodb-linux-x86_64-4.0.0/ /usr/local/mongodb
2、创建路由、配置、分片服务器的数据存放目录及日志管理
路由服务器不存储数据,因此不需要创建数据存储目录,日志文件创建完成还需给予权限。
mkdir -p /data/mongodb/config mkdir -p /data/mongodb/shard{1,2,3} mkdir -p /data/mongodb/logs touch /data/mongodb/logs/shard{1,2,3}.log touch /data/mongodb/logs/mongos.log touch /data/mongodb/logs/config.log chmod 777 /data/mongodb/logs/*.log
3、创建管理用户,修改目录权限
useradd -M -s /sbin/nologin mongo chown -R mongo:mongo /usr/local/mongodb chown -R mongo:mongo /data/mongodb
4、添加环境变量,便于使用
echo 'export MONGODB_HOME=/usr/local/mongodb' >> /etc/profile echo 'export PATH=$PATH:$MONGODB_HOME/bin' >> /etc/profile source /etc/profile
5、系统参数优化
ulimit -n 25000 //可以打开的最大文件数量 ulimit -u 25000 //用户最大可用的进程数 sysctl -w vm.zone_reclaim_mode=0 //内存不足时,从其他节点分配内存 # 从CentOS7开始,MongoDB会建议关闭系统的THP特性,否则可能会导致性能下降 echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag //*注意*这些优化都是临时的,重启失效
部署配置服务器(三台物理服务器配置步骤相同)
1、写入配置文件,我们可以用scp命令把配置文件发到其他两台物理服务器
# vim config.conf dbpath=/data/mongodb/config //数据文件存放位置 logpath=/data/logs/config.log //日志文件 port=27018 //端口号 logappend=true fork=true maxConns=5000 storageEngine=mmapv1 replSet=configs //复制集名称 configsvr=true //设置参数为true # mongod -f config.conf //启动config实例 scp /usr/local/mongodb/bin/config.conf root@192.168.125.120:/usr/local/mongodb/bin scp /usr/local/mongodb/bin/config.conf root@192.168.125.121:/usr/local/mongodb/bin
2、配置复制集(任意一台物理机上操作即可)
mongo --port 27018 config={_id:"configs",members:[{_id:0,host:"192.168.125.119:27018"},{_id:1,host:"192.168.125.120:27018"},{_id:2,host:"192.168.125.121:27018"}]} //创建复制集 rs.initiate(config) //初始化复制集
部署分片服务器
编辑shard{1,2,3}.conf配置文件,端口分别为27001,27002,27003,设置shardsvr=true,启动分片服务器
# vim shard1.conf dbpath=/data/mongodb/shard1 logpath=/data/logs/shard1.log port=27001 logappend=true fork=true maxConns=5000 storageEngine=mmapv1 shardsvr=true # mongod -f shard1.conf # 与另外两台配置实例配置文件相同,仅端口、数据文件存放及日志文件要改,只需配置完成后启动即可
将shard1配置为复制集(这里需要注意的是,预先被设为仲裁节点的服务器上创建复制集会报错。)
mongo --port 27001 use admin config={_id:"shard1",members:[{_id:0,host:"192.168.125.119:27001"},{_id:1,host:"192.168.125.120:27001"},{_id:2,host:"192.168.125.121:27001"}]} //创建复制集 rs.initiate(config) //初始化复制集
其余两台分片服务器shard2、shard3设置相同,注意端口及仲裁节点的问题即可
部署路由服务器
创建配置文件,将配置文件发送到其他物理服务器。注意,路由服务器不需要存储数据目录
# vim mongos.conf logpath=/data/mongodb/logs/mongos.log logappend = true port = 27017 fork = true configdb = configs/192.168.125.119:27018,192.168.125.120:27018,192.168.125.121:27018 maxConns=20000
启动mongos实例
mongs -f /usr/local/mongodb/bin/mongos.conf # 注意,这边启动mongos实例用的是mongos命令
启动分片功能
mongo //默认进入27017端口 mongos> use admin mongos> sh.addShard("shard1/192.168.125.119:27001,192.168.125.120:27001,172.16.10.29:27001") mongos> sh.addShard("shard2/192.168.125.119:27002,192.168.125.120:27002,172.16.10.29:27002") mongos> sh.status() //查看群集状态 # 此处为添加两台分片服务器,后续添加的也会均匀分配分片数据
实现分片功能
设置分片chunk大小
mongos> use config mongos> db.settings.save({"_id":"chunksize","value":1}) # 设置块大小为1M是方便实验,不然需要插入海量数据
模拟写入数据
mongos> use school mongos> show collections mongos> for(i=1;i=50000;i++){db.user.insert({"id":i,"name":"jack"+i})} # 在school库的user表中循环写入五万条数据
启动数据库分片
mongos>sh.enableSharding("school") # 我们可以自定义需要分片的库或表
为school库中的user集合创建索引,然后对表进行分片
mongos> db.user.createIndex({"id":1}) # 以"id"作为索引 mongos> sh.shardCollection("school.user",{"id":1}) # 根据"id"对user表进行分片 mongos> sh.status() # 查看分片情况 mongos> sh.help() # 查看分片相关的命令
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。