MongoDB(单节点)搭建复制集、分片集及复制+分片

环境

Centos7

MongoDB 4.x

单机多实例的方式搭建复制集、分片集、复制+分片

 

复制集

简介

Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写入Primary,Secondary从Primary同步写入的数据,以保持复制集内所有成员存储相同的数据集,提供数据的高可用

搭建

进程及对应的端口号:

进程端口号
r027070
r127071
r227072
r327073

1.为每个进程创建目录

进入mongodb安装目录

cd  /home/hadoop/mongodb

创建每个进程对应的目录

mkdir r0

mkdir r1

mkdir r2

mkdir r3

为每个进程创建存放数据和日志的目录

mkdir r0/data

mkdir r1/data

mkdir r2/data

mkdir r3/data

mkdir r0/log

mkdir r1/log

mkdir r2/log

mkdir r3/log

 

2.启动进程

启动进程的方式有两种。第一种是通过命令行直接指定参数的方式启动,但是每次启动都需要指定很多参数比较麻烦。第二种方式通过将参数写成配置文件,以配置文件的形式启动,这种方法可以省去很多麻烦,但是需要为每一个进程创建对应的配置文件

1)通过命令行传入参数的形式开启进程(注意这里--replSet 参数后的名字必须一样(test),这样加入的才是同一个复制集)

mongod --dbpath /home/hadoop/mongodb/r0/data/ --logpath=/home/hadoop/mongodb/r0/log/log.txt --port 27070 --replSet test &

mongod --dbpath /home/hadoop/mongodb/r1/data/ --logpath=/home/hadoop/mongodb/r1/log/log.txt --port 27071 --replSet test &

mongod --dbpath /home/hadoop/mongodb/r2/data/ --logpath=/home/hadoop/mongodb/r2/log/log.txt --port 27072 --replSet test &

mongod --dbpath /home/hadoop/mongodb/r3/data/ --logpath=/home/hadoop/mongodb/r3/log/log.txt --port 27073 --replSet test &

参数含义:

--dbpath               指定数据存放的位置

--logpath              指定日志文件存放的位置

--port                    指定进程的端口号  

--replSet               指定以复制集的方式启动,后加复制集名,如果进程同属一个复制集的话,名字必须是一个

&                          以后台进程的形式运行(不加的话需要重新打开一个命令行窗口,比较麻烦)

2)通过配置文件的方式启动

为每一个进程创建一个配置文件

r0.conf

dbpath=/home/hadoop/mongodb/r0/data/ 
logpath=/home/hadoop/mongodb/r0/log/r0.log
logappend=true
port=27070
fork=true

参数含义:

--dbpath               指定数据存放的位置

--logpath              指定日志文件存放的位置

--logappend         指定每次输出日志信息是追加还是重新创建文件

--port                    指定进程的端口号  

--fork                    指定以子进程的方式运行(相当于后台进程)

r1.conf

dbpath=/home/hadoop/mongodb/r1/data/ 
logpath=/home/hadoop/mongodb/r1/log/r1.log
logappend=true
port=27071
fork=true

r2.conf

dbpath=/home/hadoop/mongodb/r2/data/ 
logpath=/home/hadoop/mongodb/r2/log/r2.log
logappend=true
port=27072
fork=true

r3.conf

dbpath=/home/hadoop/mongodb/r3/data/ 
logpath=/home/hadoop/mongodb/r3/log/r3.log
logappend=true
port=27073
fork=true

启动进程

mongod -f /home/hadoop/mongodb/r0.conf --replSet "test"

mongod -f /home/hadoop/mongodb/r1.conf --replSet "test"

mongod -f /home/hadoop/mongodb/r2.conf --replSet "test"

 

3.连接到想要作为主节点的进程

连接到r0

mongo --port 27070        27070为r0进程的端口号

 

4.初始化复制集

在命令行下输入(此步骤是初始化复制集的节点)

config={_id:"test", members:[{_id:0,host:"localhost:27070",priority:1},{_id:1,host:"localhost:27071"},{_id:2,host:"localhost:27072"},{_id:3,host:"localhost:27073"}]}

config={_id:"test", members:[{_id:0,host:"localhost:27070",priority:1},{_id:1,host:"localhost:27071"},{_id:2,host:"localhost:27072"},{_id:3,host:"localhost:27073"}]}   

其中 _id为复制集的名字,members为复制集的节点,host是指进程所在位置和端口号,而priority为1则是说此进程为主节点   

初始化

rs.initiate(config)

初始化后可以看到命令行左侧显示的是test:OTHER

 

5.查看复制集的信息

查看复制集状态

rs.status()

此时可以看到命令行左侧显示的是test:PRIMARY,说明已经配置好了

查看复制集各个节点的配置信息

rs.config()

需要注意的是如果配置了复制集之后对数据库的一系列操作都只能从主节点进行,如果想要让其它节点拥有权限的话需要在主节点设置,命令如下:

db.setSlaveOk()

 

 

分片集

简介:

  • Shard:

用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个replica set承担,防止主机单点故障

  • Config Server:

mongod实例,存储了整个 ClusterMetadata,其中包括 chunk信息。

  • Query Routers:

前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。

 

搭建:

进程及对应的端口号:

进程端口号
shard127071
shard227072
shard327073
config30000
mongos40000

这里沿用了之前的复制集中的三个进程,可以自己指定其它端口

 

1.创建config服务器和路由服务器存放数据和日志的目录

mkdir config

mkdir mongos

mkdir config/data

mkdir config/log

mkdir mongos/data

mkdir mongos/log

 

2.开启shard(这里直接用指定参数的方式开启进程,也可以以配置文件的形式开启进程)

开启shard1 (参数含义不再赘述)

mongod --dbpath /home/hadoop/mongodb/r1/data/ --logpath=/home/hadoop/mongodb/r1/log/log.txt --port 27071  &

开启shard2

mongod --dbpath /home/hadoop/mongodb/r2/data/ --logpath=/home/hadoop/mongodb/r2/log/log.txt --port 27072  &

开启shard3

mongod --dbpath /home/hadoop/mongodb/r3/data/ --logpath=/home/hadoop/mongodb/r3/log/log.txt --port 27073  &

 

3.开启config服务器

mongod --dbpath=/home/hadoop/mongodb/config/data --logpath=/home/hadoop/mongodb/config/log/db_config.log --port=30000 --configsvr  &

--configsvr 是指这个进程为config服务器

 

4.开启mongos路由服务器

mongos --logpath=/home/hadoop/mongodb/mongos/log/db_router.log --port=40000 --configdb=localhost:30000   &

--configdb 指定config服务器进程,在这里我的config服务器端口号是30000

 

5.进入路由服务器添加节点信息

mongo --port 40000

添加分片

sh.addShard("localhost:27071")

sh.addShard("localhost:27072")

sh.addShard("localhost:27073")

 

6.查看分片集的状态

sh.status()

可以看到shards中包含有添加的进程,到这里分片集就搭建成功了

 

复制+分片

搭建:

进程及对应的端口号

进程端口号
shard0(r0)27070
shard1(r1)27071
shard2(r2)27072
shard3(r3)27073
config30000
mongos40000

直接沿用上边搭建的复制集所有进程和分片集config服务器和mongos服务器

 

1.开启复制集

开启r0

mongod --dbpath /home/hadoop/mongodb/r0/data/ --logpath=/home/hadoop/mongodb/r0/log/log.txt --port 27070 --replSet test &

开启r1

mongod --dbpath /home/hadoop/mongodb/r1/data/ --logpath=/home/hadoop/mongodb/r1/log/log.txt --port 27071 --replSet test &

开启r2

mongod --dbpath /home/hadoop/mongodb/r2/data/ --logpath=/home/hadoop/mongodb/r2/log/log.txt --port 27072 --replSet test &

开启r3

mongod --dbpath /home/hadoop/mongodb/r3/data/ --logpath=/home/hadoop/mongodb/r3/log/log.txt --port 27073 --replSet test &

 

2.开启config服务器

mongod --dbpath=/home/hadoop/mongodb/config/data --logpath=/home/hadoop/mongodb/config/log/db_config.log --port=30000 --configsvr  &

 

3.开启mongos路由服务器

mongos --logpath=/home/hadoop/mongodb/mongos/log/db_router.log --port=40000 --configdb=localhost:30000   &

 

4.进入路由服务器

mongo --port 40000

 

5.将复制集做为分片添加

sh.addShard("test/localhost:27070,localhost:27071,localhost:27072,localhost:27073")

注意 参数最前边的test/不可以省略,test的作用是说将复制集以分片的方式添加

 

6.查看分片集状态

sh.status() 或 db.printShardingStatus()

可以看到shards中包括了test这个复制集,到此整个复制+分片的架构就搭建完成了。

 

如果文章对你有帮助的话就点个赞鼓励一下吧!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值