monodb分片集群部署
本文档基于MongoDB版本3.6.2
下载地址:
建议使用最新版本
https://www.mongodb.com/download-center#community
安装文件
集群ip及端口设计方案:
服务 |
192.168.141.201 |
192.168.141.202 |
192.168.141.203 |
Router |
Mongos(17017) |
Mongos(17017) |
|
Config |
Config server1(27017) |
Config server2(27017) |
Config server3(27017) |
Shard1-主(37017) |
Shard2-主(47017) |
Shard3-主(57017) |
|
Shard |
Shard2-从(47017) |
Shard1-从(37017) |
Shard1-从(37017) |
Shard3-从(57017) |
Shard3-从(57017) |
Shard2-从(47017) |
在每台部署MongoDB的机器上面执行如下命名:(创建mongo下三个服务路径)
mkdir -p /home/mongo/{config,router,shard}
mkdir -p /home/mongo/config/{data,logs}
mkdir -p /home/mongo/router/logs
mkdir -p /home/mongo/shard/{data,logs}
mkdir -p /home/mongo/shard/data/{shard1,shard2,shard3}
可以生成一个脚本文件,mongodirs.sh,再拷贝到所有mongo机器上执行:
#!/usr/bin/bash |
---|
然后在mongo数据库的根目录下执行
./mongodirs.sh |
---|
config服务:
注意:config服务至少启动三个节点
vi /home/mongo/config/config.config
dbpath=/home/mongo/config/data |
---|
启动config服务
mongod --config /home/mongo/config/config.config
可能的错误如下:
about to fork child process, waiting until server is ready for connections. 没有权限,sudo启动就可以了 error number 18: error number 100:端口被占用 exited with error number 48 原因是端口被占用 |
---|
[****@centosvm config]$ sudo mongod --config config.config |
---|
正确的启动命令行如下:
用mongo shell连接到已经启动的mongoconfig服务 ,初始化config服务
mongo –port 27017
[****@centosvm config]$ mongo -port 27017 |
---|
按照集群的设计,配置集群的ip和端口列表,并指定哪个是主节点,哪几个是从节点;以下命令在MongoDB Shell命令行下执行:
rs.initiate({_id:"configRS",configsvr:true,members:[{_id:1,host:"192.168.141.201:27017",priority:2},{_id:2,host:"192.168.141.202:27017"},{_id:3,host:"192.168.141.203:27017"}]})
可能的错误的返回结果:
MongoDB Enterprise > rs.initiate({_id:”configRS”,configsvr:true,members:[{_id:1,host:”192.168.126.132:27017”,priority:2},{_id:2,host:”192.168.126.131:27017”},{_id:3,host:”192.168.126.130:27017”}]}) 可能的原因是双引号是全角字符 MongoDB Enterprise > rs.initiate({_id:"configRS",configsvr:true,members:[{_id:1,host:"192.168.126.132:27017",priority:2},{_id:2,host:"192.168.126.131:27017"},{_id:3,host:"192.168.126.130:27017"}]}) 可能的原因是,节点间联通失败,这时要看一下config.config文件的bind_ip是不是配置了 dbpath=/home/****/mongo/config/data |
---|
正确的返回结果样例:
MongoDB Enterprise > rs.initiate({_id:"configRS",configsvr:true,members:[{_id:1,host:"192.168.126.132:27017",priority:2},{_id:2,host:"192.168.126.131:27017"},{_id:3,host:"192.168.126.130:27017"}]}) |
---|
然后到另外两台机器上查看一下,看看config节点群是不是联通了。
MongoDB Enterprise > rs.status() |
---|
mongos服务:
编辑mongos配置文件mongo/router/router.config
configdb=configRS/192.168.126.132:27017,192.168.126.131:27017,192.168.126.130:27017 |
---|
启动mongos,可能要等待5到10秒:
[****@centosvm router]$ sudo mongos --config router.config |
---|
mongos至少要启动两个以上,mongos的IP+端口就是客户端配置的mongo服务地址。
把router.config文件拷贝到另一台mongo机器上相同目录中,按照上面命令启动。
caused by :: ShardNotFound: Database cloudconf not found due to No shards found
shard服务:
在每台服务器下,我们已经建立好路径:mongo/shard/data/{shard1,shard2,shard3}
在shard目录下写好3个shard配置文件
vi /home/mongo/shard/shard1.config |
---|
dbpath=/ home /mongo/shard/data/shard1 |
---|
vi /home/mongo/shard/shard2.config |
---|
dbpath=/home/mongo/ shard /data/ shard2 |
---|
同上配置shard3.config,端口57017
注意:更改相应ip、端口、集群名
replSet= shard1RS/192.168.141.201:37017,192.168.141.202:37017,192.168.141.203:37017
启动3个shard服务,先把我们预先设计的主片启动,然后启动剩余shard
mongod -f /home/mongo/shard/shard1.config |
---|
mongod -f /home/mongo/shard/shard2.config |
---|
初始化shard服务,进入任意一台mongodb服务器,配置每个shard副本集
mongo -port 37017 |
---|
|
---|
mongo -port 47017 |
---|
rs.initiate({_id:"shard2RS",members:[{_id:1,host:"192.168.141.202:47017",priority:2},{_id:2,host:"192.168.141.201:47017"},{_id:3,host:"192.168.141.203:47017"}]}) |
---|
同上完成端口57017配置
配置分片,将主片添加至集群
mongo -port 17017 |
---|
>use admin >db.runCommand({"addShard":"shard1RS/192.168.141.201:37017" ,"maxsize":1024}) >db.runCommand({"addShard":"shard2RS/192.168.141.202:47017" ,"maxsize":1024}) >db.runCommand({"addShard":"shard3RS/192.168.141.203:57017" ,"maxsize":1024}) |
---|
使用,在使用的时候,需要对数据库开启分片功能,并对数据库下的表的字段指定分片算法
>use admin --对库hdctest开启分片 >db.runCommand({"enablesharding":"hdctest"}) --对库hdctest下的表person按字段ID配置hash分库算法 >db.runCommand({"shardcollection":"hdctest.person","key":{_id:'hashed'}}) |
---|
注意:登陆从库查看数据信息的时候,可能会报:
not master and slaveOk= false,code=13435 |
---|
执行:
db.getMongo().setSlaveOk() |
---|
monodb分片集群部署的更多相关文章
- MongoDB DBA 实践8-----Linux系统Mongodb分片集群部署
在Linux系统中,主要是使用命令行进行mongodb的分片集群部署 一.先决条件 mongodb安装成功,明确路径, MongoDB的几个路径: /var/lib/mongodb /var/log/ ...
- mongoDB研究笔记:分片集群部署
前面几篇文章的分析复制集解决了数据库的备份与自动故障转移,但是围绕数据库的业务中当前还有两个方面的问题变得越来越重要.一是海量数据如何存储?二是如何高效的读写海量数据?尽管复制集也可以实现读写分析,如 ...
- MongoDB DBA 实践6-----MongoDB的分片集群部署
一.分片 MongoDB使用分片技术来支持大数据集和高吞吐量操作. 1.分片目的 对于单台数据库服务器,庞大的数据量及高吞吐量的应用程序对它而言无疑是个巨大的挑战.频繁的CRUD操作能够耗尽服务器的C ...
- MongoDB分片集群部署方案
前言 副本集部署是对数据的冗余和增加读请求的处理能力,却不能提高写请求的处理能力:关键问题是随着数据增加,单机硬件配置会成为性能的瓶颈.而分片集群可以很好的解决这一问题,通过水平扩展来提升性能.分片部 ...
- MongoDB在windows平台分片集群部署
本文转载自:https://www.cnblogs.com/hx764208769/p/4260177.html 前言-为什么我要使用mongodb 最近我公司要开发一个日志系统,这个日志系统包括很多 ...
- MongoDB部署实战(一)MongoDB在windows平台分片集群部署
前言-为什么我要使用mongodb 最近我公司要开发一个日志系统,这个日志系统包括很多类型,错误的,操作的,...用MongoDB存储日志,大量的日志产生,大量读写吞吐量很大的时候,单个Server很 ...
- mongo分片集群部署
测试环境192.168.56.101-213 前期准备: openssl rand -base64 756 > /home/software/mongodb/mongodbkey chmod ...
- redis分片集群安装部署
redis分片集群安装与部署 分片集群的优势 高可用.且方便扩展. 数据分片,多节点提供服务,提高性能,数据提供冗余备份. 分片集群部署 只需更改配置文件 部署架构:6个节点,3主3从.数据集分为3片 ...
- Mongodb分片集群技术+用户验证
随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的.而mongodb主打的就是海量数据架构,“分片”就用这个来解决这个问题. 从图中可以看到有四个组件:mongos.config server. ...
随机推荐
- centos7 修改网卡eth0 关闭ipv6 问题总结
1. 首先关闭"NetworkManager" 服务. 然后编辑网卡的配置文件将里面的NAME DEVICE项修改为eth0 vim /etc/sysconfig/network- ...
- oracle无监听程序的解决方法(PLSQL)Oracle ORA12514 监听程序当前无法识别连接描述符中请求的服务
\PLSQL\instantclient_11_2 listener.ora # listener.ora Network Configuration File: E:\software\PLSQL\ ...
- [BZOJ1935][SHOI2007]Tree 园丁的烦恼(树状数组)
题目描述 很久很久以前,在遥远的大陆上有一个美丽的国家.统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草. 有一天国王漫步在花园里,若有所思,他问一个园丁道: “最近我在思 ...
- [Swift]队列Queue的两种版本:(1)用类包装Queue (2)用泛型包装Queue
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插入操作的端称为队尾,进行删除操作的 ...
- (USB HID) Report Descriptor 理解
在這理整理一下基本 Report Descriptor 對於入門基礎的了解. 在很多文件.Blog都有提到HID report 總共分為3種 : Input.Output.Feature report ...
- c# Config配置文件读写
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.C ...
- 原来部署好的WCF(可以调用),因为部署.net core,而安装了DotNetCore.2.0.5-WindowsHosting,导致现在WCF站点不可以。
报错如下: 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面. 解决方法: 如果出现如下结果,则证明可以啦.
- python 小练习('''产生了多少个对象''')('''模拟两个英雄,昵称,攻击力,生命值''')
'''小练习 计数器,产生了多少个对象''' # class Student: # school = 'luffycity' # count = 0 # def __init__(self, name ...
- Python——单例设计模式
单例设计模式: 让类创建的对象,在系统中只有唯一的实例, 使用python类内置的__new__()方法实现,__new__()方法在创建对象时会被自动调用,通过重写__new__()方法,使得无论用 ...
- mysql安装启动 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
首次安装mysql 启动 mysql -uroot 以下错误: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using ...