MongoDB分片集群部署
MongoDB使用手册:https://www.runoob.com/mongodb/mongodb-tutorial.html
MongoDB源码包下载地址:https://www.mongodb.com/try#community
MongoDB官网文档:https://docs.mongodb.com/v4.0/sharding/
服务规划:
由于设备问题,目前我们只采用了3个设备进行部署。3个设备同时部署config Servers,shard1,shard2,route。可以查看我之前编写的Mongodb分片组件说明进行了解。
MongoDB分片集群部署
该部署使用的Red Hat 7为例
前提工作
所有设备都要进行如下操作。
1.关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
2.关闭SELinux
setenforce 0 //临时关闭
vim /etc/selinux/config //永久关闭
SELINUX=enforcing改为SELINUX=disabled
3.解压MongoDB包
注意选择对应的系统版本的MongoDB包,在这里我使用的是Centos7的环境,所以下载的也是rhel70的MongoDB包
tar -zxvf /opt/install/mongodb-linux-x86_64-rhel70-3.4.24.tgz
mv /opt/install/mongodb-linux-x86_64-rhel70-3.4.24/ /usr/local/mongodb
4.关闭THP
尽管THP的本意是为提升性能,但某些数据库厂商还是建议直接关闭THP(比如说Oracle、MongoDB等),否则可能导致性能下降,内存锁,甚至系统重启等问题
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
configServers部署
三台设备都需要部署configServer形成副本集,最后部署完成的结果是:192.168.36.137为主(PRIMARY),138和139为从(SECONDARY),端口都为21000。
1.创建configServers相关目录
mkdir -p /usr/local/mongodb/configServers/{data,log,conf}
2.配置configServers配置文件
vim /usr/local/mongodb/configServers/conf/configServers.conf
dbpath=/usr/local/mongodb/configServers/data logpath=/usr/local/mongodb/configServers/log/configServers.log pidfilepath=/usr/local/mongodb/configServers/configServers.pid logappend=true bind_ip=192.168.36.137 #其它设备只需要替换这个成本机IP即可 port=21000 fork=true replSet=replconf #副本集名称 configsvr=true #开启config Servers组件
3.启动configServers
cd /usr/local/mongodb/bin
./mongod -f /usr/local/mongodb/configServers/conf/configServers.conf
4.副本集初始化
#随便使用一台设备,这里我采用的192.168.36.137设备
cd /usr/local/mongodb/bin
./mongo 192.168.36.137:21000
> use admin > rs.initiate({ _id:"replconf", members:[ {_id:0,host:"192.168.36.137:21000"}, {_id:1,host:"192.168.36.138:21000"}, {_id:2,host:"192.168.36.139:21000"},] })
可以稍等一会退出重进mongodb,使用rs.status()命令查看下副本集是否创建成功。
shard1部署
三台设备都需要部署shard1形成副本集,最后部署完成的结果是:192.168.36.137为主(PRIMARY),138为从(SECONDARY),139为仲裁(ARBITER),端口都为22001。
1.创建shard1相关目录
mkdir -p /usr/local/mongodb/shard1/{data,log,conf}
2.配置shard1配置文件
vim /usr/local/mongodb/shard1/conf/shard1.conf
dbpath=/usr/local/mongodb/shard1/data logpath=/usr/local/mongodb/shard1/log/shard1.log pidfilepath=/usr/local/mongodb/shard1/shard1.pid logappend=true bind_ip=192.168.36.137 #其它设备只需要替换这个成本机IP即可 port=22001 fork=true replSet=shard1 #副本集名称 shardsvr=true #开启shard组件
3.启动shard1
cd /usr/local/mongodb/bin
./mongod -f /usr/local/mongodb/shard1/conf/shard1.conf
4.副本集初始化
#随便使用一台设备,这里我采用的192.168.36.137设备
cd /usr/local/mongodb/bin
./mongo 192.168.36.137:22001
> use admin
> rs.initiate({
_id:"shard1",
members:[
{_id:0,host:"192.168.36.137:22001","priority":2},
{_id:1,host:"192.168.36.138:22001","priority":1},
{_id:2,host:"192.168.36.139:22001",arbiterOnly:true},]
})
注:shard中的仲裁节点其实也不是必须的,若是不想设置仲裁节点,可以将arbiterOnly选项修改为priority
可以稍等一会退出重进mongodb,使用rs.status()命令查看下副本集是否创建成功。
shard2部署
三台设备都需要部署shard2形成副本集,最后部署完成的结果是:192.168.36.137为仲裁(ARBITER),138为主(PRIMARY),139为从(SECONDARY),端口都为22002。
1.创建shard2相关目录
mkdir -p /usr/local/mongodb/shard2/{data,log,conf}
2.配置shard2配置文件
vim /usr/local/mongodb/shard2/conf/shard2.conf
dbpath=/usr/local/mongodb/shard2/data
logpath=/usr/local/mongodb/shard2/log/shard2.log
pidfilepath=/usr/local/mongodb/shard2/shard2.pid
logappend=true
bind_ip=192.168.36.137 #其它设备只需要替换这个成本机IP即可
port=22002
fork=true
replSet=shard2 #副本集名称
shardsvr=true #开启shard组件
3.启动shard2
cd /usr/local/mongodb/bin
./mongod -f /usr/local/mongodb/shard2/conf/shard2.conf
4.副本集初始化
#随便使用一台设备,这里我采用的192.168.36.138设备
cd /usr/local/mongodb/bin
./mongo 192.168.36.138:22002
> use admin
> rs.initiate({
_id:"shard2",
members:[
{_id:0,host:"192.168.36.137:22002",arbiteOnly:true},
{_id:1,host:"192.168.36.138:22002","priority":2},
{_id:2,host:"192.168.36.139:22002","priority":1},]
})
可以稍等一会退出重进mongodb,使用rs.status()命令查看下副本集是否创建成功。
route部署(也就是mongos)
三台设备同样也都需要部署route,端口都为20000。
1.创建route相关目录
mkdir -p /usr/local/mongodb/route/{log,conf} #route不需要data目录
2.配置route配置文件
vim /usr/local/mongodb/route/conf/route.conf
logpath=/usr/local/mongodb/route/log/route.log
pidfilepath=/usr/local/mongodb/route/route.pid
logappend=true bind_ip=192.168.36.137 #其它设备只需要替换这个成本机IP即可 port=20000 fork=true configdb=replconf/192.168.36.137:21000,192.168.36.138:21000,192.168.36.139:21000 #这里指定的是我们configServers的地址端口
3.启动route
cd /usr/local/mongodb/bin
./mongos -f /usr/local/mongodb/router/conf/router.conf
4.增加shard节点
#随便使用一台设备,这里我采用的192.168.36.137设备
cd /usr/local/mongodb/bin
./mongo 192.168.36.137:20000
#下列两种方式任选其一即可
方式一:
> use admin
> db.runCommand({addshard:"shard1/192.168.36.137:22001,192.168.36.138:22001,192.168.36.139:22001"}) //shard是我们第一个设置的share名称和它的各个节点
> db.runCommand({addshard:"shard2/192.168.36.137:22002,192.168.36.138:22002,192.168.36.139:22002"}) //shard是我们第二个设置的share名称和它的各个节点
> sh.status() //查看集群分片状态
> use config
> db.shards.find() //查看当前所有shard节点信息
方式二:
sh.addShard("shard1/192.168.36.137:22001,192.168.36.138:22001,192.168.36.139:22001");
sh.addShard("shard2/192.168.36.137:22002,192.168.36.138:22002,192.168.36.139:22002");
若后期我们有新的shard节点也是通过该方式进行新增。
至此,MongoDB分片集群就部署完成了!要想对其进行验证,可以参考我之前编写的MongoDB分片集群使用说明。
若要做密码验证,请参考MongoDB设置密码验证。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库