创建目录
mkdir -p /data/r0 /data/r1 /data/r2
声明实例
./bin/mongod --port 27017 --dbpath /home/workspace/data/r0/ --smallfiles --replSet rsa --fork --logpath /home/workspace/logs/mongo0.log
./bin/mongod --port 27018 --dbpath /home/workspace/data/r1/ --smallfiles --replSet rsa --fork --logpath /home/workspace/logs/mongo1.log
./bin/mongod --port 27019 --dbpath /home/workspace/data/r2/ --smallfiles --replSet rsa --fork --logpath /home/workspace/logs/mongo2.log
增加配置
rsconf = {
_id:‘rsa’,
members:
[
{_id:0,
host:‘192.168.87.131:27017’
},
{_id:1,
host:‘192.168.87.131:27018’
},
{_id:2,
host:‘192.168.87.131:27019’
}
]
}
rs.initiate(rsconf);
测试
- 连接子节点 :./bin/mongo --port 27017
- use test
- db.test.user({uid:1,name:‘liliy’})
- 切换到从库 :./bin/mongo --port 27019
- use test
- show tables: Error: listCollections failed: { “note” : “from execCommand”, “ok” : 0, “errmsg” : “not master” }
- rs.slaveOk();
- show tables
MongoDB中你只能通过主节点将Mongo服务添加到副本集中, 判断当前运行的Mongo服务是否为主节点可以使用命令db.isMaster() 。
MongoDB的副本集与我们常见的主从有所不同,主从在主机宕机后所有服务将停止,而副本集在主机宕机后,副本会接管主节点成为主节点,不会出现宕机的情况。
复制集创建自动化脚本:
vim start.sh
#!/bin/bash
IP=192.168.119.128
NA=rs2
if [ $1 == 'reset' ]; then
pkill -9 mongo
rm -rf /home/m*
exit;
fi
if [ $1 == 'repl' ]; then
mkdir -p /home/m17 /home/m18 /home/m19 /home/mlog
/usr/mongodb/bin/mongod --dbpath /home/m17 --logpath /home/mlog/m17.log --port 27017 --fork --smallfiles --replSet ${NA}
/usr/mongodb/bin/mongod --dbpath /home/m18 --logpath /home/mlog/m18.log --port 27018 --fork --smallfiles --replSet ${NA}
/usr/mongodb/bin/mongod --dbpath /home/m19 --logpath /home/mlog/m19.log --port 27019 --fork --smallfiles --replSet ${NA}
/usr/mongodb/bin/mongo <<EOF
use admin
rsconf = {
_id:'rs2',
members:
[
{_id:0,host:'${IP}:27017'},
{_id:1,host:'${IP}:27018'},
{_id:2,host:'${IP}:27019'}
]
}
rs.initiate(rsconf);
EOF
exit;
fi
执行自动化脚本:
sh start.sh reset
sh start.sh repl
输入命令: ./mongo 会自动连接到复制集中的主节点
1、if和[ ]之间要空格。
2、[ ]和' '之间要空格
3、' '和=之间要空格, 否则都会报错
参考资料:
http://www.cnblogs.com/skyrim/p/5098167.html
https://yq.aliyun.com/articles/64
注意的几点: