SlideShare una empresa de Scribd logo
1 de 10
Mongo 之架构部署 (Replica Sets+Sharding)




1、环境




要构建一个 MongoDB Sharding Cluster,需要三种角色:
•Shard Server: mongod 实例,用于存储实际的数据块。
创建人:李航
围脖:http://weibo.com/lidaohang§
•Config Server: mongod 实例,存储了整个 Cluster Metadata,其中包括 chunk 信息。
•Route Server: mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像单一进程
 数据库。
方案一:
192.168.136.14    192.168.136.15    192.168.136.16      192.168.136.26      192.168.136.29
Shard1(master)    Shard2(master)    Shard3(master)      Shard1(slave)       Shard1(arbiter)
Shard2(slave)     Shard3(slave)     Shard1(slave)       Shard3(slave)       Shard2(arbiter)
Shard3(arbiter)   Shard1(arbiter)   Shard2(arbiter)     Shard2(slave)       Shard3 (arbiter)



1.节点:
 S1: 192.168.136..14,192.168.136..26,192.168.136..16,192.168.136.15,192.168.136.29(arbiter)

S2: 192.168.136.15,192.168.136.26,192.168.136.14,192.168.136.16,192.168.136.29(arbiter)
S3: 192.168.136.16,192.168.136.26,192.168.136.15,192.168.136.14,192.168.136.29(arbiter)



c

主机                              端口信息
192.168.136.14                  mongod shard1:27017(master)
                                mongod shard2:27018(slave)
                                mongod shard3:27019(arbiter)
                                mongod config:30000
                                mongs:40000
192.168.136.15                  mongod shard1:27017(arbiter)
                                mongod shard2:27018(master)
                                mongod shard3:27019(slave)
                                mongod config:30000
                                mongs:40000
192.168.136.16                  mongod shard1:27017(slave)
                                mongod shard2:27018(arbiter)
                                mongod shard3:27019(master)
                                mongod config:30000
                                mongs:40000
192.168.136.26                  mongod shard1:27017(slave)
                                mongod shard2:27018(slave)
                                mongod shard3:27019(slave)
192.168.136.29                  mongod shard1:27017(arbiter)
                                mongod shard2:27018(arbiter)
                                mongod shard3:27019(arbiter)




创建人:李航
围脖:http://weibo.com/lidaohang§
2、安装部署


软件准备及目录
1.下载 mongodb 程序
 curl -O http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-1.8.3.tgz
2.解压 mongodb-linux-x86_64-2.0.0.tgz
 tar zxvf mongodb-linux-x86_64-1.8.3.tgz
3.重命名 mongodb-linux-x86_64-2.0.0.tgz 为 mongodb
 mv mongodb-linux-x86_64-2.0.0 mongodb
4.进入 mongodb 目录
 cd mongodb
5.新建文件夹 data
 mkdir data
 mkdir logs




配置 Replica Sets,Config Server

※配置配置文件 conf
# 1.start_mongod Shard1.conf
shardsvr=true
port=27017
dbpath=/data/database/shard1/
logpath=/data/logs/shard1.log
logappend=true
fork=true
replSet=s1
rest=true
journal=true

# 2.start_mongod Shard2.conf
shardsvr=true
port=27018
dbpath=/data/database/shard2/
logpath=/data/logs/shard2.log
logappend=true
fork=true
replSet=s2
rest=true
创建人:李航
围脖:http://weibo.com/lidaohang§
journal=true

# 3.start_mongod Shard3.conf
shardsvr=true
port=27019
dbpath=/data/database/shard3/
logpath=/data/logs/shard3.log
logappend=true
fork=true
replSet=s3
rest=true
journal=true




192.168.136.14
1.创建相应的文件夹(注意此处的 testadmin 是客户端登陆名)
mkdir                        -p /data/database/shard1
mkdir                        -p /data/database/shard2
mkdir                        -p /data/database/shard3
mkdir -p /data/database/config
mkdir -p /data/logs

2.配置 mongod
./mongod --config /mongodb/shard1.conf
./mongod --config /mongodb/shard2.conf
./mongod --config /mongodb/shard3.conf
./mongod --config /mongodb/configsvr.conf

3.查看 mongod 的进程是否启动
ps aux | grep mongodb | grep -v grep



4.初始化 replica sets(此处 ip 是对应的内网 IP)
/testadmin/mongodb/bin/mongo --port 27017

   config = {_id: 's1', members: [{_id: 0,host: '192.168.136.14:27017',priority:5},{_id: 1, host:
'192.168.136.26:27017',priority:2},{_id: 2, host: '192.168.136.16:27017',priority:.5},{_id: 3, host:
'192.168.136.15:27017',arbiterOnly: true},{_id: 4, host: '192.168.136.29:27017', arbiterOnly:
true}]}


创建人:李航
围脖:http://weibo.com/lidaohang§
rs.initiate(config)
   rs.status()



192.168.136.15
1.创建相应的文件夹(注意此处的 testadmin 是客户端登陆名)
mkdir                        -p /data/database/shard1
mkdir                        -p /data/database/shard2
mkdir                        -p /data/database/shard3
mkdir -p /data/database/config
mkdir -p /data/logs



2.配置 mongod
./mongod --config /mongodb/shard1.conf
./mongod --config /mongodb/shard2.conf
./mongod --config /mongodb/shard3.conf
./mongod --config /mongodb/configsvr.conf

3.查看 mongod 的进程是否启动
ps aux | grep mongodb | grep -v grep

4.初始化 replica sets

/testadmin/mongodb/bin/mongo --port 27018

   config={_id: 's2', members: [{_id: 0, host: '192.168.136.15:27018',priority:5},{_id: 1, host:
'192.168.136.26:27018',priority:2},{_id: 2, host: '192.168.136.14:27018',priority:.5},{_id: 3, host:
'192.168.136.16:27018', arbiterOnly: true},{_id: 4, host: '192.168.136.29:27018', arbiterOnly:
true}]}

 rs.initiate(config)




192.168.136.16
1.创建相应的文件夹(注意此处的 testadmin 是客户端登陆名)
mkdir                 -p         /data/shard1
mkdir                 -p         /data/shard2
mkdir                 -p         /data/shard3
mkdir -p /data/config
mkdir -p /data/logs


创建人:李航
围脖:http://weibo.com/lidaohang§
2.配置 mongod
./mongod --config /mongodb/shard1.conf
./mongod --config /mongodb/shard2.conf
./mongod --config /mongodb/shard3.conf
./mongod --config /mongodb/configsvr.conf

3.查看 mongod 的进程是否启动
ps aux | grep mongodb | grep -v grep

4.初始化 replica sets

/testadmin/mongodb/bin/mongo --port 27019

  config={_id: 's3',members: [{_id: 0, host: '192.168.136.16:27019',priority:5},{_id: 1, host:
'192.168.136.26:27019',priority:2},{_id: 2, host: '192.168.136.15:27019',priority:.5},{_id: 3, host:
'192.168.136.14:27019', arbiterOnly: true},{_id: 4, host: '192.168.136.29:27019', arbiterOnly:
true}]}
rs.status()



192.168.136.26,192.168.136.29 分别执行如下:
1.创建相应的文件夹(注意此处的 testadmin 是客户端登陆名)
mkdir                         -p      /data/shard1
mkdir                         -p      /data/shard2
mkdir                         -p      /data/shard3
mkdir -p /data/config
mkdir -p /data/logs




2.配置 mongod
./mongod --config /mongodb/shard1.conf
./mongod --config /mongodb/shard2.conf
./mongod --config /mongodb/shard3.conf

3.查看 mongod 的进程是否启动
ps aux | grep mongodb | grep -v grep




配置 Mongos(在每一台机子上建立路由)


创建人:李航
围脖:http://weibo.com/lidaohang§
/mongodb/bin/

./mongos     --fork    --port   40000     --logpath    /data/logs/mongos.log         --configdb
192.168.136.14:30000,192.168.136.15:30000,192.168.136.16:30000




添加分片
1 连接任意一台,其他无需这样操作:


/home/testadmin/bin/mongo                     --port               40000
use                                       admin
db.runCommand({addshard:'s1/192.168.136.14:27017,192.168.136.26:27017,192.168.136.16:270
17'})
db.runCommand({addshard:'s2/192.168.136.15:27018,192.168.136.26:27018,192.168.136.14:270
18'})
db.runCommand({addshard:'s3/192.168.136.16:27019,192.168.136.26:27019,192.168.136.15:270
19'})

db.runCommand({ listshards:1 })

db.runCommand({                  enablesharding:'weibo'                     })
db.runCommand({shardcollection:'weibo.test', key:{_id:1},unique:true}) printShardingStatus()

db.data.stats();




创建人:李航
围脖:http://weibo.com/lidaohang§
3、用户认证


1.注意 1.9.1 之前复制集不支持用户认证,只能通过 keyFile 密匙文件,幸好这几天 2.0 正式
版出来了,很多功能问题都已解决。呵呵

注意:用户验证,启动 mongod 必须添加--auth
#设置用户名和密码
>use test
>db.addUser('mongo','456123');
>db.auth('mongo','456123')
>db.system.users.find() --查看该用户是否添加成功
>db.system.users.remove('mongo','456123')
>mongo 数据库 -u mongo -p


注意:启动时必须添加--auth 用户权限才会生效,第一次配置完成后,没效果就重启下。




4、鸭梨大了怎么办?添加服务器,怎么样添加呢?


1.如果读得鸭梨大了,则添加加 slave 节点,分散读得鸭梨。
   启动后,在 primary 节点中添加节点
   如:rs.add("10.168.0.100:27017") 当我们看到变为 secondary 后,就一切正常。
2.如果写的鸭梨打了,则可以添加一组 shard 节点分散写的鸭梨。
   如:如上所述启动 mongod,添加即可。


五、备份恢复策略


增量备份(添加延迟备份节点)
1、利用另外一台 secondary 机器传送数据
2、在新机器上中配置文件中添加 fastsync=true 配置(当需要从有数据中启动节点,那么必
创建人:李航
围脖:http://weibo.com/lidaohang§
须加上 fastsync=true ,否则启动会报错,如果是从主库直接同步所有数据,那么就不需要
添加这个参数)
3、启动后,在 primary 节点中添加节点
如:rs.add("10.168.0.102:27017") 当我们看到变为 secondary 后,就一切正常,可以正常提
供线上服务了
4、通过 rs.conf()命令查看现在的节点信息(需要 admin 库密码权限)
5、rs.remove("10.168.0.102:27017")删除节点
6、添加 arbiter 节点:rs.addArb("10.73.24.171:19003")
7、添加延时备份机器:
rs.add({_id:5,host:"10.168.0.102:27017",priority:0,slaveDelay:300});
rs.add({_id:5,host:"10.168.0.102:27018",priority:0,slaveDelay:300});
rs.add({_id:5,host:"10.168.0.102:27019",priority:0,slaveDelay:300});
注意:slaveDelay 单位秒.
8、出现这个错误时:replSet error RS102 too stale to catch up,我们可以
db.printReplicationInfo()查看主库、从库的 oplog 信息;
利用延迟备份节点恢复数据

 1. 先把延迟备份节点的数据,备份到各节点的 master 机子上。如:

    #./mongodump -h 192.168.136.14:27017 -d weibo -o /data/mongoback/

    #./mongodump -h 192.168.136.15:27018 -d weibo -o /data/mongoback/

    #./mongodump -h 192.168.136.16:27019 -d weibo -o /data/mongoback/


 2. 把备份的数据导入到个节点的 master 上。如:

    建议先修复下,压缩空间

    db.repairDatabase();修复数据(和压缩(删除数据)空间)

    ./mongorestore -h 127.0.0.1:27017 --directoryperdb /data/mongoback --drop --indexesLast

    ./mongorestore -h 127.0.0.1:27018 --directoryperdb /data/mongoback --drop --indexesLast

    ./mongorestore -h 127.0.0.1:27019 --directoryperdb /data/mongoback --drop --indexesLast




全量备份(添加延迟备份节点)
1. 写好脚本定期凌晨备份数据,如:
   ./mongodump -h 10.168.0.187:40000 -d weibo -o /data/mongoback/
2. 恢复数据
创建人:李航
围脖:http://weibo.com/lidaohang§
3. 建议先修复下,压缩空间

4. db.repairDatabase();修复数据(和压缩(删除数据)空间)

   ./mongorestore -h 10.168.0.187:40000 --directoryperdb /data/mongoback --drop --indexesLast




六、 其他问题 ~


1.如果启动不成功,则尝试修复.如:
   ./mongod --port 27017 --repair --dbpath /data/database/shard1/
2 如果 master 节点 kill 了,则起来之后通过 rs.stepDown(100)让出 master 的位置。
3.其他问题请随时欢迎提出,联系我(李航),围脖:http://weibo.com/lidaohang~




创建人:李航
围脖:http://weibo.com/lidaohang§

Más contenido relacionado

La actualidad más candente

Mongo db &lamp;redis,nosql
Mongo db &lamp;redis,nosqlMongo db &lamp;redis,nosql
Mongo db &lamp;redis,nosqltaocheng1989
 
Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境
Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境
Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境dbabc
 
MongoDB for C# developer
MongoDB for C# developerMongoDB for C# developer
MongoDB for C# developerdianming.song
 
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复MySQL源码分析.03.InnoDB 物理文件格式与数据恢复
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复Lixun Peng
 
Mongo简介
Mongo简介Mongo简介
Mongo简介wuda0112
 
MongoDB Basics and Tutorial
MongoDB Basics and TutorialMongoDB Basics and Tutorial
MongoDB Basics and TutorialHo Kim
 
Mongo db技术分享
Mongo db技术分享Mongo db技术分享
Mongo db技术分享晓锋 陈
 
X64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 newX64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 newYiwei Ma
 
Cuda optimization
Cuda optimizationCuda optimization
Cuda optimizationCHIHTE LU
 
MongoDB Basic
MongoDB BasicMongoDB Basic
MongoDB Basicsimplels
 
Mysql展示功能与源码对应
Mysql展示功能与源码对应Mysql展示功能与源码对应
Mysql展示功能与源码对应zhaolinjnu
 
用Min Gw32,Msys搭建Win32下的开发环境
用Min Gw32,Msys搭建Win32下的开发环境用Min Gw32,Msys搭建Win32下的开发环境
用Min Gw32,Msys搭建Win32下的开发环境George Ang
 
ElasticSearch Training#2 (advanced concepts)-ESCC#1
ElasticSearch Training#2 (advanced concepts)-ESCC#1ElasticSearch Training#2 (advanced concepts)-ESCC#1
ElasticSearch Training#2 (advanced concepts)-ESCC#1medcl
 
高性能No sql数据库redis
高性能No sql数据库redis高性能No sql数据库redis
高性能No sql数据库redispaitoubing
 
Ibm web sphere_portal_v6_安装指南
Ibm web sphere_portal_v6_安装指南Ibm web sphere_portal_v6_安装指南
Ibm web sphere_portal_v6_安装指南mycoolmen1987
 
Advanced heap exploitaion
Advanced heap exploitaionAdvanced heap exploitaion
Advanced heap exploitaionAngel Boy
 

La actualidad más candente (19)

Mongo db &lamp;redis,nosql
Mongo db &lamp;redis,nosqlMongo db &lamp;redis,nosql
Mongo db &lamp;redis,nosql
 
Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境
Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境
Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境
 
MongoDB for C# developer
MongoDB for C# developerMongoDB for C# developer
MongoDB for C# developer
 
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复MySQL源码分析.03.InnoDB 物理文件格式与数据恢复
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复
 
Mongo简介
Mongo简介Mongo简介
Mongo简介
 
MongoDB Basics and Tutorial
MongoDB Basics and TutorialMongoDB Basics and Tutorial
MongoDB Basics and Tutorial
 
Mongodb学习手册
Mongodb学习手册Mongodb学习手册
Mongodb学习手册
 
2016 nas 年會簡報
2016 nas 年會簡報2016 nas 年會簡報
2016 nas 年會簡報
 
Mongo db技术分享
Mongo db技术分享Mongo db技术分享
Mongo db技术分享
 
X64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 newX64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 new
 
Cuda optimization
Cuda optimizationCuda optimization
Cuda optimization
 
MongoDB Basic
MongoDB BasicMongoDB Basic
MongoDB Basic
 
Mysql展示功能与源码对应
Mysql展示功能与源码对应Mysql展示功能与源码对应
Mysql展示功能与源码对应
 
MySQL aio
MySQL aioMySQL aio
MySQL aio
 
用Min Gw32,Msys搭建Win32下的开发环境
用Min Gw32,Msys搭建Win32下的开发环境用Min Gw32,Msys搭建Win32下的开发环境
用Min Gw32,Msys搭建Win32下的开发环境
 
ElasticSearch Training#2 (advanced concepts)-ESCC#1
ElasticSearch Training#2 (advanced concepts)-ESCC#1ElasticSearch Training#2 (advanced concepts)-ESCC#1
ElasticSearch Training#2 (advanced concepts)-ESCC#1
 
高性能No sql数据库redis
高性能No sql数据库redis高性能No sql数据库redis
高性能No sql数据库redis
 
Ibm web sphere_portal_v6_安装指南
Ibm web sphere_portal_v6_安装指南Ibm web sphere_portal_v6_安装指南
Ibm web sphere_portal_v6_安装指南
 
Advanced heap exploitaion
Advanced heap exploitaionAdvanced heap exploitaion
Advanced heap exploitaion
 

Destacado

Spring 2 vega
Spring 2 vegaSpring 2 vega
Spring 2 vegaSimpony
 
Fall 2 vega
Fall 2 vegaFall 2 vega
Fall 2 vegaSimpony
 
New YA Titles
New YA TitlesNew YA Titles
New YA Titlesmmsmedia
 
Fabulares mission
Fabulares missionFabulares mission
Fabulares missionSimpony
 
Varnish Web Accelerator
Varnish Web AcceleratorVarnish Web Accelerator
Varnish Web AcceleratorRahul Ghose
 
Value chain analysis
Value chain analysisValue chain analysis
Value chain analysisMayank Bhatt
 
Georgia "The Peach State"
Georgia "The Peach State"Georgia "The Peach State"
Georgia "The Peach State"Benjamin Kepner
 
Manzanar presentation
Manzanar presentationManzanar presentation
Manzanar presentationjillmarucut
 
New diamond composite ultrahard material for drilling of hard rocks (Sobolev)
New diamond composite ultrahard material for drilling of hard rocks (Sobolev)New diamond composite ultrahard material for drilling of hard rocks (Sobolev)
New diamond composite ultrahard material for drilling of hard rocks (Sobolev)Sergey Sobolev
 
Tell_Your_Resume_Meeting_3
Tell_Your_Resume_Meeting_3Tell_Your_Resume_Meeting_3
Tell_Your_Resume_Meeting_3Links-up
 
монгол орны хамгийн хамгийн
монгол орны хамгийн хамгийнмонгол орны хамгийн хамгийн
монгол орны хамгийн хамгийнneegii
 
PubMed in 10steps 041811
PubMed in 10steps 041811PubMed in 10steps 041811
PubMed in 10steps 041811kncarlso
 
1a parte: Storia del moderno sistema economico-finanziario
1a parte: Storia del moderno sistema economico-finanziario1a parte: Storia del moderno sistema economico-finanziario
1a parte: Storia del moderno sistema economico-finanziarioelegias
 
путешествие в страну вышивания
путешествие в страну вышиванияпутешествие в страну вышивания
путешествие в страну вышиванияNoskova
 
Uitnodiging kempenconferentie.pps
Uitnodiging kempenconferentie.ppsUitnodiging kempenconferentie.pps
Uitnodiging kempenconferentie.ppsDJAN01
 
цахим тест
цахим тестцахим тест
цахим тестneegii
 

Destacado (20)

Spring 2 vega
Spring 2 vegaSpring 2 vega
Spring 2 vega
 
Fall 2 vega
Fall 2 vegaFall 2 vega
Fall 2 vega
 
New YA Titles
New YA TitlesNew YA Titles
New YA Titles
 
Fabulares mission
Fabulares missionFabulares mission
Fabulares mission
 
Varnish Web Accelerator
Varnish Web AcceleratorVarnish Web Accelerator
Varnish Web Accelerator
 
Internet Tarihi
Internet TarihiInternet Tarihi
Internet Tarihi
 
Value chain analysis
Value chain analysisValue chain analysis
Value chain analysis
 
Georgia "The Peach State"
Georgia "The Peach State"Georgia "The Peach State"
Georgia "The Peach State"
 
Yummy
YummyYummy
Yummy
 
Manzanar presentation
Manzanar presentationManzanar presentation
Manzanar presentation
 
New diamond composite ultrahard material for drilling of hard rocks (Sobolev)
New diamond composite ultrahard material for drilling of hard rocks (Sobolev)New diamond composite ultrahard material for drilling of hard rocks (Sobolev)
New diamond composite ultrahard material for drilling of hard rocks (Sobolev)
 
Tell_Your_Resume_Meeting_3
Tell_Your_Resume_Meeting_3Tell_Your_Resume_Meeting_3
Tell_Your_Resume_Meeting_3
 
Owh
OwhOwh
Owh
 
монгол орны хамгийн хамгийн
монгол орны хамгийн хамгийнмонгол орны хамгийн хамгийн
монгол орны хамгийн хамгийн
 
PubMed in 10steps 041811
PubMed in 10steps 041811PubMed in 10steps 041811
PubMed in 10steps 041811
 
1a parte: Storia del moderno sistema economico-finanziario
1a parte: Storia del moderno sistema economico-finanziario1a parte: Storia del moderno sistema economico-finanziario
1a parte: Storia del moderno sistema economico-finanziario
 
ARC
ARCARC
ARC
 
путешествие в страну вышивания
путешествие в страну вышиванияпутешествие в страну вышивания
путешествие в страну вышивания
 
Uitnodiging kempenconferentie.pps
Uitnodiging kempenconferentie.ppsUitnodiging kempenconferentie.pps
Uitnodiging kempenconferentie.pps
 
цахим тест
цахим тестцахим тест
цахим тест
 

Similar a Mongo db部署架构之优先方案

Oda安装 恢复步骤
Oda安装 恢复步骤Oda安装 恢复步骤
Oda安装 恢复步骤n-lauren
 
Mongo db技术交流
Mongo db技术交流Mongo db技术交流
Mongo db技术交流liuts
 
Mongodb
MongodbMongodb
Mongodbbj
 
Mysql proxy+mysql-mmm
Mysql proxy+mysql-mmmMysql proxy+mysql-mmm
Mysql proxy+mysql-mmmYiwei Ma
 
Spark on Yarn & Mongodb(Big Data Platform)
Spark on Yarn & Mongodb(Big Data Platform)Spark on Yarn & Mongodb(Big Data Platform)
Spark on Yarn & Mongodb(Big Data Platform)柄宏 陳
 
Mysql mmm安装指南(翻译)
Mysql mmm安装指南(翻译)Mysql mmm安装指南(翻译)
Mysql mmm安装指南(翻译)Yiwei Ma
 
SSDB 入门基础
SSDB 入门基础SSDB 入门基础
SSDB 入门基础ideawu
 
Android系统移植技术详解
Android系统移植技术详解Android系统移植技术详解
Android系统移植技术详解zzc89522
 
Oracle10g Rac Configuration For Linux X86
Oracle10g Rac Configuration For Linux X86Oracle10g Rac Configuration For Linux X86
Oracle10g Rac Configuration For Linux X86dbabc
 
用Raspberry PI學Linux驅動程式
用Raspberry PI學Linux驅動程式用Raspberry PI學Linux驅動程式
用Raspberry PI學Linux驅動程式Stanley Ho
 
Mongo db技术分享
Mongo db技术分享Mongo db技术分享
Mongo db技术分享晓锋 陈
 
181201_CoAP_coding365
181201_CoAP_coding365181201_CoAP_coding365
181201_CoAP_coding365Peter Yi
 
Hadoop+spark實作
Hadoop+spark實作Hadoop+spark實作
Hadoop+spark實作FEG
 
Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍yczealot
 
Install Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 LInstall Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 Lheima911
 
MySQL源码分析.01.代码结构与基本流程
MySQL源码分析.01.代码结构与基本流程MySQL源码分析.01.代码结构与基本流程
MySQL源码分析.01.代码结构与基本流程Lixun Peng
 
Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)Yiwei Ma
 
Heartbeat+my sql+drbd构建高可用mysql方案
Heartbeat+my sql+drbd构建高可用mysql方案Heartbeat+my sql+drbd构建高可用mysql方案
Heartbeat+my sql+drbd构建高可用mysql方案cao jincheng
 
第11讲 管理Cisco互联网络
第11讲 管理Cisco互联网络第11讲 管理Cisco互联网络
第11讲 管理Cisco互联网络F.l. Yu
 

Similar a Mongo db部署架构之优先方案 (20)

Oda安装 恢复步骤
Oda安装 恢复步骤Oda安装 恢复步骤
Oda安装 恢复步骤
 
Mongo db技术交流
Mongo db技术交流Mongo db技术交流
Mongo db技术交流
 
Mongodb
MongodbMongodb
Mongodb
 
Mysql proxy+mysql-mmm
Mysql proxy+mysql-mmmMysql proxy+mysql-mmm
Mysql proxy+mysql-mmm
 
Spark on Yarn & Mongodb(Big Data Platform)
Spark on Yarn & Mongodb(Big Data Platform)Spark on Yarn & Mongodb(Big Data Platform)
Spark on Yarn & Mongodb(Big Data Platform)
 
Mysql mmm安装指南(翻译)
Mysql mmm安装指南(翻译)Mysql mmm安装指南(翻译)
Mysql mmm安装指南(翻译)
 
SSDB 入门基础
SSDB 入门基础SSDB 入门基础
SSDB 入门基础
 
Android系统移植技术详解
Android系统移植技术详解Android系统移植技术详解
Android系统移植技术详解
 
Oracle10g Rac Configuration For Linux X86
Oracle10g Rac Configuration For Linux X86Oracle10g Rac Configuration For Linux X86
Oracle10g Rac Configuration For Linux X86
 
Asm+aix
Asm+aixAsm+aix
Asm+aix
 
用Raspberry PI學Linux驅動程式
用Raspberry PI學Linux驅動程式用Raspberry PI學Linux驅動程式
用Raspberry PI學Linux驅動程式
 
Mongo db技术分享
Mongo db技术分享Mongo db技术分享
Mongo db技术分享
 
181201_CoAP_coding365
181201_CoAP_coding365181201_CoAP_coding365
181201_CoAP_coding365
 
Hadoop+spark實作
Hadoop+spark實作Hadoop+spark實作
Hadoop+spark實作
 
Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍
 
Install Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 LInstall Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 L
 
MySQL源码分析.01.代码结构与基本流程
MySQL源码分析.01.代码结构与基本流程MySQL源码分析.01.代码结构与基本流程
MySQL源码分析.01.代码结构与基本流程
 
Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)
 
Heartbeat+my sql+drbd构建高可用mysql方案
Heartbeat+my sql+drbd构建高可用mysql方案Heartbeat+my sql+drbd构建高可用mysql方案
Heartbeat+my sql+drbd构建高可用mysql方案
 
第11讲 管理Cisco互联网络
第11讲 管理Cisco互联网络第11讲 管理Cisco互联网络
第11讲 管理Cisco互联网络
 

Más de Lucien Li

Nginx共享内存
Nginx共享内存Nginx共享内存
Nginx共享内存Lucien Li
 
深入学习Mongo db
深入学习Mongo db深入学习Mongo db
深入学习Mongo dbLucien Li
 
iPhone,ios,Object-c基础入门
iPhone,ios,Object-c基础入门iPhone,ios,Object-c基础入门
iPhone,ios,Object-c基础入门Lucien Li
 
iPhone,ios,Object-C基础入门
iPhone,ios,Object-C基础入门iPhone,ios,Object-C基础入门
iPhone,ios,Object-C基础入门Lucien Li
 
Mongo快速入门
Mongo快速入门Mongo快速入门
Mongo快速入门Lucien Li
 

Más de Lucien Li (6)

Nginx共享内存
Nginx共享内存Nginx共享内存
Nginx共享内存
 
ios分享
ios分享ios分享
ios分享
 
深入学习Mongo db
深入学习Mongo db深入学习Mongo db
深入学习Mongo db
 
iPhone,ios,Object-c基础入门
iPhone,ios,Object-c基础入门iPhone,ios,Object-c基础入门
iPhone,ios,Object-c基础入门
 
iPhone,ios,Object-C基础入门
iPhone,ios,Object-C基础入门iPhone,ios,Object-C基础入门
iPhone,ios,Object-C基础入门
 
Mongo快速入门
Mongo快速入门Mongo快速入门
Mongo快速入门
 

Mongo db部署架构之优先方案

  • 1. Mongo 之架构部署 (Replica Sets+Sharding) 1、环境 要构建一个 MongoDB Sharding Cluster,需要三种角色: •Shard Server: mongod 实例,用于存储实际的数据块。 创建人:李航 围脖:http://weibo.com/lidaohang§
  • 2. •Config Server: mongod 实例,存储了整个 Cluster Metadata,其中包括 chunk 信息。 •Route Server: mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像单一进程 数据库。 方案一: 192.168.136.14 192.168.136.15 192.168.136.16 192.168.136.26 192.168.136.29 Shard1(master) Shard2(master) Shard3(master) Shard1(slave) Shard1(arbiter) Shard2(slave) Shard3(slave) Shard1(slave) Shard3(slave) Shard2(arbiter) Shard3(arbiter) Shard1(arbiter) Shard2(arbiter) Shard2(slave) Shard3 (arbiter) 1.节点: S1: 192.168.136..14,192.168.136..26,192.168.136..16,192.168.136.15,192.168.136.29(arbiter) S2: 192.168.136.15,192.168.136.26,192.168.136.14,192.168.136.16,192.168.136.29(arbiter) S3: 192.168.136.16,192.168.136.26,192.168.136.15,192.168.136.14,192.168.136.29(arbiter) c 主机 端口信息 192.168.136.14 mongod shard1:27017(master) mongod shard2:27018(slave) mongod shard3:27019(arbiter) mongod config:30000 mongs:40000 192.168.136.15 mongod shard1:27017(arbiter) mongod shard2:27018(master) mongod shard3:27019(slave) mongod config:30000 mongs:40000 192.168.136.16 mongod shard1:27017(slave) mongod shard2:27018(arbiter) mongod shard3:27019(master) mongod config:30000 mongs:40000 192.168.136.26 mongod shard1:27017(slave) mongod shard2:27018(slave) mongod shard3:27019(slave) 192.168.136.29 mongod shard1:27017(arbiter) mongod shard2:27018(arbiter) mongod shard3:27019(arbiter) 创建人:李航 围脖:http://weibo.com/lidaohang§
  • 3. 2、安装部署 软件准备及目录 1.下载 mongodb 程序 curl -O http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-1.8.3.tgz 2.解压 mongodb-linux-x86_64-2.0.0.tgz tar zxvf mongodb-linux-x86_64-1.8.3.tgz 3.重命名 mongodb-linux-x86_64-2.0.0.tgz 为 mongodb mv mongodb-linux-x86_64-2.0.0 mongodb 4.进入 mongodb 目录 cd mongodb 5.新建文件夹 data mkdir data mkdir logs 配置 Replica Sets,Config Server ※配置配置文件 conf # 1.start_mongod Shard1.conf shardsvr=true port=27017 dbpath=/data/database/shard1/ logpath=/data/logs/shard1.log logappend=true fork=true replSet=s1 rest=true journal=true # 2.start_mongod Shard2.conf shardsvr=true port=27018 dbpath=/data/database/shard2/ logpath=/data/logs/shard2.log logappend=true fork=true replSet=s2 rest=true 创建人:李航 围脖:http://weibo.com/lidaohang§
  • 4. journal=true # 3.start_mongod Shard3.conf shardsvr=true port=27019 dbpath=/data/database/shard3/ logpath=/data/logs/shard3.log logappend=true fork=true replSet=s3 rest=true journal=true 192.168.136.14 1.创建相应的文件夹(注意此处的 testadmin 是客户端登陆名) mkdir -p /data/database/shard1 mkdir -p /data/database/shard2 mkdir -p /data/database/shard3 mkdir -p /data/database/config mkdir -p /data/logs 2.配置 mongod ./mongod --config /mongodb/shard1.conf ./mongod --config /mongodb/shard2.conf ./mongod --config /mongodb/shard3.conf ./mongod --config /mongodb/configsvr.conf 3.查看 mongod 的进程是否启动 ps aux | grep mongodb | grep -v grep 4.初始化 replica sets(此处 ip 是对应的内网 IP) /testadmin/mongodb/bin/mongo --port 27017 config = {_id: 's1', members: [{_id: 0,host: '192.168.136.14:27017',priority:5},{_id: 1, host: '192.168.136.26:27017',priority:2},{_id: 2, host: '192.168.136.16:27017',priority:.5},{_id: 3, host: '192.168.136.15:27017',arbiterOnly: true},{_id: 4, host: '192.168.136.29:27017', arbiterOnly: true}]} 创建人:李航 围脖:http://weibo.com/lidaohang§
  • 5. rs.initiate(config) rs.status() 192.168.136.15 1.创建相应的文件夹(注意此处的 testadmin 是客户端登陆名) mkdir -p /data/database/shard1 mkdir -p /data/database/shard2 mkdir -p /data/database/shard3 mkdir -p /data/database/config mkdir -p /data/logs 2.配置 mongod ./mongod --config /mongodb/shard1.conf ./mongod --config /mongodb/shard2.conf ./mongod --config /mongodb/shard3.conf ./mongod --config /mongodb/configsvr.conf 3.查看 mongod 的进程是否启动 ps aux | grep mongodb | grep -v grep 4.初始化 replica sets /testadmin/mongodb/bin/mongo --port 27018 config={_id: 's2', members: [{_id: 0, host: '192.168.136.15:27018',priority:5},{_id: 1, host: '192.168.136.26:27018',priority:2},{_id: 2, host: '192.168.136.14:27018',priority:.5},{_id: 3, host: '192.168.136.16:27018', arbiterOnly: true},{_id: 4, host: '192.168.136.29:27018', arbiterOnly: true}]} rs.initiate(config) 192.168.136.16 1.创建相应的文件夹(注意此处的 testadmin 是客户端登陆名) mkdir -p /data/shard1 mkdir -p /data/shard2 mkdir -p /data/shard3 mkdir -p /data/config mkdir -p /data/logs 创建人:李航 围脖:http://weibo.com/lidaohang§
  • 6. 2.配置 mongod ./mongod --config /mongodb/shard1.conf ./mongod --config /mongodb/shard2.conf ./mongod --config /mongodb/shard3.conf ./mongod --config /mongodb/configsvr.conf 3.查看 mongod 的进程是否启动 ps aux | grep mongodb | grep -v grep 4.初始化 replica sets /testadmin/mongodb/bin/mongo --port 27019 config={_id: 's3',members: [{_id: 0, host: '192.168.136.16:27019',priority:5},{_id: 1, host: '192.168.136.26:27019',priority:2},{_id: 2, host: '192.168.136.15:27019',priority:.5},{_id: 3, host: '192.168.136.14:27019', arbiterOnly: true},{_id: 4, host: '192.168.136.29:27019', arbiterOnly: true}]} rs.status() 192.168.136.26,192.168.136.29 分别执行如下: 1.创建相应的文件夹(注意此处的 testadmin 是客户端登陆名) mkdir -p /data/shard1 mkdir -p /data/shard2 mkdir -p /data/shard3 mkdir -p /data/config mkdir -p /data/logs 2.配置 mongod ./mongod --config /mongodb/shard1.conf ./mongod --config /mongodb/shard2.conf ./mongod --config /mongodb/shard3.conf 3.查看 mongod 的进程是否启动 ps aux | grep mongodb | grep -v grep 配置 Mongos(在每一台机子上建立路由) 创建人:李航 围脖:http://weibo.com/lidaohang§
  • 7. /mongodb/bin/ ./mongos --fork --port 40000 --logpath /data/logs/mongos.log --configdb 192.168.136.14:30000,192.168.136.15:30000,192.168.136.16:30000 添加分片 1 连接任意一台,其他无需这样操作: /home/testadmin/bin/mongo --port 40000 use admin db.runCommand({addshard:'s1/192.168.136.14:27017,192.168.136.26:27017,192.168.136.16:270 17'}) db.runCommand({addshard:'s2/192.168.136.15:27018,192.168.136.26:27018,192.168.136.14:270 18'}) db.runCommand({addshard:'s3/192.168.136.16:27019,192.168.136.26:27019,192.168.136.15:270 19'}) db.runCommand({ listshards:1 }) db.runCommand({ enablesharding:'weibo' }) db.runCommand({shardcollection:'weibo.test', key:{_id:1},unique:true}) printShardingStatus() db.data.stats(); 创建人:李航 围脖:http://weibo.com/lidaohang§
  • 8. 3、用户认证 1.注意 1.9.1 之前复制集不支持用户认证,只能通过 keyFile 密匙文件,幸好这几天 2.0 正式 版出来了,很多功能问题都已解决。呵呵 注意:用户验证,启动 mongod 必须添加--auth #设置用户名和密码 >use test >db.addUser('mongo','456123'); >db.auth('mongo','456123') >db.system.users.find() --查看该用户是否添加成功 >db.system.users.remove('mongo','456123') >mongo 数据库 -u mongo -p 注意:启动时必须添加--auth 用户权限才会生效,第一次配置完成后,没效果就重启下。 4、鸭梨大了怎么办?添加服务器,怎么样添加呢? 1.如果读得鸭梨大了,则添加加 slave 节点,分散读得鸭梨。 启动后,在 primary 节点中添加节点 如:rs.add("10.168.0.100:27017") 当我们看到变为 secondary 后,就一切正常。 2.如果写的鸭梨打了,则可以添加一组 shard 节点分散写的鸭梨。 如:如上所述启动 mongod,添加即可。 五、备份恢复策略 增量备份(添加延迟备份节点) 1、利用另外一台 secondary 机器传送数据 2、在新机器上中配置文件中添加 fastsync=true 配置(当需要从有数据中启动节点,那么必 创建人:李航 围脖:http://weibo.com/lidaohang§
  • 9. 须加上 fastsync=true ,否则启动会报错,如果是从主库直接同步所有数据,那么就不需要 添加这个参数) 3、启动后,在 primary 节点中添加节点 如:rs.add("10.168.0.102:27017") 当我们看到变为 secondary 后,就一切正常,可以正常提 供线上服务了 4、通过 rs.conf()命令查看现在的节点信息(需要 admin 库密码权限) 5、rs.remove("10.168.0.102:27017")删除节点 6、添加 arbiter 节点:rs.addArb("10.73.24.171:19003") 7、添加延时备份机器: rs.add({_id:5,host:"10.168.0.102:27017",priority:0,slaveDelay:300}); rs.add({_id:5,host:"10.168.0.102:27018",priority:0,slaveDelay:300}); rs.add({_id:5,host:"10.168.0.102:27019",priority:0,slaveDelay:300}); 注意:slaveDelay 单位秒. 8、出现这个错误时:replSet error RS102 too stale to catch up,我们可以 db.printReplicationInfo()查看主库、从库的 oplog 信息; 利用延迟备份节点恢复数据 1. 先把延迟备份节点的数据,备份到各节点的 master 机子上。如: #./mongodump -h 192.168.136.14:27017 -d weibo -o /data/mongoback/ #./mongodump -h 192.168.136.15:27018 -d weibo -o /data/mongoback/ #./mongodump -h 192.168.136.16:27019 -d weibo -o /data/mongoback/ 2. 把备份的数据导入到个节点的 master 上。如: 建议先修复下,压缩空间 db.repairDatabase();修复数据(和压缩(删除数据)空间) ./mongorestore -h 127.0.0.1:27017 --directoryperdb /data/mongoback --drop --indexesLast ./mongorestore -h 127.0.0.1:27018 --directoryperdb /data/mongoback --drop --indexesLast ./mongorestore -h 127.0.0.1:27019 --directoryperdb /data/mongoback --drop --indexesLast 全量备份(添加延迟备份节点) 1. 写好脚本定期凌晨备份数据,如: ./mongodump -h 10.168.0.187:40000 -d weibo -o /data/mongoback/ 2. 恢复数据 创建人:李航 围脖:http://weibo.com/lidaohang§
  • 10. 3. 建议先修复下,压缩空间 4. db.repairDatabase();修复数据(和压缩(删除数据)空间) ./mongorestore -h 10.168.0.187:40000 --directoryperdb /data/mongoback --drop --indexesLast 六、 其他问题 ~ 1.如果启动不成功,则尝试修复.如: ./mongod --port 27017 --repair --dbpath /data/database/shard1/ 2 如果 master 节点 kill 了,则起来之后通过 rs.stepDown(100)让出 master 的位置。 3.其他问题请随时欢迎提出,联系我(李航),围脖:http://weibo.com/lidaohang~ 创建人:李航 围脖:http://weibo.com/lidaohang§