mangodb—分片和副本集架构部署

三台服务器20.0.0.18(19)(20)

**服务器18 **服务器19 **服务器20
mongos mongos mongos
config server config server config server
shard server1 主节点 shard server1副节点 shard server1 仲裁
shard server2 仲裁 shard server2主节点 shard server2 副节点
shard server3 副节点 shard server3 仲裁 shard server3 主节点

一.每台机器上先安装mongodb

1.关闭系统防火墙和安全机制

systemctl stop firewalld.service
setenforce 0

2.先把安装包上传到/opt目录下解压

tar zxvf mongodb-linux-x86_64-3.6.3.tgz

3.在usr/local/文件夹下创建mongodb文件夹
mkdir mongodb

4.然后将mongodb-linux-x86_64-3.6.3下的文件移动到mongodb文件夹下
cd  /opt
mv mongodb-linux-x86_64-3.6.3/* /usr/local/mongodb/
cd /usr/local/mongodb/
mkdir data

5.在usr/local/mongodb文件夹下创建logs文件
touch /usr/local/mongodb/logs
6.进入/usr/local/mongodb/bin目录下,启动mongodb服务
cd /usr/local/mongodb/bin
./mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend  --port=27017 --fork./mongo   ##启动客户端

7.分别在每台机器建立conf、mongos、config、shard1、shard2、shard3六个目录,因为mongos不存储数据,只需要建立日志文件目录即可。
mkdir -p /usr/local/mongodb/conf
mkdir -p /usr/local/mongodb/mongos/log
mkdir -p /usr/local/mongodb/config/data
mkdir -p /config/log
mkdir -p /usr/local/mongodb/shard1/data
mkdir -p /usr/local/mongodb/shard1/log
mkdir -p /usr/local/mongodb/shard2/data
mkdir -p /usr/local/mongodb/shard2/log
mkdir -p /usr/local/mongodb/shard3/data
mkdir -p /usr/local/mongodb/shard3/log

二.配置服务器搭建副本集

Mongodb3.4以后要求配置服务器也创建副本集,不然集群搭建不成功。添加配置文件。(每个都要配置)
vi /usr/local/mongodb/conf/config.conf
进入后添加以下配置信息
## 配置文件内容
pidfilepath = /usr/local/mongodb/config/log/configsrv.pid
dbpath = /usr/local/mongodb/config/data
logpath = /usr/local/mongodb/config/log/congigsrv.log
logappend = true
bind_ip = 0.0.0.0
port = 24000
fork = true
#declare this is a config db of a cluster;
configsvr = true
#副本集名称
replSet=configs
#设置最大连接数
maxConns=20000

分别启动三台服务器的config server,连接:进入/etc目录下
./mongod -f /usr/local/mongodb/conf/config.conf

登录任意一台配置服务器,初始化配置副本集,登录:进入/usr/local/mongodb/bin目录下
./mongo --port 24000

使用admin数据库

use admin

config变量:

config = {
...  members : [
... {_id : 0, host : "20.0.0.18:24000" },
...  {_id : 1, host : "20.0.0.19:24000" },
...   {_id : 2, host : "20.0.0.20:24000" }
... ]
... }

初始化副本集:

rs.initiate(config)

这一步非常重要,必须初始化成功。不成功的话,路由服务器与配置服务器连接不上。
其中,”_id” : “configs”应与配置文件中配置的 replicaction.replSetName 一致,”members” 中的 “host” 为三个节点的 ip 和 port。

三台分片服务器搭建副本集

配置分片副本集(三台机器一起配置)。

1.设置第一个分片副本集
配置文件:

vi /usr/local/mongodb/conf/shard1.conf#配置文件内容
#——————————————–
pidfilepath = /usr/local/mongodb/shard1/log/shard1.pid
dbpath = /usr/local/mongodb/shard1/data
logpath = /usr/local/mongodb/shard1/log/shard1.log
logappend = true
bind_ip = 0.0.0.0
port = 25001
fork = true
#副本集名称
replSet=shard1
#declare this is a shard db of a cluster;
shardsvr = true
#设置最大连接数
maxConns=20000

启动三台服务器的shard1 server,进入/usr/local/mongodb/bin目录下:

./mongod -f /usr/local/mongodb/conf/shard1.conf

登陆任意一台服务器,初始化副本集,进入/usr/local/mongodb/bin目录下:

./mongo --port 25001使用admin数据库
use admin定义副本集配置,第三个节点的 “arbiterOnly”:true 代表其为仲裁节点。config = {
...   _id : "shard1",
... members : [
...  {_id : 0, host : "20.0.0.18:25001" },
...  {_id : 1, host : "20.0.0.19:25001" },
...  {_id : 2, host : "20.0.0.20:25001" , arbiterOnly: true }
...      ]
...  }

初始化副本集配置

rs.initiate(config);

2.设置第二个分片
进入配置文件(三台机子一起配置)

vi /usr/local/mongodb/conf/shard2.conf#配置文件内容
#——————————————–
pidfilepath = /usr/local/mongodb/shard2/log/shard2.pid
dbpath = /usr/local/mongodb/shard2/data
logpath = /usr/local/mongodb/shard2/log/shard2.log
logappend = true
bind_ip = 0.0.0.0
port = 25002
fork = true
#副本集名称
replSet=shard2
#declare this is a shard db of a cluster;
shardsvr = true
#设置最大连接数
maxConns=20000

启动三台服务器的shard2 server,进入/usr/local/mongodb/bin目录下:

./mongod -f /usr/local/mongodb/conf/shard2.conf

登陆任意一台服务器,进入/usr/local/mongodb/bin初始化副本集

./mongo --port 25002use admin定义副本集配置config = {
...  _id : "shard2",
... members : [
...  {_id : 0, host : "20.0.0.18:25002"  , arbiterOnly: true },...  {_id : 1, host : "20.0.0.19:25002" },
...  {_id : 2, host : "20.0.0.20:25002" }
... ]
... }

初始化副本集配置
rs.initiate(config);

这里出现了错误 ,换另外一台机子做

设置第三个分片副本集
配置文件代码如下:

vi /usr/local/mongodb/conf/shard3.conf#配置文件内容
#——————————————–
pidfilepath = /usr/local/mongodb/shard3/log/shard3.pid
dbpath = /usr/local/mongodb/shard3/data
logpath = /usr/local/mongodb/shard3/log/shard3.log
logappend = true
bind_ip = 0.0.0.0
port = 25003
fork = true
#副本集名称
replSet=shard3
#declare this is a shard db of a cluster;
shardsvr = true
#设置最大连接数
maxConns=20000

启动三台服务器的shard3 server,进入/usr/local/mongodb/bin目录下:

./mongod -f /usr/local/mongodb/conf/shard3.conf

登陆任意一台服务器,初始化副本集

./mongo --port 25003use admin定义副本集配置config = {
...  _id : "shard3",
...   members : [
... {_id : 0, host : "20.0.0.18:25003" },
...  {_id : 1, host : "20.0.0.19:25003" , arbiterOnly: true},
... {_id : 2, host : "20.0.0.20:25003" }
... ]
... }

初始化副本集配置

rs.initiate(config);

4、 配置路由服务器

先启动配置服务器和分片服务器,后启动路由实例启动路由实例:(三台机器)

vi /usr/local/mongodb/conf/mongos.conf
#内容
pidfilepath = /usr/local/mongodb/mongos/log/mongos.pid
logpath = /usr/local/mongodb/mongos/log/mongos.log
logappend = true
bind_ip = 0.0.0.0
port = 23000
fork = true
#监听的配置服务器,只能有1个或者3个 configs为配置服务器的副本集名字
configdb = configs/20.0.0.18:24000,20.0.0.19:24000,20.0.0.20:24000#设置最大连接数
maxConns=20000

启动三台服务器的mongos server,进入/usr/local/mongodb/bin目录下:

./mongos -f /usr/local/mongodb/conf/mongos.conf

ps:中间出现服务一直等待连接中,也没有报错 就是连接不上,后来 排错是因为初始化config.server副本集出错了 忘记加 _id : “configs”,服务一直找不到它(遇到问题可以查看config.log的日志文件,看不懂直接有道翻译)

5、分片

目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到mongos路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效。

登陆任意一台mongos,进入/usr/local/mongodb/bin目录下
./mongo --port 23000使用admin数据库
use  admin串联路由服务器与分配副本集
sh.addShard("shard1/20.0.0.18:25001,20.0.0.19:25001,20.0.0.20:25001")sh.addShard("shard2/20.0.0.18:25002,20.0.0.19:25002,20.0.0.20:25002")sh.addShard("shard3/20.0.0.18:25003,20.0.0.19:25003,20.0.0.20:25003")查看集群状态
sh.status()

6、 测试

目前配置服务、路由服务、分片服务、副本集服务都已经串联起来了,但我们的目的是希望插入数据,数据能够自动分片。连接在mongos上,准备让指定的数据库、指定的集合分片生效。

指定testdb分片生效
db.runCommand( { enablesharding :"testdb"});

指定数据库里需要分片的集合和片键
db.runCommand( { shardcollection : "testdb.table1",key : {id: "hashed"} } )

我们设置testdb的 table1 表需要分片,根据 id 自动分片到 shard1 ,shard2,shard3 上面去。要这样设置是因为不是所有mongodb 的数据库和表 都需要分片!插入100000条数据测试:

 先进入testdb数据库use testdb  ##因为上面设置了 只有这个库才有数据分片的功能for(var i=1;i<=10000;i++){
... db.table1.insert({id:i,name:"sundenghui"})
... }

查看分配状态
db.table1.stats();

的 table1 表需要分片,根据 id 自动分片到 shard1 ,shard2,shard3 上面去。要这样设置是因为不是所有mongodb 的数据库和表 都需要分片!插入100000条数据测试:

 先进入testdb数据库use testdb  ##因为上面设置了 只有这个库才有数据分片的功能for(var i=1;i<=10000;i++){
... db.table1.insert({id:i,name:"sundenghui"})
... }

[外链图片转存中…(img-DRxwTwFK-1662436163063)]

查看分配状态
db.table1.stats();

[外链图片转存中…(img-Xz7tW315-1662436163064)]

[外链图片转存中…(img-5OjsIV8l-1662436163064)]

[外链图片转存中…(img-P07DlRbm-1662436163064)]

每个节点上根据hash算法分配这10000条数据

mangodb—分片和副本集架构部署相关推荐

  1. MongoDB 分片(sharding)+副本集(replSet)集群搭建

    文章目录 MongoDB安装 Windows平台安装 1.下载 2.安装 3.启动MongoDB服务 4.进入MongoDB后台 Linux平台安装MongoDB 1.下载 2.安装 3.创建数据库目 ...

  2. mongodb主从复制及副本集的部署

    一.mongodb配置参数介绍: [root@host11 tmp]# cat  /etc/mongod.conf #以守护进程的方式运行 fork=true #设置db的路径 dbpath=/usr ...

  3. Mongodb 分片与副本集

    测试搭建 192.168.3.110 mongos 30000,30001,30002 config 40000,40001,40002 shard1 50001,50002,50003 shard2 ...

  4. mongodb副本集架构搭建

    高可用性通常描述一个系统经过专门的设计,从而减少停工时间.保存其服务的高度连续可用性,MongoDB提供的主从复制机制保证了多个数据库的数据同步,这对实现数据库的容灾.备份.恢复.负载均衡都是有极大的 ...

  5. MongoDB副本集的部署与操作

    一.实验综述 1.实验目的及要求 (1)了解MongoDB副本集 (2)熟悉MongoDB副本集成员 (3)掌握MongoDB副本集部署 (4)掌握MongoDB副本集操作 (5)理解副本集机制 实验 ...

  6. mongodb高可用集群 3 ---分片与副本集结合

    1. 架构图: 2.  四个组件:mongos.config server.shard.replica set mongos,数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程 ...

  7. CentOS7mongodb6副本集安装部署

    mongodb 6.0.4社区版 CentOS7 正常的副本集需要三台主机,一主两从或者一主一从一仲裁,集群可以实现高可用,主节点宕机之后通过选举产生新的主节点.我只有两台主机,根据实际的需求,我要部 ...

  8. Mongo分片+副本集集群搭建

    一. 概念简单描述 1. MongoDB分片集群包含组件: mongos,configserver,shardding分片 2. Mongos:路由服务是Sharded cluster的访问入口,本身 ...

  9. mongodb集群搭建详情分片+副本集

    在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置服务器等. 相关概念 mongodb集群架构图: 从图中可以看到有四个组件:mongos.config server.shard.repl ...

最新文章

  1. 浏览器保存密码后自动填充问题
  2. mysql中如何将一个表中的部分记录合并,MySQL数据库将多条记录的单个字段合并成一条记录_MySQL...
  3. socket网络编程——多进程、多线程处理并发
  4. Python自动化之语法基础
  5. [Linux]Linux应用程序中添加强制中断处理
  6. c++将小写转换为大写函数_必须掌握的基础函数组合应用技巧,提高效率,准时下班...
  7. python进程池_python进程池剖析(一)
  8. SharePoint 上传附件
  9. 网络协议端口号说明(转)
  10. 48. 总是包含(#include)正确的头文件
  11. 基于Ubuntu系统下的Hadoop 环境搭建(新手可尝)
  12. 小花语音机器人(零)-单片机控制驱动板PCB
  13. php 搭建laravel,laravel框架_搭建php Laravel框架教程详解
  14. python deap_在Python中用DEAP绘制多目标pareto边界
  15. kindle阅读订阅的google reader时,词典不能工作的修正
  16. mysql limit 索引失效_mysql索引失效
  17. linux ntfs格式u盘实现与挂载
  18. Edge浏览器主页被hao123劫持怎么办?
  19. 码农的自我修养 - ARM处理器天梯图
  20. 小丁带你走进git的世界四-重写历史记录

热门文章

  1. 应用软件——DFM分析软件
  2. NYIST(计科ACMTC)第三次招新赛
  3. Typora基础学习和我的偏好设置
  4. 界面插件NGUI的使用教程与实例
  5. 游戏测试员—游戏即人生
  6. 思科交换机与华为交换机生成树兼容性问题
  7. PLC控制柜基础知识讲解
  8. 使用 google音乐播放器乱码解决
  9. 单片机C语言C51的函数
  10. 荣耀发布折叠手机,然而对三星在该市场的霸主地位影响有限