mongodb复制集(replica set)搭建及管理

1.创建三个节点数据存储目录
# mkdir -p /data/data/r0
# mkdir -p /data/data/r1
# mkdir -p /data/data/r2

2.创建三个节点日志存储目录
# mkdir -p /data/log/

3.创建和配置三个节点复制集key文件
# mkdir -p /data/key
# echo "this is rs1 super secret key" > /data/key/r0
# echo "this is rs1 super secret key" > /data/key/r1
# echo "this is rs1 super secret key" > /data/key/r2
# chmod 600 /data/key/r*

4.启动复制集的三个mongodb实例
# /usr/local/mongodb/bin/mongod --replSet rs1 --keyfile /data/key/r0 --fork --port 28010 --dbpath /data/data/r0 --logpath=/data/log/r0.log --logappend
# /usr/local/mongodb/bin/mongod --replSet rs1 --keyfile /data/key/r1 --fork --port 28011 --dbpath /data/data/r1 --logpath=/data/log/r1.log --logappend
# /usr/local/mongodb/bin/mongod --replSet rs1 --keyfile /data/key/r2 --fork --port 28012 --dbpath /data/data/r2 --logpath=/data/log/r2.log --logappend

5.配置和初始化复制集环境
# cd /usr/local/mongodb/bin
# ./mongo --port 28010
> config_rs1={_id:'rs1',members:[{_id:0,host:'localhost:28010'},{_id:1,host:'localhost:28011'},{_id:2,host:'localhost:28012'}]}
> rs.initiate(config_rs1);

6.查看复制集状态
> rs.status();
> rs.isMaster();

7.查看主从操作日志及状态
# cd /usr/local/mongodb/bin
# ./mongo --port 28010
> show databases;
> use local;
> show collections;
> db.oplog.rs.find()
> db.printReplicationInfo()
> db.printSlaveReplicationInfo()

8.查看主从配置信息
# cd /usr/local/mongodb/bin
# ./mongo --port 28010
> show databases;
> use local;
> show collections;
> db.system.replset.find()

9.管理复制集
1)主从切换
--将当前主实例(28010)和目标主实例(28012)外的其他实例(28011)都设置为"冰冻"状态,这里冰冻30秒
# cd /usr/local/mongodb/bin
# ./mongo --port 28011
> rs.freeze(30)

--将当前主实例(28010)“降级”,这里为降级30秒
# cd /usr/local/mongodb/bin
# ./mongo --port 28010
> rs.stepDown(30)

--查看复制集状态
# cd /usr/local/mongodb/bin
# ./mongo --port 28010
> rs.status()

2)读写分离
--先向主库插入一条数据
# cd /usr/local/mongodb/bin
# ./mongo --port 28010
> db.c1.insert({age:30})
> db.c1.find()

--登陆从库查看
# cd /usr/local/mongodb/bin
# ./mongo --port 28011
> show collections
--此时从库查询报错

--设置从库可读
# cd /usr/local/mongodb/bin
# ./mongo --port 28011
> db.getMongo().setSlaveOk()

> show collections
> db.c1.find()

3)故障转移
--kill掉28010主实例
# ps -ef|grep mong
# kill -2 pid  or kill -15 pid or kill -9 pid
--kill -9可能导致mongodb崩溃,尽量别用

--登陆从节点查看复制集状态
# cd /usr/local/mongodb/bin
# ./mongo --port 28011
> rs.status();

4)增删节点
--通过oplog增加节点
# mkdir -p /data/data/r3
# echo "this is rs1 super secret key" > /data/key/r3
# chmod 600 /data/key/r3
# /usr/local/mongodb/bin/mongod --replSet rs1 --keyFile /data/key/r3 --fork --port 28013 --dbpath /data/data/r3 --logpath=/data/log/r3.log --logappend
# # cd /usr/local/mongodb/bin
# ./mongo --port 28010
> rs.add("localhost:28013")
--连续查看复制集状态
> rs.status()

--errmsg状态从初始化(still initializing)-->数据同步(initial sync need a member to be primary or secondary to do our initial sync)-->初始化同步完成(initial sync done)-->节点添加完成(errmsg消失;stateStr变为second)

--通过数据库快照和oplog增加节点

--取一个复制集成员的物理文件作为初始化数据
# scp -r /data/data/r3 /data/data/r4
# echo "this is rs1 super secret key" > /data/key/r4
# chmod 600 /data/key/r4

--快照获取完毕后,向主库c1中插入一条记录,用于验证后续同步操作
# cd /usr/local/mongodb/bin
# ./mongo --port 28010
> db.c1.find()
> db.c1.insert({age:20})
> db.c1.find()

--启用28014新实例
# /usr/local/mongodb/bin/mongod --replSet rs1 --keyFile /data/key/r4 --fork --port 28014 --dbpath /data/data/r4 --logpath=/data/log/r4.log --logappend

--登录主库实例,添加28014实例
# cd /usr/local/mongodb/bin
# ./mongo --port 28010
> rs.add("localhost:28014")

--登录28014实例验证同步
# cd /usr/local/mongodb/bin
# ./mongo --port 28014
> rs.slaveOk()
> db.c1.find()

5)减少节点
--登录主库节点
# cd /usr/local/mongodb/bin
# ./mongo --port 28010
> rs.status()
> rs.remove("localhost:28014")
> rs.remove("localhost:28013")
> rs.status()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lhdz_bj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值