MongoDB分片式高可用集群搭建
MongoDB分片式高可用集群搭建
文章目录
- MongoDB分片式高可用集群搭建
- 一. 配置SSM免密登录
- 二. 关闭防火墙
- 三. 上传文件和解压
- 四. 创建文件目录
- 五. 配置复制集
- 六. 配置shard集群
- 1.shard1配置
- 2.shard2配置
- 3.shard3的配置
- 七. 配置mongos服务器
- 八.串联路由服务器
- 九.测试 启用集合分片生效
- 十.干净的退出
一. 配置SSM免密登录
ssh-keygen //生成公钥和私钥,三次回车就行
ssh-copy-id 172.16.0.65 //将授权池文件远程发送
三台机器上都要执行
二. 关闭防火墙
firewalld|iptable 和seLinux都要关闭
CentOS7中:
systemctl stop firewalld.service //临时关闭防火墙
systemctl disable firewalld.service //禁止开机开启防火墙
firewall-cmd --state //查看防火墙状态关闭seLinux
/etc/selinux/config
将SELINUX的值修改为disable,重启
CentOS6中:
service iptables stop
三. 上传文件和解压
tar -zxvf [安装包] -C [指定目录]
四. 创建文件目录
mkdir -p /data/mongodb/mongos/{log,conf}mkdir -p /data/mongodb/mongoconf/{data,log,conf}mkdir -p /data/mongodb/shard1/{data,log,conf}mkdir -p /data/mongodb/shard2/{data,log,conf}mkdir -p /data/mongodb/shard3/{data,log,conf}touch /data/mongodb/mongos/log/mongos.logtouch /data/mongodb/mongoconf/log/mongoconf.logtouch /data/mongodb/shard1/log/shard1.logtouch /data/mongodb/shard2/log/shard2.logtouch /data/mongodb/shard3/log/shard3.log
五. 配置复制集
在/home/kqbigdata/mongodb-3.6.15/data/mongoconf/conf中创建以下文件mongoconf.conf,三台机器都创建
dbpath=/home/kqbigdata/mongodb-3.6.15/data/mongoconf/data
logpath=/home/kqbigdata/mongodb-3.6.15/data/mongoconf/log/mongoconf.log
logappend=true
bind_ip=0.0.0.0
port=21000
journal=true
fork=true
syncdelay=60
oplogSize=1000
configsvr=true
replSet=cqsm1
三台机器都在bin目录下启动mongd
./mongod -f /home/kqbigdata/mongodb-3.6.15/data/mongoconf/conf/mongoconf.conf
进入任意一台机器初始化副本集
./mongo 172.16.0.67:21000 如果端口不是默认的27017一定要加ip和端口号use admin 进入admin数据库中进行初始化配置config = {_id:"cqsm1",members:[
{_id:0,host:"172.16.0.67:21000"},
{_id:1,host:"172.16.0.66:21000"},
{_id:2,host:"172.16.0.65:21000"},]
}cqsm1:SECONDARY> rs.initiate(config);
{"info" : "try querying local.system.replset to see current configuration","ok" : 0,"errmsg" : "already initialized","code" : 23,"codeName" : "AlreadyInitialized","operationTime" : Timestamp(1575533876, 3),"$gleStats" : {"lastOpTime" : Timestamp(1575533861, 1),"electionId" : ObjectId("7fffffff0000000000000001")},"$clusterTime" : {"clusterTime" : Timestamp(1575533876, 3),"signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),"keyId" : NumberLong(0)}}
}
cqsm1:PRIMARY>
六. 配置shard集群
1.shard1配置
在/home/kqbigdata/mongodb-3.6.15/data/shard1/conf中创建文件shard1.conf
dbpath=/home/kqbigdata/mongodb-3.6.15/data/shard1/data
logpath=/home/kqbigdata/mongodb-3.6.15/data/shard1/log/shard1.log
bind_ip=0.0.0.0
port=22001
logappend=true
#nohttpinterface=true
fork=true
oplogSize=4096
journal=true
#engine=wiredTiger
#cacheSizeGB=38G
smallfiles=true
shardsvr=true
replSet=shard1
启动mongod
./mongod -f /home/kqbigdata/mongodb-3.6.15/data/shard1/conf/shard.conf 三台都启动
成功:
child process started successfully, parent exiting
在第二台机器上初始化shard1
./mongo 172.16.0.66:22001>config = {_id:"shard1",members:[
{_id:0,host:"172.16.0.67:22001"},
{_id:1,host:"172.16.0.66:22001"},
{_id:2,host:"172.16.0.65:22001"},]
}rs.initiate(config)
出现错误:
No host described in new configuration 1 for replica set shard1 maps to this node
检查发现config中的端口号有没有写错
> rs.initiate(config)
{"ok" : 0,"errmsg" : "No host described in new configuration 1 for replica set shard1 maps to this node","code" : 93,"codeName" : "InvalidReplicaSetConfig"
}
> config = {_id:"shard1",members:[
...
... {_id:0,host:"172.16.0.67:22001"},
...
... {_id:1,host:"172.16.0.66:22001"},
...
... {_id:2,host:"172.16.0.65:22001"},]
...
... }
{"_id" : "shard1","members" : [{"_id" : 0,"host" : "172.16.0.67:22001"},{"_id" : 1,"host" : "172.16.0.66:22001"},{"_id" : 2,"host" : "172.16.0.65:22001"}]
}
> rs.initiate(config)
{ "ok" : 1 }
2.shard2配置
在/home/kqbigdata/mongodb-3.6.15/data/shard2/conf中创建文件shard2.conf
dbpath=/home/kqbigdata/mongodb-3.6.15/data/shard2/data
logpath=/home/kqbigdata/mongodb-3.6.15/data/shard2/log/shard2.log
bind_ip=0.0.0.0
port=22002
logappend=true
#nohttpinterface=true
fork=true
oplogSize=4096
journal=true
#engine=wiredTiger
#cacheSizeGB=38G
smallfiles=true
shardsvr=true
replSet=shard2
分别在三个节点是启动进程
./mongod -f /home/kqbigdata/mongodb-3.6.15/data/shard2/conf/shard.conf
在第一台机器进行shard2的初始化
config = {_id:"shard2",members:[
{_id:0,host:"172.16.0.67:22002"},
{_id:1,host:"172.16.0.66:22002"},
{_id:2,host:"172.16.0.65:22002"},]
}rs.initiate(config)
3.shard3的配置
在/home/kqbigdata/mongodb-3.6.15/data/shard3/conf中创建文件shard3.conf
dbpath=/home/kqbigdata/mongodb-3.6.15/data/shard3/data
logpath=/home/kqbigdata/mongodb-3.6.15/data/shard3/log/shard3.log
bind_ip=0.0.0.0
port=22003
logappend=true
#nohttpinterface=true
fork=true
oplogSize=4096
journal=true
#engine=wiredTiger
#cacheSizeGB=38G
smallfiles=true
shardsvr=true
replSet=shard3
三个节点都启动
./mongod -f /home/kqbigdata/mongodb-3.6.15/data/shard3/conf/shard.conf
初始化
./mongo 172.16.0.67:22003config = {_id:"shard3",members:[
{_id:0,host:"172.16.0.67:22003"},
{_id:1,host:"172.16.0.66:22003"},
{_id:2,host:"172.16.0.65:22003"},]
}rs.initiate(config)
七. 配置mongos服务器
目前三台服务器的配置服务器和分片服务器均已启动,配置三台mongos服务器,由于mongos服务器的配置是从内存中加载,所以自己没有存在数据目录configdb连接为配置服务器集群。
在/home/kqbigdata/mongodb-3.6.15/data/mongos/conf中创建文件mongos.conf
logpath=/home/kqbigdata/mongodb-3.6.15/data/mongos/log/mongos.log
logappend=true
bind_ip=0.0.0.0
port=20000
maxConns=1000
configdb=cqsm1/172.16.0.65:21000,172.16.0.66:21000,172.16.0.67:21000
fork=true
三台机器均开启mongod
./mongos -f /home/kqbigdata/mongodb-3.6.15/data/mongos/conf/mongos.conf
出现错误:
Error parsing INI config file: unrecognised option 'configdb'首先查看配置文档有没有错误,还有启动命令是mongos不是mongod
八.串联路由服务器
目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到mongos路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效。
登陆任意一台mongos
>./mongo 172.16.0.67:20000
>use admin
>sh.addShard("shard1/172.16.0.65:22001,172.16.0.66:22001,172.16.0.67:22001");
>sh.addShard("shard2/172.16.0.65:22002,172.16.0.66:22002,172.16.0.67:22002");
>sh.addShard("shard3/172.16.0.65:22003,172.16.0.66:22003,172.16.0.67:22003");
查看集群状态:
mongos> sh.status()
--- Sharding Status --- sharding version: {"_id" : 1,"minCompatibleVersion" : 5,"currentVersion" : 6,"clusterId" : ObjectId("5de8bd325989697ceb9f1e0a")}shards:{ "_id" : "shard1", "host" : "shard1/172.16.0.65:22001,172.16.0.66:22001,172.16.0.67:22001", "state" : 1 }{ "_id" : "shard2", "host" : "shard2/172.16.0.65:22002,172.16.0.66:22002,172.16.0.67:22002", "state" : 1 }{ "_id" : "shard3", "host" : "shard3/172.16.0.65:22003,172.16.0.66:22003,172.16.0.67:22003", "state" : 1 }active mongoses:"3.6.15" : 3autosplit:Currently enabled: yesbalancer:Currently enabled: yesCurrently running: noFailed balancer rounds in last 5 attempts: 0Migration Results for the last 24 hours: No recent migrationsdatabases:{ "_id" : "config", "primary" : "config", "partitioned" : true }
九.测试 启用集合分片生效
目前配置服务、路由服务、分片服务、副本集服务都已经串联起来了,但我们的目的是希望插入数据,数据能够自动分片。连接在mongos上,准备让指定的数据库、指定的集合分片生效。
登陆任意一台mongos
db.runCommand( { enablesharding :"testdb"});或mongos> sh.enablesharding("testdb")
指定需要分片的集合和片键
db.runCommand( { shardcollection : "testdb.table1",key : {"name": "hashed"} } );或mongos> sh.shardcollection("testdb.table1", {"name": "hashed"})
指定之后会创建指定的数据库,进入数据库,插入数据
use testdb;
for(i=1;i<=100000;i++){db.table1.insert({"id":i,"name":"penglei"})}; //插入数据
db.table1.aggregate([{$group : {_id : "$name", totle : {$sum : 1}}}]) //查看插入的总数据
查看集群状态
db.table1.stats();
十.干净的退出
1.进入admin数据关闭
>use admin
>db.shutdownServer()
2.使用mongod命令关闭
mongod --shutdown --dbpath./mongod --shutdown --dbpath /home/kqbigdata/mongodb-3.6.15/data/mongoconf/data/
3.ps -ef | grep mongo kill [PID]
注意:如果意外退出,会报错
错误:
child process failed, exited with error number 51
To see additional information in this output, start without the "--fork" option.解决方案
删除 mongod.lock 文件和日志文件 mongodb.log.2014-11-17T06-55-20 ,如果有必要把 log日志全部删除
使用命令netstat -ntlp 查看mongod占用端口,使用kill -9 [PID]杀掉进程
MongoDB分片式高可用集群搭建相关推荐
- RabbitMQ高级指南:从配置、使用到高可用集群搭建
本文大纲: 1. RabbitMQ简介 2. RabbitMQ安装与配置 3. C# 如何使用RabbitMQ 4. 几种Exchange模式 5. RPC 远程过程调用 6. RabbitMQ高可用 ...
- RabbitMQ 高级指南:从配置、使用到高可用集群搭建
博主说:在项目中,通过 RabbitMQ,咱们可以将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量. 正文 1 Rab ...
- Hadoop HA 高可用集群搭建
Hadoop HA 高可用集群搭建 一.首先配置集群信息 1 vi /etc/hosts 二.安装zookeeper 1.解压至/usr/hadoop/下 1 tar -zxvf zookeeper- ...
- Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase)
一.服务器环境 主机名 IP 用户名 密码 安装目录 master 192.168.142.124 root xxx /usr/hadoop-2.6.5/ slave1 192.168.142.125 ...
- mycat mysql好可用架构_想要学会MyCat高可用集群搭建,但是这些知识点却还玩不明白?...
一.集群架构 1.MyCat实现读写分离架构 在我前面的文章, 我已经讲解过了通过MyCat来实现MySQL的读写分离, 从而完成MySQL集群的负载均衡 , 如下面的结构图: 但是以上架构存在问题 ...
- RabbitMQ高可用集群搭建
RabbitMQ高可用集群搭建 摘要:实际生产应用中都会采用消息队列的集群方案,如果选择RabbitMQ那么有必要了解下它的集群方案原理一般来说,如果只是为了学习RabbitMQ或者验证业务工程的正确 ...
- Hadoop 3.1.2(HA)+Zookeeper3.4.13+Hbase1.4.9(HA)+Hive2.3.4+Spark2.4.0(HA)高可用集群搭建
目录 目录 1.前言 1.1.什么是 Hadoop? 1.1.1.什么是 YARN? 1.2.什么是 Zookeeper? 1.3.什么是 Hbase? 1.4.什么是 Hive 1.5.什么是 Sp ...
- RabbitMQ 高可用集群搭建
RabbitMQ 高可用集群搭建 1 集群简介 1.1 集群架构 当单台 RabbitMQ 服务器的处理消息的能力达到瓶颈时,此时可以通过 RabbitMQ 集群来进行扩展,从而达到提升吞吐量的目 ...
- k8s高可用集群搭建部署
简介 k8s普通搭建出来只是单master节点,如果该节点挂掉,则整个集群都无法调度,K8s高可用集群是用多个master节点加负载均衡节点组成,外层再接高可用分布式存储集群例如ceph集群,实现计算 ...
- 【❤️万字长文总结❤️】一篇学会Redis高可用✔集群✔搭建详细教程
大家好,我是Lex 喜欢欺负超人那个Lex 擅长领域:python开发.网络安全渗透.Windows域控Exchange架构 今日重点:今天总结一下Redis集群高可用的搭建流程 [惊喜推荐+优质资源 ...
最新文章
- sklearn使用投票器VotingClassifier算法构建多模型融合的硬投票器分类器(hard voting)并计算融合模型的混淆矩阵、可视化混淆矩阵(confusion matrix)
- A generic error occurred in GDI+的解决方案
- 程序物语(六):探寻你的与众不同之处
- 简明机器学习教程——实践篇(一):从感知机入手
- 5334. 【NOIP2017提高A组模拟8.24】空
- mybatis关联查询
- 链表插入功能实现演示
- mysql索引条件下推_MySQL索引条件下推的简单测试
- MatchingFrontier包简介及R实现
- C#Json数据交互
- 私塾在线java设计模式综合项目实战
- 【MS SQL Server】SQL Server2005下载地址
- 微信支付宝无现金之争:瞄准用户支付大数据
- 四大因素使二三线城市楼市泡沫难救?
- 秋招C++开发学习之路day10
- 数据分析可视化常用图介绍以及相关代码实现(箱型图、Q-Q图、Kde图、线性回归图、热力图)
- 2010级清华计算机专业校友,清华计算机系主任答2010高考考生问-清华大学.PDF
- 7-1 找第k小的数(反思),a++和++a的区别,运算符优先级,递归分制思想
- 有Python基础学习PyTorch,可以选择的书籍有哪些?
- Hyperf插件之passport认证插件richard8768/hyperf-passport