mongodb高可用集群的搭建

请添加图片描述shard,mongodb的分片集合,将一个shard部署在不同的机器上。
config servers 用于给router分配合适的shard。
router 负责给客户端分配合适的config,从config中获取shard,再从shard上获取数据

Mongodb下载

mongodb 4.1.27下载http://downloads.mongodb.org/linux/mongodb-linux-aarch64-ubuntu1804-4.2.17.tgz

安装

在 192.168.200.131,192.168.200.132,192.168.200.133三台ubuntu18.04虚拟机下新建mongo文件夹。
sudo mkdir /usr/local/mongo
cd /usr/local/mongo
sudo mkdir key
sudo mkdir config
sudo mkdir route
sudo mkdir shard1
sudo mkdir shard2
sudo mkdir shard3
sudo mkdir config/log
sudo mkdir config/data
sudo mkdir config/pid
sudo mkdir route/log
sudo mkdir shard1/log
sudo mkdir shard2/log
sudo mkdir shard3/log
sudo mkdir route/data
sudo mkdir route/pid
sudo mkdir shard1/data
sudo mkdir shard1/pid
sudo mkdir shard2/pid
sudo mkdir shard2/data
sudo mkdir shard3/pid
sudo mkdir shard3/data
在这里插入图片描述
在这里插入图片描述
在三台机器上,分别将mongodb-linux-x86_64-ubuntu1804-4.2.1.tgz解压,将bin中的所有文件复制到/usr/local/mongo/bin
在这里插入图片描述

在etc/profile中添加export PATH=$PATH:/usr/local/mongo/bin

在这里插入图片描述

配置分片

shard1.conf

#指定数据目录,默认是/data/db/。每个mongod进程都需要独立的目录

dbpath=/usr/local/mongo/shard1/data

#日志文件存放目录

logpath=/usr/local/mongo/shard1/log/shard1.log

#进程存放目录

pidfilepath=/usr/local/mongo/shard1/pid/shard1.pid

#一个数据库一个文件夹

directoryperdb=true

#使用追加的方式写日志

logappend=true

#集群名字

#这个是创建副本集的方式,如果master指定了,这个地方不可以再指定了

replSet=shard1

#指定服务器监听的端口,默认是27017

port=22001
bind_ip=0.0.0.0

#以守护进程的方式运行MongoDB

fork=true

#启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里

journal=true

#此实例为shard(分片),侦听27018端口

shardsvr=true

shard2.conf

#指定数据目录,默认是/data/db/。每个mongod进程都需要独立的目录

dbpath=/usr/local/mongo/shard2/data

#日志文件存放目录

logpath=/usr/local/mongo/shard2/log/shard2.log

#进程存放目录

pidfilepath=/usr/local/mongo/shard2/pid/shard2.pid

#一个数据库一个文件夹

directoryperdb=true

#使用追加的方式写日志

logappend=true

#集群名字

#这个是创建副本集的方式,如果master指定了,这个地方不可以再指定了

replSet=shard2

#指定服务器监听的端口,默认是27017

port=22002
bind_ip=0.0.0.0
#以守护进程的方式运行MongoDB

fork=true

#启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里

journal=true

#此实例为shard(分片),侦听27018端口

shardsvr=true

shard3.conf

#指定数据目录,默认是/data/db/。每个mongod进程都需要独立的目录

dbpath=/usr/local/mongo/shard3/data

#日志文件存放目录

logpath=/usr/local/mongo/shard3/log/shard3.log

#进程存放目录

pidfilepath=/usr/local/mongo/shard3/pid/shard3.pid

#一个数据库一个文件夹

directoryperdb=true

#使用追加的方式写日志

logappend=true

#集群名字

#这个是创建副本集的方式,如果master指定了,这个地方不可以再指定了

replSet=shard3

#指定服务器监听的端口,默认是27017

port=22003
bind_ip=0.0.0.0

#以守护进程的方式运行MongoDB

fork=true

#启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里

journal=true

#此实例为shard(分片),侦听27018端口

shardsvr=true

route.conf

#指定数据目录,默认是/data/db/。每个mongod进程都需要独立的目录

dbpath=/usr/local/mongo/shard3/data

#日志文件存放目录

logpath=/usr/local/mongo/shard3/log/shard3.log

#进程存放目录

pidfilepath=/usr/local/mongo/shard3/pid/shard3.pid

#一个数据库一个文件夹

directoryperdb=true

#使用追加的方式写日志

logappend=true

#集群名字

#这个是创建副本集的方式,如果master指定了,这个地方不可以再指定了

replSet=shard3

#指定服务器监听的端口,默认是27017

port=22003
bind_ip=0.0.0.0

#以守护进程的方式运行MongoDB

fork=true

#启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里

journal=true

#此实例为shard(分片),侦听27018端口

shardsvr=true

route.conf

configdb=config/192.168.200.131:21000,192.168.200.132:21000,192.168.200.133:21000

#进程存放目录

pidfilepath=/usr/local/mongo/route/pid/route.pid

#指定服务器监听的端口,默认是27017

port=20000
bind_ip=192.168.200.131

#sharded集群中每个chunk的大小,单位:MB,默认为64

#chunkSize=1

#日志文件存放目录

logpath=/usr/local/mongo/route/log/route.log

#使用追加的方式写日志

logappend=true

#以守护进程的方式运行

fork=true

在三台机器上都进行配置shard1 ,shard2,shard3,route,config的配置
将shard1 放在/usr/local/mongo/shard1/下
在这里插入图片描述

将shard2 放在/usr/local/mongo/shard2/下
在这里插入图片描述

将shard3 放在/usr/local/mongo/shard3/下
在这里插入图片描述

将route 放在/usr/local/mongo/route/下
在这里插入图片描述

将config 放在/usr/local/mongo/config/下
在这里插入图片描述

启动

在三台机器上分别执行
mongod -f /usr/local/mongo/shard1/shard1.conf
mongod -f /usr/local/mongo/shard2/shard2.conf
mongod -f /usr/local/mongo/shard2/shard2.conf

shard1设置

在192.168.200.131上连接mongodb192.168.200.131:22001
mongo --host 192.168.200.131 --port 22001
use admin
db.runCommand({
“replSetInitiate”: {
“_id”: “shard1”,
“members”: [{
“_id”: 0,
“host”: “192.168.200.131:22001”,
priority: 10
},
{
“_id”: 1,
“host”: “192.168.200.132:22001”,
priority: 8
},
{
“_id”: 2,
“host”: “192.168.200.133:22001”,
arbiterOnly: true
}]
}
});

shard2设置

退出连接shard1,连接shard2
mongo --host 192.168.200.131 --port 22002
use admin
db.runCommand({
“replSetInitiate”: {
“_id”: “shard2”,
“members”: [{
“_id”: 0,
“host”: “192.168.200.131:22002”,
priority: 10
},
{
“_id”: 1,
“host”: “192.168.200.132:22002”,
priority: 8
},
{
“_id”: 2,
“host”: “192.168.200.133:22002”,
arbiterOnly: true
}]
}
});

shard3设置

退出连接shard2,连接shard3
mongo --host 192.168.200.131 --port 22003
use admin
db.runCommand({
“replSetInitiate”: {
“_id”: “shard3”,
“members”: [{
“_id”: 0,
“host”: “192.168.200.131:22003”,
priority: 10
},
{
“_id”: 1,
“host”: “192.168.200.132:22003”,
priority: 8
},
{
“_id”: 2,
“host”: “192.168.200.133:22003”,
arbiterOnly: true
}]
}
});

启动config

在三台机器上启动config
mongod -f /usr/local/mongo/config/config.conf
在192.168.200.131上执行mongo --host 192.168.200.131 --port 21000
use admin
db.runCommand({
“replSetInitiate”: {
“_id”: “config”,
“members”: [{
“_id”: 0,
“host”: “192.168.200.131:21000”
},
{
“_id”: 1,
“host”: “192.168.200.132:21000”
},
{
“_id”: 2,
“host”: “192.168.200.133:21000”
}]
}
});

启动route

在三台机器上执行mongs -f /usr/local/mongo/route/route.conf
在192.168.200.131上执行mong --host 192.168.200.131 --port 20000
use admin
db.runCommand({
addshard: “shard1/192.168.200.131:22001,192.168.200.132:22001,192.168.200.133:22001”
})

db.runCommand({
addshard: “shard2/192.168.200.131:22002,192.168.200.132:22002,192.168.200.133:22002”
})

db.runCommand({
addshard: “shard3/192.168.200.131:22003,192.168.200.132:22003,192.168.200.133:22003”
})
创建库 testdb,同时建立索引
db.runCommand({enablesharding:“testdb”})
db.runCommand({shardcollection:“testdb.users”,key:{id:1}})
use testdb

插入数据
var arr=[];
for (var i=0;i<1500000 ;i++){
var uid = i;
var name =“name000”;
arr.push({“id”:uid,“name”:name});
};
db.users.insertMany(arr);
通过sh.sttaus()可以看到数据分片
在这里插入图片描述
数据库清空
killall -9 mongod
killall -9 mongos
rm -rf /usr/local/mongo/config/data/*
rm -rf /usr/local/mongo/config/pid/*
rm -rf /usr/local/mongo/config/log/*
rm -rf /usr/local/mongo/route/data/*
rm -rf /usr/local/mongo/route/pid/*
rm -rf /usr/local/mongo/route/log/*
rm -rf /usr/local/mongo/shar1/data/*
rm -rf /usr/local/mongo/shar1/log/*
rm -rf /usr/local/mongo/shar1/pid/*
rm -rf /usr/local/mongo/shar2/data/*
rm -rf /usr/local/mongo/shar2/log/*
rm -rf /usr/local/mongo/shar2/pid/*
rm -rf /usr/local/mongo/shar3/data/*
rm -rf /usr/local/mongo/shar3/log/*
rm -rf /usr/local/mongo/shar3/pid/*

本文参考
https://blog.csdn.net/qq_21153619/article/details/81474564
https://www.bilibili.com/video/BV1p4411J7sq?from=search&seid=2720165750666654784&spm_id_from=333.337.0.0

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值