mongodb分布式搭建流程记录(图文详细教程)

1、下载解压MongoDB

到MongoDB官网下载:https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.6.tgz

为方便大家下载,这里也提供了本文所用的mongodb供大家免费下载

解压到/home/mongodb,设置环境变量:

echo 'export PATH=$PATH:/home/mongodb/bin'  >> /etc/profile

保存后执行:

source  /etc/profile

2、创建路由、配置、分片等的相关目录与文件

启动配置文件存放的文件夹: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

配置服务日志存放文件: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

(以上操作三台服务器都要执行)

配置服务器部署(3台服务器执行相同的操作)

1、在/home/mongodb/conf目录创建config.conf:

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

2、配置复制集

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

mongod -f /home/mongodb/conf/config.conf

 

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

mongo --host 10.211.55.3 --port 27018

切换数据库:

use admin

初始化复制集:

rs.initiate({_id:"configs",members:[{_id:0,host:"10.211.55.3:27018"},{_id:1,host:"10.211.55.4:27018"}, {_id:2,host:"10.211.55.5:27018"}]})

其中_id:"configs"的configs是上面config.conf配置文件里的复制集名称,把三台服务器的配置服务组成复制集。

查看状态:

rs.status()

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

 

 

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

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

dbpath=/home/mongodb/data/shard1 #其他2个分片对应修改为shard2、shard3文件夹 logpath=/home/mongodb/log/shard1.log #其他2个分片对应修改为shard2.log、shard3.log port=27001 #其他2个分片对应修改为27002、27003

logappend=true      
​
fork=true      
​
maxConns=5000      
     
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 /export/server/mongoDb-5.0.8/conf/shard{1/2/3}.conf

这一步如果报错则参考下面做法:

上面的配置文件是直接从网上复制粘贴的,这里面有两个问题: 1、可能是想将存储引擎改成mmapv1,但是可能是粘贴错误,也可能是在前期定位过程中误改成了mmapv;

2、这是3.4版本的mongdb,从MongoDB3.2 版本开始,MongoDB默认的存储引擎就已经是WiredTiger,配置文件里面配置的data目录/usr/local/mongo/data是WiredTiger引擎的数据。当引擎改成mmapv1,data目录与WiredTiger引擎还指向同一个目录,就会报“ERROR: child process failed, exited with error number 100”的错。 因为WiredTiger引擎创建的数据目录无法用mmapv1引擎去打开。

所以将配置文件的“storageEngine=mmapv”注释掉,服务就正常启动了。

2、将分片配置为复制集

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

mongo --host 10.211.55.3 --port 27001 

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

切换数据库:

use admin

初始化复制集:

rs.initiate({_id:"shard1",members:[{_id:0,host:"10.211.55.3:27001"},{_id:1,host:"10.211.55.4:27001"},{_id:2,host:"10.211.55.5:27001"}]})

以上是基于分片1来操作,同理,其他2个分片也要连到各自的端口来执行一遍上述的操作,让3个分片各自形成1主2从的复制集,注意端口及仲裁节点的问题即可,操作完成后3个分片都启动完成,并完成复制集模式。

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

1、在/home/mongodb/conf目录创建mongos.conf,内容如下:

logpath=/home/mongodb/log/mongos.log      
​
logappend = true      
​
port = 27017      
​
fork = true      
​
configdb = configs/10.211.55.3:27018,10.211.55.4:27018,10.211.55.5:27018      maxConns=20000      
​
bind_ip=0.0.0.0

2、启动mongos

分别在三台服务器启动:

mongos -f /home/mongodb/conf/mongos.conf

3、启动分片功能

连接mongo:

mongo --host 10.211.55.3 --port 27017

切换数据库:

use admin

 

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

sh.addShard("shard1/192.168.43.201:27001,192.168.43.202:27001,192.168.43.201:27001")     

sh.addShard("shard2/192.168.43.201:27002,192.168.43.202:27002,192.168.43.203.5:27002")    

sh.addShard("shard3/192.168.43.201:27003,192.168.43.202:27003,192.168.43.203:27003")

 

 

查看集群状态:

sh.status()

4、实现分片功能

设置分片chunk大小

use config      

db.setting.save({"_id":"chunksize","value":1})  

 

设置块大小为1M是方便实验,不然需要插入海量数据(默认是64(1~1024M),块越大查询越快,但对硬件要求更高)这里我设置的是128M

5、模拟写入数据

use calon      

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

模拟往calon数据库的user表写入5万数据

6、启用数据库分片

sh.enableSharding("calon")

7、创建索引,对表进行分片

db.user.createIndex({"id":1}) # 以"id"作为索引      

sh.shardCollection(calon.user",{"id":1}) # 根据"id"对user表进行分片      

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

到此,MongoDB分布式集群就搭建完毕。

附加(为mongodb创建超级用户)

'''创建超级用户'''
# mongo //进入数据库
> use admin
> db.createUser({user: "用户名",pwd: "密码",roles: [ { role: "userAdminAnyDatabase", db: "admin" }]})


'''身份验证'''
> db.auth("用户名", "密码")


'''给用户对应数据库放权限'''
> db.grantRolesToUser("用户名", [ { role: "权限内容", db: "库名" } ])
权限内容包括:read,readWrite

参考网站1

参考网站2

猜你喜欢

转载自blog.csdn.net/qq_48626761/article/details/125582470#comments_22219993