• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Mongo db架构之优先方案
 

Mongo db架构之优先方案

on

  • 2,518 views

MongoDB+Sharding+Replica Sets

MongoDB+Sharding+Replica Sets

Statistics

Views

Total Views
2,518
Views on SlideShare
2,518
Embed Views
0

Actions

Likes
5
Downloads
80
Comments
1

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

11 of 1 previous next

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • good experience
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Mongo db架构之优先方案 Mongo db架构之优先方案 Presentation Transcript

    • MongoDB 之架构部署 (Replica Sets+Sharding) 分享人:酷酷 http://weibo.com/lidaohang
    • 一、环境 要构建一个 MongoDB Sharding Cluster ,需要三种角色: • Shard Server: mongod 实例,用于存储实际的数据块。 • Config Server: mongod 实例,存储了整个 Cluster Metadata ,其中包括 chunk 信息。 • Route Server: mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像单一进程数据库。
    • 1. 机器部署描述 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 ,1 0.168.0.109 ,10.168.0.107( arbiter ) 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
    • 2 . 机器各端口描述 主机 端口信息 10.168.0.103 mongod shard1:27017 mongod shard2:27018 mongod shard3:27019 mongod config:30000 mongs: 4 0000 10.168.0.107 mongod shard1:27017 mongod shard2:27018 mongod shard3:27019 mongod config:30000 mongs: 4 0000 10.168.0.108 mongod shard1:27017 mongod shard2:27018 mongod shard3:27019 mongod config:30000 mongs: 4 0000 10.168.0.109 mongod shard1:27017 mongod shard2:27018 mongod shard3:27019 mongod config:30000 mongs: 4 0000
    • 二、安装部署 软件准备及目录 1. 下载 mongodb 程序 curl -O http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.0.tgz 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
    • 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 /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 /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 /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, 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.test.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 机器传送数据 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 、添加延时备份机器: r s.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
    •