MongoDB安装模式[原创]

2017/11/06 linux

Linux Mongodb

date:2017-11-11 author:张建新

查看硬盘分配情况

    [root@dscn022 mongodb]# lsblk
    NAME             MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    sda                8:0    0 278.5G  0 disk
    ├─sda1             8:1    0   500M  0 part /boot
    └─sda2             8:2    0 224.9G  0 part
      ├─rhel-root    253:0    0    50G  0 lvm  /
      ├─rhel-swap    253:1    0     4G  0 lvm  [SWAP]
      ├─rhel-home    253:2    0 100.9G  0 lvm  /home
      ├─rhel-var     253:3    0    20G  0 lvm  /var
      └─rhel-var_log 253:4    0    50G  0 lvm  /var/log
    sdb                8:16   0   3.7T  0 disk
    └─sdb1             8:17   0   3.7T  0 part /home/hadmin/logs
    sdc                8:32   0   3.7T  0 disk
    └─sdc1             8:33   0   3.7T  0 part
    sdd                8:48   0   3.7T  0 disk
    └─sdd1             8:49   0   3.7T  0 part
    sde                8:64   0   3.7T  0 disk
    └─sde1             8:65   0   3.7T  0 part
    sdf                8:80   0   3.7T  0 disk
    └─sdf1             8:81   0   3.7T  0 part /home/hadmin/data/mongodb/prev
    sdg                8:96   0   3.7T  0 disk
    └─sdg1             8:97   0   3.7T  0 part /home/hadmin/data/mongodb/curr
    sdh                8:112  0   3.7T  0 disk
    └─sdh1             8:113  0   3.7T  0 part /home/hadmin/data/mongodb/next
    sdi                8:128  0   3.7T  0 disk
    └─sdi1             8:129  0   3.7T  0 part
    sdj                8:144  0   3.7T  0 disk
    └─sdj1             8:145  0   3.7T  0 part
    sdk                8:160  0   3.7T  0 disk
    └─sdk1             8:161  0   3.7T  0 part
    sdl                8:176  0   3.7T  0 disk
    └─sdl1             8:177  0   3.7T  0 part
    sdm                8:192  0   3.7T  0 disk
    └─sdm1             8:193  0   3.7T  0 part
    loop0              7:0    0   3.8G  0 loop /mnt

进行配置

| ------- | ------ | ------- |
| :------| ------: | :------: |
| curr | 1 | 2 | 3 |  4  | 5 |
| prev | 5 | 1 | 2 |  3  | 4 |
| next | 2 | 3 | 4 |  5  | 1 |

分配mongoDB 目录

    mkdir -p  /home/hadmin/data/mongodb/prev
    mkdir -p  /home/hadmin/data/mongodb/curr
    mkdir -p  /home/hadmin/data/mongodb/next

进行mount

 mount    /dev/sdf1      /home/hadmin/data/mongodb/prev
 mount    /dev/sdg1     /home/hadmin/data/mongodb/curr
 mount   /dev/sdh1     /home/hadmin/data/mongodb/next

查看硬盘大小


    [root@dscn022 mongodb]# df -h
    Filesystem                Size  Used Avail Use% Mounted on
    /dev/mapper/rhel-root      50G  5.1G   45G  11% /
    devtmpfs                  126G     0  126G   0% /dev
    tmpfs                     126G     0  126G   0% /dev/shm
    tmpfs                     126G   50M  126G   1% /run
    tmpfs                     126G     0  126G   0% /sys/fs/cgroup
    /dev/sda1                 494M  127M  368M  26% /boot
    /dev/mapper/rhel-var       20G  101M   20G   1% /var
    /dev/mapper/rhel-home     101G  1.5G  100G   2% /home
    /dev/mapper/rhel-var_log   50G   58M   50G   1% /var/log
    /dev/loop0                3.8G  3.8G     0 100% /mnt
    tmpfs                     126G   64K  126G   1% /tmp
    tmpfs                      26G     0   26G   0% /run/user/0
    /dev/sdb1                 3.6T   89M  3.4T   1% /home/hadmin/logs
    /dev/sdf1                 3.6T  390M  3.4T   1% /home/hadmin/data/mongodb/prev
    /dev/sdg1                 3.6T  390M  3.4T   1% /home/hadmin/data/mongodb/curr
    /dev/sdh1                 3.6T  390M  3.4T   1% /home/hadmin/data/mongodb/next

脚本 (傻瓜模式)

  • 重要 numactl
  • yum install -y numactl
  • 配置Mongodb用到的文件夹都要mkdir
  • common.sh
    #!/bin/bash

    # $1就是shard几
    # $2目录,重新规划磁盘后可以修改此处
    # $3是关闭位,启动不传,关闭传 --shutdown

    INDEX=$1

    PORT=$(( 27018 + $INDEX ))
    HOSTNAME=`cat /etc/hostname`
    SHARD="TOD-Shard-$INDEX"
    DB_PATH=" /home/hadmin/data/mongodb/"$2
    PID_FILE="/home/hadmin/data/pids/mongodb/$SHARD.pid"
    LOG_FILE="/home/hadmin/data/logs/mongodb/$SHARD.log"

    numactl --interleave=all /home/hadmin/mongodb/bin/mongod --logpath $LOG_FILE --logappend --logRotate rename --timeStampFormat ctime --fork --pidfilepath $PID_FILE --port $PORT --bind_ip $HOSTNAME --dbpath $DB_PATH --journalCommitInterval 100 --storageEngine wiredTiger --wiredTigerCacheSizeGB 4 --replSet $SHARD --enableMajorityReadConcern --shardsvr --oplogSize 10240 $3

cfgsvr.start


    #!/bin/bash

    numactl --interleave=all /home/hadmin/mongodb/bin/mongod -f /home/hadmin/mongodb/conf/configserver.conf

route


    #!/bin/bash

    /home/hadmin/mongodb/bin/mongos -f /home/hadmin/mongodb/conf/router.conf

shard_curr.start


    #!/bin/bash

    /home/hadmin/mongodb/sbin/common.sh 1 curr

shard_next.start


    #!/bin/bash

    /home/hadmin/mongodb/sbin/common.sh 2 next

shard_prev.start


    #!/bin/bash

    /home/hadmin/mongodb/sbin/common.sh 5 prev

initConfig.sh

  • 初始化副本

    #!/bin/bash
    /home/hadmin/mongodb/bin/mongo dscn022:27018 <<EOF
    config={
        _id:"ConfigServer",
        configsvr:true,
        members:[
            {_id:0,host:"dscn022:27018",priority:2},
            {_id:1,host:"dscn023:27018"},
            {_id:2,host:"dscn024:27018"}],
        settings:{getLastErrorDefaults:{w:"majority",wtimeout:5000}}
    };
    rs.initiate(config);
    exit;
    EOF

initShard.sh

  • 初始化Shard

    #!/bin/bash
        /home/hadmin/mongodb/bin/mongo dscn022:27017 <<EOF
    sh.addShard("TOD-Shard-1/dscn022:27019,dscn023:27019,dscn026:27019");
    sh.addShard("TOD-Shard-2/dscn023:27020,dscn024:27020,dscn022:27020");
    sh.addShard("TOD-Shard-3/dscn024:27021,dscn025:27021,dscn023:27021");
    sh.addShard("TOD-Shard-4/dscn025:27022,dscn026:27022,dscn024:27022");
    sh.addShard("TOD-Shard-5/dscn025:27023,dscn026:27023,dscn022:27023");
    sh.setBalancerState(false);
    exit;
    EOF

initRS.sh


    #!/bin/bash
    ############
    # init rs1 #
    ############
    /home/hadmin/mongodb/bin/mongo dscn022:27019 <<EOF
    config={_id:"TOD-Shard-1",
    	members:[
    		{_id:0,host:"dscn022:27019",priority:2},
    		{_id:1,host:"dscn026:27019"},
    		{_id:2,host:"dscn023:27019"}],
    	settings:{getLastErrorDefaults:{w:"majority",wtimeout:5000}}};
    rs.initiate(config);
    exit;
    EOF

    ############
    # init rs2 #
    ############
    /home/hadmin/mongodb/bin/mongo dscn022:27020 <<EOF
    config={_id:"TOD-Shard-2",
    	members:[
    		{_id:0,host:"dscn023:27020",priority:2},
    		{_id:1,host:"dscn022:27020"},
    		{_id:2,host:"dscn024:27020"}],
    	settings:{getLastErrorDefaults:{w:"majority",wtimeout:5000}}};
    rs.initiate(config);
    exit;
    EOF

    ############
    # init rs3 #
    ############
    /home/hadmin/mongodb/bin/mongo dscn024:27021 <<EOF
    config={_id:"TOD-Shard-3",
    	members:[
    		{_id:0,host:"dscn024:27021",priority:2},
    		{_id:1,host:"dscn023:27021"},
    		{_id:2,host:"dscn025:27021"}],
    	settings:{getLastErrorDefaults:{w:"majority",wtimeout:5000}}};
    rs.initiate(config);
    exit;
    EOF

    ############
    # init rs4 #
    ############
    /home/hadmin/mongodb/bin/mongo dscn025:27022 <<EOF
    config={_id:"TOD-Shard-4",
    	members:[
    		{_id:0,host:"dscn025:27022",priority:2},
    		{_id:1,host:"dscn024:27022"},
    		{_id:2,host:"dscn026:27022"}],
    	settings:{getLastErrorDefaults:{w:"majority",wtimeout:5000}}};
    rs.initiate(config);
    exit;
    EOF

    ############
    # init rs5 #
    ############
    /home/hadmin/mongodb/bin/mongo dscn026:27023 <<EOF
    config={_id:"TOD-Shard-5",
    	members:[
    		{_id:0,host:"dscn026:27023",priority:2},
    		{_id:1,host:"dscn025:27023"},
    		{_id:2,host:"dscn022:27023"}],
    	settings:{getLastErrorDefaults:{w:"majority",wtimeout:5000}}};
    rs.initiate(config);
    exit;
    EOF

总结(总体流程)

  • 第一步挂盘(mount)
  • 复制Mongodb到5个节点
  • 配置文件只需要配置(ConfigServer,Route)!Shard 不需要配置。
  • 将脚本放倒Sbin下(与mongodb,Bin 同级别目录)
  • 启动ConfigServer(3个节点)
  • 启动Route 3个节点
  • sbin包含文件
    • stop 文件请看common.sh

脚本执行流程

  • cfgsvr.start(三个节点)
  • route.start(三个节点)
  • shard_curr.start (每个节点)
  • shard_next.start (每个节点)
  • shard_prev.start (每个节点)
  • initConfig.sh (任意节点)
  • initRS.sh (任意节点)
  • initShard.sh (任意节点)

提醒

  • 注意 ConfigServer 名称
  • 注意 Route指定的 ConfigServer地址
  • 节点互信 以及hosts

感谢兽兽提供的脚本

感谢民权协助

  • 以上操作经过验证可以直接拿去。
  • auther breakEval13
  • https://github.com/breakEval13

Affiliate

Search

    Post Directory