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/r2 1:启动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.log netstat –aon | findstr "27017" //进入/d/mongodb/bin开启gitbush mongod --dbpath ../data/r0 --logpath ../data/r0/r17.log --port 27017 --replSet rsa --smallfiles mongod --dbpath ../data/r1 --logpath ../data/r1/r18.log --port 27018 --replSet rsa --smallfiles mongod --dbpath ../data/r2 --logpath ../data/r2/r19.log --port 27019 --replSet rsa --smallfiles //以下在cmd中操作 $ mongo use 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 admin db.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* //遗留的文件夹删掉 fi if[$1 == 'repl'];then IP=192.168.1.202 NA=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 <<EOF use admin var rsconf = { //2:配置文件(mongo都是js语言) _id:'rsa', //复制集的id叫rsa members: //复制集的成员 [ {_id:0, host:'${IP}:27017' }, {_id:1, host:'${IP}:27018' }, {_id:2, host:'${IP}:27019' } ] } rs.initiate(rsconf); << //最后执行sh文件: sh start.sh 添加仲裁 : mongod --port 30000 --dbpath /the/path --replSet rs rs.addArb("m1.example.net:30000")
副本集与仲裁
本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/8159034.html,如需转载请自行联系原作者