Mongo db部署架构之优先方案

9
2011/9/16 制 http://weibo.com/lidaohang Mongo 之之之之之(Replica Sets+Sharding) 一、之之 制制 MongoDB Sharding Cluster 制制制 ,: •Shard Server: mongod 制 ,。 •Config Server: mongod 制 Cluster Metadata chunk 制制 •Route Server: mongos 制 制制制制 ,,,一 制制制 10.168.0.103 10.168.0.107 10.168.0.108 10.168.0.109 Shard1 Shard2 Shard3 Shard1 Shard2 Shard1 Shard2 Shard3 Shard3 Shard3 Shard1 Shard2 1.制制 2011/9/16 制 http://weibo.com/lidaohang

description

MongoDB Sharding+Replica Set

Transcript of Mongo db部署架构之优先方案

Page 1: Mongo db部署架构之优先方案

2011/9/16 制作人:酷酷 http://weibo.com/lidaohang

Mongo之架构部署(Replica Sets+Sharding)

一、环境

要构建一个 MongoDB Sharding Cluster,需要三种角色:•Shard Server: mongod 实例,用于存储实际的数据块。•Config Server: mongod 实例,存储了整个 Cluster Metadata,其中包括 chunk 信息。•Route Server: mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像单一进程

数据库。

10.168.0.103 10.168.0.107 10.168.0.108 10.168.0.109

Shard1 Shard2 Shard3 Shard1

Shard2 Shard1 Shard2 Shard3

Shard3 Shard3 Shard1 Shard2

2011/9/16 制作人:酷酷 http://weibo.com/lidaohang

Page 2: Mongo db部署架构之优先方案

2011/9/16 制作人:酷酷 http://weibo.com/lidaohang

1.节点: S1: 10.168.0.103,10.168.0.107,10.168.0.109,10.168.0.108(arbiter)

S2: 10.168.0.107,10.168.0.103,10.168.0.108,10.168.0.109(arbiter)

S3: 10.168.0.108,10.168.0.103,10.168.0.109,10.168.0.107(arbiter)

主机 端口信息10.168.0.103 mongod shard1:27017

mongod shard2:27018

mongod shard3:27019

mongod config:30000

mongs:40000

10.168.0.107 mongod shard1:27017

mongod shard2:27018

mongod shard3:27019

mongod config:30000

mongs:40000

10.168.0.108 mongod shard1:27017

mongod shard2:27018

mongod shard3:27019

mongod config:30000

mongs:40000

10.168.0.109 mongod shard1:27017

mongod shard2:27018

mongod shard3:27019

mongod config:30000

mongs:40000

二、安装部署

软件准备及目录1.下载mongodb程序 curl -O http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.0.tgz

2011/9/16 制作人:酷酷 http://weibo.com/lidaohang

Page 3: Mongo db部署架构之优先方案

2011/9/16 制作人:酷酷 http://weibo.com/lidaohang

2.解压mongodb-linux-x86_64-2.0.0.tgz tar zxvf mongodb-linux-x86_64-2.0.0.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

配置 Replica Sets,Config Server

10.168.0.103

1.创建相应的文件夹(注意此处的 testadmin是客户端登陆名)

mkdir -p /home/testadmin/mongodb/data/shard1

mkdir -p /home/testadmin/mongodb/data/shard2

mkdir -p /home/testadmin/mongodb/data/shard3

mkdir -p /home/testadmin/mongodb/data/config

mkdir -p /home/testadmin/mongodb/logs/shard1

mkdir -p /home/testadmin/mongodb/logs/shard2

mkdir -p /home/testadmin/mongodb/logs/shard3

mkdir -p /home/testadmin/mongodb/logs/config

mkdir -p /home/testadmin/mongodb/logs/mongos

2.配置mongod

/testadmin/mongodb/bin/mongod --fork --shardsvr --port 27017 --dbpath

/home/testadmin/mongodb/data/shard1/--logpath/home/testadmin/mongodb/

logs/shard1/log.log --logappend --replSet s1 --auth --rest

/testadmin/mongodb/bin/mongod --fork --shardsvr --port 27018 --

dbpath /home/testadmin/mongodb/data/shard2/--

logpath/home/testadmin/mongodb/logs/shard2/log.log --logappend --replSet

s2 --auth --rest

/testadmin/mongodb/bin/mongod--fork--shardsvr--port 27019 --

dbpath /home/testadmin/mongodb/data/shard3/--

logpath/home/testadmin/mongodb/logs/shard3/log.log --logappend --replSet

s3 --auth --rest

/testadmin/mongodb/bin/mongod --fork --configsvr --port 30000 --

dbpath /home/testadmin/mongodb/data/config/--

logpath/home/testadmin/mongodb/logs/config/log.log --logappend --auth --rest

2011/9/16 制作人:酷酷 http://weibo.com/lidaohang

Page 4: Mongo db部署架构之优先方案

2011/9/16 制作人:酷酷 http://weibo.com/lidaohang

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

4.初始化 replica sets/testadmin/mongodb/bin/mongo --port 27017

config = {_id: 's1', members: [

{_id: 0, host: '10.168.0.103:27017'},

{_id: 1, host: '10.168.0.107:27017'},

{_id: 2, host: '10.168.0.109:27017'},

{_id: 3, host: '10.168.0.108:27017', arbiterOnly: true}

]}

rs.initiate(config)

rs.status()

10.168.0.107

1.创建相应的文件夹(注意此处的 testadmin是客户端登陆名)

mkdir -p /home/testadmin/mongodb/data/shard1

mkdir -p /home/testadmin/mongodb/data/shard2

mkdir -p /home/testadmin/mongodb/data/shard3

mkdir -p /home/testadmin/mongodb/data/config

mkdir -p /home/testadmin/mongodb/logs/shard1

mkdir -p /home/testadmin/mongodb/logs/shard2

mkdir -p /home/testadmin/mongodb/logs/shard3

mkdir -p /home/testadmin/mongodb/logs/config

mkdir -p /home/testadmin/mongodb/logs/mongos

2.配置mongod

/testadmin/mongodb/bin/mongod --fork --shardsvr --port 27017 --

dbpath /home/testadmin/mongodb/data/shard1/--

logpath/home/testadmin/mongodb/logs/shard1/log.log --logappend --replSet

s1 --auth --rest

/testadmin/mongodb/bin/mongod --fork --shardsvr --port 27018--

dbpath /home/testadmin/mongodb/data/shard2/--

logpath/home/testadmin/mongodb/logs/shard2/log.log --logappend --replSet

shard2 --auth --rest

/testadmin/mongodb/bin/mongod --fork --shardsvr --port 27019 --

dbpath /home/testadmin/mongodb/data/shard3/--

logpath/home/testadmin/mongodb/logs/shard3/log.log --logappend --replSet

s3 --auth --rest

2011/9/16 制作人:酷酷 http://weibo.com/lidaohang

Page 5: Mongo db部署架构之优先方案

2011/9/16 制作人:酷酷 http://weibo.com/lidaohang

/testadmin/mongodb/bin/mongod --fork --configsvr --port 30000 --

dbpath /home/testadmin/mongodb/data/config/--

logpath/home/testadmin/mongodb/logs/config/log.log --logappend --auth --rest

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: '10.168.0.107:27018'},

{_id: 1, host: '10.168.0.103:27018'},

{_id: 1, host: '10.168.0.108:27018'},

{_id: 2, host: '10.168.0.109:27018', arbiterOnly: true}

]}

rs.initiate(config)

rs.status()

10.168.0.108

1.创建相应的文件夹(注意此处的 testadmin是客户端登陆名)

mkdir -p /home/testadmin/mongodb/data/shard1

mkdir -p /home/testadmin/mongodb/data/shard2

mkdir -p /home/testadmin/mongodb/data/shard3

mkdir -p /home/testadmin/mongodb/data/config

mkdir -p /home/testadmin/mongodb/logs/shard1

mkdir -p /home/testadmin/mongodb/logs/shard2

mkdir -p /home/testadmin/mongodb/logs/shard3

mkdir -p /home/testadmin/mongodb/logs/config

mkdir -p /home/testadmin/mongodb/logs/mongos

2.配置mongod

/testadmin/mongodb/bin/mongod --fork --shardsvr --port 27017 --

dbpath /home/testadmin/mongodb/data/shard1/--

logpath/home/testadmin/mongodb/logs/shard1/log.log --logappend --replSet

s1 --auth --rest

/testadmin/mongodb/bin/mongod --fork --shardsvr --port 27018--

dbpath /home/testadmin/mongodb/data/shard2/--

logpath/home/testadmin/mongodb/logs/shard2/log.log --logappend --replSet

shard2 --auth --rest

2011/9/16 制作人:酷酷 http://weibo.com/lidaohang

Page 6: Mongo db部署架构之优先方案

2011/9/16 制作人:酷酷 http://weibo.com/lidaohang

/testadmin/mongodb/bin/mongod --fork --shardsvr --port 27019 --

dbpath /home/testadmin/mongodb/data/shard3/--

logpath/home/testadmin/mongodb/logs/shard3/log.log --logappend --replSet

s3 --auth --rest

/testadmin/mongodb/bin/mongod --fork --configsvr --port 30000 --

dbpath /home/testadmin/mongodb/data/config/--

logpath/home/testadmin/mongodb/logs/config/log.log --logappend --auth --rest

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: '10.168.0.108:27019'},

{_id: 1, host: '10.168.0.103:27019'},

{_id: 1, host: '10.168.0.109:27019'},

{_id: 2, host: '10.168.0.107:27019', arbiterOnly: true}

]}

rs.initiate(config)

rs.status()

10.168.0.109

1.创建相应的文件夹(注意此处的 testadmin是客户端登陆名)

mkdir -p /home/testadmin/mongodb/data/shard1

mkdir -p /home/testadmin/mongodb/data/shard2

mkdir -p /home/testadmin/mongodb/data/shard3

mkdir -p /home/testadmin/mongodb/data/config

mkdir -p /home/testadmin/mongodb/logs/shard1

mkdir -p /home/testadmin/mongodb/logs/shard2

mkdir -p /home/testadmin/mongodb/logs/shard3

mkdir -p /home/testadmin/mongodb/logs/config

mkdir -p /home/testadmin/mongodb/logs/mongos

2.配置mongod

/testadmin/mongodb/bin/mongod --fork --shardsvr --port 27017 --

dbpath /home/testadmin/mongodb/data/shard1/--

logpath/home/testadmin/mongodb/logs/shard1/log.log --logappend --replSet

s1 --auth --rest

2011/9/16 制作人:酷酷 http://weibo.com/lidaohang

Page 7: Mongo db部署架构之优先方案

2011/9/16 制作人:酷酷 http://weibo.com/lidaohang

/testadmin/mongodb/bin/mongod --fork --shardsvr --port 27018--

dbpath /home/testadmin/mongodb/data/shard2/--

logpath/home/testadmin/mongodb/logs/shard2/log.log --logappend --replSet

shard2 --auth --rest

/testadmin/mongodb/bin/mongod --fork --shardsvr --port 27019 --

dbpath /home/testadmin/mongodb/data/shard3/--

logpath/home/testadmin/mongodb/logs/shard3/log.log --logappend --replSet

s3 --auth --rest

/testadmin/mongodb/bin/mongod --fork --configsvr --port 30000 --

dbpath /home/testadmin/mongodb/data/config/--

logpath/home/testadmin/mongodb/logs/config/log.log --logappend --auth --rest

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

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

/testadmin/mongodb/bin/mongos --fork --port 40000

--logpath/home/testadmin/logs/mongos/log.log --configdb

10.168.0.103:30000,10.168.0.107:30000,10.168.0.108:30000,10.168.0.109

添加分片1连接任意一台,其他无需这样操作:/home/testadmin/bin/mongo --port 40000

use admin

db.runCommand({addshard:'s1/10.168.0.103:27017,10.168.0.107:27017,

10.168.0.109:27017'})

db.runCommand({addshard:'s2/10.168.0.107:27018,10.168.0.103:27018,

10.168.0.108:27018' })

db.runCommand({addshard:'s3/10.168.0.108:27019,10.168.0.103:27017,

2011/9/16 制作人:酷酷 http://weibo.com/lidaohang

Page 8: Mongo db部署架构之优先方案

2011/9/16 制作人:酷酷 http://weibo.com/lidaohang

10.168.0.109:27019' })

db.runCommand({ listshards:1 })

db.runCommand({ enablesharding:'weibo' })

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

db.data.stats();

三、用户认证

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用户权限才会生效,第一次配置完成后,没效果就重启下。

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

添加 slave节点1、利用另外一台 secondary机器传送数据

2011/9/16 制作人:酷酷 http://weibo.com/lidaohang

Page 9: Mongo db部署架构之优先方案

2011/9/16 制作人:酷酷 http://weibo.com/lidaohang

2、在新机器上中配置文件中添加 fastsync=true配置(当需要从有数据中启动节点,那么必须加上 fastsync=true,否则启动会报错,如果是从主库直接同步所有数据,那么就不需要添加这个参数)3、启动后,在 primary节点中添加节点如:rs.add("10.73.24.171:9005") 当我们看到变为 secondary后,就一切正常,可以正常提供线上服务了4、通过 rs.conf()命令查看现在的节点信息(需要 admin库密码权限)5、rs.remove()删除节点6、添加 arbiter节点:rs.addArb("10.73.24.171:19003")

7、添加延时备份机器:rs.add({_id:4,host:"10.55.22.176:9004",priority:0,slaveDelay:3600});

8、当出现这个错误时:replSet error RS102 too stale to catch up,我们可以db.printReplicationInfo()查看主库、从库的 oplog信息;

添加 sharding节点

1.重复上面的操作添加 sharding

2011/9/16 制作人:酷酷 http://weibo.com/lidaohang