Mongodb扩充、移除Shard Server实例_MongoDB_脚本之家

作者:数据库

1.日增新的安顿文件,并运营mongod实例复制代码 代码如下:#14mkdir -p /data/mongodb/shard311./mongod -f /opt/mongodb-linux-x86_64-2.2.0/conf/mongod_3.conf#16mkdir -p /data/mongodb/shard32./mongod -f /opt/mongodb-linux-x86_64-2.2.0/conf/mongod_3.conf#23mkdir -p /data/mongodb/shard33./mongod -f /opt/mongodb-linux-x86_64-2.2.0/conf/mongod_3.conf

mongodb 轻松布置方案及实例

在搭建分片以前,先领悟下分片中逐个剧中人物的遵守:

配备mongodb分片集合(sharding cluster卡塔尔国

Sharding cluster介绍

那是后生可畏种能够水平扩充的方式,在数据量十分大时特给力,实际大范围利用日常会采用这种布局去塑造monodb系统。

 要构建三个 MongoDB Sharding Cluster,必要三种角色:

Shard Server: mongod 实例,用于存款和储蓄实际的数据块,实际临蓐情形中叁个shard server剧中人物可由几台机器组个贰个relica set承受,制止主机单点故障

Config Server: mongod 实例,存款和储蓄了上上下下 Cluster Metadata,此中囊括 chunk 新闻。

Route Server: mongos 实例,前端路由,客商端由此接入,且让全部集群看上去像单意气风发数据库,前端采纳可以透明使用。

Sharding架构图:

数据库 1

2.步骤2 初始化 set 集群

转载:http://my.oschina.net/zhuzhu0129/blog/53290

① 配置服务器。是三个单独的mongod进程,保存集群和分片的元数据,即各分片包涵了什么数据的音讯。最早开头创制,启用日志功效。像运转普通的mongod雷同运维配置服务器,钦赐configsvr选项。不需求太多的空间和财富,配置服务器的1KB空间相当于真是数据的200MB。保存的只是多少的布满表。当服务不可用,则变为只读,不能够分块、迁移数据。

② 路由服务器。即mongos,起到二个路由的效率,供程序连接。自己不保留数据,在运营时从安顿服务器加载集群音讯,开启mongos进度供给精通配置服务器的地址,钦命configdb选项。

③ 分片服务器。是贰个独自普通的mongod进程,保存数据消息。可以是三个别本集也足以是独自的后生可畏台服务器。

本例实际条件结构

本例构造示例图:

数据库 2

  1. 分级在3台机器运维多个mongod实例(称为mongod shard11,mongod shard12,mongod shard13)协会replica set1,作为cluster的shard1
  2. 分别在3台机器运维二个mongod实例(称为mongod shard21,mongod shard22,mongod shard23)组织replica set2,作为cluster的shard2
  3. 每台机器运维二个mongod实例,作为3个config server
  4. 每台机器运维二个mongs进度,用于顾客端连接
主机  IP 端口信息
Server1 10.1.1.1 mongod shard11:27017
mongod shard12:27018
mongod config1:20000
mongs1:30000
Server2 10.1.1.2 mongod shard12:27017
mongod shard22:27018
mongod config2:20000
mongs2:30000
Server3 10.1.1.3 mongod shard13:27017
mongod shard23:27018
mongod config3:20000
mongs3:30000

复制代码 代码如下:/opt/mongodb-linux-x86_64-2.2.0/bin/mongo -port 10003config = {_id: 'shard3', members: [{_id: 0, host: '192.168.1.14:10003', priority:1},{_id: 1, host: '192.168.1.16:10003'},{_id: 2, host: '192.168.1.23:10003'}]};rs.initiate;

 

七台服务器,首先明确各种构件的多寡。数码分片shard 5个,mongos 2个, config server 3个,分片用五台服务器单独布置,mongos 和 config server 计划在两台服务器。且各类shard计划贰个别本集(风流罗曼蒂克主二从),config server铺排别本集(生机勃勃主二从)**

软件筹算

软件筹划
1. 创建客户
groupadd -g 20001 mongodb
useradd -u 20001 -g mongodb mongodb
passwd mongodb

2. 安装monodb软件
su – mongodb
tar zxvf mongodb-linux-x86_64-1.6.2.tar
安装好后,目录布局如下:
$ tree mongodb-linux-x86_64-1.6.2
mongodb-linux-x86_64-1.6.2
|– GNU-AGPL-3.0
|– README
|– THIRD-PARTY-NOTICES
`– bin
    |– bsondump
    |– mongo
    |– mongod
    |– mongodump
    |– mongoexport
    |– mongofiles
    |– mongoimport
    |– mongorestore
    |– mongos
    |– mongosniff
    `– mongostat
1 directory, 14 files

3. 创办数量目录
凭借本例sharding布局图所示,在各台sever上开创shard数据文件目录
Server1:
su – monodb
cd /home/monodb
mkdir -p data/shard11
mkdir -p data/shard21
Server2:
su – monodb
cd /home/monodb
mkdir -p data/shard11
mkdir -p data/shard22
Server3:
su – monodb
cd /home/monodb
mkdir -p data/shard13
mkdir -p data/shard23

3.增加shard

 

**MongoDB版本选择:**

配置relica sets

1. 安顿shard1所用到的replica sets:
Server1:
cd /home/mongodb/mongodb-linux-x86_64-1.6.2/bin
./mongod –shardsvr –replSet shard1 –port 27017 –dbpath /home/mongodb/data/shard11 –oplogSize 100 –logpath /home/mongodb/data/shard11.log –logappend –fork

Server2:
cd /home/mongodb/mongodb-linux-x86_64-1.6.2/bin
./mongod –shardsvr –replSet shard1 –port 27017 –dbpath /home/mongodb/data/shard12 –oplogSize 100 –logpath /home/mongodb/data/shard12.log –logappend –fork

Server3:
cd /home/mongodb/mongodb-linux-x86_64-1.6.2/bin
./mongod –shardsvr –replSet shard1 –port 27017 –dbpath /home/mongodb/data/shard13 –oplogSize 100 –logpath /home/mongodb/data/shard13.log –logappend –fork

初始化replica set
用mongo连接此中贰个mongod,实行:
> config = {_id: ‘shard1′, members: [
                          {_id: 0, host: '10.1.1.1:27017'},
                          {_id: 1, host: '10.1.1.2:27017'},
                          {_id: 2, host: '10.1.1.3:27017'}]
           }

> rs.initiate(config);

平等形式,配置shard2用到的replica sets:
server1:
cd /home/mongodb/mongodb-linux-x86_64-1.6.2/bin
./mongod –shardsvr –replSet shard2 –port 27018 –dbpath /home/mongodb/data/shard21 –oplogSize 100 –logpath /home/mongodb/data/shard21.log –logappend –fork

server2:
cd /home/mongodb/mongodb-linux-x86_64-1.6.2/bin
./mongod –shardsvr –replSet shard2 –port 27018 –dbpath /home/mongodb/data/shard22 –oplogSize 100 –logpath /home/mongodb/data/shard22.log –logappend –fork

server3:
cd /home/mongodb/mongodb-linux-x86_64-1.6.2/bin
./mongod –shardsvr –replSet shard2 –port 27018 –dbpath /home/mongodb/data/shard23 –oplogSize 100 –logpath /home/mongodb/data/shard23.log –logappend –fork

初始化replica set
用mongo连接在那之中七个mongod,实践:
> config = {_id: ‘shard2′, members: [
                          {_id: 0, host: '10.1.1.1:27018'},
                          {_id: 1, host: '10.1.1.2:27018'},
                          {_id: 2, host: '10.1.1.3:27018'}]
           }

> rs.initiate(config);

到此就安排好了二个replica sets,也便是希图好了三个shards

复制代码 代码如下:/opt/mongodb-linux-x86_64-2.2.0/bin/mongo 192.168.1.14:10000/admindb.runCommand( {addshard : "shard3/192.168.1.14:10003,192.168.1.16:10003,192.168.1.23:10003",name:"shard3",maxsize:20480,allowLocal:true } );

第风姿洒脱节 盘算干活
 一 安装mongodb
  小编那边采取rehl 5.6作为其运作载体。
  1. 下载mongodb的linux版本(注意三11人和六12位的分别卡塔尔(英语:State of Qatar),下载地址:
   # wget 
  2. 将下载的mongodb安装文件 mongodb-linux-x86_64-2.0.4.tgz 放到/usr/local/下
  3. 解压 
   # tar -zxvf mongodb-linux-x86_64-2.0.4.tgz
   重命名 
   # mv mongodb-linux-x86_64-2.0.4 /usr/local/mongodb
  4. 开立数据库文件目录, # mkdir -p /data/mongodb,我把数据库文件目录放在最近文件夹下,# mkdir -p data/db,创造日志目录 #mkdir -p log
  
 二 启动
  首先用命令步入到bin目录下:cd /usr/local/mongodb/bin
  
  方式黄金年代:直接运维命令运维
  ./mongod –port 10000 –fork –logpath= logpath=/data/mongodb/log/mongodb.log -- logappend -- dbpath=/data/mongodb/data/db
  
  方式二:通过配备文件措施运行(推荐)。
  1.在服务器上新建mongodb.conf配置文件(建议用命令生成,放在mongodb同三个索引下卡塔尔(قطر‎
  内容为:
  port=10000 #端口号
  fork=true #以守护进程的格局运营,成立服务器进度
  #master=true #单主从安排时设为主服务器
  #salve=true ##单主从陈设时设为从服务器
  logpath=/data/mongodb/log/mongodb.log #日记输出文件路线
  logappend=true #日记输出方式
  dbpath=/data/mongodb/data/db #数据库路线
  replSet=blort #安装富本集的名字
  shardsvr=true #安装是或不是分片
  2.运行./mongod –config ~/.mongodb.conf 命令(--config能够一向写成-f卡塔尔(英语:State of Qatar)。
  输出:
  all output going to: /data/mongodb/log/mongodb.log
  forked process: 5315
  
  mongodb 运营参数
    --quiet                              # 安静输出 
    --port arg                        # 钦命服务端口号,默许端口27017 
    --bind_ip arg                  # 绑定服务IP,若绑定127.0.0.1,则只可以本机采访,不点名私下认可当地全部IP 
    --logpath arg                  # 钦命MongoDB日志文件,注意是点名文件不是目录 
    --logappend                   # 使用加多的方法写日志 
    --pidfilepath arg             # PID File 的少年老成体化路线,若无安装,则未有PID文件 
    --keyFile arg                   # 集群的私钥的全体路径,只对于Replica Set 布局有效 
    --unixSocketPrefix arg  # UNIX域套接字替代目录,(默认为 /tmp卡塔尔(قطر‎ 
    --fork                                 # 以守护进度的办法运营MongoDB,成立服务器进度 
    --auth                                # 启用验证 
    --cpu                                 # 按期展现CPU的CPU利用率和iowait 
    --dbpath arg                     # 钦点数据库路线 
    --diaglog arg                    # diaglog选项 0=off 1=W 2=R 3=both 7=W some reads 
    --directoryperdb              # 设置每一个数据库将被封存在三个独门的目录 
    --journal                            # 启用日志选项,MongoDB的数目操作将会写入到journal文件夹的公文里 
    --journalOptions arg       # 启用日志确诊选项 
    --ipv6                                 # 启用IPv6选项 
    --jsonp                              # 允许JSONP情势通过HTTP访谈(有平安徽电影制片厂响) 
    --maxConns arg             # 最大还要连接数 暗中认可2004 
    --noauth                           # 不启用验证 
    --nohttpinterface             # 关闭http接口,暗中同意关闭27018端口访谈 
    --noprealloc                     # 禁止使用数据文件预分配(往往影响属性卡塔尔(英语:State of Qatar) 
    --noscripting                    # 禁止使用脚本引擎 
    --notablescan                  # 不容许表扫描 
    --nounixsocket                # 禁用Unix套接字监听 
    --nssize arg (=16)           # 设置信数据库.ns文件大小(MB卡塔尔国 
    --objcheck                        # 在收受顾客数量,检查的管事, 
    --profile arg                      # 档案参数 0=off 1=slow, 2=all 
    --quota                              # 节制每种数据库的公文数,设置默感到8 
    --quotaFiles arg               #  number of files allower per db, requires --quota 
    --rest                                  # 开启简单的rest API 
    --repair                              # 修复全数数据库run repair on all dbs 
    --repairpath arg               # 修复库生成的公文的目录,默感觉目录名称dbpath 
    --slowms arg (=100)       # value of slow for profile and console log 
    --smallfiles                       # 使用超级小的默许文件 
    --syncdelay arg (=60)    # 数据写入磁盘的大运秒数(0=never,不引入卡塔尔 
    --sysinfo                           # 打字与印刷一些诊断系统新闻 
    --upgrade                        # 如果供给进步数据库
    
    * Replicaton 参数

数据库 3

配备三台config server

Server1:
mkdir -p /home/mongodb/data/config
./mongod –configsvr –dbpath /home/mongodb/data/config –port 20000 –logpath /home/mongodb/data/config.log –logappend –fork   #config server也需要dbpath
 
Server2:
mkdir -p /home/mongodb/data/config
./mongod –configsvr –dbpath /home/mongodb/data/config –port 20000 –logpath /home/mongodb/data/config.log –logappend –fork

Server3:
mkdir -p /home/mongodb/data/config
./mongod –configsvr –dbpath /home/mongodb/data/config –port 20000 –logpath /home/mongodb/data/config.log –logappend –fork

4.移除shard

   --------------------------------------------------------------------------------

选择3.2版本

配置mongs

在server1,server2,server3上各自试行:
./mongos –configdb 10.1.1.1:20000,10.1.1.2:20000,10.1.1.3:20000 –port 30000 –chunkSize 5 –logpath /home/mongodb/data/mongos.log –logappend –fork 
#mongs不需要dbpath

复制代码 代码如下:db.runCommand({"removeshard" : "shard3/192.168.1.14:10003,192.168.1.16:10003,192.168.1.23:10003"}卡塔尔(英语:State of Qatar);

    --fastsync                      # 从一个dbpath里启用从库复战胜务,该dbpath的数据库是主库的快速照相,可用来神速启用同步 
    --autoresync                 # 假使从库与主库同步数据差得多,自动重新联合, 
    --oplogSize arg            # 设置oplog的大小(MB) 
    
    * 主/从参数

**服务器新闻**

Configuring the Shard Cluster

连年到中间一个mongos进度,并切换来admin数据库做以下配置
1. 连接到mongs,并切换到admin
./mongo 10.1.1.1:30000/admin
>db
Admin
2. 加入shards
如里shard是单台服务器,用>db.runCommand( { addshard : “<serverhostname>[:<port>]” } 卡塔尔国那样的指令插手,倘诺shard是replica sets,用replicaSetName/<serverhostname>[:port][,serverhostname2[:port],…]如此的格式表示,举例本例执行:
>db.runCommand( { addshard : “shard1/10.1.1.1:27017,10.1.1.2:27017,10.1.1.3:27017″,name:”s1″,maxsize:20480} );
>db.runCommand( { addshard : “shard2/10.1.1.1:27018,10.1.1.2:27018,10.1.1.3:27018″,name:”s2″,maxsize:20480} );
在乎:在丰盛其次个shard时,现身error:test database 已经存在的谬误,这里用mongo命令连接到首个replica set,用db.dropDatabase(卡塔尔(قطر‎命令把test数据库给删除然后就可步入

3. 可选参数
Name:用于钦点每一个shard的名字,不点名的话系统将自动分配
maxSize:钦点各类shard可接受的最大磁盘空间,单位megabytes

4. Listing shards
>db.runCommand( { listshards : 1 } )
万一列出了上述二个你加的shards,表示shards已经铺排成功

5. 激活数据库分片
命令:
> db.runCommand( { enablesharding : “<dbname>” } );
因而实践以上命令,能够让数据库跨shard,假若不进行这步,数据库只会存放在二个shard,风度翩翩旦激活数据库分片,数据库中区别的collection将被寄放在分化的shard上,但多个collection照旧寄存在同贰个shard上,要使单个collection也分片,还需单独对collection作些操作

注意:

   --------------------------------------------------------------------------------

数据库 4

Collecton分片

要使单个collection也分片存款和储蓄,需求给collection内定二个分片key,通过以下命令操作:
> db.runCommand( { shardcollection : “<namespace>”,key : <shardkeypatternobject> });
注:
 a. 分片的collection系统会自动成立三个目录(也可顾客提前创立好)
 b. 分片的collection只好有三个在分片key上的头一无二索引,其余独一索引不被允许
One note: a sharded collection can have only one unique index, which must exist on the shard key. No other unique indexes can exist on the collection.

三台服务器clock不联合诱致不能够分片的题目,今日又遭受三回,同步后就好了。那些难题是或不是有一点点太频仍了,难道每日准期要协同三台服务器的clock?移除shard的时候时间会相当久,这时候printShardingStatus(卡塔尔的时候博览会示状态”draining” : true.

    --master                        # 主库情势 
    --slave                           # 从库情势 
    --source arg                 # 从库 端口号 
    --only arg                      # 钦赐单少年老成的数据库复制 
    --slavedelay arg          # 设置从库同步主库的延迟时间 
     
    * Replica set(副本集)选项:

各主机需开放的端口、mongodb版本

分片collection例子

>db.runCommand( { shardcollection : “test.c1″,key : {id: 1} } )
>for (var i = 1; i <= 200003; i ) db.c1.save({id:i,value1:”1234567890″,value2:”1234567890″,value3:”1234567890″,value4:”1234567890″});
> db.c1.stats()
{
        “sharded” : true,
        “ns” : “test.c1″,
        “count” : 200003,
        “size” : 25600384,
        “avgObjSize” : 128,
        “storageSize” : 44509696,
        “nindexes” : 2,
        “nchunks” : 15,
        “shards” : {
                “s1″ : {
                        “ns” : “test.c1″,
                        “count” : 141941,
                        “size” : 18168448,
                        “avgObjSize” : 128,
                        “storageSize” : 33327616,
                        “numExtents” : 8,
                        “nindexes” : 2,
                        “lastExtentSize” : 12079360,
                        “paddingFactor” : 1,
                        “flags” : 1,
                        “totalIndexSize” : 11157504,
                        “indexSizes” : {
                                “_id_” : 5898240,
                                “id_1″ : 5259264
                        },
                        “ok” : 1
                },
                “s2″ : {
                        “ns” : “test.c1″,
                        “count” : 58062,
                        “size” : 7431936,
                        “avgObjSize” : 128,
                        “storageSize” : 11182080,
                        “numExtents” : 6,
                        “nindexes” : 2,
                        “lastExtentSize” : 8388608,
                        “paddingFactor” : 1,
                        “flags” : 1,
                        “totalIndexSize” : 4579328,
                        “indexSizes” : {
                                “_id_” : 2416640,
                                “id_1″ : 2162688
                        },
                        “ok” : 1
                }
        },
        “ok” : 1
}

数据库 5

   --------------------------------------------------------------------------------

看一下大要布署图: 

    --replSet arg                   # 设置别本集名称 
    
    * Sharding(分片)选项

注:

   --------------------------------------------------------------------------------

这里的A、B、C、D、E对应ip为145、146、147、148、149的服务器

    --configsvr                       # 评释那是二个集群的config服务,私下认可端口27019,私下认可目录/data/configdb 
    --shardsvr                        # 表明这是贰个集群的分片,暗中认可端口27018 
    --noMoveParanoia        # 关闭偏执为moveChunk数据保存?   

主机F【143】:布置多个mongos、多少个config server

 三 查询进度和关闭数据库
  1. 运作 ps -ef|grep mongo 命令查询服务器进度
  2. 运行 kill -2 5315命令kill掉5315的进程
  
 四 步入数据库并简要操作数据库
  1.运营./mongo –port 1000跻身刚刚起步的端口号为10000的数据库
  2.使用use test能够切换集结(也便是数据库表),这里切换来了test群集
  3.施用db.test.insert("a","b"卡塔尔国;向集中插入数据
  4.接收db.test.find(卡塔尔(英语:State of Qatar);查询群集里的数额
  5.更加多shell命令请查阅相关文书档案

主机G【144】:计划一个mongos、多少个config server

 五 注意事项
  1. 防火墙设置(测量检验时可径直关闭linux关闭防火墙:立即但不永恒生效:service iptables stop重启恒久生效:chkconfig iptables off)

数据库 6

第二节 副本集
 简单的说,别本集正是有自动故障苏醒作用的中央集群,别本集未有永世的"主节点",集群会通过投票大选多个"主节点"。当主节点岩机时,会转移到别的节点。别本集布在区别机器上时,起码要开动多少个(单数)数据库服务器进度,否则运转时投票不成事会直接开头化不了。
 
 生龙活虎 以安插文件措施运营三台机械上的数据库服务器
  1. 三台服务器的安排文件:
   port=10000 #端口号
   fork=true #以守护过程的办法运营,成立服务器进度
   logpath=/data/mongodb/log/mongodb.log #日记输出文件路线
   logappend=true #日记输出格局
   dbpath=/data/mongodb/data/db #数据库路线
   replSet=blort #设置富本集的名称叫blort,replSet是让服务器知道在这里个"blort"别本集中还应该有其余机器
   # replSet=blort /10.10.112.181:10000, 10.10.112.191:10000#设置富本集的名字,这种措施也足以,意思正是"blort"别本集其他机器,地点在10.10.112.181:10000和10.10.112.191:10000,但不推荐
  
  2. 通命令运维三台数据库服务器
   /usr/local/mongodb/bin/mongod -f /data/mongodb/blort/config.conf
   /usr/local/mongodb/bin/mongod -f /data/mongodb/blort2/config.conf
   /usr/local/mongodb/bin/mongod -f /data/mongodb/blort3/config.conf
  
 二 初始化别本集(只好初阶化叁遍)
  /usr/local/mongodb/bin/mongo --port 30001
  use admin
  方法一:
  db.runCommand({"replSetInitiate":{"_id":"blort","members":[{"_id":0,"host":"10.10.113.122:30001"},{"_id":1,"host":"10.10.113.122:30002"},{"_id":2,"host":"10.10.113.122:30003","arbiterOnly":true}]}})
  
  方法二:
  config={_id:'blort',members:[{"_id":0,host:'10.10.113.122:30001},{"_id":1,host:'10.10.113.122:30002'},{"_id":2,"host":"10.10.113.122:30003","arbiterOnly":true}]};
  rs.initiate(config);

这里的A、B、C、D、E对应ip为145、146、147、148、149服务器

 三 扩展和装置别本集
  有三种分歧门类的节点能够存在于别本集:
  Standard :存在于别本,参预投票,有一点都不小希望变为活跃节点(即主节点)
  Passive :存款和储蓄了完整的数据别本,出席投票,无法产生活跃节点
  Arbiter:仲裁者,只参加投票,不可能变成活跃节点
  Priority:优先级,(投票会投优先级高的,即便雷同,则投数据最新的)
  以上项目能够经过以下命令对别本集结实行改进恐怕扩展服务器
  db.runCommand({"replSetReconfig":{"_id":"test3","version":2,"members":[{"_id":0,"host":"10.10.113.122:30001"},{"_id":1,"host":"10.10.113.122:30002"},{"_id":2,"host":"10.10.113.122:30003","arbiterOnly":true}]}})
  
  扩充别本服务器
  在追加一个从服务器节点
  a.以相近别本集名字运转大器晚成台服务器
  b.通过rs.add命令往system.replset增加新的从服务器成员
  rs.add("10.10.113.122:30005"); 或者rs.add({"_id":4,"host":"10.10.113.122:30005"}) 
  加多仲裁
  rs.addArb("10.10.113.122:30004");

后生可畏、源码安装MongoDB

 四 读扩展
  待研究
  
 五 客户校验
  未成功
  use test;
  db.addUser("test","123456");
  db.auth("test","123456");
  db.system.users.find();
  db.system.users.remove("test","123456");
  
其次节 replica sets shard (双机方案,单机模拟卡塔尔国
 
 一 准备
  mkdir -p /data/mongodb/shard1-1/db/
  mkdir -p /data/mongodb/shard1-1/log/
  
  /data/mongodb/shard1-1/config.conf
   port=30001   #端口号
   fork=true   #以守护进度的方法运转,成立服务器进程
   #nohttpinterface=true   # 关闭http接口,暗中认可关闭27018端口访谈 port

cd /usr/local

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.2.8.tgz

tar –zxvf mongodb-linux-x86_64-rhel70-3.2.8.tgz

mv mongodb-linux-x86_64-rhel70-3.2.8  mongodb

#是因为设置mongodb无需编写翻译,所以解压完事后编写运维文件就能够运维mongodb服务。将起动参数写入运营文件会是三个很好的接纳

  • 1000
       rest = true  #http接口 运行rest 使能访谈 。与nohttpinterface 对应 只开一个
       shardsvr=true  #开头分片
       #oplogSize=100  #复制日志大小 MB
       logpath=/data/mongodb/shard1-1/log/shard1-1.log   #日志输出文件路线
       logappend=true   #日志输出方式
       dbpath=/data/mongodb/shard1-1/db   #数据库路线
       directoryperdb=true  # 设置各样数据库将被保存在一个单身的目录 
       replSet=shard1   #安装富本集的名称叫shard1,replSet是让服务器知道在这里个"shard1"别本集中还应该有别的机器

二、创制相应目录

   #auth=true # 启用验证
  
  mkdir -p /data/mongodb/shard1-1a/db/
  mkdir -p /data/mongodb/shard1-1a/log/
  /data/mongodb/shard1-1a/config.conf
   port=30002   #端口号
   fork=true   #以守护进度的法门运营,创建服务器进度
   #nohttpinterface=true   # 关闭http接口,暗中同意关闭27018端口访谈 port

主机A(127.0.0.145)

#营造shard1数据文件寄放目录

mkdir -p /data/shard1/data

#树立shard1日志文件寄放目录

mkdir -p /data/shard1/log

#制造shard2数据文件贮存目录

mkdir -p /data/shard2/data

#确立shard2日志文件贮存目录

mkdir -p /data/shard2/log

#树立shard3数据文件贮存目录

mkdir -p /data/shard3/data

#创设shard3日志文件贮存目录

mkdir -p /data/shard3/log

长机B、C、D、E创制方法同样,只需需改数字就可以

A:shard1、shard2、shard3

B:shard2、shard3、shard4

C:shard3、shard4、shard5

D:shard4、shard5、shard1

E:shard5、shard1、shard2

  • 1000
       rest = true  #http接口 运维rest 使能访谈 。与nohttpinterface 对应 只开二个
       shardsvr=true  #起步分片
       #oplogSize=100  #复制日志大小 MB
       logpath=/data/mongodb/shard1-1a/log/shard1-1a.log   #日记输出文件路线
       logappend=true   #日记输出方式
       dbpath=/data/mongodb/shard1-1a/db   #数据库路线
       directoryperdb=true  #数据库, 设置每一种数据库将被保存在叁个独立的目录 
       replSet=shard1   #安装富本集的名为shard1,replSet是让服务器知道在这里个"shard1"别本聚集还会有别的机器

三、配置运转文件

   #auth=true # 启用验证
  
  
  mkdir -p /data/mongodb/shard1-2/db/
  mkdir -p /data/mongodb/shard1-2/log/
  /data/mongodb/shard1-2/config.conf
   port=30003   #端口号
   fork=true   #以守护进度的不二等秘书籍运维,创设服务器进度
   #nohttpinterface=true   # 关闭http接口,暗中认可关闭27018端口访问 port

A主机为例:

  • 1000
       rest = true  #http接口 运营rest 使能访问 。与nohttpinterface 对应 只开一个
       shardsvr=true  #启航分片
       #oplogSize=100  #复制日志大小 MB
       logpath=/data/mongodb/shard1-2/log/shard1-2.log   #日志输出文件路线
       logappend=true   #日志输出形式
       dbpath=/data/mongodb/shard1-2/db   #数据库路线
       directoryperdb=true  # 设置每一个数据库将被保存在二个独自的目录 
       replSet=shard1   #设置富本集的名称叫shard1,replSet是让服务器知道在此个"shard1"别本聚集还应该有其余机器

1、在目录下  /usr/local/mongodb/shard_conf/  新建多个公文shard1.conf、shard2.conf、shard3.conf

   #auth=true # 启用验证
  
  mkdir -p /data/mongodb/shard2-1/db/
  mkdir -p /data/mongodb/shard2-1/log/
  /data/mongodb/shard2-1/config.conf
   port=32001   #端口号
   fork=true   #以守护进度的办法运转,创造服务器进程
   #nohttpinterface=true   # 关闭http接口,默许关闭27018端口访谈 port

2、编写配置音信

  • 1000
       rest = true  #http接口 运转rest 使能访谈 。与nohttpinterface 对应 只开一个
       shardsvr=true  #起步分片
       #oplogSize=100  #复制日志大小 MB
       logpath=/data/mongodb/shard2-1/log/shard2-1.log   #日志输出文件路线
       logappend=true   #日志输出方式
       dbpath=/data/mongodb/shard2-1/db   #数据库路线
       directoryperdb=true  # 设置各个数据库将被封存在叁个单独的目录 
       replSet=shard2   #安装富本集的名叫shard2,replSet是让服务器知道在这里个"shard2"别本聚集还应该有别的机器

shard1.conf(#安插参数详细音信请参见这里

   #auth=true # 启用验证
  
  mkdir -p /data/mongodb/shard2-1a/db/
  mkdir -p /data/mongodb/shard2-1a/log/
  /data/mongodb/shard2-1a/config.conf
   port=32002   #端口号
   fork=true   #以守护进度的法子运营,创制伏务器进度
   #nohttpinterface=true   # 关闭http接口,默许关闭27018端口访谈 port

shardsvr    = true

port           = 22001

dbpath      = /data/shard1/data/

logpath    = /data/shard1/log/shard1.log

logappend  = true

fork            = true

oplogSize  = 10240

replSet      = shard1

pidfilepath = /data/shard1/shard1.pid

directoryperdb = true

  • 1000
       rest = true  #http接口 运转rest 使能访谈 。与nohttpinterface 对应 只开二个
       shardsvr=true  #运营分片
       #oplogSize=100  #复制日志大小 MB
       logpath=/data/mongodb/shard2-1a/log/shard2-1a.log   #日记输出文件路线
       logappend=true   #日记输出格局
       dbpath=/data/mongodb/shard2-1a/db   #数据库路线
       directoryperdb=true  # 设置各个数据库将被封存在一个独自的目录 
       replSet=shard2   #设置富本集的名称为shard2,replSet是让服务器知道在此个"shard2"别本集中还可能有其他机器

shard2.conf

   #auth=true # 启用验证
  
  mkdir -p /data/mongodb/shard2-2/db/
  mkdir -p /data/mongodb/shard2-2/log/
  /data/mongodb/shard2-2/config.conf
   port=32003   #端口号
   fork=true   #以守护进度的法子运行,创立服务器进度
   #nohttpinterface=true   # 关闭http接口,暗中同意关闭27018端口访谈 port

shardsvr  = true

port         = 22002

dbpath    = /data/shard2/data/

logpath  = /data/shard2/log/shard2.log

logappend = true

fork      = true

oplogSize = 10240

replSet  = shard2

pidfilepath = /data/shard2/shard2.pid

directoryperdb  = true

  • 1000
       rest = true  #http接口 运转rest 使能访问 。与nohttpinterface 对应 只开叁个
       shardsvr=true  #起步分片
       #oplogSize=100  #复制日志大小 MB
       logpath=/data/mongodb/shard2-2/log/shard2-2.log   #日志输出文件路线
       logappend=true   #日记输出形式
       dbpath=/data/mongodb/shard2-2/db   #数据库路线
       directoryperdb=true  # 设置每一种数据库将被保留在五个独门的目录 
       replSet=shard2   #安装富本集的名为shard2,replSet是让服务器知道在这里个"shard2"副本聚焦还或然有别的机器

shard3.conf

   #auth=true # 启用验证
  
  mkdir -p /data/mongodb/config1/db/
  mkdir -p /data/mongodb/config1/log/
  /data/mongodb/config1/config.conf
   dbpath = /data/mongodb/config1/db
   configsvr = true
   port = 40001
   logpath =/data/mongodb/config1/log/config1.log
   logappend = true
   fork = true
   
   #auth=true # 启用验证
  
  mkdir -p /data/mongodb/config2/db/
  mkdir -p /data/mongodb/config2/log/
  /data/mongodb/config2/config.conf
   dbpath = /data/mongodb/config2/db
   configsvr = true
   port = 40002
   logpath =/data/mongodb/config2/log/config2.log
   logappend = true
   fork = true
   
   #auth=true # 启用验证
  
  mkdir -p /data/mongodb/config3/db/
  mkdir -p /data/mongodb/config3/log/
  /data/mongodb/config3/config.conf
   dbpath = /data/mongodb/config3/db
   configsvr = true
   port = 40003
   logpath =/data/mongodb/config3/log/config3.log
   logappend = true
   fork = true
   
   #auth=true # 启用验证
  
  mkdir -p /data/mongodb/mongos1/log/
  /data/mongodb/mongos1/config.conf
   configdb =10.10.113.122:40001,10.10.113.122:40002,10.10.113.122:40003
   port = 50001
   chunkSize = 1
   logpath =/data/mongodb/mongos1/log/mongos1.log
   logappend = true
   fork = true

shardsvr  = true

port      = 22003

dbpath    = /data/shard3/data/

logpath  = /data/shard3/log/shard3.log

logappend = true

fork      = true

oplogSize = 10240

replSet  = shard3

pidfilepath = /data/shard3/shard3.pid

directoryperdb = true

长机B、C、D、E创造方法同样,特别注意port、dbpath、logpath、replSet、pidfilepath的值,要不然你会高出各个难点。

A安装shard1的主,shard2的从,shard3的从**

**B安装shard2的主,shard3的从,shard4的从**
**

**C安装shard3的主,shard4的从,shard5的从**


**D安装shard4的主,shard5的从,shard1的从**


**E安装shard5的主,shard1的从,shard2的从**


   #auth=true # 启用验证
  
  mkdir -p /data/mongodb/mongos2/log/
  /data/mongodb/mongos2/config.conf
   configdb =10.10.113.122:40001,10.10.113.122:40002,10.10.113.122:40003
   port = 50002
   chunkSize = 1
   logpath =/data/mongodb/mongos2/log/mongos2.log
   logappend = true
   fork = true

主机F【一个mongos 和 一个config server】

   #auth=true # 启用验证

文件地方:/usr/local/mongodb/mongos/mongos.conf

文件内容:

configdb    = zero/127.0.0.143:21000,127.0.0.144:21000,127.0.0.144:21001

port        = 20000

logpath    = /data/mongos/log/mongos.log

fork            = true

logappend  = true

pidfilepath = /data/mongos/mongos.pid

文本地点:/usr/local/mongodb/config_server/config_server.conf

文本内容:

dbpath      = /data/config_server/data

logpath    = /data/config_server/log/config.log

port        = 21000

logappend  = true

configsvr  = true

replSet    = zero

fork        = true

pidfilepath = /data/config_server/config_server.pid

 二 启动
 
  shard1 副本 启动
  /usr/local/mongodb/bin/mongod -f /data/mongodb/shard1-1/config.conf
  /usr/local/mongodb/bin/mongod -f /data/mongodb/shard1-1a/config.conf
  /usr/local/mongodb/bin/mongod -f /data/mongodb/shard1-2/config.conf
  
  /usr/local/mongodb/bin/mongo --port 30001
  
  use admin
  db.runCommand({"replSetInitiate":{"_id":"shard1","members":[{"_id":0,"host":"10.10.113.122:30001"},{"_id":1,"host":"10.10.113.122:30002","arbiterOnly":true},{"_id":2,"host":"10.10.113.122:30003"}]}})
  
  shard2 副本 启动
  /usr/local/mongodb/bin/mongod -f /data/mongodb/shard2-1/config.conf
  /usr/local/mongodb/bin/mongod -f /data/mongodb/shard2-1a/config.conf
  /usr/local/mongodb/bin/mongod -f /data/mongodb/shard2-2/config.conf
  
  /usr/local/mongodb/bin/mongo --port 31001
  
  use admin
  db.runCommand({"replSetInitiate":{"_id":"shard2","members":[{"_id":0,"host":"10.10.113.122:32001"},{"_id":1,"host":"10.10.113.122:32002","arbiterOnly":true},{"_id":2,"host":"10.10.113.122:32003"}]}})
 
  config1 启动
  /usr/local/mongodb/bin/mongod -f /data/mongodb/config1/config.conf
  config2 启动
  /usr/local/mongodb/bin/mongod -f /data/mongodb/config2/config.conf
  config3 启动
  /usr/local/mongodb/bin/mongod -f /data/mongodb/config3/config.conf
  
  mongos1 启动
  /usr/local/mongodb/bin/mongos -f /data/mongodb/mongos1/config.conf
  mongos2 启动
  /usr/local/mongodb/bin/mongos -f /data/mongodb/mongos2/config.conf
  
  
  /usr/local/mongodb/bin/mongo --port 50001
  use admin
  db.runCommand({addshard:"shard1/10.10.113.122:30001,10.10.113.122:30003",name:"shard1", maxsize:100})
  db.runCommand({addshard:"shard2/10.10.113.122:32001,10.10.113.122:32003",name:"shard2", maxsize:100})
  
  db.runCommand({listshards:1})
  
  use test
  db.test.insert({"aaa":"bbb"});

主机G【一个mongos 和 两个config server】

其三节 replica sets shard (3机高可用 , 风流倜傥主双备份)
 一 方案
  每个分片3服务器,中期利用三台,日后服务器的充实思忖灾备,服务扩大的基数起码为三台(或才有双机方案)。
  Server1 10.10.113.122 Server1 10.10.113.132 Server3 10.10.113.133   

文件地点:/usr/local/mongodb/mongos/mongos.conf

文件内容:

configdb    = zero/127.0.0.143:21000,127.0.0.144:21000,127.0.0.144:21001

port        = 20000

logpath    = /data/mongos/log/mongos.log

fork        = true

logappend  = true

pidfilepath = /data/mongos/mongos.pid

文本地方:/usr/local/mongodb/config_server/config_server_21000.conf

文本内容:

dbpath      = /data/config_server_21000/data

logpath    = /data/config_server_21000/log/config.log

port        = 21000

logappend  = true

configsvr  = true

replSet    = zero

fork        = true

pidfilepath = /data/config_server_21000/config_server.pid

文本地方:/usr/local/mongodb/config_server/config_server_21001.conf

文本内容:

dbpath      = /data/config_server_21001/data

logpath    = /data/config_server_21001/log/config.log

port        = 21001

logappend  = true

configsvr  = true

replSet    = zero

fork        = true

pidfilepath = /data/config_server_21001/config_server.pid

  类型    服务器   用途       系统   说明
   
  存储/数据   Server1    Shard1/Shard2/Shard3  Linux 64位  Shard1:10001;Shard2:10002,Shard3:10003;
       Server2   Shard1/Shard2/Shard3  Linux 64位  Shard1:10001;Shard2:10002,Shard3:10003;
       Server3   Shard1/Shard2/Shard3  Linux 64位  Shard1:10001;Shard2:10002,Shard3:10003;
   
  配置    Server1   Config1      Linux 64位  Config1:20000;
       Server2   Config2      Linux 64位  Config2:20000; 
       Server3   Config3      Linux 64位  Config3:20000;
   
  路由    Server1   Mongos1      Linux 64位  Mongos:30000;
       Server2   Mongos2      Linux 64位  Mongos:30000;
       Server3   Mongos3      Linux 64位  Mongos:30000;
 
 二 准备
  安装mongodb 参照第风度翩翩节
  
  
  linux 传文件
  # scp mongodb-linux-x86_64-2.0.4.tgz 
  # ssh 10.10.113.132
  
  删除目录
  # rm -r -f /data/mongodb
 
 
  创制布局、日志、分片、key文件存款和储蓄目录及表达文件
  
  mkdir /data/mongodb/configsvr/ -p
  
  mkdir /data/mongodb/log/ -p
  
  mkdir /data/mongodb/shard1/ -p
  
  mkdir /data/mongodb/shard2/ -p
  
  mkdir /data/mongodb/shard3/ -p
  
  mkdir /data/mongodb/key/ -p
  
  mkdir /data/mongodb/conf/security/ -p
  mkdir /data/mongodb/conf/nosecurity/ -p
  
  成立结构文件
   1、 创制验证文件security于/data/mongodb/key/目录,关赋予可读权限,命令如下:
   cd /data/mongodb/key/
   echo 'hycloudmongodbkey' > security
   chmod 600 security
   
   2、 成立shard1.conf、shard2.conf、shard3.conf、configsvr.conf、mongos.conf于/data/mongodb/conf/security/ 和 /data/mongodb/conf/nosecurity/的目录,内容分别如下:
   shard1.conf
   
dbpath = /data/mongodb/shard1

四、按顺序开启服务

directoryperdb = true

1、开启shard服务

shardsvr = true

A主机为例,B、C、D、E雷同:

/usr/local/mongodb/bin/mongod  -f  /usr/local/mongodb/shard_conf/shard1.conf

/usr/local/mongodb/bin/mongod  -f  /usr/local/mongodb/shard_conf/shard2.conf

/usr/local/mongodb/bin/mongod  -f  /usr/local/mongodb/shard_conf/shard3.conf

replSet = shard1

2、开启config server服务

#bind_ip = 10.10.113.122,localhost

F主机

/usr/local/mongodb/bin/mongod  -f  /usr/local/mongodb/config_server/config_server.conf

G主机

/usr/local/mongodb/bin/mongod  -f  /usr/local/mongodb/config_server/config_server_21000.conf

/usr/local/mongodb/bin/mongod  -f  /usr/local/mongodb/config_server/config_server_21001.conf

port = 10001

五、给shard和config server设置别本集

oplogSize = 100

A主机为例(B、C、D、E、F相同注意members中ip地址不要搞错):

logpath =/data/mongodb/log/shard1.log

极端登入A主机

/usr/local/mongodb/bin/mongo 127.0.0.145:22001

#使用admin数据库

use admin

#概念别本集配置

config = {   _id:"shard1", members:[

                            {_id:0,host:"127.0.0.145:22001",priority:10},

                            {_id:1,host:"127.0.0.149:22001",priority:5},

                            {_id:2,host:"127.0.0.148:22001",priority:1}

                     ]

               }

#初叶化别本集配置

rs.initiate(config)

logappend = true

六、开启mongos服务

profile = 1

F主机

/usr/local/mongodb/bin/mongos  -f  /usr/local/mongodb/mongos/mongos.conf

G主机

/usr/local/mongodb/bin/mongos  -f  /usr/local/mongodb/mongos/mongos.conf

slowms = 5

***********************************************************************************************************

rest = true

当前搭建了mongodb配置服务器、路由服务器,各类分片服务器,

fork = true

只是应用程序连接到mongos路由服务器并不可能利用分片机制,

keyFile = /data/mongodb/key/security  #nosecurity目录将该行删除
    
   shard2.conf
dbpath = /data/mongodb/shard2

还亟需在前后相继里设置分片配置,让分片生效。

directoryperdb = true

***********************************************************************************************************

shardsvr = true

七、让分片生效

replSet = shard2

报到mongos服务,F节点操作

#连接到mongos

/usr/local/mongodb/bin/mongo 127.0.0.143:20000

#使用admin数据库

useadmin

#串联路由服务器与分配别本集1

db.runCommand(

{

addshard:

"shard1/127.0.0.145:22001,127.0.0.149:22001,127.0.0.148:22001"

}

返回:{ "shardAdded": "shard1", "ok" : 1 },说明shard1生效

#bind_ip = 10.10.113.122,localhost

同理串联路由服务器与分配别本集2,3,4,5一模二样,注意addshard中ip的改动

port = 10002

#查看分片服务器的布置

oplogSize = 100

db.runCommand( { listshards : 1} )

logpath = /data/mongodb/log/shard2.log

//。。。

logappend = true

*************************************************************************************************************

profile = 1


slowms = 5

日前安插服务、路由劳务、分片服务、别本集服务都早就串联起来了,

rest = true

但大家的目标是指望插入数据,数据可以预知活动分片,就差那么一丝丝。

fork = true

三回九转在mongos上,筹划让钦定的数据库、钦赐的会晤分片生效。

keyFile = /data/mongodb/key/security  #nosecurity目录将该行删除
    
   shard3.conf
dbpath = /data/mongodb/shard3

***********************************************************************************************************

directoryperdb = true

**八、让钦命table分片生效并生成测量检验数据**

shardsvr = true


replSet = shard3

#连接到mongos

/usr/local/mongodb/bin/mongo 127.0.0.143:20000

#早晚是在admin数据下试行

use admin

#指定test_db分片生效

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

{ "ok" : 1 }

#点名数据Curry要求分片的汇集和片键

db.runCommand( {shardcollection : "test_db.test_tab",key : {str: 'hashed'} } )

{ "collectionsharded": "test_db.test_tab", "ok" : 1 }

【注意:不要独自在自增或时间戳的字段作为分片片键,不然数据遍布不均匀,除非接受hashed,片键的选取请参见文章】

【注意:片键所在字段生硬建议创设目录,所以创建如下索引】

use test_db

#树立目录

db.test_tab.ensureIndex({str: "hashed"})

#查阅索引

db.test_tab.getIndexes()

#定义js函数,产生字符串

function getStr(){

    var str ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

    var s = '';

    for(var i = 0; i < 5; i ){

            var rand = Math.floor(Math.random() *str.length);

            s = str.charAt(rand);

     }

     return s;

}

#插入测量试验数据

for (var i = 1; i <= 100000;i ){

          db.test_tab.insert({"str":getStr()})

}

#翻开分片意况如下

db.test_tab.stats()

查看各种shard里面count字段就可以,借使数据大小相差超级小,则数据分片均衡

#查看分片状态

sh.status()

#bind_ip = 10.10.113.122,localhost

九、总结

port = 10003

万意气风发您知道了mongodb分片集群的中央,其实搭建起来依然挺轻便的。但是这里必要静心的点依旧挺多的,举例假使具备服务器时间相差太大集群搭建都会格外;还会有运行文件对应的参数;集群的安全等等。

oplogSize = 100

logpath = /data/mongodb/log/shard3.log

logappend = true

profile = 1

slowms = 5

rest = true

fork = true

keyFile = /data/mongodb/key/security  #nosecurity目录将该行删除
    
   configsvr.conf
dbpath = /data/mongodb/configsvr

directoryperdb = true

configsvr = true

port = 20000

logpath =/data/mongodb/log/configsvr.log

logappend = true

fork = true

keyFile = /data/mongodb/key/security  #nosecurity目录将该行删除
    
   mongos.conf
configdb =10.10.113.122:20000, 10.10.113.132:20000, 10.10.113.133:20000

port = 30000

chunkSize = 1  #单位 mb 生成景况请使用 200 或删除

logpath =/data/mongodb/log/mongos.log

logappend = true

fork = true

keyFile = /data/mongodb/key/security  #nosecurity目录将该行删除
   
  分片配置
   表达:分片要在无验证情况中安排,不然会现出无权力等丰盛。选择以下命令运转Server1Server2Server3上的shard1shard2shard3:

   # /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/nosecurity/shard1.conf

   # /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/nosecurity/shard2.conf

   # /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/nosecurity/shard3.conf

   以下命令查看是或不是正规运维:

   # netstat -lnpt # 或 ps -ef | grep mongo

本文由ca88发布,转载请注明来源

关键词: 网摘 MongoDB 之家 脚本 实例