(一)MongoDB分布式搭建

一.集群规划

1.1.配置规划

【注意】得部署奇数台。

节点 Master Slave1 Slave2
IP 192.168.2.98 192.168.2.99 192.168.2.100
配置实例 a1\b1\c1\configserver1 a2\b2\c2\configserver2 a3\b3\c3\configserver3

1.2.分片规划

说明:1个分片内有3个副本集。如果看不懂分片规划请看例子解释。(看懂忽略此例子)

例子:fang-s-a整行解释。a1-a2-a3副本集对应端口为28111。a1(在Master上)、a2(在Slave1)、a3(在Slave2) 对应着上面的配置实例。现在移至搭建Mongodb第8步操作解释,在主节点Master登录Mongo添加a2(Slave1)、a3(Slave2)这两个次要的副本集。

切片名称 主要副本集 次要副本集 次要副本集 端口
fang-s-a a1(Master) a2(Slave1) a3(Slave2) 28111
fang-s-b b2(Slave1) b1(Master) b3(Slave2) 28112
fang-s-c c3(Slave2) c1(Master) c2(Slave1) 29113
fang-cs configserver1(Master) configserver2(Slave1) configserver3(Slave2) 28200

二.搭建Mongodb

1.下载安装包(master)
# wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.9.tgz
# tar zxvf mongodb-linux-x86_64-rhel62-3.2.9.tgz -C /usr/local/ 解压
# mv /usr/local/mongodb-linux-x86_64-rhel62-3.2.9 /usr/local/mongo  改名
2.分发安装包至各节点(master)
# scp -r /usr/local/mongo root@slave1:/usr/local/
# scp -r /usr/local/mongo root@slave2:/usr/local/
3.创建db目录、日志目录、mongodb配置文件(三台)此处演示一台每台都要改数值对应
3.1.创建db目录
# mkdir -p /mongodb/a1 /mongodb/b1 /mongodb/c1 /mongodb/configserver1 
3.2.创建日志目录
# mkdir -p /home/log/mongodb/a1 /home/log/mongodb/b1 /home/log/mongodb/c1 /home/log/mongodb/configserver1 
3.3.创建mongodb配置文件
# touch /mongodb/mongod-a1-config.yml /mongodb/mongod-b1-config.yml /mongodb/mongod-c1-config.yml /mongodb/mongod-configserver1.yml
4. 生产和copy秘钥用户实例内部认证(master)
# openssl rand -base64 755 > /mongodb/keyfile
# chmod 400 /mongodb/keyfile  授权
# scp /mongodb/keyfile root@slave1:/mongodb/  分发1
# scp /mongodb/keyfile root@slave2:/mongodb/  分发2
5.配置mongodb文件(三台)  配mongod-a1-config.yml + b1 + c1
# vim /mongodb/mongod-a1-config.yml  添加如下。这里只是a1举例 b1+c1也是如此但要改内容的数值与之文件对应。注意下面有空格是固定的对准不然后面启动不了!
# 日志位置
systemLog:
destination: file  # 前面空1格
logAppend: true  # 空1格
path: /home/log/mongodb/a1/mongodb.log  # 空1格
# db存储位置
storage:  
dbPath: /mongodb/a1  # 空1格
journal:  # 空1格
enabled: true  # 空2格
# fork : 后台运行
# pidFilePath: pidfile的位置
processManagement:
fork: true  # 空1格
pidFilePath: /var/run/mongod-a1.pid  # 空1格
# 仅收听本地界面
net:
port: 28111  # 注意这里是a1的端口28111、配置b1时要分配端口28112、配置c1时要分配端口28113。空1格
bindIp: 0.0.0.0  # 空1格
# operation剖析
operationProfiling:
slowOpThresholdMs: 1000  # 空1格
mode: slowOp  # 空1格
# 复制
replication:
replSetName: fang-s-a  # 注意配置b1时这里a要改为b、配置c1时改为c。空1格
# 分片
sharding: 
clusterRole: shardsvr  # 空1格
6.配置mongod-configserver1.yml文件(三台) slave1数值是2 slave2是3注意以下格式有空格,严格空格,不然后面启动不了!
# vim /mongodb/mongod-configserver1.yml
# mongod config
systemLog:
destination: file  # 空1格
logAppend: true  # 空1格
path: /home/log/mongodb/configserver1/mongodb.log  # 空1格
# Where and how to store data.
storage:
dbPath: /mongodb/configserver1  # 空1格
journal:  # 空1格
enabled: true  # 空2格
# fork : fork and run in background
# pidFilePath:location of pidfile
processManagement:
fork: true  # 空1格
pidFilePath: /var/run/mongod-configserver1.pid  # 空1格
# network interfaces
# Listen to local interface only, comment to listen on all interfaces.
net:
port: 28200  # 空1格
bindIp: 0.0.0.0  # 空1格
#operationProfiling:
operationProfiling:
slowOpThresholdMs: 1000  # 空1格
mode: slowOp  # 空1格
#replication:
replication:
replSetName: fang-cs  # 空1格
#sharding:
sharding:
clusterRole: configsvr  # 空1格
7.启动(三台)这里演示一台启动master所有实例
# cd /usr/local/mongo/bin/  进入mongo bin目录
# ./mongod -f /mongodb/mongod-a1-config.yml  启动config服务1-2-3
# ./mongod -f /mongodb/mongod-b1-config.yml
# ./mongod -f /mongodb/mongod-c1-config.yml
# ./mongod -f /mongodb/mongod-configserver1.yml  启动configserver1-2-3
8.登录Mongo(master) → slave1 → slave2
# ./mongo 192.168.2.98:28111/admin  28111是a1服务配置的端口
> use admin  转至主库下
> rs.initiate()  初始化fang-s-a的副本集
> rs.add("slave1:28111")  添加副本集
> rs.add("slave2:28111")
> rs.conf()  查看副本集情况  (此时可以自行插入记录看看同步效果)
# 登录到192.168.2.99  初始化fang-s-b 添加副本集
# ./mongo 192.168.2.99:28112/admin
>rs.initiate()
>rs.add("master:28112")
>rs.add("slave2:28112")
# 登录到192.168.2.100  初始化fang-s-c 添加副本集
# ./mongo 127.168.2.99:28113/admin
rs.initiate()
rs.add("master:28113")
rs.add("slave1:28113")
# 登录到192.168.2.98  初始化fang-cs添加副本集
# ./mongo 127.168.2.98:28200/admin
> rs.initiate()
rs.add("slave1:28200")
rs.add("slave2:28200")
9. 添加分片集群
# 登录到192.168.2.98
# cd /usr/local/mongo/bin/
# ./mongos --port 28300 --configdb fang-cs/master:28200,slave1:28200,slave2:28200 --fork --logpath /home/log/mongodb/mongos.log --bind_ip 0.0.0.0  开启服务
# ./mongo 192.168.2.98:28300/admin  登录
> use admin
> sh.addShard("fang-s-a/master:28111,slave1:28111,slave2:28111")
> sh.addShard("fang-s-b/master:28112,slave1:28112,slave2:28112")
> sh.addShard("fang-s-c/master:28113,slave1:28113,slave2:28113")
10.设置备节点永久读(验证副本集同步)
对于replica set 中的secondary 节点默认是不可读的。在写多读少的应用中,使用Replica Sets来实现读写分离。通过在连接时指定或者在主库指定slaveOk,由Secondary来分担读的压力,Primary只承担写操作。
如果通过shell访问mongo,要在secondary进行查询。会出现如下错误:
imageSet:SECONDARY> db.fs.files.find()
error: { "$err" : "not master and slaveOk=false", "code" : 13435 }
有两种方法实现从机的查询:
第一种方法:db.getMongo().setSlaveOk();
第二种方法:rs.slaveOk();
但是这种方式有一个缺点就是,下次再通过mongo进入实例的时候,查询仍然会报错,为此可以通过下列方式
vi ~/.mongorc.js
增加一行rs.slaveOk();
这样的话以后每次通过mongo命令进入都可以查询了

11.认证分片(登录mongos)# ./mongo 192.168.2.131:28300/admin
> use admin  启用分片键
> sh.enableSharding("mytest")
> sh.shardCollection("mytest.student",{_id:"hashed"})
> for(var i=1;i<=50;i++){db.student.insert({age:i,"name":"mary",addr:"China"})} 测试
> db.student.find()  查看

原文链接:www.cnblogs.com

上一篇:概率论的数学基础
下一篇:RabbitMQ指南

相关推荐

  • (八)redis实现分布式锁

    在Java中我们通过锁,来避免由于竞争而造成的数据不一致问题。通常,我们以synchronized 、Lock来使用它,但是Java中的锁,只能保证在同一个JVM进程内中执行。

    5 个月前
  • (五)多机架构,伪分布式也有益处

    总结:多机架构,伪分布式也有益处 (1)随着流量的提升,系统最先遇到的两大问题是     # 慢,性能下降     # 一挂全挂,耦合 (2)如何快速提升性能:伪分布式,三大分离(读写、动静,前台后台...

    4 个月前
  • 高并发分布式架构的演进之路

    1.概述     本文以淘宝作为例子,介绍从一百个到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计...

    3 个月前
  • 集群多JVM分布式锁实现

    基于数据库表乐观锁 (基本废弃) 要实现分布式锁,最简单的⽅方式可能就是直接创建⼀一张锁表,然后通过操作该表中的数据来实现了了。 当我们要锁住某个⽅法或资源时,我们就在该表中增加一条记录,想要释放锁的...

    4 个月前
  • 轻量级分布式延时任务处理组件easyTask-L-入门篇

    今天给大家介绍一款新武器。我自研的一个java组件easyTask-L。这个是做啥的呢?我之前研发了一款单机版本的easyTask,这次是要介绍另外一款easyTask-L。

    3 个月前
  • 转 分布式事务的四种解决方案

    本文转  https://www.cnblogs.com/mayundalao/p/11798502.html 简述 分布式事务指事务的操作位于不同的节点上,需要保证事务的 AICD 特性。

    7 个月前
  • 记MongoDB的安装

    在我的win10系统下可以正常安装MongoDB官网的msi文件,但为我的另一台安装时却报告以下错误: service 'mongodb server' failed to start. v...

    2 个月前
  • 自己作图分析分布式技术架构演化的常用套路

    目录背景1、单机架构2、应用服务与数据服务分离3、应用服务器集群架构3.1 应用服务器集群架构下的Session管理4、数据库读写分离5、利用缓存技术进行加速6、分布式数据库系统与分布式文件系统7、N...

    3 个月前
  • 用于分布式系统部署的虚拟机系网络配置那点事儿

    日期作者版本备注2020-05-12丁斌v1.0 1. 用于部署分布式系统的虚拟机网络配置方案无论是工作还是学习过程中,我们个人计算机中总是不可避免地安装上虚拟机,例如Vmare-workst...

    3 天前
  • 深度剖析分布式单点登录框架XXL-SSO

    于2018年初,在github上创建XXL-SSO项目仓库并提交第一个commit,随之进行系统结构设计,UI选型,交互设计…… 于2018年初,在github上创建XXL-SSO项目仓库并提交第一个...

    2 个月前