CentOS 7 上搭建MongoDB集群–超详细步骤-新手必看
我的三个虚拟主机名分别是wq1、wq2、wq3 下面的各个端口都是默认值,无需改动
路由服务端口:在客户端应用程序和分片群集之间提供接口
配置服务端口:存储集群的元数据和配置设置
分片端口:每个碎片包含碎片数据的子集
主机 | 路游服务端口 | 配置服务端口 | 分片端口1 | 分片端口2 | 分片端口3 |
---|---|---|---|---|---|
wq1 | 27017 | 27018 | 27001 | 27002 | 27003 |
wq2 | 27017 | 27018 | 27001 | 27002 | 27003 |
wq3 | 27017 | 27018 | 27001 | 27002 | 27003 |
一些说明:在进行配置文件时,三个虚拟主机都要进行配置,凡牵扯需要运行的部分可在一个虚拟主机上运行。
按照以下步骤进行操作可以运行成功的,本文旨在强调如何搭建,对具体原理稍作浅析方便操作时方便理解,理论深度还远未达到,适用于初学新手。
0.MongoDB分片群集主要有如下
Shard:分片服务器,用于存储实际的数据块,实际生产环境中一个shard server 角色可以由几台服务器组成一个Replica Set 承担,防止主机单点故障。
Config Server:配置服务器,存储了整个分片群集的配置信息,其中包括chunk信息。
Routers:前端路由,客户端由此接入,且让整个群集看上去像单一数据库,前端应用可以透明使用。
1、下载解压MongoDB
到MongoDB官网下载:点击下载mongodb4.0.6版本
点击查看MongoDB中文手册
解压方式:tar zxvf mongodb-linux-x86_64-4.0.6.tgz
解压后改名并放到 home下mv mongodb-linux-x86_64-4.0.6.tgz /home/mongodb
(下面的操作则在 /home/mongodb 不再单独声明)
2、设置环境变量
1、
vim /etc/profile
2、export PATH=.:/home/mongodb/bin:$PATH
3、source /etc/profile
3、创建配置文件、日志文件所需的文件夹)
启动配置文件存放的文件夹:
mkdir -p /home/mongodb/conf
配置服务数据存放目录:mkdir -p /home/mongodb/data/config
分片1服务数据存放目录:mkdir -p /home/mongodb/data/shard1
分片2服务数据存放目录:mkdir -p /home/mongodb/data/shard2
分片3服务数据存放目录:mkdir -p /home/mongodb/data/shard3
创建log目录:
mkdir -p /home/mongodb/log
配置服务日志存放文件:touch /home/mongodb/log/config.log
路由服务日志存放文件:touch /home/mongodb/log/mongos.log
分片1服务日志存放文件:touch /home/mongodb/log/shard1.log
分片2服务日志存放文件:touch /home/mongodb/log/shard2.log
分片3服务日志存放文件:touch /home/mongodb/log/shard3.log
(因为mongodb文件下没有创建这些文件夹,但又不能缺少,因此需自己创建)
4、配置服务器部署
- 创建config.conf
1、
cd /home/mongodb/conf
2、vim config.conf
3 、插入的数据如下#插入如下内容 dbpath=/home/mongodb/data/config logpath=/home/mongodb/log/config.log port=27018 logappend=true fork=true maxConns=5000 #复制集名称 replSet=configs #置参数为true configsvr=true #允许任意机器连接 bind_ip=0.0.0.0
- 配置复制集
mongod -f /home/mongodb/conf/config.conf
- 连接mongo
1、
mongo --host wq1 --port 27018
2、use admin
3、初始化复制集(#config是config.conf配置文件的复制集名称,三台机器配置服务组成配置集):
rs.initiate({_id:"configs",members:[{_id:0,host:"wq1:27018"},{_id:1,host:"wq2:27018"}, {_id:2,host:"wq3:27018"}]})
运行后三个机器的显示分别为: configs:SECONDARY>
configs:PRIMARY>
configs:PRIMARY>
4、查看状态:
rs.status()
运行后如果出现该字段: “ok” : 1,
“operationTime” : Timestamp(1599217827, 2),
- 使用shell脚本把配置好的文件复制到其他机器
该脚本起名为copyall.sh
进行复制的脚本 源文件 目标文件
进行复制的命令:copyall.sh /home/mongodb /home/mongodb
在进行配置时可先配置好一个虚拟机最后通过该命令把配置好的文件传给其他两台虚拟机,另两台再稍作修改即可使用
#根据自己的机器名修改后再使用
#!/bin/bash
HOSTS='wq1 wq2 wq3'
for HOST in ${HOSTS}
do
echo "++正在复制$1到$HOST的$2中..."
scp -rq ${1} ${HOST}:${2}
echo "--发送完成!"
done
5、分片服务部署
- 在 /home/mongodb/conf 下分别创建shard1.conf、shard2.conf、shard3.conf 并按照提示依次插入
配置内容大致相同、另两台虚拟主机配置时需要改动的部分已注在后面
dbpath=/home/mongodb/data/shard1 #shard2、shard3
logpath=/home/mongodb/log/shard1.log #shard2.log、shard3.log
port=27001 #27002、27003
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true
replSet=shard1 #shard2、shard3
bind_ip=0.0.0.0
- 启动分片服务
每台机器分别在一个端口形成一个分片的复制集
#每台机器均运行如下片段
mongod -f /home/mongodb/conf/shard1.conf
mongod -f /home/mongodb/conf/shard2.conf
mongod -f /home/mongodb/conf/shard3.conf
- 将分片配置为复制集
解释说明:我是在wq1虚拟主机上运行的,因为每台虚拟主机都有三个分片,每个分片初始化时都与其他机器绑定,因而一台机器的分片都要初始化,结构可参考顶部图片
下面wq1机器运行完后还要分别运行mongo --host wq1 --port 27002
mongo --host wq1 --port 27003
1、连接mongo:mongo --host wq1 --port 27001
2、切换数据库:use admin
3、初始化复制集:
rs.initiate({_id:"shard1",members:[{_id:0,host:"wq1:27001"},{_id:1,host:"wq2:27001"},{_id:2,host:"wq3:27001"}]})
6、路由服务部署
- 创建mongos.conf
logpath=/home/mongodb/log/mongos.log
logappend = true
port = 27017
fork = true
configdb = configs/wq1:27018, wq2:27018, wq3:27018
maxConns=20000
bind_ip=0.0.0.0
- 启动mongos
三台机器分别运行如下片段
mongos -f /home/mongodb/conf/mongos.conf
- 启动分片功能(一台机器运行也可)
1、
mongo --host wq1 --port 27017
2、use admin
#3 加入如下部分
sh.addShard("shard1/wq1:27001,wq2:27001,wq3:27001")
sh.addShard("shard2/wq1:27002,wq2:27002,wq3:27002")
sh.addShard("shard3/wq1:27003,wq2:27003,wq3:27003")
- 查看集群状态
sh.status()
出现的异常情况
环境变量配置完成后未能执行 source /etc/profile
在 vim config.conf 直接粘入代码 没有点击插入命令
虚拟机内存分配过小
配置成功
欢迎在评论区进行讨论