设为首页 收藏本站
查看: 1277|回复: 0

[经验分享] Mongo集群部署(Replica Sets+Sharding)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-3-27 09:25:47 | 显示全部楼层 |阅读模式
一、环境

MongoDB Sharding Cluster 包含三种角色:

Shard Server: mongod 实例,用于存储实际的数据块,数据层

Config Server: mongod 实例,存储了整个 Cluster Metadata,其中包括 chunk 信息,配置层

Route Server: mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像单一进程  

数据库,路由层。



10.14.2.201
10.14.2.202
10.14.2.203
10.14.2.204
Shard1
Shard2
Shard3
Shard1
Shard2
Shard1
Shard2
Shard3
Shard3
Shard3
Shard1
Shard2

1.节点:

S1: 10.14.2.201, 10.14.2.202, 10.14.2.203, 10.14.2.204 (arbiter)
S2: 10.14.2.201, 10.14.2.202, 10.14.2.203 (arbiter), 10.14.2.204
S3: 10.14.2.201, 10.14.2.202(arbiter), 10.14.2.203, 10.14.2.204


主机
端口信息
10.14.2.201
mongod shard1:27017
mongod shard2:27018
mongod shard3:27019
mongod config:30000
mongs:40000
10.14.2.202
mongod shard1:27017
mongod shard2:27018
mongod shard3:27019
mongod config:30000
mongs:40000
10.14.2.203
mongod shard1:27017
mongod shard2:27018
mongod shard3:27019
mongod config:30000
mongs:40000
10.14.2.204
mongod shard1:27017
mongod shard2:27018
mongod shard3:27019
mongod config:30000
mongs:40000


二、安装部署

在所有机器上运行

1、下载mongodb程序

    mongodb-linux-x86_64-2.4.4.tgz

2、解压mongodb-linux-x86_64-2.4.4.tgz到/export/ 目录下

  tar -xvf mongodb-linux-x86_64-2.4.4.tgz  -C  /usr/local/

3、建立软连接

   cd /usr/local/

   ln -s mongodb-linux-x86_64-2.4.4  mongodb


4、配置环境变量  vim /etc/profile  添加

#mongodb

export PATH=/usr/local/mongodb/bin:$PATH

source /etc/profile


5、创建目录

mkdir -p /export/mongodb/data/shard1

mkdir -p /export/mongodb/data/shard2

mkdir -p /export/mongodb/data/shard3

mkdir -p /export/mongodb/data/config

mkdir -p /export/mongodb/logs/shard1

mkdir -p /export/mongodb/logs/shard2

mkdir -p /export/mongodb/logs/shard3

mkdir -p /export/mongodb/logs/config

mkdir -p /export/mongodb/logs/mongos


6、在10.14.2.201(任意一台都可以) 生成keyfile文件

openssl rand -base64 753 > /export/mongodb/keyfile


7、把keyfile文件传输到其他机器上

scp /export/mongodb/keyfile 10.14.2.202:/export/mongodb/

scp /export/mongodb/keyfile 10.14.2.203:/export/mongodb/

scp /export/mongodb/keyfile 10.14.2.204:/export/mongodb/


8、在每台机器上执行 修改keyfile权限

chmod 600 /export/mongodb/keyfile


配置Replica Sets,Config Server


9、在每台机器上执行

/usr/local/mongodb/bin/mongod --fork --shardsvr  --port 27017 --dbpath /export/mongodb/data/shard1/ --logpath /export/mongodb/logs/shard1/log.log --logappend --replSet s1 --auth --rest  --keyFile    /export/mongodb/keyfile

/usr/local/mongodb/bin/mongod --fork --shardsvr  --port 27018 --dbpath /export/mongodb/data/shard2/ --logpath /export/mongodb/logs/shard2/log.log --logappend --replSet s2 --auth  --rest   --keyFile   /export/mongodb/keyfile

/usr/local/mongodb/bin/mongod --fork --shardsvr  --port 27019 --dbpath /export/mongodb/data/shard3/ --logpath /export/mongodb/logs/shard3/log.log --logappend --replSet s3 --auth  --rest   --keyFile    /export/mongodb/keyfile

/usr/local/mongodb/bin/mongod --fork --configsvr --port 30000 --dbpath /export/mongodb/data/config/ --logpath /export/mongodb/logs/config/log.log --logappend --auth --rest   --keyFile    /export/mongodb/keyfile


10、在10.14.2.201上执行



1)查看mongod的进程是否启动

ps aux | grep mongodb | grep -v grep


2)初始化replica sets

/usr/local/mongodb/bin/mongo --port 27017

  config = {_id: 's1', members: [
        {_id: 0, host: '10.14.2.201:27017'},
        {_id: 1, host: '10.14.2.202:27017'},

        {_id: 2, host: '10.14.2.203:27017'},
        {_id: 3, host: '10.14.2.204:27017', arbiterOnly: true}
    ]}
    rs.initiate(config)
    rs.status()

11、在10.14.2.202上执行


1)查看mongod的进程是否启动

ps aux | grep mongodb | grep -v grep


2)初始化replica sets

/usr/local/mongodb/bin/mongo --port  27018

  config = {_id: 's2', members: [
        {_id: 0, host: '10.14.2.201:27018'},
        {_id: 1, host: '10.14.2.202:27018'},

        {_id: 2, host: '10.14.2.203:27018', arbiterOnly: true },
        {_id: 3, host: '10.14.2.204:27018' }
    ]}
   rs.initiate(config)
   rs.status()


12、在10.14.2.203上执行

1)查看mongod的进程是否启动

ps aux | grep mongodb | grep -v grep


2)初始化replica sets

/usr/local/mongodb/bin/mongo --port 27019

   config = {_id: 's3', members: [
        {_id: 0, host: '10.14.2.201:27019'},
        {_id: 1, host: '10.14.2.202:27019', arbiterOnly: true },

        {_id: 2, host: '10.14.2.203:27019' },
        {_id: 3, host: '10.14.2.204:27019' }
    ]}
   rs.initiate(config)
    rs.status()



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

13、在每台机器上执行

/usr/local/mongodb/bin/mongos --fork --port 40000 --logpath  /export/mongodb/logs/mongos/log.log  --configdb 10.14.2.201:30000,10.14.2.202:30000,10.14.2.203:30000   --keyFile    /export/mongodb/keyfile

添加分片

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

/usr/local/mongodb/bin/mongo --port 40000

use admin

db.runCommand({addshard:'s1/10.14.2.201:27017,10.14.2.202:27017,10.14.2.203:27017'})

db.runCommand({addshard:'s2/10.14.2.201:27018,10.14.2.202:27018,10.14.2.203:27018' })

db.runCommand({addshard:'s3/10.14.2.201:27019,10.14.2.203:27019,10.14.2.203:27019' })

db.runCommand({ listshards:1 })

通过执行以下命令,可以让数据库跨shard,如果不执行这步,数据库只会存放在一个shard,一旦激活数据库分片,数据库中不同的collection将被存放在不同的shard上,但一个collection仍旧存放在同一个shard上,要使单个collection也分片,还需单独对collection作些操作

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

要使单个collection也分片存储,需要给collection指定一个分片key,通过以下命令操作

db.runCommand( { shardcollection : "test.c1",key : {id: 1},unique : true } )

创建测试数据

use test

for(var i=1;i<=200003;i++)  db.c1.save({id:i,value1:"1234567890",value2:"1234567890",value3:"1234567890",value4:"1234567890"});


> db.c1.stats()  \\查看数据已经分到了s1,s2,s3上

{

      "sharded" : true,

      "ns" : "test.c1",

      "count" : 200003,

      "numExtents" : 14,

      "size" : 25600384,

      "storageSize" : 40599552,

      "totalIndexSize" : 12182240,

      "indexSizes" : {

            "_id_" : 6540800,

            "id_1" : 5641440

      },

      "avgObjSize" : 128,

      "nindexes" : 2,

      "nchunks" : 4,

      "shards" : {

            "s1" : {

                  "ns" : "test.c1",

                  "count" : 194287,

                  "size" : 24868736,

                  "avgObjSize" : 128,

                  "storageSize" : 37797888,

                  "numExtents" : 8,

                  "nindexes" : 2,

                  "lastExtentSize" : 15290368,

                  "paddingFactor" : 1,

                  "systemFlags" : 1,

                  "userFlags" : 0,

                  "totalIndexSize" : 11781616,

                  "indexSizes" : {

                       "_id_" : 6328224,

                       "id_1" : 5453392

                  },

                  "ok" : 1

            },

            "s2" : {

                  "ns" : "test.c1",

                  "count" : 0,

                  "size" : 0,

                  "storageSize" : 8192,

                  "numExtents" : 1,

                  "nindexes" : 2,

                  "lastExtentSize" : 8192,

                  "paddingFactor" : 1,

                  "systemFlags" : 1,

                  "userFlags" : 0,

                  "totalIndexSize" : 16352,

                  "indexSizes" : {

                       "_id_" : 8176,

                       "id_1" : 8176

                  },

                  "ok" : 1

            },

            "s3" : {

                  "ns" : "test.c1",

                  "count" : 5716,

                  "size" : 731648,

                  "avgObjSize" : 128,

                  "storageSize" : 2793472,

                  "numExtents" : 5,

                  "nindexes" : 2,

                  "lastExtentSize" : 2097152,

                  "paddingFactor" : 1,

                  "systemFlags" : 1,

                  "userFlags" : 0,

                  "totalIndexSize" : 384272,

                  "indexSizes" : {

                       "_id_" : 204400,

                       "id_1" : 179872

                  },

                  "ok" : 1

            }

      },

      "ok" : 1

}



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-16277-1-1.html 上篇帖子: MongoDB crusor time out cursor id is not valid at server 报警 下篇帖子: mongoDB操作命令及mongoDB的helper
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表