系统运维首页投稿(暂停使用,暂停投稿)

MongoDB高级应用(一):主从复制

2017-08-29  本文已影响71人  四冶读史

1.架构模型

Paste_Image.png

从架构上看,主从复制有什么好处:
数据备份
数据恢复
读写分离

一般的数据库都会有主从模式,为了平衡负载,主库写,从库读。
说的再多,实践下吧。

2.主从复制

拿2台数据库为例,10.11.1.58和10.11..1.66
10.11.1.58 主
10.11.1.66 从

创建数据库路径
主:mkdir -p /data/master
从:mkdir -p /data/slave

创建日志文件路径
主:mkdir -p /data/log
从:mkdir -p /data/log

创建配置文件路径
主:mkdir -p /data/conf
从:mkdir -p /data/conf

创建主数据启动配置文件

port=27017
logpath=/data/log/mongod.log
dbpath=/data/master
pidfilepath=/data/master/mongod.pid
fork=true
master=true
oplogSize=2048

命名为master.conf,存放在/data/conf/下
创建从数据启动配置文件

port=27017
logpath=/data/log/mongod.log
dbpath=/data/slave
pidfilepath=/data/slave/mongod.pid
fork=true
slave=true
source=10.11.1.58:27017   #主数据库的IP和端口
autoresync=true

命名为slave.conf,存放在/data/conf/下
这样就配置好了master-slave

干掉已存在的mongod进程

ps -ef|grep mongo
Paste_Image.png

有就干掉
kill pid

启动服务
master

/usr/local/mongodb/bin/mongod --config /data/conf/master.conf 
Paste_Image.png

显示启动成功!
slave

/usr/local/mongodb/bin/mongod --config /data/conf/slave.conf 
Paste_Image.png

显示启动成功!

3.验证部署

主从验证主要是验证主写入数据,从读取数据
master写数据
登录master

/usr/local/mongodb/bin/mongo
Paste_Image.png

写数据
创建数据库

> use testdb
switched to db testdb

写入数据

> db.col.save({a:1})
WriteResult({ "nInserted" : 1 })

查看数据

> db.col.find()
{ "_id" : ObjectId("58ddc0b2dcb436ef0cd97835"), "a" : 1 }
> 
Paste_Image.png

slave读数据
登录slave

/usr/local/mongodb/bin/mongo
Paste_Image.png

读数据
查看数据库

> show dbs
Paste_Image.png

怎么回事?"not master and slaveOk=false"
初始状态下,slave是没有读的权限?
为什么?
因为不知道用户需要将那个slave设置成读,故需要用户设置slave为可读

rs.slaveOk()
Paste_Image.png

可以看到数据库了

查看数据是否已同步


Paste_Image.png

可以看到数据已同步过来了
至此主从同步已完成!
大功告成!

顺便查看下slave能不能写


Paste_Image.png

果然,还是不能写!

4.存在不足

主从复制虽然可以承载一定的负载压力,但仍然存在一个很大的不足,如果主库挂了,那么写入就有危险。如果有这么一种模式,当主库挂了,在IP不变的模式下,从库充当主库,这样是不是就可以规避写入的风险?

当然可以,这就是MongoDB集群复制要干的事。

上一篇 下一篇

猜你喜欢

热点阅读