Mongo 主从复制, 副本集, 分布式存储

Mongo 主从复制, 副本集, 分布式存储(OSX为例, 其他都一样)

Mongo 主从复制, 副本集, 分布式存储(OSX为例, 其他都一样)

版本 3.6.4为例

一、安装

无需安装,按需要下载对应平台版本,配置环境变量就行

https://www.mongodb.com/download-center


mkdir ~/soft/mongo

mv ~/Downloads/mongodb-osx-x86_64-3.6.4.tgz .

tar -xvf mongodb-osx-x86_64-3.6.4.tgz

# 改个名

mv mongodb-osx-x86_64-3.6.4 mongo-3.6.4


环境变量指向 ~/mongo/mongo-3.6.4/bin


单点启动

mongod —dbpath=~/soft/mongo/data

就启动了,前台启动,默认端口 27017


二、主从复制(一台机器,不同端口模拟)

1:创建数据目录

Nicebuild:mongo rainyhao$ mkdir -p master-slave/master

Nicebuild:mongo rainyhao$ mkdir -p master-slave/slave

Nicebuild:mongo rainyhao$ cd master-slave


2:分别启动主从

Nicebuild:master-slave rainyhao$ mongod --dbpath=master --port 10000 --master

Nicebuild:master-slave rainyhao$ mongod --dbpath=slave --port 10001 --slave --source localhost:10000


这就算完事了。


三、副本集(以三个节点为例)

cd ~/soft/mongo

Nicebuild:mongo rainyhao$ mkdir -p replset/node1/dbs

Nicebuild:mongo rainyhao$ mkdir -p replset/node2/dbs

Nicebuild:mongo rainyhao$ mkdir -p replset/node3/dbs


1:启动三个节点

mongod --dbpath repset/node1/dbs --logpath repset/node1/log.txt --logappend --port 10001 --replSet itcast/localhost:10002

mongod --dbpath repset/node2/dbs --logpath repset/node2/log.txt --logappend --port 10002 --replSet itcast/localhost:10001

mongod --dbpath repset/node3/dbs --logpath repset/node3/log.txt --logappend --port 10003 --replSet itcast/localhost:10001,localhost:10002


2:初始化副本集, 随便登录一个节点

mongo localhost:10001/admin

db.runCommand({"replSetInitiate": {"_id":"itcast", members: [{"_id": 1, "host": "localhost:10001", "priority": 30}, {"_id":2, "host":"localhost:10002", "priority": 20}, {"_id":3, "host":"localhost:10003", "priority": 10}] }})


# 按运行效果,priority值大的节点,最后初始化完成了就是主节点

此时停掉主节点(10001),上边初始化时, priority值大的从节点(10002),就会顶替挂掉的主节点,成为主节点

先主节点恢复启动以后,10002又会自动成为从节点


四、分布式存储

1:创建相关数据存储目录

cd ~/soft/mongo

# 建立配置存放库目录(mongoconfig server, 2.x版本随便启动个单点就行了,3.x的,需要是一个副本集)

Nicebuild:mongo rainyhao$ mkdir -p distributed/confignode1

Nicebuild:mongo rainyhao$ mkdir -p distributed/confignode2

Nicebuild:mongo rainyhao$ mkdir -p distributed/confignode3

# 建立数据存放库目录

Nicebuild:mongo rainyhao$ mkdir -p distributed/datanode1

Nicebuild:mongo rainyhao$ mkdir -p distributed/datanode2

Nicebuild:mongo rainyhao$ mkdir -p distributed/datanode2

# 创建日志目录

Nicebuild:mongo rainyhao$ mkdir -p distributed/logs


2:启动数据存储节点

cd distributed

Nicebuild:distributed rainyhao$ mongod --dbpath=datanode1 --port 4444 --shardsvr --logpath=logs/node1.txt --logappend --fork

Nicebuild:distributed rainyhao$ mongod --dbpath=datanode2 --port 5555 --shardsvr --logpath=logs/node2.txt --logappend --fork

Nicebuild:distributed rainyhao$ mongod --dbpath=datanode3 --port 6666 --shardsvr --logpath=logs/node3.txt --logappend --fork



3:配置并启动存储副本集

confignode1使用端口7777, confignode2使用端口8888, confignode3使用端口9999

按第三部分所述,使用confignode1confignode2启动并建立副本集

Nicebuild:distributed rainyhao$ mongod --dbpath confignode1 --port 7777 --replSet cfgset/localhost:8888 --configsvr --logpath=logs/config1.txt --logappend --fork

Nicebuild:distributed rainyhao$ mongod --dbpath confignode2 --port 8888 --replSet cfgset/localhost:7777 --configsvr --logpath=logs/config2.txt --logappend --fork

Nicebuild:distributed rainyhao$ mongod --dbpath confignode3 --port 9999 --replSet cfgset/localhost:7777,localhost:8888 --configsvr  --logpath=logs/config3.txt --logappend --fork

初始化副本集

mongo localhost:9999/admin

>db.runCommand({"replSetInitiate": {"_id":"cfgset", members: [{"_id": 1, "host": "localhost:7777", "priority": 30}, {"_id":2, "host":"localhost:8888", "priority": 20}, {"_id":3, "host":"localhost:9999", "priority": 10}] }})


4:启动mongo提供的路由

Nicebuild:distributed rainyhao$ mongos --port 3333 --configdb cfgset/localhost:7777,localhost:8888,localhost:9999


5:向配置存储副本集中, 添加数据存储结点的配置信息

Nicebuild:distributed rainyhao$ mongo localhost:3333/admin

mongos> db.runCommand({"addshard": "localhost:4444", allowLocal:true})

mongos> db.runCommand({"addshard": "localhost:5555", allowLocal:true})

mongos> db.runCommand({"addshard": "localhost:6666", allowLocal:true})


设置要分片的数据库

mongos> db.runCommand({"enablesharding": "test" });

设置要分片的集合

mongos> db.runCommand({"shardcollection": "test.person", "key": {age:1}}) # 表示按存入对象的age属性分片


6:测试添加数据

mongos> for (var i = 1; i <= 10000000;i++) { db.person.insert({name:"hello", age:i}));}


1000万数据会分到4444,5555,6666三个节点中存储

分片存得不太平均,不知道还有哪里需要配置的


备注

1:第一次配置环境的过程,数据结点的配置结点可以没有启动顺序

当配置完成之后,全部服务停止,再次启动的时候,需要先启动配置结点,再启动数据结点


2:分布式分片存储的时候,被分片的字段,不能进行更新

如上边的以age作为分片,就不能更新age


  • 发表于 2018-06-11 16:41
  • 阅读 ( 300 )
  • 分类:数据库

条评论

请先 登录 后评论
不写代码的码农
乾震坎坤艮离兑巽

java程序员

3 篇文章

作家榜 »

  1. 小编 文章
返回顶部
部分文章转自于网络,若有侵权请联系我们删除