replication set复制集replicattion set 多台服务器维护相同的数据副本,提高服务器的可用性.一台是服务器出问题了另外2台还可以接收干,secondary平时保持只读状态,专心读取primary只做备份(类似于mysql数据库的主从分离),2台secondary相互也通信, 看看谁更健康,副本集:是一组保持着相同数据集合的mongod实例.其中1个mongod为primary,接收全部写操作,其余secodary只负责读操作primary instance打开oplog, secendary读取oplog,并产生相同的数据集Replication set 设置全过程( SecureCRT连接linux )0:创建目录 mkdir -p /data/r0 /data/r1 /data/r21:启动3个实例,且声明实例属于某复制集(3个进程都属于相同的复制集rsa)./bin/mongod --port 27017 --dbpath /data/r0 --smallfiles --replSet rsa --fork --logpath /data/r0/mongo17.log //rsa 是复制集,smallfiles 减小文件./bin/mongod --port 27018 --dbpath /data/r1 --smallfiles --replSet rsa --fork --logpath /data/r1/mongo18.log./bin/mongod --port 27019 --dbpath /data/r2 --smallfiles --replSet rsa --fork --logpath /data/r2/mongo19.lognetstat –aon | findstr "27017"//进入/d/mongodb/bin开启gitbushmongod --dbpath ../data/r0 --logpath ../data/r0/r17.log --port 27017 --replSet rsa --smallfilesmongod --dbpath ../data/r1 --logpath ../data/r1/r18.log --port 27018 --replSet rsa --smallfilesmongod --dbpath ../data/r2 --logpath ../data/r2/r19.log --port 27019 --replSet rsa --smallfiles//以下在cmd中操作$ mongouse admin //管理application set//直接运行下面代码var rsconf = { //2:配置文件(mongo都是js语言) _id:'rsa', //复制集的id叫rsa members: //复制集的成员 [ {_id:0, host:'127.0.0.1:27017' }, {_id:1, host:'127.0.0.1:27018' }, {_id:2, host:'127.0.0.1:27019' } ]}//3: 根据配置做初始化rs.initiate(rsconf);{ "OK":1}5:查看状态rs.status();//已经配置成功了4: 添加节点,rsconf的members中添加,后期添加节点,rs.add('192.168.1.201:27018');rs.add('192.168.1.201:27019');6:删除节点rs.remove('192.168.1.201:27019');7:主节点插入数据>use test>db.user.insert({uid:1,name:'lily'});8:连接secondary查询同步情况./bin/mongo --port 27019,rs.slaveOk();>use test>show tables>db.user.find()rsa:SECONDARY> show tables;Sat Aug 17 16:03:55.786 JavaScript execution failed: error: { "$err" : "not master and slaveOk=false", "code" : 13435 } 8.1 出现上述错误,是因为secondary默认不许读写,只能secondary只和primary说话,不润许人和secondary说话>rs.slaveOk(); //>show tables>db.user.find()#看到与primary 一致的数据use admindb.shutdoenServer() //断开primary,查看rs.status();可以看到secondary服务器自动变成primary,secondary不能insert,只能primary能写,现在连到primary(原来的secondary变成的primary)就能够写了。//原来17端口是主节点,18.19端口是次节点(次节点不能人来insert,只能与主节点同步),17down了后18自动变成了主节点(查看rs.status();),19仍然是次节点,18端口就可以人来写了,19仍然不能写(因为是次端口)。18插入新值之后19次节点就自动同步了,(17活了之后应该能同步新值)/写自动化脚本//清理现场if[$1 == 'reset']; then //如果要重置环境,就杀掉进程,重置环境 pkill -9 mongo //遗留的mongo进程杀掉 rm -rf /data/r* //遗留的文件夹删掉fiif[$1 == 'repl'];thenIP=192.168.1.202NA=rs2 //集群名称mkdir -p /data/r0 /data/r1 /data/r2 //创建目录//启动3个复制集的实例/usr/local/mongodb/bin/mongod --dbpath /data/r0 --logpath /data/r0/r17.log --port 27017 --fork --smallfile --replSet ${NA}/usr/local/mongodb/bin/mongod --dbpath /data/r1 --logpath /data/r0/r18.log --port 27018 --fork --smallfile --replSet ${NA}/usr/local/mongodb/bin/mongod --dbpath /data/r2 --logpath /data/r0/r19.log --port 27019 --fork --smallfile --replSet ${NA}//配置/usr/local/mongodb/bin/mongod <
副本集与仲裁