一、安装mongo软件 1

二、单节点mongo实例创建 2

        2.1创建实例目录 2

        2.2创建配置文件 3

        2.3 启动单节点MONGO数据库并验证 5

        2.4创建root 账号,登入数据库,创建用户 6

三、 集群配置 6

        3.1按照主实例的安装步骤,创建从节点,并启动验证后关闭 6

        3.2配置 replicaset 7

        3.3复制主节点keyFile到从节点 7

        3.4初始化REPLICASET 7

本文档描述如何配置MONGODB 副本集架构。分为软件安装,单实例创建, 副本集配置三个部分。供手动配置副本集架构参考。以mongodb-linux-x86_64-rhel70-4.2.10.tgz为例,可以在官网下载。

一、安装mongo软件

  Mongodb软件的安装相比其他软件的安装步骤简单很多, 不需要做编译等动作哦,直接将可执行文件解压到相应的目录。

创建用户

如下步骤创建mongo 账号

groupadd mongo

useradd -g mongo -G mongo mongo

创建目录

如下步骤创建必要的软件安装目录

mkdir -p /app/mongo/4.2.10

安装解压软件

mkdir -p /app/mongo/4.2.10

Tar -zxvf mongodb-linux-x86_64-rhel70-4.2.10.tgz /app/mongo/4.2.10

修改环境变量

cd $HOME
vim .bash_profile
文件末尾添加
export PATH=$PATH:/app/mongo/4.2.10/bin
执行 source .bash_profile 应用环境变量

或修改全局变量

vim /etc/profile
文件末尾添加
export PATH=$PATH:/app/mongo/4.2.10/bin
执行 source /etc/profile
更新 应用环境变量

二、单节点mongo实例创建

2.1创建实例目录

一个mongo 单实例有三个目录

data 放数据文件

log  放日志文件

etc  放配置文件,通讯KEY, 脚本

命令如下, 其中demo为mongo实例标识

mkdir -p /app/mongo_data/data

mkdir -p /app/mongo_data/etc

mkdir -p /app/mongo_data/log

2.2创建配置文件

配置文件分为日志、进程管理、网络、存储、性能分析、安全、副本集等部分, 定义了mongodb的配置,配置文件一般放在mongo实例的etc目录下

常见的配置项解释:

port

端口

dbpath

数据目录

logpath

运行日志路径

logappend

系统日志会向logpath指定的文件持续追加

fork

是否已后台进程运行

shardsvr

是否为sharding实例

replSet

分片名称

maxConns

最大连接数

noauth

是否不认证,初始化阶段先不打开认证,新建root账号后重启打开认证

auth

是否打开认证

可参考下面模板,编写自己的配置文件, 配置文件放在实例的etc目录下

配置文件模板mongod.cnf

systemLog:
   destination: file
   path: /app/mongo_data/log/mongo_demo.log
   traceAllExceptions: true
   syslogFacility: user
   verbosity: 0
   timeStampFormat: iso8601-local
   component:
      accessControl:
         verbosity: -1
      index:
         verbosity: -1
      network:
         verbosity: -1
      query:
         verbosity: -1      
      replication:
         verbosity: -1
      sharding:
         verbosity: -1
      storage:
         verbosity: -1
         journal:
            verbosity: -1
   logAppend: true
   logRotate: rename
processManagement:
   fork: true
   pidFilePath: /app/mongo_data/log/mongo.pid

net:
   bindIp: 127.0.0.1, 10.xxx.xxx.8
   port: 28000
   maxIncomingConnections: 4000
#   serviceExecutor: adaptive
   wireObjectCheck: true
   unixDomainSocket:
      enabled: true
      pathPrefix: /app/mongo_data/log
      filePermissions: 0700

###########################config WT start########################
storage:
   dbPath: /app/mongo_data/data
   directoryPerDB: true
   syncPeriodSecs: 60
   journal:
      enabled: true
      commitIntervalMs: 100
   engine: wiredTiger
   wiredTiger:
      engineConfig:
         cacheSizeGB: 4
         directoryForIndexes: true
         statisticsLogDelaySecs: 0
         journalCompressor: snappy
      collectionConfig:
         blockCompressor: snappy
      indexConfig:
         prefixCompression: false
###########################config WT end##########################
operationProfiling:
   slowOpThresholdMs: 1
   slowOpSampleRate:  1
   mode: off
setParameter:
   enableLocalhostAuthBypass: false
   enableFlowControl: false
security:
   clusterAuthMode: keyFile
   keyFile: /app/mongo_data/etc/mongo.key
   authorization: enabled
   javascriptEnabled: false

###########################config RS start########################
replication:
   oplogSizeMB: 2048
   replSetName: demo
   enableMajorityReadConcern: true

###########################config RS end##########################

2.3 启动单节点MONGO数据库并验证

启动单节点实例配置前,需要对配置文件做修改

1、根据需要修改IP ,端口,路径

2、需要注释掉SECURITY部分,和replicationSet部分否则实例会无法启动

#security:
   #clusterAuthMode: keyFile
   #keyFile: /app/mongo_data/etc/mongo.key
   #authorization: enabled
   #javascriptEnabled: false


注意修改配置文件的位置

/app/mongo/4.2.10/bin/mongod -f /app/mongo_data/etc/mongo.cnf

如下输出表示启动成功,

child process started successfully, parent exiting

2.4创建root 账号,登入数据库,创建用户

mongo --port 28000
use admin;
db.createUser({user:"root",pwd:"pwd",roles:["root"]});
关闭当前节点:
use admin;
db.shutdownServer();
  • 集群配置

3.1按照主实例的安装步骤,创建从节点,并启动验证后关闭

参考第二节单节点实例创建步骤, 安装从节点 。需要搭建2个从节点,端口不能冲突。分别登录从节点,配置root账号密码(保持和主节点一致),成功后,关闭节点。

mongo --port 对应从节点端口号
use admin;
db.createUser({user:"root",pwd:"pwd",roles:["root"]});
关闭当前节点:
use admin;
db.shutdownServer();

3.2配置 replicaset 

关闭主实例后, 生成KEY FILE

use admin;

db.shutdownServer();

openssl rand -base64 90 > /app/mongo_data/etc/mongo.key

chmod 400 /app/mongo_data/etc/mongo.key


取消配置文件中security的注释和replicaton部分的注释, 然后启动数据库

3.3复制主节点keyFile到从节点

   将mongo.key的文件从主节点拷贝到两个从节点实例目录的etc目录下, 并修改权限为400后启动,注意此时配置文件已经取消了security 和replicate部分的注释

/app/mongo/base/4.2.10/bin/mongod -f /app/mongo_data/etc/mongo.cnf

3.4初始化REPLICASET

登录主节点, 进入mongoshell

mongo --port 28000

使用root 用户密码登录,

use admin;

db.auth("root","******");

将配置信息赋值给config对象, 注意修改端口,IP  。另外_id需要跟配置文件的replSetName保持一致。

cfg={
        "_id" : "shard_sss1",
        "members" : [
                {
                        "_id" : 0,
                        "host" : "10.xxx.xxx..113:24000",
                        "hidden" : false,
                        "priority" : 10,
                        "tags" : {
                                "dc" : "pro"
                        },
                        "slaveDelay" : NumberLong(0)
                },
                {
                        "_id" : 1,
                        "host" : "10.xxx.xxx..114:24000",
                        "hidden" : false,
                        "priority" : 10,
                        "tags" : {
                                  "dc" : "pro"
                        },
                        "slaveDelay" : NumberLong(0)
                },
                {
                        "_id" : 2,
                        "host" : "10.xxx.xxx..115:24000",
                        "hidden" : false,
                        "priority" : 5,
                        "tags" : {
                                "dc" : "dr"
                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                }
        ]
};

执行初始化动作

rs.initiate(cfg);

如配置成功,输出如下所示

{ "ok" : 1 }

检查副本集状态

rs.Status();

在输出中检查myState字段和member中的health字段,如果均为1表示正常

3.5 配置开机启动

新增sh脚本
        cd /usr/local/mongodb/
        vim mongod_start.sh
添加如下内容:

#!/bin/bash
# pkill -9 mongod;
/usr/local/mongodb/bin/mongod --shutdown --dbpath /usr/local/mongodb/data/;
nohup /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs/log.txt > /shell/mongod.log 2>&1 &

设置权限777

    chmod 777 mongod_start.sh

    6.2添加脚本到开机自启动
        vim /etc/rc.d/rc.local

        文件后面追加
        sh /shell/mongod_start.sh

        chmod +x /etc/rc.d/rc.local