您的位置:首页 > 数据库 > Mongodb

mongodb 副本集学习

2015-11-20 14:51 483 查看
机器内存一定大于4G 要不然会失败

linux下的安装管理

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.4.tgz
tar -zxvf mongodb-linux-x86_64-3.0.4.tgz

mv mongodb-linux-x86_64-3.0.4 mongodb

创建一个mongodb的文件夹

mkdir -p /data/app/mongodb

mkdir -p /data/app/mongodb/db

mkdir -p /data/app/mongodb/log

mkdir -p /data/app/mongodb/config

创建配置文件

vim /data/app/mongodb/mongodb.conf

port=27017 //端口

dbpath=/home/kkm/mongodb/db //数据库存放地方

logpath=/home/kkm/mongodb/log/mongodb.log //日志文件地址

logappend=true //日志追加的方式

fork=true //以守护进程的方式运行MongoDB,创建服务器进程

auth=true //启用验证

replSet=mktest

其他的见别的文件

启动mongodb

/home/kkm/mongodb/bin/mongod -f /home/kkm/mongodb/config/mongodb.conf

然后进入任意一个机器的shell下

./bin/mongo

config={"_id":"mktest","members":[{"_id":0,"host":"xxx.xxx.146.220:27017"},{"_id":1,"host":"xxx.xxx.146.144:27017"},{"_id":2,"host":"xxxx.xxx.148.211:27017"}]}

rs.initiate(config)

如果出现结果 ok=1 那么就成功了

db.person.insert({"name":"mkk"})

在另外两台机器上

db.person.find();

如果出现错误 { "$err" : "not master and slaveOk=false", "code" : 13435 }

在上面配置

rs.slaveOk();

缺点是每次进入shell都需要这个命令。。可以用以下方案解决

vim ~/.mongorc.js 每次打开shell都会自动加载这个文件

rs.slaveOk();

mongodb 副本集 多台机器中同一时刻只有一台是用于写操作,这为mongoDB提供了数据一致性的保障.担当Primary角色的机器能把读操作分发给slave机器

修改副本集

rs.add("server-4:27017")

rs.remove("server-1:27017")

重新配置副本集时 主节点会退化成普通节点,以便接受新的配置,然后会恢复,这个期间副本集中暂时没有主节点 之后会恢复正常

修改配置信息

var config=rs.config()

config.members[1].host="server-2:27017"

rs.reconfig(config)

选举仲裁者

当剩下的可用节点数是偶数的时候 这时候就需要仲裁者投票了

如果可能 尽量在副本集中使用奇数个数的数据成员 而不要使用仲裁者

优先级 优先级用于表示一个成员渴望成为主节点的程序 范围是0-100 默认是1 优先级为0的永远不能成为主节点

rs.add({"_id":4,"host":"xxx","priority":1.5}) 添加一个优先级为1.5的成员

如果设置成功。。那么之前默认为1的主节点就会自动退位,这个节点就会成为新的主节点,但是如果数据不是最新的 那么需要等数据更新完成之后才会成为主节点

隐藏成员

隐藏成员不会作为复制源

var config=rs.config()

config.members[2].hidden = 0

config.members[2].priority=0

rs.reconfig(config)

延迟备份节点

主要是为了防止不小心删除主数据库,延迟备份节点比主节点延迟一定的时间 秒 如果不小心删除了主数据库 可以在这个时间内把数据恢复过来

slaveDelay

创建索引

有时候 备份节点并不需要与主节点拥有相同的索引,甚至可以没有索引。可以使用 buildIndex : false 阻止备份创建索引

另外这个选项是需要成员的优先级为0

从应用程序链接到副本集

等待写入复制

如果希望不管发生什么都将写入操作保存到副本集中,那么必须要确保写入操作被同步到了副本集的 大多数

使用getLastError命令检查写入是否成功,也可以使用这个命令来确保写入操作被复制到备份节点

db.runCommand({"getLastError":1,"w":"majority"})

假设在执行这个命令的时候 只有主节点和一个仲裁节点可以用。那么主节点就无法将这个写入操作复制到副本集中的任何成员,getlasterror并不知道需要等待多久,所以会一直等待下去

db.runCommand({"getLastError":1,"w":"majority","wtimeout":1000})

设置getlasterror等待1000秒

通常使用w来控制写入速度,mongodb的写入速度太快,主节点上执行完毕之后,备份节点来不及跟上。

定期调用getlasterror把w的参数值设置成大于1的值 如果w的值只1的话 相当于没有设置这个参数

副本集只允许在主节点上进行写操作

如果考虑写入之后马上读取 并且负载均衡的话 应该使用 分片

副本集管理

单机启动 主要是把这个主节点重新用另外一个端口启动,那么这个副本集就会重新选择一个主节点。。然后在操作完成之后把这个节点重新加入到副本集中 那么它会自动与其他的副本集中的节点进行同步

副本集最多只能拥有12个成员

主节点降为备份节点 并维持60秒

rs.stepDown(60)

复制单个数据库的情况下 可以使用主从模式 或者需要11台以上的备份节点

主从模式可以切换成副本集模式

副本集模式也可以模仿主从模式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: