mongodb集群replica set搭建

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 集合中的信息,查看是否有新插入的文档 :

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171219G0KFMG00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券