- A+
前言
比来一些更改,有一个老项目交由我们组卖力维护,碰着如许的工作我的心坎是瓦解的,但还得强颜欢笑,拍着胸脯说没问题。更悲痛的是,该项目中还使用了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 集群重构和开释磁盘空间实例详解