MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。Mongodb的集群模式包括三种:
1
Replica set (主备节点的数据均一致)
2
Sharding (分片)
3
Master-Slaver (目前已很少使用)
本篇文章介绍Replica set集群搭建
Replica set通常成为复本集模式,复制集模式的好处是,一切自动化。首先,复制集模式本身做了大量的管理工作,自动管理从节点,确保数据不会不一致。其次,主节点挂掉后,会自动判断集群中的服务器并进行故障转移,推举新的主节点。
一个复制集集群支持1-7台服务器,在一个复制集中各个服务器数据保持完全一致。
在一个复制集集群中,各个服务器有以下几种状态:
Primary 主节点:一个复制集有且仅有一台服务器处于Primary状态,只有主节点才对外提供读写服务。如果主节点挂掉,复制集将会投票选出一个备用节点成为新的主节点。
Secondary 备用节点:复制集允许有多台Secondary,每个备用节点的数据与主节点的数据是完全同步的。
Recovering 恢复中:当复制集中某台服务器挂掉或者掉线后数据无法同步,重新恢复服务后从其他成员复制数据,这时就处于恢复过程,数据同步后,该节点又回到备用状态。
Arbiter 仲裁节点:该类节点可以不用单独存在,如果配置为仲裁节点,就主要负责在复本集中监控其他节点状态,投票选出主节点。该节点将不会用于存放数据。如果没有仲裁节点,那么投票工作将由所有节点共同进行。
Down 无效节点:当服务器挂掉或掉线时就会处于该状态。
所有服务器安装mongodb,见一
实验环境:
192.168.1.68 centos68 :master
192.168.1.69 centos69 :slaver
192.168.1.70 entos70 :arbiter
1
在三台服务器上安装mongodb
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.6.0.tgz
tar -zxvf mongodb-linux-x86_64-3.0.6.tgz
mv mongodb-linux-x86_64-rhel62-3.6.0 /usr/local/mongodb
mkdir -p /usr/local/mongodb/data/db
mkdir /usr/local/mongodb/log
touch /usr/local/mongodb/log/mongodb.log
设置环境变量
vim /etc/profile
# 内容
export MONGODB_HOME=/usr/local/mongodb
export PATH=$MONGODB_HOME/bin:$PATH
# 使立即生效,在安装用户下(youknow)执行
source /etc/profile
如何启动mongodb服务?
进入mongo bin目录下
cd /usr/local/mongodb
bin/mongod --port 27017 --fork --dbpath=/usr/local/mongodb/data/db
--logpath=/usr/local/mongodb/log/mongodb.log --logappend
2
集群配置
首先将所有服务器按照上一步骤安装mongodb服务器,如下:
建立数据文件夹
mkdir -p /mongodb/data/master
mkdir -p /mongodb/data/slaver
mkdir -p /mongodb/data/arbiter
#三个目录分别对应主,备,仲裁节点
建立配置文件
由于配置比较多,所以我们将配置写到文件里。
#master.conf
dbpath=/usr/local/mongodb/data/master
logpath=/usr/local/mongodb/log/master.log
pidfilepath=/usr/local/mongodb/master.pid
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=192.168.1.68
port=27017
oplogSize=10000
fork=true
noprealloc=true
#slaver.conf
dbpath=/usr/local/mongodb/data/slaver
logpath=/usr/local/mongodb/log/slaver.log
pidfilepath=/usr/local/mongodb/slaver.pid
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=192.168.1.68
port=27017
oplogSize=10000
fork=true
noprealloc=true
#arbiter.conf
dbpath=/usr/local/mongodb/data/arbiter
logpath=/usr/local/mongodb/log/arbiter.log
pidfilepath=/usr/local/mongodb/arbiter.pid
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=192.168.1.68
port=27017
oplogSize=10000
fork=true
noprealloc=true
参数解释:
dbpath:数据存放目录
logpath:日志存放路径
pidfilepath:进程文件,方便停止mongodb
directoryperdb:为每一个数据库按照数据库名建立文件夹存放
logappend:以追加的方式记录日志
replSet:replica set的名字
bind_ip:mongodb所绑定的ip地址
port:mongodb进程所使用的端口号,默认为27017
oplogSize:mongodb操作日志文件的最大大小。单位为Mb,默认为硬盘剩余空间5%
fork:以后台方式运行进程
noprealloc:不预先分配存储
启动mongodb
注意:集群中mongodb的启动采用配置文件的方式启动
进入每个mongodb节点的bin目录下
./mongod -f master.conf
./mongod -f slaver.conf
./mongod -f arbiter.conf
配置主,备,仲裁节点
连接到任意一台服务器,切换到admin数据库
可以通过客户端连接mongodb,也可以直接在三个节点中选择一个连接mongodb。
./mongo 192.168.1.68:27017 #ip和port是某个节点的地址
>use admin
>cfg={ _id:"testrs", members:[ , ,
] };
>rs.initiate(cfg) #使配置生效
使用rs.status() 查看配置是否生效
客户端连接主节点,插入数据,插入后,可以看到数据在备份节点上也进行了同步。
添加副本集的成员,我们需要使用多台服务器来启动mongo服务。
进入Mongo客户端,并使用rs.add()方法来添加副本集的成员。
rs.add(HOST_NAME:PORT)
设置副本节点可读
mongodb默认是从主节点读写数据的,副本节点上不允许读,需要设置副本节点可以读。
#在所有节点上进行设置
修改root用户,mongodb用户家目录下的.mongorc.js文件
如:
vi /root/.mongorc.js
vi /home/mongodb/.mongorc.js
添加一行:rs.slaveOk();
修改完成后,重新登录mongo,发现副本节点可读了(当前会话不生效,需要重新登录才行)。
#在所有节点上进行设置
验证主从节点
在集群中的主节点上添加一个user 数据库,并在器users集合中添加一个文档,具体如下图:
在备节点上查询user 数据库中的users 集合中的信息,查看是否有新插入的文档 :
领取专属 10元无门槛券
私享最新 技术干货