mongodb3.4集群建立一个高可用片+副本集实战

mongodb3.4集群建立一个高可用片+副本集实战
前言

最近,由于工作原因学习使用mondb数据库,mondb是最常用的nodql数据库,有数据库中的排名上升到前六。本文介绍了如何构建高可用的mondb(碎片+副本)集群,分享供大家参考

在构建集群之前,首先需要了解几个概念:路由、碎片、副本集、配置服务器等等。

相关概念

先看一幅画:
从图中,你可以看到四个组成部分:Mons,配置服务器,碎片,副本集。

Mons,入口的数据库集群的请求,所有请求都是通过Mons协调,不需要添加一个应用程序中的路径选择,Mons本身就是一个要求配送中心,这是负责相应的数据转发请求到相应的共享服务器,在生产环境中,通常会有比Mons更为请求输入,这是不可能避免的mondb请求要挂了。

配置服务器,顾名思义,是一个配置服务器存储所有数据库的元信息(路由、接头)配置。Mons本身并不实际存储分区服务器和数据的路由信息,但只在内存中缓存,并配置服务器上存储的数据。第一次月开始或关闭它从配置服务器加载配置信息。后来,如果服务器配置信息的变化,Mons将被更新来更新自己的状态,这样Mons可以继续路线准确。通常有多个配置服务器配置服务器在生产环境中,因为它存储元数据分段路由和防止数据丢失!

Shard,分片是数据库分割和分散在不同的机器上的过程。数据到不同的机器上的分权,而不需要一个强大的服务器,可以存储更多的数据和更大的负载处理。其基本思想是把收集到的块,这些块分散成几片。每一部分只对总数据的一部分负责。最后,使用均衡器来平衡每个片段(数据迁移)。

副本集,中文翻译副本集,实际上是一个备份的碎片,防止碎片挂出来后的数据丢失。复制提供了数据的冗余备份,并存储在多个服务器的数据副本,提高数据的可用性和保证数据安全。

仲裁(仲裁)是一个mondb一副本集的实例,它不保存数据。仲裁节点使用最小的资源不需要硬件设备。它不能在同一个数据集节点中部署仲裁器。它可以部署在其他应用服务器或监控服务器中,也可以部署在单独的虚拟机中。为了确保副本集中有奇数个成员(包括主),我们需要将仲裁节点添加到投票中。否则,主服务器在运行失败时不会自动切换主服务器。

简单的理解,我们可以总结出申请,请求蒙斯mondb CRUD操作,配置服务器,数据库和元信息,和蒙斯数据同步,最后沉积在碎片(片),以防止在复制数据同步的损失设置存储在一个数据存储在仲裁时间片存储来决定哪个节点。

环境的准备

系统centos6.5
三服务器:192.168.0.75 / 84 / 86
安装包:mondb-linux-x86_64-3.4.6.tgz
服务器的规划
服务器75
服务器84
服务器86

蒙斯
蒙斯
蒙斯
配置服务器
配置服务器
配置服务器
碎片Server1主节点
碎片Server1副节点
碎片Server1仲裁
碎片Server2仲裁
碎片Server2主节点
碎片Server2副节点
碎片Server3副节点
碎片Server3仲裁
碎片Server3上主节点
端口配置:
Mons:20000
配置:21000
shard1:27001
shard2:27002
shard3:27003
建筑群

1。安装mondb
#减压
焦油xzvf mondb-linux-x86_64-3.4.6.tgz C / usr /地方/
#改名
mondb-linux-x86_64-3.4.6 mondb MV
目录中,蒙斯,配置,shard1,shard2和shard3是建立在每一台机器,因为蒙斯不存储数据,它只需要创建日志文件目录。
mkdir -p / usr / / / conf mondb地方
mkdir -p / usr / / /当地mondb蒙斯 /日志
mkdir -p / usr /局部/ mondb /配置/数据
mkdir -p / usr /局部/ mondb /配置/日志
mkdir -p / usr / / /当地mondb shard1 /数据
mkdir -p / usr / / /当地mondb shard1 /日志
mkdir -p / usr / / /当地mondb shard2 /数据
mkdir -p / usr / / /当地mondb shard2 /日志
mkdir -p / usr / / /当地mondb shard3 /数据
mkdir -p / usr / / /当地mondb shard3 /日志
配置环境变量
配置文件
# content
出口mondb_home = / usr /局部/ mondb
出口路径mondb_home美元/桶=:$路径
立即#
来源
2,配置服务器配置服务器

在mondb3.4,配置服务器需要创建一个副本集,或集群不成功。

添加配置文件
六 / usr / / /当地mondb conf / config.conf

# #配置文件
pidfilepath = / usr / / /配置本地mondb / / configsrv.pid日志
mdbquot = / usr / / /当地mondb配置/数据
logpath = / usr / / /配置本地mondb / / congigsrv.log日志
logAppend =真

bind_ip = 0.0.0.0
港口= 21000
叉=真

#宣布这是一个群集配置数据库;
configsvr =真

名称#副本集
replset =配置

#设置最大连接
maxconns = 20000
启动三个服务器的配置服务器
蒙德- F / usr / / /当地mondb conf / config.conf
登录到任何配置服务器并初始化配置副本集
#连接
端口21000
#配置变量
配置{ {
…_id:配置
成员:{
…{ _id:0,主持人:192.168.0.75:21000},
…{ _id:1,主持人:192.168.0.84:21000},
…{ _id:2,主持人:192.168.0.86:21000}
}…
}…

#初始化复制集
Rs.initiate(config)
在这,_id:配置应与replicaction.replsetname在配置文件中配置一致,和主机IP和成员节点三个端口

三.配置分段副本集(三台机器)

设置第一个分段副本集

配置文件
六 / usr / / /当地mondb conf / shard1.conf

#配置文件
# --—
pidfilepath = / usr / / /当地mondb shard1 / / shard1.pid日志
mdbquot = / usr / / /当地mondb shard1 /数据
logpath = / usr / / /当地mondb shard1 / / shard1.log日志
logAppend =真

bind_ip = 0.0.0.0
港口= 27001
叉=真

# open web monitoring
httpinterface =真
休息=真

名称#副本集
replset = shard1

#宣布这是一个集群的共享数据库;
shardsvr =真

#设置最大连接数
maxconns = 20000
shard1服务器三服务器开始
蒙德- F / usr / / /当地mondb conf / shard1.conf
登录到任何服务器并初始化副本集
端口27001
管理数据库的使用#
使用管理
#定义副本集的配置,第三个节点的arbiteronly :真正对仲裁节点代表。
配置{ {
…_id:shard1
成员:{
…{ _id:0,主持人:192.168.0.75:27001},
…{ _id:1,主持人:192.168.0.84:27001},
…{ _id:2,主持人:192.168.0.86:27001,arbiteronly:true}
}…
}…
配置初始化#副本集
Rs.initiate(config);
设置第二分段副本集

配置文件
六 / usr / / /当地mondb conf / shard2.conf

#配置文件
# --—
pidfilepath = / usr / / /当地mondb shard2 / / shard2.pid日志
mdbquot = / usr / / /当地mondb shard2 /数据
logpath = / usr / / /当地mondb shard2 / / shard2.log日志
logAppend =真

bind_ip = 0.0.0.0
港口= 27002
叉=真

#开放网络监测
httpinterface =真
休息=真

名称#副本集
replset = shard2

#宣布这是一个集群的共享数据库;
shardsvr =真

#设置最大连接数
maxconns = 20000
shard2服务器三服务器开始
蒙德- F / usr / / /当地mondb conf / shard2.conf
登录到任何服务器并初始化副本集
端口27002
管理数据库的使用#
使用管理
#定义复制配置设置
配置{ {
…_id:shard2
成员:{
…{ _id:0,主持人:192.168.0.75:27002
…{ _id:1,主持人:192.168.0.84:27002},
…{ _id:2,主持人:192.168.0.86:27002}
}…
}…

配置初始化#副本集
Rs.initiate(config);
设置第三个分段副本集

配置文件
六 / usr / / /当地mondb conf / shard3.conf
#配置文件
# --—
pidfilepath = / usr / / /当地mondb shard3 / / shard3.pid日志
mdbquot = / usr / / /当地mondb shard3 /数据
logpath = / usr / / /当地mondb shard3 / / shard3.log日志
logAppend =真

bind_ip = 0.0.0.0
港口= 27003
叉=真

#开放网络监测
httpinterface =真
休息=真

名称#副本集
replset = shard3

#宣布这是一个集群的共享数据库;
shardsvr =真

#设置最大连接数
maxconns = 20000
shard3服务器三服务器开始
蒙德- F / usr / / /当地mondb conf / shard3.conf
登录到任何服务器并初始化副本集
端口27003
管理数据库的使用#
使用管理
#定义复制配置设置
配置{ {
…_id:shard3
成员:{
…{ _id:0,主持人:192.168.0.75:27003},
…{ _id:1,主持人:192.168.0.84:27003
…{ _id:2,主持人:192.168.0.86:27003}
}…
}…

配置初始化#副本集
Rs.initiate(config);
4。配置路由服务器Mons

首先启动配置服务器和分区服务器,然后启动路由实例以启动路由实例:(三台机器)
六 / usr / / /当地mondb conf / mons.conf

#内容
pidfilepath = / usr / / /当地mondb蒙斯 / / mons.pid日志
logpath = / usr / / /当地mondb蒙斯 / / mons.log日志
logAppend =真

bind_ip = 0.0.0.0
港口= 20000
叉=真

#监视器配置服务器,只有1或3份的配置来配置服务器设置名称。
configdb =配置 / 192.168.0.75:21000192.168.0.84:21000192.168.0.86:21000

#设置最大连接数
maxconns = 20000
Mons服务器三服务器开始
蒙德- F / usr / / /当地mondb conf / mons.conf


目前,建立了mondb配置服务器和路由服务器,所有的片段服务器是建立。然而,应用程序连接到蒙斯路由服务器和不能使用的破碎机理,还需要在程序中使段有效建立片配置。

登陆任何蒙斯
端口20000
管理数据库的使用#
用户管理
#系列路由的副本服务器和分布
Sh.addShard(shard1 / 192.168.0.75:27001192.168.0.84:27001192.168.0.86:27001 )
Sh.addShard(shard2 / 192.168.0.75:27002192.168.0.84:27002192.168.0.86:27002 )
Sh.addShard(shard3 / 192.168.0.75:27003192.168.0.84:27003192.168.0.86:27003 )
#查看集群状态
sh.status()
6。测试

目前,配置服务、路由服务,碎片化的服务,复制集服务都被串联在一起,但我们的目标是将数据和自动分割数据。连接在蒙斯和准备允许指定的数据库,指定集合片段生效。
#指定其中破碎效果
db.runcommand({ enablesharding:库});
#指定数据库需要收集和关键层
db.runcommand({ shardcollection:其中。表1
我们建立的表表库是拼凑,自动把它shard1,shard2,基于ID。这是因为不是所有的mondb建立数据库和表需要被切片shard3!

测试分段配置结果
我的127.0.0.1:20000
其中使用的#
使用库;
#插入测试数据
对于(var i = 1;i < 100000;i + +)
db.table1.save({编号:我,Test1:testval1});
#视图划分如下,一些不相关的信息保存
db.table1.stats();

{
分片:真,
NS:其中。表1
计数:100000,
numextents :13,
大小:5600000,
storagesize :22372352,
totalindexsize :6213760,
indexsizes :{
_id_ :3335808,
id_1 :2877952
},
avbjsize :56,
nindexes :2,
nchunks :3,
碎片:{
shard1 :{
NS:其中。表1
计数:42183,
大小:0,

OK:1
},
shard2 :{
NS:其中。表1
计数:38937,
大小:2180472,

OK:1
},
shard3 :{
NS:其中。表1
计数:18880,
大小:3419528,

OK:1
}
},
OK:1
}
可以看出,数据分为3段,其中每个shard1计数:42183,shard2计数:38937,shard3计数:18880。它是成功的!

运行维护

开始

对mondb启动顺序启动配置服务器首先启动片,并启动蒙斯。
蒙德- F / usr / / /当地mondb conf / config.conf
蒙德- F / usr / / /当地mondb conf / shard1.conf
蒙德- F / usr / / /当地mondb conf / shard2.conf
蒙德- F / usr / / /当地mondb conf / shard3.conf
蒙德- F / usr / / /当地mondb conf / mons.conf
当关闭时,直接killall杀死了所有的过程
killall蒙德
killall蒙斯
总结

以上就是本文的全部内容。希望本文的内容能给大家的学习或工作带来一定的帮助。如果有任何疑问,您可以留言交流,谢谢您的支持

参考资源uff1a

构建高可用集群(四)-- mondb碎片
mondb3.4复制集段集群建设
mondb高可用性集群(四)--破碎
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部