centos7下搭建mongodb分片集群

一组Mongodb复制集,就是一组mongod进程,这些进程维护同一个数据集合。复制集提供了数据冗余和高等级的可靠性,这是生产部署的基础

845791bd1c2593ec43ed1fd7877decb82fc.jpg

下面就是我本地测试的环境,三台虚拟机作为mongodb存储的复制集

172.25.128.53 
172.25.128.55 
172.25.128.60

首先关闭selinux

sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
setenforce 0

停止防火墙并取消开机启动

systemctl stop firewalld.service
systemctl disable firewalld.service

在三台机器上分别创建目录,下载mongodb包

配置服务数据存放目录

mkdir -p /data/mongodb

下载mongdb包并解压

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.9.tgz
tar -zxvf mongodb-linux-x86_64-4.0.9.tgz
mv mongodb-linux-x86_64-4.0.9 /usr/local/mongodb

启动配置文件存放的文件夹

mkdir -p /usr/local/mongodb/conf

配置服务日志存放目录

mkdir -p /usr/local/mongodb/log
vi /etc/profile
#最后一行添加
export PATH=$PATH:/usr/local/mongodb/bin

三台服务器上都要执行

分片1服务数据存放目录和日志存放文件

mkdir -p /data/mongodb/shard1
touch /usr/local/mongodb/log/shard1.log

分片2服务数据存放目录和日志存放文件

mkdir -p /data/mongodb/shard2
touch /usr/local/mongodb/log/shard2.log

分片3服务数据存放目录和日志存放文件

mkdir -p /data/mongodb/shard3
touch /usr/local/mongodb/log/shard3.log

分别在三台服务器上配置mongodb配置文件,vi /usr/local/mongodb/conf/config.conf,内容如下

dbpath=/data/mongodb
logpath=/usr/local/mongodb/log/config.log
port=27018
logappend=true
fork=true
maxConns=5000
#复制集名称
replSet=shard
#置参数为true
configsvr=true
#允许任意机器连接
bind_ip=0.0.0.0

分别启动三台服务器的配置服务

mongod -f /usr/local/mongodb/conf/config.conf

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

mongo --port 27018

初始化复制集

rs.initiate({_id:"shard",members:[{_id:0,host:"172.25.128.53:27018"},{_id:1,host:"172.25.128.55:27018"},{_id:2,host:"172.25.128.60:27018"}]})

其中_id:"shard"是上面config.conf配置文件里的复制集名称

查看状态

rs.status()

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

分片服务部署(3台服务器执行相同操作)

1.在/usr/local/mongodb/conf目录创建shard1.conf、shard2.conf、shard3.conf,内容如下

dbpath=/data/mongodb/shard1 #其他2个分片对应修改为shard2、shard3文件夹
logpath=/usr/local/mongodb/log/shard1.log #其他2个分片对应修改为shard2.log、shard3.log
port=27001 #其他2个分片对应修改为27002、27003
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true
replSet=shard1 #其他2个分片对应修改为shard2、shard3
bind_ip=0.0.0.0

端口分别是27001、27002、27003,分别对应shard1.conf、shard2.conf、shard3.conf

还有数据存放目录、日志文件这几个地方都需要对应修改。

在3台机器的相同端口形成一个分片的复制集,由于3台机器都需要这3个文件,所以根据这9个配置文件分别启动分片服务

mongod -f /usr/local/mongodb/conf/shard1.conf
mongod -f /usr/local/mongodb/conf/shard2.conf
mongod -f /usr/local/mongodb/conf/shard3.conf

2.将分片配置为复制集,连接mongo,只需在任意一台机器执行即可

mongo --port 27001

这里以shard1为例,其他两个分片则再需对应连接到27002、27003的端口进行操作即可

切换数据库:

use admin

初始化复制集:

rs.initiate({_id:"shard1",members:[{_id:0,host:"172.25.128.53:27001"},{_id:1,host:"172.25.128.55:27001"},{_id:2,host:"172.25.128.60:27001"}]})

以上是基于分片1来操作,同理,其他2个分片也要连到各自的端口来执行一遍上述的操作,让3个分片各自形成1主2从的复制集

登陆27002端口操作

mongo --port 27002
use admin
rs.initiate({_id:"shard2",members:[{_id:0,host:"172.25.128.53:27002"},{_id:1,host:"172.25.128.55:27002"},{_id:2,host:"172.25.128.60:27002"}]})

登陆27003端口操作

mongo --port 27003
use admin
rs.initiate({_id:"shard3",members:[{_id:0,host:"172.25.128.53:27003"},{_id:1,host:"172.25.128.55:27003"},{_id:2,host:"172.25.128.60:27003"}]})

注意端口及仲裁节点的问题即可,操作完成后3个分片都启动完成,并完成复制集模式

路由服务部署(3台服务器执行相同操作)

在/usr/local/mongodb/conf目录创建mongos.conf,vi /usr/local/mongodb/conf/mongos.conf内容如下

systemLog:
  destination: file
  logAppend: true
  path: /usr/local/mongodb/log/mongos.log
processManagement:
  fork: true
#  pidFilePath: /var/log/mongodb/mongos.pid
# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0
sharding:
   configDB: shard/172.25.128.53:27018,172.25.128.53:27018,172.25.128.53:27018

分别在三台服务器启动mongos

mongos -f /usr/local/mongodb/conf/mongos.conf

启动分片功能

连接mongo

mongo

切换数据库

use admin

添加分片,只需在一台机器执行即可

sh.addShard("shard1/172.25.128.53:27001,172.25.128.55:27001,172.25.128.60:27001")
sh.addShard("shard2/172.25.128.53:27002,172.25.128.55:27002,172.25.128.60:27002")
sh.addShard("shard3/172.25.128.53:27003,172.25.128.55:27003,172.25.128.60:27003")

查看集群状态

sh.status()

设置分片chunk大小

use config
db.settings.save({"_id":"chunksize","value":1})

模拟写入数据

use sulao
for(i=1;i<=50000;i++){db.user.insert({"id":i,"name":"sulao_"+i})}

启用数据库分片

sh.enableSharding("sulao")

创建索引,对表进行分片        

db.user.createIndex({"id":1})
sh.shardCollection("sulao.user",{"id":1})

查看分片状态

sh.status() # 查看分片情况

{818A6D6C-9A86-42EA-BD22-341B2EA078C4}_20190520114856.jpg

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/674.html