mongodb replicaset 突发事件怎么办
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongodb replicaset 突发事件怎么办相关的知识,希望对你有一定的参考价值。
1.假如现在replica set中一共就2个节点,一个是primary member,另外一个是secondmember
如果primary出现故障,(not reachable/healthy),这时候,second依旧是seconde,
只能提供读的操作。如果重启primary member,一般情况下是按照最新数据的member作为
primary,这个时候这个节点依旧可以作为primary member使用。replica set恢复正常。
如果seconde出现故障,(not reachable/healthy),这时候,primary member自动降级为
seconde member,replica set中不存在primary member,无法提供写操作,数据会丢失。
如果seconde故障时间比较短(oplog相关),重启后,最好指定
config=_id:'shard1',members:[
_id:1,host:'127.0.0.1:10001',
_id:0,host:'127.0.0.1:10002',priority:1]
10002作为你需要的最新数据为primary member,这个时候,replica set恢复正常。
如果人为rs.remove()掉seconde member,primary member依旧不变
如果人为rs.remove()掉primary member,seconde member依旧不变。
如果seconde故障时间比较短(oplog相关):
这句话的意思是,replica set master和slave之间的复制,是采取oplog读操作日志
的方式进行复制数据的。所以短时间这个日志比较小的情况下,启动slave,加上
--fastsync 启动参数,可以再原来的replication 复制的log基础上快速启动,并syn
同步最新的master数据,否则,master上的oplog日志上一轮如果结束了,这个时候,
slave 从master获取oplog的时候,发现和master的数据相差太远,更不上master的更新
了,这个时候,seconde节点不能正常加入replica set中,需要删除seconde数据,进行
冷copy master数据,然后再进行同步。
2.最少replica set中至少有2个member(primary 、seconde),一个Arb member。
这种情况,Arb member意义不大,最差情况和上边1一样,导致replica set 瘫痪,
所以,最有意义的配置应该是3个member(1primary、2seconde),一个 Arb member。 参考技术A 1.假如现在replica set中一共就2个节点,一个是primary member,另外一个是second
member
如果primary出现故障,(not reachable/healthy),这时候,second依旧是seconde,
只能提供读的操作。如果重启primary member,一般情况下是按照最新数据的member作为
primary,这个时候这个节点依旧可以作为primary member使用。replica set恢复正常。
如果seconde出现故障,(not reachable/healthy),这时候,primary member自动降级为
seconde member,replica set中不存在primary member,无法提供写操作,数据会丢失。
如果seconde故障时间比较短(oplog相关),重启后,最好指定
config=_id:'shard1',members:[
_id:1,host:'127.0.0.1:10001',
_id:0,host:'127.0.0.1:10002',priority:1]
10002作为你需要的最新数据为primary member,这个时候,replica set恢复正常。
如果人为rs.remove()掉seconde member,primary member依旧不变
如果人为rs.remove()掉primary member,seconde member依旧不变。
如果seconde故障时间比较短(oplog相关):
这句话的意思是,replica set master和slave之间的复制,是采取oplog读操作日志
的方式进行复制数据的。所以短时间这个日志比较小的情况下,启动slave,加上
--fastsync 启动参数,可以再原来的replication 复制的log基础上快速启动,并syn
同步最新的master数据,否则,master上的oplog日志上一轮如果结束了,这个时候,
slave 从master获取oplog的时候,发现和master的数据相差太远,更不上master的更新
了,这个时候,seconde节点不能正常加入replica set中,需要删除seconde数据,进行
冷copy master数据,然后再进行同步。
2.最少replica set中至少有2个member(primary 、seconde),一个Arb member。
这种情况,Arb member意义不大,最差情况和上边1一样,导致replica set 瘫痪,
所以,最有意义的配置应该是3个member(1primary、2seconde),一个 Arb member。本回答被提问者和网友采纳
原创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 replicaset 突发事件怎么办的主要内容,如果未能解决你的问题,请参考以下文章