centos7下搭建mongodb分片集群

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

845791bd1c2593ec43ed1fd7877decb82fc.jpg

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

01.
172.25.128.53 
02.
172.25.128.55 
03.
172.25.128.60

首先关闭selinux

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

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

01.
systemctl stop firewalld.service
02.
systemctl disable firewalld.service

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

配置服务数据存放目录

01.
mkdir -p /data/mongodb

下载mongdb包并解压

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

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

01.
mkdir -p /usr/local/mongodb/conf

配置服务日志存放目录

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

三台服务器上都要执行

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

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

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

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

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

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

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

01.
dbpath=/data/mongodb
02.
logpath=/usr/local/mongodb/log/config.log
03.
port=27018
04.
logappend=true
05.
fork=true
06.
maxConns=5000
07.
#复制集名称
08.
replSet=shard
09.
#置参数为true
10.
configsvr=true
11.
#允许任意机器连接
12.
bind_ip=0.0.0.0

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

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

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

01.
mongo --port 27018

初始化复制集

01.
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配置文件里的复制集名称

查看状态

01.
rs.status()

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

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

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

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

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

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

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

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

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

01.
mongo --port 27001

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

切换数据库:

01.
use admin

初始化复制集:

01.
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端口操作

01.
mongo --port 27002
02.
use admin
03.
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端口操作

01.
mongo --port 27003
02.
use admin
03.
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内容如下

01.
systemLog:
02.
  destination: file
03.
  logAppend: true
04.
  path: /usr/local/mongodb/log/mongos.log
05.
processManagement:
06.
  fork: true
07.
#  pidFilePath: /var/log/mongodb/mongos.pid
08.
# network interfaces
09.
net:
10.
  port: 27017
11.
  bindIp: 0.0.0.0
12.
sharding:
13.
   configDB: shard/172.25.128.53:27018,172.25.128.53:27018,172.25.128.53:27018

分别在三台服务器启动mongos

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

启动分片功能

连接mongo

01.
mongo

切换数据库

01.
use admin

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

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

查看集群状态

01.
sh.status()

设置分片chunk大小

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

模拟写入数据

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

启用数据库分片

01.
sh.enableSharding("sulao")

创建索引,对表进行分片        

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

查看分片状态

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

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

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

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

评论列表