原创mongodb集群replica set搭建

Posted 嘉盛泰科技

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原创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服务器,如下:

for i in `seq 69 70`;

do scp -r /usr/local/mongodb root@192.168.1.$i:/usr/local/;

scp /etc/profile root@192.168.1.$i:/etc/;

ssh 192.168.1.$i 'source /etc/profile';

done


<1> 建立数据文件夹

mkdir -p /mongodb/data/master 

mkdir -p /mongodb/data/slaver 

mkdir -p /mongodb/data/arbiter  

#三个目录分别对应主,备,仲裁节点


<2> 建立配置文件

由于配置比较多,所以我们将配置写到文件里。

#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的名字

port:mongodb进程所使用的端口号,默认为27017

oplogSize:mongodb操作日志文件的最大大小。单位为Mb,默认为硬盘剩余空间5%

fork:以后台方式运行进程

noprealloc:不预先分配存储


<3> 启动mongodb


注意:集群中mongodb的启动采用配置文件的方式启动


进入每个mongodb节点的bin目录下

./mongod -f master.conf

./mongod -f slaver.conf

./mongod -f arbiter.conf


<4> 配置主,备,仲裁节点


连接到任意一台服务器,切换到admin数据库

可以通过客户端连接mongodb,也可以直接在三个节点中选择一个连接mongodb。

>use admin

>cfg={ _id:"testrs", members:[ {_id:0,host:'192.168.1.68:27017',priority:2}, {_id:1,host:'192.168.1.69:27017',priority:1}, 

{_id:2,host:'192.168.1.70:27017',arbiterOnly:true}] };

>rs.initiate(cfg)             #使配置生效

使用rs.status() 查看配置是否生效


<5> 客户端连接主节点,插入数据,插入后,可以看到数据在备份节点上也进行了同步。


./mongo 192.168.1.68

use user

db.users.insert({Name: "zhang",Age: 50})

也可以使用客户端连接工具进行操作robomongo


<6> 添加副本集的成员,我们需要使用多台服务器来启动mongo服务。

进入Mongo客户端,并使用rs.add()方法来添加副本集的成员。

rs.add(HOST_NAME:PORT)


<7> 设置副本节点可读


mongodb默认是从主节点读写数据的,副本节点上不允许读,需要设置副本节点可以读。


#在所有节点上进行设置

修改root用户,mongodb用户家目录下的.mongorc.js文件

如:

vi /root/.mongorc.js

vi /home/mongodb/.mongorc.js 


添加一行:rs.slaveOk();

修改完成后,重新登录mongo,发现副本节点可读了(当前会话不生效,需要重新登录才行)。

#在所有节点上进行设置


<8> 验证主从节点


在集群中的主节点上添加一个user 数据库,并在器users集合中添加一个文档,具体如下图:



在备节点上查询user 数据库中的users 集合中的信息,查看是否有新插入的文档 :



以上是关于原创mongodb集群replica set搭建的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB Replica Set搭建集群

mongodb副本集(Replica Set)搭建

mongodb副本集(Replica Set)搭建

Mongodb如何创建mongodb的replica set

MongoDB复制集/副本集(Replica Set)搭建

MongoDB副本集replica set--添加删除成员