01.介绍
MongoDB有主从、副本、鉴权模式。
而主从模式官方目前不推荐了,取而代之的是副本集模式,参照:https://docs.mongodb.com/v3.4/core/master-slave/;主从模式,雷同mysql的主从模式,由主master写入数据,同步到slave库,而从slave只有只读模式,假如主模式宕机,那么就要手动切换从模式到主模式。
官方推荐使用副本集模式,副本集是互为主从的模式,雷同mysql的主主模式(这里只有一个主可写),多个服务器保存同一份数据,可自动切换故障。
分片模式是处理大量的数据,将数据分开存储,每一个服务器的数据是不一样的,他们的总体就是他们的整体数据。
02.主从模式
2.1 主从模式的原理
主节点的操作记录为oplog,oplog存在mongodb库的local库的集合oplog.$main中,这个集合都是主节点操作的记录。从库会从主库的oplog中获取oplog的数据在从库的本机执行一遍,新的覆盖旧的数据。
> use local
switched to db local
> show collections
me
oplog.$main
sources
startup_log
2.2 主从模式例子
主:192.168.0.21:27017
从:192.168.0.22:27017
安装:
echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
sudo apt-get update
sudo apt-get install -y mongodb-org
主从启动:
$ sudo mongod -master -dbpath /var/lib/mongodb --主启动
$ sudo mongod -slave -dbpath /var/lib/mongodb -source 192.168.0.21:27017 --从启动
数据测试:
主插入数据:
> db.user.find()
> db.user.insert({name:'maitest'})
WriteResult({ "nInserted" : 1 })
> db.user.find()
{ "_id" : ObjectId("5c750f84b278a5a72c9f4959"), "name" : "maitest" }
设置从,并查看数据:
> rs.slaveOk()
> db.user.find()
{ "_id" : ObjectId("5c750f84b278a5a72c9f4959"), "name" : "maitest" }
主从手动故障切换:
$ sudo mongod -master -dbpath /var/lib/mongodb --原从启动[192.168.0.21]
$ sudo mongod -slave -dbpath /var/lib/mongodb -source 192.168.0.22:27017 --原主启动[192.168.0.22]
$ sudo mongod -slave -dbpath /var/lib/mongodb -source 192.168.0.22:27017 --autoresync --出现dead时要加这个参数,因为数据差异大,自动重新同步
03.副本集模式
3.1 副本集原理
副本集是主从的升级,可以做自动故障切换,提高了容错性。官方推荐至少三个成员(需要一个仲裁者[Arbiter不具备副本数据,只是投票者,也不能成为主],一主,一从),[参照https://docs.mongodb.com/v3.4/core/replica-set-members/],最多按照官方版本不一样设计。mongodb3.0.0以前是最多12个,3.0.0后50个,7个仲裁者。
3.2 搭建副本模式
参照:https://docs.mongodb.com/v3.4/tutorial/deploy-replica-set/
master:192.168.0.21:27017
slave1:192.168.0.22:27017
slave2:192.168.0.23:27017
具体 【 副本集 】操作参照:https://www.mairoot.com/?p=2225