mongodb 的集群方式主要分为三种Replica Set / Sharding / Master-Slaver ,这里只说明最简单的集群搭建方式(生产环境),若是有多个节点能够此类推或者查看官方文档。html
Replica Setlinux
中文翻译叫作副本集。其实简单来讲就是集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据须要和主节点一致。以下图
Primary表示主节点,Secondary表示备节点,Mongodb(A)表示仲裁节点。主备节点存储数据(M,S),仲裁节点不存储数据。客户端同时链接主节点与备节点,不链接仲裁节点。mongodb
默认设置下,主节点提供全部增删查改服务,备节点不提供任何服务。可是能够经过设置使备节点提供查询服务,这样就能够减小主节点的压力,当客户端进行数据查询时,请求自动转到备节点上。这个设置叫作Read Preference Modes,同时Java客户端提供了简单的配置方式,能够没必要直接对数据库进行操做。数据库
仲裁节点是一种特殊的节点,它自己并不存储数据,主要的做用是决定哪个备节点在主节点挂掉以后提高为主节点,因此客户端不须要链接此节点。这里虽然只有一个备节点,可是仍然须要一个仲裁节点来提高备节点级别。
主节点失效,切换过程以下
app
官网下载地址
https://www.mongodb.com/download-center/community
选定系统版本
翻译
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.0.tgz tar -zxf https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.0.tgz mkdir -p /mongodb/data/{master,slaver,arbiter} mkdir /mongodb/log #三个目录分别对应主,备,仲裁节点
#master.conf dbpath=/mongodb/data/master logpath=/mongodb/log/master.log pidfilepath=/mongodb/master.pid directoryperdb=true logappend=true replSet=testrs bind_ip=192.168.11.11 port=27017 oplogSize=10000 fork=true #slaver.conf dbpath=/mongodb/data/slaver logpath=/mongodb/log/slaver.log pidfilepath=/mongodb/slaver.pid directoryperdb=true logappend=true replSet=testrs bind_ip=192.168.11.12 port=27017 oplogSize=10000 fork=true #arbiter.conf dbpath=/mongodb/data/arbiter logpath=/mongodb/log/arbiter.log pidfilepath=/mongodb/arbiter.pid directoryperdb=true logappend=true replSet=testrs bind_ip=192.168.11.13 port=27017 oplogSize=10000 fork=true
*配置文件中参数解释: dbpath:数据存放目录 logpath:日志存放路径 pidfilepath:进程文件,方便中止mongodb directoryperdb:为每个数据库按照数据库名创建文件夹存放 logappend:以追加的方式记录日志 replSet:replica set的名字 bind_ip:mongodb所绑定的ip地址 port:mongodb进程所使用的端口号,默认为27017 oplogSize:mongodb操做日志文件的最大大小。单位为Mb,默认为硬盘剩余空间的5% fork:之后台方式运行进程
#启动各节点的mongo ./mongod -f master.conf ./mongod -f slaver.conf ./mongod -f arbiter.conf #配置主,备,仲裁节点 ./mongo 192.168.11.11:27017 #ip和port是某个节点的地址 >use admin >cfg={ _id:"testrs", members:[ {_id:0,host:'192.168.11.11:27017',priority:2}, {_id:1,host:'192.168.11.12:27017',priority:1}, {_id:2,host:'192.168.11.13:27017',arbiterOnly:true}] }; #cfg是能够任意的名字,固然最好不要是mongodb的关键字,conf,config均可以。最外层的_id表示replica set的名字, members里包含的是全部节点的地址以及优先级。优先级最高的即成为主节点,即这里的192.168.11.11:27017。 特别注意的是,对于仲裁节点,须要有个特别的配置——arbiterOnly:true。这个千万不能少了,否则主备模式就不能生效。 arbiterOnly O为大写 >rs.initiate(cfg) #查看状态 > rs.status() #正在进行配置会提示:"stateStr" : "RECOVERING" #末行输出以下即为成功 "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1567144580, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } }, "operationTime" : Timestamp(1567144580, 1) }