原创mongodb集群replica set搭建
Posted 嘉盛泰科技
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原创mongodb集群replica set搭建相关的知识,希望对你有一定的参考价值。
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。Mongodb的集群模式包括三种:
Replica set (主备节点的数据均一致)
Sharding (分片)
Master-Slaver (目前已很少使用)
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
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
首先将所有服务器按照上一步骤安装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搭建的主要内容,如果未能解决你的问题,请参考以下文章