replicattion 相当于 mysql 的主从复制的读写分离,共同维护相同的数据,提高服务器的可用性【假如主(PRIMARY)不能用时,mongo会迅速自动切到从(SECONDARY)服务器上】
1、pkill -9 moongo //先杀死之前的进程
2、 mongodb目录下:mkdir /home/m17 /home/m18 /home/m19
3、开启
./bin/mongodb --dapath /home/m17 --logpath /home/mlog/m17.log --fork --port 27017 --replSet re2 --smallfiles
./bin/mongodb --dapath /home/m18 --logpath /home/mlog/m18.log --fork --port 27018 --replSet re2 --smallfiles
./bin/mongodb --dapath /home/m19 --logpath /home/mlog/m19.log --fork --port 27019 --replSet re2 --smallfiles
--replSet //声明采用复制集
--smallfiles //因为咱们是在一台机器上练习复制集【所以尽量让空间占小一点】
4、选择任意一台选择配置:
use admin ///先打开 admin 库
var rsconf={_id:'rs2',members:[ ///粘贴 -> 执行
{_id:0,host:"192.168.1.202:27017"},
{_id:0,host:"192.168.1.202:27018"},
{_id:0,host:"192.168.1.202:27019"}]
}
5、根据配置做初始化
rs.initiate(rsconf); //还在 admin 库(可以理解是目录下)
当前初始化窗口出现 rs2:PRIMARY 说明 ok
rs.status(); //显示当前复制集状态
后期还可以很方便的增加和删除从服务器(节点):
删除:
rs.remove("192.168.1.202:27019");
添加:
var rsconf={_id:'rs2',members:[ ///粘贴 -> 执行
{_id:0,host:"192.168.1.202:27017"},【_id:0 为主服务器】
{_id:0,host:"192.168.1.202:27018"},
{_id:0,host:"192.168.1.202:27019"}]
}
rs.reconfig(rsconf); //重新配置下复制集
在主服务器上做了改动后,来到从服务器上查询报错: error:{"$err":"not master and slaveOk=false",'code':13435} 。是因为从服务器默认不许读写,只和主服务器保持通信。
要先 rs.slaveOk();
再 show tables 等操作。
当主服务器故障时,会自动将从服务器提升至主服务器。但是我们就不知道那台服务器是主服务器了(从服务器上是不能进行写操作的)。
db.isMaster(); //检测谁是主服务器