MongoDB集群搭建

MongoDB安装

配置MongoDB的yum源

cd /etc/yum.repos.d 
vim mongodb-org-4.0.repo 

添加以下内容,这里使用阿里的源

[mngodb-org]
name=MongoDB Repository
baseurl=http://mirrors.aliyun.com/mongodb/yum/redhat/7Server/mongodb-org/4.0/x86_64/
gpgcheck=0
enabled=1

安装MongoDB

yum -y install mongodb-org

安装完后可以查看一下MongoDB的位置

whereis mongod

在这里插入图片描述

集群的设计

由于资源有限,拿一台虚拟机做了一个伪分布式的集群,但是原理都是一样的,此方法完全可以完全分布式的集群上。
首先集群有六台机器,一共分了六个副本集,S1,S2,S3,S4,S5,S6,在这里一个副本集分了三个节点,同一副本集中的节点有一个主节点,两个从节点,从节点的数据与主节点一致;OS为mongos进程(路由服务器);C为config server(配置服务器),设置了三个配置服务器。
按图中所示为每个进程分配一个端口,如果想实现完全分布式可以将这些进程按图分配到六台机器上,这是完全可行的。
这个图极其重要,首先要把这个图看懂,看明白是怎么设计的
在这里插入图片描述

设置配置文件

创建目录结构

首先新建一个放集群数据的文件夹,我这里是在/opt目录下新建了一个mongo文件夹,下面的操作都在/opt/mongo文件夹下进行操作。
然后要为每个进程新建一个文件夹,为了模拟六台机器,我在目录中新建了六个文件夹。1号文件夹代表1号机器,2号文件夹代表2号机器。。。。。。
在这里插入图片描述


在每个文件夹中为每个进程新建一个文件夹,比如1号机器有4个进程,则新建4个文件夹。
在这里插入图片描述

修改配置文件

配置文件一共有三种,一个是路由服务器的配置文件即图中的OS进程的配置文件,一个是副本集中节点的配置文件,一个是配置服务器即图中C中节点的配置文件。
首先需要先找一个模板,将MongoDB本身带的conf文件拷贝到该目录下,然后重命名为11,说明是1号机器的第一个进程。MongoDB自带配置文件的位置可以通过whereis mongod命令找到
在这里插入图片描述

副本集中节点的配置


下面开始修改配置文件,首先修改的是副本集中节点的配置文件。
这一块的path要修改成刚刚创建给该进程的目录,1号机器的第一个进程所以是/opt/mongo/1/1/mongod.log
在这里插入图片描述


同样这里也要改dbPath
在这里插入图片描述


这里要改pidFilePath,同样的道理
在这里插入图片描述


然后是端口号,刚刚图中给1号机器的第一个进程分配的端口是9011,同时要把bindIp改为0.0.0.0
在这里插入图片描述


这一块原本是注释掉的,需要取消注释,并增加replSetName,后面跟的是自己的副本集的编号,与设计集群的图所对应,一定要注意replSetName前面要有缩进,冒号后面要有空格,否则会报错
在这里插入图片描述


这个刚开始也是被注释掉的,同样要增加clusterRole,同时也要注意缩进和空格,副本集中节点的作用为shardsvr
在这里插入图片描述

配置服务器节点的配置

由于刚刚已经配置好了11.conf,所有节点的配置文件都大致相同,所以直接将该文件复制多份,其余文件只需要略微修改即可。
在这里插入图片描述
下面修改配置服务器节点的配置,按照设计图应该是24,34,44
以24为例。
只有这两处不同,replSetName要设置为自己所在的组名C
作用修改位configsvr,其余的只需要将路径改为为其创建的文件夹的路径,端口改为为其分配的端口号即可
在这里插入图片描述

路由服务器的配置

路由服务器只有一个,设计图中编号为14。
首先需要把storage这块注释掉,因为路由服务器不需要进行存储。
在这里插入图片描述


同样replication模块也要注释掉
在这里插入图片描述


sharding模块的内容需要修改
在这里插入图片描述
其中C为配置服务器的组名,后面跟上任意一个配置服务器进程的地址即可,我使用的是9024端口即24这个配置服务器的进程。

configDB: C/192.168.75.131:9024

启动mongod

逐个启动很麻烦,可以写一个脚本如图,很方便。
在这里插入图片描述

mongod -f 11.conf
mongod -f 12.conf
mongod -f 13.conf
mongod -f 21.conf
mongod -f 22.conf
mongod -f 23.conf
mongod -f 24.conf
mongod -f 31.conf
mongod -f 32.conf
mongod -f 33.conf
mongod -f 34.conf
mongod -f 41.conf
mongod -f 42.conf
mongod -f 43.conf
mongod -f 44.conf
mongod -f 51.conf
mongod -f 52.conf
mongod -f 53.conf
mongod -f 61.conf
mongod -f 62.conf
mongod -f 63.conf

启动成功后查看一下进程是否都成功启动,如果有未启动的可以看下配置文件是否有误,或者查看一下日志。
在这里插入图片描述
在这里插入图片描述

分组

然后要对节点进行分组,按照之前设计图上分组即可。
首先进入该组中任意节点,声明其组内成员。

mongo --port 9011
cfg={_id:"S1", members:[{_id:0,host:'192.168.75.131:9011'}, {_id:1,host:'192.168.75.131:9021'}, {_id:2,host:'192.168.75.131:9031'}]};  
rs.initiate(cfg)

分组成功
在这里插入图片描述
同理

mongo --port 9022
cfg={_id:"S2", members:[{_id:0,host:'192.168.75.131:9022'}, {_id:1,host:'192.168.75.131:9032'}, {_id:2,host:'192.168.75.131:9041'}]};
rs.initiate(cfg)
mongo --port 9033
cfg={_id:"S3", members:[{_id:0,host:'192.168.75.131:9033'}, {_id:1,host:'192.168.75.131:9042'}, {_id:2,host:'192.168.75.131:9051'}]};  
rs.initiate(cfg)
mongo --port 9043
cfg={_id:"S4", members:[{_id:0,host:'192.168.75.131:9043'}, {_id:1,host:'192.168.75.131:9052'}, {_id:2,host:'192.168.75.131:9061'}]};  
rs.initiate(cfg)
mongo --port 9053
cfg={_id:"S5", members:[{_id:0,host:'192.168.75.131:9053'}, {_id:1,host:'192.168.75.131:9062'}, {_id:2,host:'192.168.75.131:9012'}]};  
rs.initiate(cfg)
mongo --port 9063
cfg={_id:"S6", members:[{_id:0,host:'192.168.75.131:9063'}, {_id:1,host:'192.168.75.131:9013'}, {_id:2,host:'192.168.75.131:9023'}]};  
rs.initiate(cfg)
mongo --port 9024
cfg={_id:"C", members:[{_id:0,host:'192.168.75.131:9024'}, {_id:1,host:'192.168.75.131:9034'}, {_id:2,host:'192.168.75.131:9044'}]};  
rs.initiate(cfg)

启动并连接mongos

mongos -f 14.conf

在这里插入图片描述

mongo --port 9014

在这里插入图片描述

增加分片

下面均在mongos的命令行中进行操作

sh.addShard("S1/192.168.75.131:9011")
sh.addShard("S2/192.168.75.131:9022")
sh.addShard("S3/192.168.75.131:9033")
sh.addShard("S4/192.168.75.131:9043")
sh.addShard("S5/192.168.75.131:9053")
sh.addShard("S6/192.168.75.131:9063")

在这里插入图片描述

启动数据分片功能

use admin
db.runCommand({enableSharding:"stumis"}) 
db.runCommand({shardCollection:"stumis.students",key:{"_id":"hashed"}})

在这里插入图片描述
在这里插入图片描述

批量插入数据

use stumis
for(var i=1; i<=100; i++) { db.students.insert( {name:"S"+i,age:i});}

在这里插入图片描述

查看分片效果

sh.status()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值