MongoDB学习以及集群搭建的实践全纪录

  • A+
所属分类:MongoDB

前言

比来一些更改,有一个老项目交由我们组卖力维护,碰着如许的工作我的心坎是瓦解的,但还得强颜欢笑,拍着胸脯说没问题。更悲痛的是,该项目中还使用了mongo,照样本身搭建的,没有交由DBA同一治理,无奈,只能赶鸭子上架,本身进修mongo了。

为什么使用集群架构?

主从:故障转移:无法实现,假如主机宕机,必要封闭slave而且依照master模式启动。无法办理单点故障 无法autofailover 弗成以主动主从的切换

为相识决主从的问题,MongoDB3.0之后呈现副本集,副本集办理了故障转移的问题,然则一个副本集中的数据是雷同的,无法做到海量数据的存储。以是就必要一个架构去办理这个问题。也便是分片式集群。

一个硬朗的简单的MongoDB集群的搭建必要十个服务过程(离开搭建必要十台服务器),这里在一台虚拟机长进行搭建。

关于MongoDB

mongodb的集群搭建方式主要有三种,主从模式,Replica set模式,sharding模式, 三种模式各有优劣,实用于分歧的场所,属Replica set利用最为普遍,主从模式如今用的较少,sharding模式最为完整,但设置装备摆设维护较为繁杂。

而今朝接办过来的项目所用的便是Replica set,以是也就主要相识了这个模式。官网先容可以点击这里

此中Replica Set模式中三类脚色有需要知道下:

主节点[Primary]

接管所有的写哀求,然后把改动同步到所有Secondary。一个Replica Set只能有一个Primary节点,当Primary挂失落后,其他Secondary或者Arbiter节点会从新选举出来一个主节点。默认读哀求也是发到Primary节点处置的,必要转发到Secondary必要客户端改动一下衔接设置装备摆设。

副本节点[Secondary]

与主节点坚持同样的数据集。当主节点挂失落的时刻,介入选主。

仲裁者[Arbiter]

不保稀有据,不介入选主,只进行选主投票。使用Arbiter可以减轻数据存储的硬件需求,Arbiter跑起来险些没什么年夜的硬件资本需求,但紧张的一点是,在临盆情况下它和其他数据节点不要部署在统一台机械上。

注意,一个主动failover的Replica Set节点数必需为奇数,目标是选主投票的时刻要有一个年夜多半能力进行选主决议计划。

搭建集群

相识了根本观点之后,就开端测验考试搭建集群,为了更好的懂得,特意找了三台测试机进行部署。

前期预备

起首预备三台测试机:

 10.100.1.101 主节点(master)
 10.100.1.102 备节点(slave)
 10.100.1.103 仲裁点(arbiter)

然后便是mongo的安装包(因为线上用的是3.4.2的版本,以是坚持同一)

curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.4.2.tgz

安装mongo

这里同一安装在/usr/local/mongodb下。

起首解压并重定名:

tar -zxvf mongodb-linux-x86_64-3.0.6.tgz    
mv mongodb-linux-x86_64-3.4.2/ /usr/local/mongodb

然后在/mongodb下新建几个文件:

#寄存mongo设置装备摆设文件
mkdir -p conf 

#寄存日记文件
mkdir -p logs 

#寄存数据文件
mkdir -p data

这里必要注意下,设置装备摆设文件中设置装备摆设的文件路径必定要存在,否则在启动mongo时会失足,mongo启动时也不会主动天生。

接着分派创立设置装备摆设文件:

主节点:mongodb_master.conf

#master.conf
dbpath=/usr/local/mongodb/data
logpath=/usr/local/mongodb/logs/mongodb.log
pidfilepath=/usr/local/mongodb/master.pid
directoryperdb=true
logappend=true
replSet=testdb
port=27017
oplogSize=100
fork=true
noprealloc=true

备份节点:vi mongodb_slave.conf

#slave.conf
dbpath=/usr/local/mongodb/data
logpath=/usr/local/mongodb/logs/mongodb.log
pidfilepath=/usr/local/mongodb/master.pid
directoryperdb=true
logappend=true
replSet=testdb
port=27017
oplogSize=100
fork=true
noprealloc=true

仲裁点: vi mongodb_arbiter.conf

#arbiter.conf
dbpath=/usr/local/mongodb/data
logpath=/usr/local/mongodb/logs/mongodb.log
pidfilepath=/usr/local/mongodb/master.pid
directoryperdb=true
logappend=true
replSet=testdb
port=27017
oplogSize=100
fork=true
noprealloc=true

在使用上只是最根本的设置装备摆设,现实场景中可以依据本身的营业需求进行设置装备摆设,其他参数供参考:

--quiet     # 宁静输出
--port arg  # 指定服务端标语,默认端口27017
--bind_ip arg   # 绑定服务IP,若绑定127.0.0.1,则只能本机拜访,不指定默认当地所有IP
--logpath arg   # 指定MongoDB日记文件,注意是指定文件不是目次
--logappend     # 使用追加的方式写日记
--pidfilepath arg   # PID File 的完备路径,假如没有设置,则没有PID文件
--keyFile arg   # 集群的私钥的完备路径,只对付Replica Set 架构有用
--unixSocketPrefix arg  # UNIX域套接字替代目次,(默以为 /tmp)
--fork  # 以守护过程的方式运行MongoDB,创立服务器过程
--auth  # 启用验证
--cpu   # 按期显示CPU的CPU应用率和iowait
--dbpath arg    # 指定数据库路径
--diaglog arg   # diaglog选项 0=off 1=W 2=R 3=both 7=W+some reads
--directoryperdb    # 设置每个数据库将被保留在一个零丁的目次
--journal   # 启用日记选项,MongoDB的数据操作将会写入到journal文件夹的文件里
--journalOptions arg    # 启用日记诊断选项
--ipv6  # 启用IPv6选项
--jsonp     # 容许JSONP情势经由过程HTTP拜访(有平安影响)
--maxConns arg  # 最年夜同时衔接数 默认2000
--noauth    # 不启用验证
--nohttpinterface   # 封闭http接口,默认封闭27018端口拜访
--noprealloc    # 禁用数据文件预分派(每每影响机能)
--noscripting   # 禁用剧本引擎
--notablescan   # 不容许表扫描
--nounixsocket  # 禁用Unix套接字监听
--nssize arg (=16)  # 设置信数据库.ns文件年夜小(MB)
--objcheck  # 在收到客户数据,反省的有用性,
--profile arg   # 档案参数 0=off 1=slow, 2=all
--quota     # 限定每个数据库的文件数,设置默以为8
--quotaFiles arg    # number of files allower per db, requires --quota
--rest  # 开启简单的rest API
--repair    # 修复所稀有据库run repair on all dbs
--repairpath arg    # 修复库天生的文件的目次,默以为目次名称dbpath
--slowms arg (=100)     # value of slow for profile and console log
--smallfiles    # 使用较小的默认文件
--syncdelay arg (=60)   # 数据写入磁盘的光阴秒数(0=never,不保举)
--sysinfo   # 打印一些诊断体系信息
--upgrade   # 假如必要进级数据库
--fastsync  # 从一个dbpath里启用从库复礼服务,该dbpath的数据库是主库的快照,可用于快速启用同步
--autoresync    # 假如从库与主库同步数据差得多,主动从新同步,
--oplogSize arg     # 设置oplog的年夜小(MB)
--master    # 主库模式
--slave     # 从库模式
--source arg    # 从库 端标语
--only arg  # 指定单一的数据库复制
--slavedelay arg    #设置从库同步主库的延迟光阴

--replSet arg   # 设置副本集名称

--configsvr     # 声明这是一个集群的config服务,默认端口27019,默认目次/data/configdb
--shardsvr  # 声明这是一个集群的分片,默认端口27018
--noMoveParanoia    # 封闭偏执为moveChunk数据保留

节点设置装备摆设完之后就可以启动mongo了,cd到bin目次下:

./mongod -f /etc/mongodb_master.conf
./mongod -f /etc/mongodb_slave.conf
./mongod -f /etc/mongodb_arbiter.conf

设置装备摆设节点

末了,就必要设置装备摆设主、备、仲裁节点了。起首我们选择一台服务器进行衔接:

./mongo 10.100.1.101:27017 
>use admin 

然落后行设置装备摆设:

cfg={ _id:"大众testdb"大众, members:[ {_id:0,host:'10.100.1.101:27017',priority:2}, {_id:1,host:'10.100.1.102:27017',priority:1}, {_id:2,host:'10.100.1.103:27017',arbiterOnly:true}] };
rs.initiate(cfg) #生效设置装备摆设

假如不出不测,设置装备摆设正常生效,根本也就完成了,可以经由过程rs.status()敕令查看相关信息。

到这里,你可以登录数据库测试下结果了,看下正常的数据库操作,主从是否同步了。测试的话这里就不再多说了。

数据备份与还原

简单搭建完集群之后,必要将本来的测试情况数据迁徙过来,以是涉及到了mongo的备份与还原。

相对来说照样比拟容易的,经由过程mongodump和mongorestore来实现:

./bin/mongodump -h 10.100.1.101 -d testdb -o .

# mongodump -h dbhost -d dbname -o dbdirectory
# -h:MongDB地点服务器地址,例如:127.0.0.1,当然也可以指定端标语:127.0.0.1:27017
# -d:必要备份的数据库实例,例如:test
# -o:备份的数据寄存地位

./bin/mongorestore -h 10.100.1.102 -d testdb testdb

# mongorestore -h <hostname><:port> -d dbname <path>
# --host <:port>, -h <:port>:MongoDB地点服务器地址,默以为: localhost:27017
# --db , -d :必要规复的数据库实例
# --drop:规复的时刻,先删除当前数据,然后规复备份的数据
# <path>:mongorestore 末了的一个参数,设置备份数据地点地位
# --dir:指定备份的目次,你不克不及同时指定 <path> 和 --dir 选项。

总结

到这里,对付mongo有了必定相识和熟悉,也根本掌握了搭建和迁徙流程,面临三无(无开发,无文档,无注释)的老项目也有点底气了,剩下的韶光就要在边看代码边吐槽的日子中度过啦,想象就心累...

好了,以上便是这篇文章的全体内容了,愿望本文的内容对年夜家的进修或者事情具有必定的参考进修代价,假如有疑问年夜家可以留言交流,谢谢年夜家对剧本之家的支撑。

您可能感兴致的文章:

MongoDB的分片集群根本设置装备摆设教程详解MongoDB顶用sharding将副本集分派至服务器集群的办法mongodb3.4集群搭建实战之高可用的分片+副本集mongodb 集群重构和开释磁盘空间实例详解

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: