MongoDB 3.2.9 分布式集群搭建

原创 2016年08月29日 14:38:47

MongoDB集群搭建

作者:链上研发-欧阳
时间:2016-08-18

手把手搭建MongoDB集群

目标

搭建带有安全认证的mongodb集群准生产环境。
一共3个shard,每一个shard有3个replica set,replicat set采用primary、secondary、secondary方式。9个mongod实例,另外,3个config server,3个mongod实例,3个mongos实例。

mongodb版本 3.2.9 社区版本
Cores 4
OS Name CentOS release 6.6 (Final)
OS Version Linux version 2.6.32-504.3.3.el6.x86_64
RAM (MB) 3729

注意:关闭SELINUX
注意:服务器时间同步,比如用ntpdate,可以暂时略过不管。

最后会有核武。MongoDB Ops Manager

服务器准备:

服务器-ip
192.168.3.73
192.168.3.74
192.168.3.75

另外准备一台192.168.3.81用作MongoDB Ops Manager。

访问互通

比如在192.168.3.73机器上修改

vi /etc/hosts

192.168.3.73 73.dooioo.org
192.168.3.74 74.dooioo.org
192.168.3.75 75.dooioo.org
192.168.3.76 76.dooioo.org
192.168.3.81 81.dooioo.org
vi /etc/sysconfig/network
HOSTNAME=73.dooioo.org

生效

hostname 73.dooioo.org 

下载安装

登录到192.168.3.73

$ cd /root
$ wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.9.tgz
$ scp mongodb-linux-x86_64-rhel62-3.2.9.tgz root@192.168.3.74:/root
$ scp mongodb-linux-x86_64-rhel62-3.2.9.tgz root@192.168.3.75:/root
$ scp mongodb-linux-x86_64-rhel62-3.2.9.tgz root@192.168.3.76:/root
$ tar zxvf mongodb-linux-x86_64-rhel62-3.2.9.tgz

规划集群和分片

规划3个shard * 3个replicat set + 配置服务

shard rs name Primary Secondary Secondary port
fang-s-a a1 a2 a3 28111
fang-s-b b2 b1 b3 28112
fang-s-c c3 c1 c2 28113
fang-cs configserver1 configserver2 configserver3 28200

规划3个config server的mongod实例configserver1、configserver2、configserver3

hostname 实例
73.dooioo.org a1 b1 c1 configserver1
74.dooioo.org a2 b2 c2 configserver2
75.dooioo.org a3 b3 c3 configserver3

规划目录和配置文件

创建必要的目录和文件

#!/usr/bin/env bash
# 登录到192.168.3.73
# 创建db目录 日志目录 mongod配置文件
mkdir -p /mongodb/a1
mkdir -p /home/log/mongodb/a1
mkdir -p /mongodb/b1
mkdir -p /home/log/mongodb/b1
mkdir -p /mongodb/c1
mkdir -p /home/log/mongodb/c1

mkdir -p /mongodb/configserver1
mkdir -p /home/log/mongodb/configserver1

touch /mongodb/mongod-a1-config.yml
touch /mongodb/mongod-b1-config.yml
touch /mongodb/mongod-c1-config.yml
touch /mongodb/mongod-configserver1.yml

# 登录到192.168.3.74
mkdir -p /mongodb/a2
mkdir -p /home/log/mongodb/a2
mkdir -p /mongodb/b2
mkdir -p /home/log/mongodb/b2
mkdir -p /mongodb/c2
mkdir -p /home/log/mongodb/c2

mkdir -p /mongodb/configserver2
mkdir -p /home/log/mongodb/configserver2

touch /mongodb/mongod-a2-config.yml
touch /mongodb/mongod-b2-config.yml
touch /mongodb/mongod-c2-config.yml
touch /mongodb/mongod-configserver2.yml

# 登录到192.168.3.75
mkdir -p /mongodb/a3
mkdir -p /home/log/mongodb/a3
mkdir -p /mongodb/b3
mkdir -p /home/log/mongodb/b3
mkdir -p /mongodb/c3
mkdir -p /home/log/mongodb/c3

mkdir -p /mongodb/configserver3
mkdir -p /home/log/mongodb/configserver3

touch /mongodb/mongod-a3-config.yml
touch /mongodb/mongod-b3-config.yml
touch /mongodb/mongod-c3-config.yml
touch /mongodb/mongod-configserver3.yml

# 登录到192.168.3.73
# 生产和copy秘钥用户实例内部认证

openssl rand -base64 755 > /mongodb/keyfile
chmod 400 /mongodb/keyfile

scp /mongodb/keyfile root@192.168.3.74:/mongodb/
scp /mongodb/keyfile root@192.168.3.75:/mongodb/

列举mongod-a1-config.yml文件。

# yml
# mongod config

# 日志位置
systemLog:
  destination: file
  logAppend: true
  path: /home/log/mongodb/a1/mongodb.log


# Where and how to store data.
# db存储位置
storage:
  dbPath: /mongodb/a1
  journal:
    enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:

# how the process runs
# fork : fork and run in background  后台运行
# pidFilePath:location of pidfile 
processManagement:
  fork: true
  pidFilePath: /var/run/mongod-a1.pid

# network interfaces
# Listen to local interface only, comment to listen on all interfaces.
net:
  port: 28111
  bindIp: 0.0.0.0

#security:  enabled  disabled
#security:
#  keyFile: /mongodb/keyfile
#  clusterAuthMode: keyFile

#operationProfiling:
operationProfiling:
   slowOpThresholdMs: 1000
   mode: slowOp

#replication:

replication:
  replSetName: fang-s-a

#sharding:

sharding:
  clusterRole: shardsvr

## Enterprise-Only Options

#auditLog:

#snmp:

刚才touch的文件按照名称修改配置,比如mongod-b1-config.yml需要修改的内容:a1全部替换问b1, fang-s-a替换为fang-s-b,端口按照规划的28111改为28112

configserver稍微有点不一样的是clusterRole,注意修改,一个为shardsvr,一个为configsvr,其他同理,不同服务器修改数据和配置。按照前面创建的文件名称,目录名称修改。也给出一个配置服务的例子

# yml
# mongod config

systemLog:
  destination: file
  logAppend: true
  path: /home/log/mongodb/configserver1/mongodb.log


# Where and how to store data.
storage:
  dbPath: /mongodb/configserver1
  journal:
    enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:

# how the process runs
# fork : fork and run in background
# pidFilePath:location of pidfile
processManagement:
  fork: true
  pidFilePath: /var/run/mongod-configserver1.pid

# network interfaces
# Listen to local interface only, comment to listen on all interfaces.
net:
  port: 28200
  bindIp: 0.0.0.0


#security:  enabled  disabled
#security:
#  keyFile: /mongodb/keyfile
#  clusterAuthMode: keyFile

#operationProfiling:
operationProfiling:
   slowOpThresholdMs: 1000
   mode: slowOp

#replication:

replication:
  replSetName: fang-cs

#sharding:

sharding:
  clusterRole: configsvr

## Enterprise-Only Options

#auditLog:

#snmp:

启动实例

启动所有实例:

#  登录到192.168.3.73
cd /root/mongodb-linux-x86_64-rhel62-3.2.9/bin
./mongod -f /mongodb/mongod-a1-config.yml
./mongod -f /mongodb/mongod-b1-config.yml
./mongod -f /mongodb/mongod-c1-config.yml
./mongod -f /mongodb/mongod-configserver1.yml

# 其他两台类似,启动其他8个实例
#  登录到192.168.3.74
cd /root/mongodb-linux-x86_64-rhel62-3.2.9/bin
./mongod -f /mongodb/mongod-a2-config.yml
./mongod -f /mongodb/mongod-b2-config.yml
./mongod -f /mongodb/mongod-c2-config.yml
./mongod -f /mongodb/mongod-configserver2.yml

#  登录到192.168.3.75
cd /root/mongodb-linux-x86_64-rhel62-3.2.9/bin
./mongod -f /mongodb/mongod-a3-config.yml
./mongod -f /mongodb/mongod-b3-config.yml
./mongod -f /mongodb/mongod-c3-config.yml
./mongod -f /mongodb/mongod-configserver3.yml

创建replicat set

# 登录到192.168.3.73

./mongo 127.0.0.1:28111/admin

> use admin
switched to db admin

# 初始化fang-s-a的副本集
> rs.initiate()
{
        "info2" : "no configuration specified. Using a default configuration for the set",
        "me" : "73.dooioo.org:28111",
        "ok" : 1
}

# 添加到副本集
fang-s-a:OTHER> rs.add("74.dooioo.org:28111")
{ "ok" : 1 }
fang-s-a:PRIMARY> rs.add("75.dooioo.org:28111")
{ "ok" : 1 }

# 看下副本集配置情况
fang-s-a:PRIMARY> rs.conf()
{
        "_id" : "fang-s-a",
        "version" : 3,
        "protocolVersion" : NumberLong(1),
        "members" : [
                {
                        "_id" : 0,
                        "host" : "73.dooioo.org:28111",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 1,
                        "host" : "74.dooioo.org:28111",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 2,
                        "host" : "75.dooioo.org:28111",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                }
        ],
        "settings" : {
                "chainingAllowed" : true,
                "heartbeatIntervalMillis" : 2000,
                "heartbeatTimeoutSecs" : 10,
                "electionTimeoutMillis" : 10000,
                "getLastErrorModes" : {

                },
                "getLastErrorDefaults" : {
                        "w" : 1,
                        "wtimeout" : 0
                },
                "replicaSetId" : ObjectId("57c00e2b9f6b9f6453c488c3")
        }
}

可以自行插入记录看看同步效果

# 登录到192.168.3.74  初始化fang-s-b 添加副本集
./mongo 127.0.0.1:28112/admin
rs.initiate()
rs.add("73.dooioo.org:28112")
rs.add("75.dooioo.org:28112")

# 登录到192.168.3.75  初始化fang-s-c 添加副本集
./mongo 127.0.0.1:28113/admin
rs.initiate()
rs.add("73.dooioo.org:28113")
rs.add("74.dooioo.org:28113")

# 登录到192.168.3.74  初始化fang-cs添加副本集
./mongo 127.0.0.1:28200/admin
rs.initiate()
rs.add("74.dooioo.org:28200")
rs.add("75.dooioo.org:28200")

添加分片集群

# 登录到192.168.3.73
cd /root/mongodb-linux-x86_64-rhel62-3.2.9/bin
./mongos --port 28300 --configdb fang-cs/73.dooioo.org:28200,74.dooioo.org:28200,75.dooioo.org:28200 --fork --logpath /home/log/mongodb/mongos.log --bind_ip 0.0.0.0

通过mongos来登录

# 登录到192.168.3.73
cd /root/mongodb-linux-x86_64-rhel62-3.2.9/bin
./mongo 127.0.0.1:28300/admin

mongos> use admin
switched to db admin
mongos> sh.addShard("fang-s-a/73.dooioo.org:28111,74.dooioo.org:28111,75.dooioo.org:28111")
{ "shardAdded" : "fang-s-a", "ok" : 1 }
mongos> sh.addShard("fang-s-b/73.dooioo.org:28112,74.dooioo.org:28112,75.dooioo.org:28112")
{ "shardAdded" : "fang-s-b", "ok" : 1 }
mongos> sh.addShard("fang-s-c/73.dooioo.org:28113,74.dooioo.org:28113,75.dooioo.org:28113")
{ "shardAdded" : "fang-s-c", "ok" : 1 }
mongos> 

没有安全认证的集群就搭建好了,下面是关于安全认证的。

建立安全

秘钥文件keyfile

生成秘钥文件

openssl rand -base64 755 > /mongodb/keyfile
chmod 400 /mongodb/keyfile
scp keyfile root@192.168.3.74:/mongodb/
scp keyfile root@192.168.3.75:/mongodb/

创建用户,登录到一个mongos实例,为集群创建root用户

db.createUser({user: "root******",pwd: "**************",roles: [ "root", "userAdminAnyDatabase", "userAdmin", "dbOwner" ]})

所有实例全部停止,使用

 ./mongod -f /mongodb/mongod-a1-config.yml --shutdown

mongod实例启动添加参数 --keyFile /mongodb/keyfile --auth

启动时可以不使用 --auth参数,因为使用了 --keyFile就必须验证,也就是隐含了 --auth。但是--auth并不隐含 --keyFile

测试,iostat,观察使用情况

例如,以下命令会每隔一秒展示额外的统计数据和每次展示报表的时间(以MB/s为流量单位):

iostat -xmt 1

%util: 这对快速查看来说是最有用的字段,它指明了设备/驱动器使用时间的百分比。

avgrq-sz:平均请求大小。该值较小的数字反映了更多的随机IO操作。

作者:链上研发-欧阳
版权声明:本文为链家上海研发中心原创文章,转载请注明出处。

核武MongoDB Ops Manager

下面介绍下核武MongoDB Ops Manager。

安装

  1. 机器同上(CentOS release 6.6)。官方推荐要求15 GB memory and 50 GB disk space。df -h校验。测试用,少一些没关系。这里测试机器30G硬盘空间,4G内存。需要有root账号。首先安装一个mongod实例,作为ops的db。
  2. 到官网上下载Ops Manager包,我这里下载的是mongodb-mms-2.0.5.358-1.x86_64.rpm
  3. 执行

    sudo rpm -ivh mongodb-mms-2.0.5.358-1.x86_64.rpm
    
    sudo service mongodb-mms start

配置文件位置/opt/mongodb/mms/conf/conf-mms.properties
默认访问8080端口,http://192.168.3.81:8080/.

账号配置

略,比如修改时区为北京时间。

新的部署

登录,可以选择部署新的集群和,管理手动创建的集群

这里写图片描述

  • 选择Build New Deployment
  • Where would you like to deploy MongoDB?
    • 选择 Deployment in other remote.
  • What type of MongoDB deployment would you like to build?
    • 选择 Sharded Cluster
  • Provide details for your sharded cluster 规划你的集群配置
    • Cluster Name : mdb-test-cluster
    • Shard Count : 4
    • Nodes Per Shard : 3
    • Shard Name Prefix : mdb-test
    • Data Directory Prefix : /data
  • Install an Automation Agent on each server. 在每个服务器安装自动代理服务。 默认需要12个服务器,因为 4* 3,这里服务器少,选择4台服务器。
    • 选择下载安装配置代理服务器: 基本是一步一步手把手了,

下载代理包

curl -OL http://192.168.3.81:8080/download/agent/automation/mongodb-mms-automation-agent-manager-2.5.19.1732-1.x86_64.rpm

安装代理包

sudo rpm -U mongodb-mms-automation-agent-manager-2.5.19.1732-1.x86_64.rpm

打开配置文件,编辑配置,数据库指定了目录的,必须创建目录。

sudo vi /etc/mongodb-mms/automation-agent.config
mmsGroupId=57be67ffe4b09e1dfa498ee7
mmsApiKey=e5b83213955c886d0ef8ce3324cf8f30
mmsBaseUrl=http://192.168.3.81:8080


sudo mkdir -p /data
sudo chown mongod:mongod /data

sudo service mongodb-mms-automation-agent start

验证通过后,下一步。初始了默认的一些实例:

这里写图片描述

你也可以移动。先按默认的下一步。

然后提示: We are deploying your changes. This might take a few minutes…

版权声明:本文为链家上海研发中心原创文章,转载请注明出处。

相关文章推荐

MongoDB 3.2集群安装文档

一、      基本流程 (1)       搭建配置服务器(3台服务器) MongoDB3.2版本开始,配置服务器从之前的3服务器模式转变为副本集模式,本文搭建的配置服务器集群采用了副本集模式,...

MongoDB 3.2.x 集群

一图胜千言 5台分片服务器建立 解压:tar zxvf /data/mongo.tgz -C /data mkdir /data/mongo/conf mkdir /d...

MongoDB单机, 主从, 分布式部署

MongoDB是最易用的NoSQL,比较适合取代MySQL做一些存储,不过不是强一致性的。本文介绍一下MongoDB各种部署方式,并分享一些感受。前两部分“单机部署”和“主从部署”是“分片部署”的基础...

mongodb 分布式集群部署记录

资源有限,所有shard和repl在同一台机器,且只有一个repl 目录结构. ├── cfg │?? ├── c1 │?? └── c2 ├── mos │?? ├── m1 │?? └── m2...

关于MongoDB分布式高可用集群实现

一、环境准备 1.本例使用3台Linux主机,IP地址如下: 点击(此处)折叠或打开 Server A: 192...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

mongodb分布式集群架构

mongodb分布式集群架构 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://freeze.blog.51cto.com/...

mongodb3.4.3 集群搭建

一 replica set 和shard 分配 环境: 1. 三台物理机,ip分别是X.X.X.75,X.X.X.76,X.X.X.77 2. 系统:centos7.2 集群组成: 三个re...
  • zeroctu
  • zeroctu
  • 2017年05月02日 15:51
  • 1311

Mongodb3集群环境搭建

一、背景 创建高可用、高性能、可扩展、易伸缩的Mongodb集群需创建具有3个Shard(每个包含1 Primary,1 Secondary,1 Arbiter),3个Config Serv...

mongodb分布式集群架构

一、关于mongodb   MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介...
  • mniwc
  • mniwc
  • 2012年11月26日 18:22
  • 16244
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MongoDB 3.2.9 分布式集群搭建
举报原因:
原因补充:

(最多只允许输入30个字)