Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Mongo db架构之优先方案

MongoDB+Sharding+Replica Sets

  • Be the first to comment

Mongo db架构之优先方案

  1. 1. MongoDB 之架构部署 (Replica Sets+Sharding) 分享人:酷酷 http://weibo.com/lidaohang
  2. 2. 一、环境 要构建一个 MongoDB Sharding Cluster ,需要三种角色: • Shard Server: mongod 实例,用于存储实际的数据块。 • Config Server: mongod 实例,存储了整个 Cluster Metadata ,其中包括 chunk 信息。 • Route Server: mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像单一进程数据库。
  3. 3. 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
  4. 4. 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
  5. 5. 二、安装部署 软件准备及目录 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
  6. 6. 配置 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
  7. 7. 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
  8. 8. 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()
  9. 9. 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
  10. 10. 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
  11. 11. 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()
  12. 12. 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
  13. 13. 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
  14. 14. 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()
  15. 15. 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
  16. 16. 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
  17. 17. 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
  18. 18. 添加分片 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();
  19. 19. 三、用户认证 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 用户权限才会生效,第一次配置完成后,没效果就重启下。
  20. 20. 一、鸭梨大了怎么办?添加服务器,怎么样添加呢? 添加 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
  21. 21.
  22. 22.

×