Centos7
MongoDB 4.x
单机多实例的方式搭建复制集、分片集、复制+分片
Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写入Primary,Secondary从Primary同步写入的数据,以保持复制集内所有成员存储相同的数据集,提供数据的高可用
进程及对应的端口号:
进程 | 端口号 |
r0 | 27070 |
r1 | 27071 |
r2 | 27072 |
r3 | 27073 |
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 server角色可由几台机器组个一个replica set承担,防止主机单点故障
mongod实例,存储了整个 ClusterMetadata,其中包括 chunk信息。
前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。
进程及对应的端口号:
进程 | 端口号 |
shard1 | 27071 |
shard2 | 27072 |
shard3 | 27073 |
config | 30000 |
mongos | 40000 |
这里沿用了之前的复制集中的三个进程,可以自己指定其它端口
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 |
config | 30000 |
mongos | 40000 |
直接沿用上边搭建的复制集所有进程和分片集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这个复制集,到此整个复制+分片的架构就搭建完成了。
如果文章对你有帮助的话就点个赞鼓励一下吧!