aspcms网站无法打开,医疗器械网上商城,服务器云平台,广州口碑好的网站建设设计介绍 replicattion set 多台服务器维护相同的数据副本,提高服务器的可用性,总结下来有以下好处: 数据备份与恢复读写分离MongoDB 复制集的结构以及基本概念 正如上图所示#xff0c;MongoDB 复制集的架构中#xff0c;主要分为两部分#xff1a;主节点#xff08;PrimaryMongoDB 复制集的架构中主要分为两部分主节点Primary和从节点Secondary。 主节点在一个复制集中只有并且必须有一个主节点主节点也是众多实例中唯一可以接收客户端写操作的节点当然也可以进行读操作 从节点从节点会复制主节点的操作以获取完全一致的数据集。客户端不能够直接对从节点进行写操作但是可以进行读操作这个需要通过复制集选项进行设置。 投票节点投票节点 并不含有 复制集中的数据集副本且也 无法 升职为主节点。投票节点的存在是为了使复制集中的节点数量为奇数这样保证在进行投票的时候不会出现票数相同的情况。如果添加了一个节点后总节点数为偶数那么就需要相应的增加一个投票节点。 注MongoDB 3.0 把复制集中的成员数量从原来的12个提升到了50个但是投票节点的数量仍然保持不变还是7个。 最基本的复制集架构 一个主节点两个从节点自动化故障切换的特性 最基本的复制集架构是有3个节点的形式。这样在主节点不可用以后从节点会进行投票选出一个节点成为主节点继续工作。如下图所示 重新投票选出主节点 三个节点的复制集架构还有另外一种形式一个主节点一个从节点一个投票节点。如下图所示一个主节点一个从节点一个投票节点 在这种架构中当主节点不可用时只有从节点可以升为主节点而投票节点是不可以成为主节点的。投票节点仅仅在选举中进行投票。如下图所示 从节点无法升职为主节点的情况 其他概念 从节点还有集中特殊的设置情况不同的设置有不同的需求 优先级为0设置 priority:0 那么该结点将不能成为主节点但是其数据仍是与主节点保持一致的,而且应用程序也可以进行读操作。这样可以在某些特殊的情况下保证其他特定节点优先成为主节点。 隐藏节点隐藏节点与主节点的数据集一致但是对于应用程序来说是不可见的。隐藏节点可以很好的与 复制集 中的其他节点隔离并应对特殊的需求比如进行报表或者数据备份。隐藏节点也应该是一个不能升职为主节点的优先级为0的节点。 延时节点延时节点也将从 复制集 中主节点复制数据然而延时节点中的数据集将会比复制集中主节点的数据延后。举个例子现在是0952如果延时节点延后了1小时那么延时节点的数据集中将不会有0852之后的操作。 由于延时节点的数据集是延时的因此它可以帮助我们在人为误操作或是其他意外情况下恢复数据。举个例子当应用升级失败或是误操作删除了表和数据库时我们可以通过延时节点进行数据恢复。 oplog全拼 oprations log它保存有数据库的所有的操作的记录。在复制集中主节点产生 oplog然后从节点复制主节点的 oplog 进行相应的操作这样达到保持数据集一致的要求。因此从节点的数据与主节点的数据相比是有延迟的。 配置 # 创建数据存储目录
mkdir -p /data/r0 /data/r1 /data/r2# 创建日志文件
touch /var/log/mongo17.log /var/log/mongo18.log /var/log/mongo19.log#启动3个实例,且声明实例属于某复制集 rsa
./bin/mongod --port 27017 --dbpath /data/r0 --smallfiles --replSet rsa --fork --logpath /var/log/mongo17.log
./bin/mongod --port 27018 --dbpath /data/r1 --smallfiles --replSet rsa --fork --logpath /var/log/mongo18.log
./bin/mongod --port 27019 --dbpath /data/r2 --smallfiles --replSet rsa --fork --logpath /var/log/mongo19.log# 进入27017进行配置初始化
./bin/mongo --port 27017
rsconf {_id:rsa,members:[{_id:0,host:192.168.42.168:27017}]
}
rs.initiate(rsconf); # 如果以后需要再重载一下config的话,用rs.reconfig(rsconf);# 添加节点
rs.add(192.168.42.168:27018);
rs.add(192.168.42.168:27019);# 查看状态
rs.status();# 删除节点
rs.remove(192.168.1.201:27019);# 主节点插入数据
use test
db.user.insert({uid:1,name:lily});#连接secondary查询同步情况
./bin/mongo --port 27019
show dbsrsa:SECONDARY show dbs;
2015-08-27T11:39:00.6380800 E QUERY Error: listDatabases failed:{ note : from execCommand, ok : 0, errmsg : not master }# 还可以通过isMaster()命令来查看信息;
rsa:PRIMARY db.isMaster();
{setName : rsa,setVersion : 5,ismaster : true,secondary : false,hosts : [192.168.42.168:27018,192.168.42.168:27019,192.168.42.168:27017],primary : 192.168.42.168:27018,me : 192.168.42.168:27018,electionId : ObjectId(55dea0cffa0c638625a82486),maxBsonObjectSize : 16777216,maxMessageSizeBytes : 48000000,maxWriteBatchSize : 1000,localTime : ISODate(2015-08-27T05:49:13.740Z),maxWireVersion : 3,minWireVersion : 0,ok : 1
}# 出现上述错误,是因为slave默认不许读写
rs.slaveOk();
show dbs; # 执行上面一个语句就可以看到和primary一致的数据,并且可以把读和写分离开来; 以上便是一个最简单的复制集架构,其中如果27017的主节点崩溃,那27018的节点就由从节点变为主节点;注意,如果再添加原来的27017节点进来,那主节点还是27018; 自动化配置脚本 #!/bin/bash
IP192.168.1.202
NArsbif [ $1 reset ]
thenpkill -9 mongorm -rf /home/m*exit
fiif [ $1 install ]
thenmkdir -p /home/m0 /home/m1 /home/m2 /home/mlog/usr/local/mongodb/bin/mongod --dbpath /home/m0 --logpath /home/mlog/m17.log --logappend --port 27017 --fork
--replSet ${NA}
/usr/local/mongodb/bin/mongod --dbpath /home/m1 --logpath /home/mlog/m18.log --logappend --port 27018 --fork
--replSet ${NA}
/usr/local/mongodb/bin/mongod --dbpath /home/m2 --logpath /home/mlog/m19.log --logappend --port 27019 --fork
--replSet ${NA}exit
fiif [ $1 repl ]
then
/usr/local/mongodb/bin/mongo EOFuse admin
rsconf {_id:${NA},members:[{_id:0,host:${IP}:27017},{_id:1,host:${IP}:27018},{_id:2,host:${IP}:27019},]
}
rs.initiate(rsconf)
EOF
fi 转载于:https://www.cnblogs.com/nixi8/p/4854197.html