MongoDB分布式集群部署-cnblog
MongoDB分布式集群部署
1 部署副本集
1.1 单机多实例
在单节点上创建3个实例的相关目录
#切换到mongodb目录下
cd /usr/local/mongodb/
#创建三个实例(27017、27018、27019)的相关目录
mkdir 27017 27018 27019
在目录27017中执行以下操作,创建数据目录,配置文件目录、日志文件目录等
cd 27017
#创建数据目录、配置文件目录、日志文件目录和pid文件目录
mkdir data etc log pid
#切换到配置文件目录下
cd etc
#使用touch命令创建配置文件mongod.conf
touch mongod.conf
#编辑配置文件mongod.conf
vim mongod.conf
在mongod.conf中输入以下配置信息
systemLog:
path: /usr/local/mongodb/27017/log/mongod.log
storage:
dbPath: /usr/local/mongodb/27017/data
processManagement:
fork: true
pidFilePath: /usr/local/mongodb/27017/pid/mongod.pid
net:
port: 27017
bindIp: 0.0.0.0
在目录27018中执行同样的操作,将27017改成27018
在目录27019中执行同样的操作,将27017改成27019
执行以下命令启动端口号27017实例
mongod --dbpath /usr/local/mongodb/27017/data --config /usr/local/mongodb/27017/etc/mongod.conf --logpath /usr/local/mongodb/27017/log/mongod.log --port 27017
mongod --dbpath /usr/local/mongodb/27018/data --config /usr/local/mongodb/27018/etc/mongod.conf --logpath /usr/local/mongodb/27018/log/mongod.log --port 27018
mongod --dbpath /usr/local/mongodb/27019/data --config /usr/local/mongodb/27019/etc/mongod.conf --logpath /usr/local/mongodb/27019/log/mongod.log --port 27019



查看三个实例是否启动成功
ps -ef|grep mongod

1.2 部署副本集
启动mongod进程为副本集模式(27017、27018、27019)都要开启
mongod --dbpath /usr/local/mongodb/27017/data --config /usr/local/mongodb/27017/etc/mongod.conf --logpath /usr/local/mongodb/27017/log/mongod.log --port 27017 --replSet replica_set --shardsvr
mongod --dbpath /usr/local/mongodb/27018/data --config /usr/local/mongodb/27018/etc/mongod.conf --logpath /usr/local/mongodb/27018/log/mongod.log --port 27018 --replSet replica_set --shardsvr
mongod --dbpath /usr/local/mongodb/27019/data --config /usr/local/mongodb/27019/etc/mongod.conf --logpath /usr/local/mongodb/27019/log/mongod.log --port 27019 --replSet replica_set --shardsvr
在任意一个实例上连接mongod服务
mongo --host localhost --port 27017
初始化副本集
rs.initiate({
_id: "replica_set",
members: [
{ _id: 0, host: "localhost:27017" },
{ _id: 1, host: "localhost:27018" },
{ _id: 2, host: "localhost:27019" }
]
})

执行以下语句,查看副本集和各节点的状态信息
rs.status()




1.3 添加节点和删除节点
如果需要为副本集添加新的节点,则一次执行以下命令即可,以27020端口为例
#将端口号为27020的实例以副本集方式启动
mongod --dbpath /usr/local/mongodb/27020/data --config /usr/local/mongodb/27020/etc/mongod.conf --logpath /usr/local/mongodb/27020/log/mongod.log --port 27020 --replSet replica_set --shardsvr
#连接到副本集主节点(端口号为27017)
mongo --host localhost --port 27017
#添加新节点
rs.add("localhost:27020")
#查看新节点是否添加成功
rs.status()

如果需要删除节点可以执行以下语句
rs.remove("localhost:27020")

1.4 测试副本集
连接副本集主节点端口号为27017,然后在主节点上创建replicadb数据库,在该数据库中创建test集合并插入三个文档
use replicadb
db.createCollection("test")
db.test.insert([{name:"aaa",sex:"male",age:20},{name:"bbb",sex:"female",age:18},{name:"ccc",sex:"male",age:23}])
#查看test集合中的全部文档
db.test.find()

在副本集的从节点(端口号为27018)上查看副本数据
mongo --host localhost --port 27018
rs.slaveOk()
use replicadb
db.test.find()

2 部署分片集群
2.1 部署分片集群
- 分别创建
27024``27025``27026实例的相关目录和数据目录、配置文件目录、日志文件目录。参照单机多实例!!! - 启动config服务器
mongod --dbpath /usr/local/mongodb/27024/data --config /usr/local/mongodb/27024/etc/mongod.conf --logpath /usr/local/mongodb/27024/log/mongod.log --port 27024 --configsvr --replSet config
mongod --dbpath /usr/local/mongodb/27025/data --config /usr/local/mongodb/27025/etc/mongod.conf --logpath /usr/local/mongodb/27025/log/mongod.log --port 27025 --configsvr --replSet config
mongod --dbpath /usr/local/mongodb/27026/data --config /usr/local/mongodb/27026/etc/mongod.conf --logpath /usr/local/mongodb/27026/log/mongod.log --port 27026 --configsvr --replSet config
- 连接到config服务器,并初始化副本集
mongo --host localhost --port 27024
rs.initiate({_id:"config",members:[{_id:0,host:"localhost:27024"},{_id:1,host:"localhost:27025"},{_id:2,host:"localhost:27026"}]})
- 启动router服务器供应用程序连接
mongos --configdb config/localhost:27024,localhost:27025,localhost:27026 --port 27023
2.2 测试分片集群
- 打开一个新的终端,使用
mongoshell 连接到你刚刚启动的mongos实例(端口27023)
mongo --host localhost --port 27023
- 在shell环境下执行以下命令,将副本集
replica_set和replica_set1都加入集群中
use admin
db.runCommand({addShard:"replica_set/localhost:27017,localhost:27018,localhost:27019",name:"rep1",maxsize:5120})
db.runCommand({addShard:"replica_set1/localhost:27027,localhost:27028,localhost:27029",name:"rep2",maxsize:5120})
- 对shardtest数据库中的test集合按照
_id键分片
首先执行以下语句对shardtest数据库启用分片
sh.enableSharding("shardtest")
数据库启用分片后,执行以下语句对集合进行分片
sh.shardCollection("shardtest.test",{"_id":1})
使用addShard实现,需要移除某个分片节点,可以执行以下语句
db.runCommand({removeShard:"localhost:27033"})

浙公网安备 33010602011771号