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分片式高可用集群搭建相关推荐

  1. RabbitMQ高级指南:从配置、使用到高可用集群搭建

    本文大纲: 1. RabbitMQ简介 2. RabbitMQ安装与配置 3. C# 如何使用RabbitMQ 4. 几种Exchange模式 5. RPC 远程过程调用 6. RabbitMQ高可用 ...

  2. RabbitMQ 高级指南:从配置、使用到高可用集群搭建

    博主说:在项目中,通过 RabbitMQ,咱们可以将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量. 正文 1 Rab ...

  3. Hadoop HA 高可用集群搭建

    Hadoop HA 高可用集群搭建 一.首先配置集群信息 1 vi /etc/hosts 二.安装zookeeper 1.解压至/usr/hadoop/下 1 tar -zxvf zookeeper- ...

  4. Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase)

    一.服务器环境 主机名 IP 用户名 密码 安装目录 master 192.168.142.124 root xxx /usr/hadoop-2.6.5/ slave1 192.168.142.125 ...

  5. mycat mysql好可用架构_想要学会MyCat高可用集群搭建,但是这些知识点却还玩不明白?...

    一.集群架构 1.MyCat实现读写分离架构 在我前面的文章, 我已经讲解过了通过MyCat来实现MySQL的读写分离, 从而完成MySQL集群的负载均衡 , 如下面的结构图: 但是以上架构存在问题 ...

  6. RabbitMQ高可用集群搭建

    RabbitMQ高可用集群搭建 摘要:实际生产应用中都会采用消息队列的集群方案,如果选择RabbitMQ那么有必要了解下它的集群方案原理一般来说,如果只是为了学习RabbitMQ或者验证业务工程的正确 ...

  7. 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 ...

  8. RabbitMQ 高可用集群搭建

    RabbitMQ 高可用集群搭建 1 集群简介 1.1 集群架构 ​ 当单台 RabbitMQ 服务器的处理消息的能力达到瓶颈时,此时可以通过 RabbitMQ 集群来进行扩展,从而达到提升吞吐量的目 ...

  9. k8s高可用集群搭建部署

    简介 k8s普通搭建出来只是单master节点,如果该节点挂掉,则整个集群都无法调度,K8s高可用集群是用多个master节点加负载均衡节点组成,外层再接高可用分布式存储集群例如ceph集群,实现计算 ...

  10. 【❤️万字长文总结❤️】一篇学会Redis高可用✔集群✔搭建详细教程

    大家好,我是Lex 喜欢欺负超人那个Lex 擅长领域:python开发.网络安全渗透.Windows域控Exchange架构 今日重点:今天总结一下Redis集群高可用的搭建流程 [惊喜推荐+优质资源 ...

最新文章

  1. sklearn使用投票器VotingClassifier算法构建多模型融合的硬投票器分类器(hard voting)并计算融合模型的混淆矩阵、可视化混淆矩阵(confusion matrix)
  2. A generic error occurred in GDI+的解决方案
  3. 程序物语(六):探寻你的与众不同之处
  4. 简明机器学习教程——实践篇(一):从感知机入手
  5. 5334. 【NOIP2017提高A组模拟8.24】空
  6. mybatis关联查询
  7. 链表插入功能实现演示
  8. mysql索引条件下推_MySQL索引条件下推的简单测试
  9. MatchingFrontier包简介及R实现
  10. C#Json数据交互
  11. 私塾在线java设计模式综合项目实战
  12. 【MS SQL Server】SQL Server2005下载地址
  13. 微信支付宝无现金之争:瞄准用户支付大数据
  14. 四大因素使二三线城市楼市泡沫难救?
  15. 秋招C++开发学习之路day10
  16. 数据分析可视化常用图介绍以及相关代码实现(箱型图、Q-Q图、Kde图、线性回归图、热力图)
  17. 2010级清华计算机专业校友,清华计算机系主任答2010高考考生问-清华大学.PDF
  18. 7-1 找第k小的数(反思),a++和++a的区别,运算符优先级,递归分制思想
  19. 有Python基础学习PyTorch,可以选择的书籍有哪些?
  20. Hyperf插件之passport认证插件richard8768/hyperf-passport

热门文章

  1. STM32串口通信编程
  2. 以太网协议 | ARP协议详解-ARP报文结构解析
  3. 编程需要知道多少数学知识?
  4. 为了防止世界被破坏,春运的抢票攻略在等着你们
  5. 激活office 2007 的方法
  6. RC电路一阶线性微分方程
  7. Android-AhMyth Rat
  8. 【Python 3.7】熟食店:创建一个名为 sandwich_orders 的列表,在其中包含各种三明治的名 字;再创建一个名为 finished_sandwiches 的空列表……
  9. 少有人走的路——心智成熟的旅程
  10. 外汇EA量化交易特点