mongo 分片集群安装及管理

一、 集群的三个组件:

  1. mongos(query routers):查询路由,负责client的连接,并把任务分配给shards,然后收集结果。
  2. config server:配置服务器,保存了集群的元数据信息,查询路由通过配置服务器的配置信息决定把任务分配+到哪个shards上。
  3. shards server:分片,存储数据和执行计算。

二、 集群架构图:

这里写图片描述

三、 集群的IP及端口规划:

服务192.168.141.201192.168.141.202192.168.141.203
RouterMongos(17017)Mongos(17017) 
ConfigConfig server1(27017)Config server2(27017)Config server3(27017)
 Shard1-主(37017)Shard2-主(47017)Shard3-主(57017)
ShardShard2-从(47017)Shard1-从(37017)Shard1-从(37017)
 Shard3-从(57017)Shard3-从(57017)Shard2-从(47017)

四、 集群在LINUX上的目录规划:

这里写图片描述

五、 开始搭建集群:

1.下载软件:https://www.mongodb.com/download-center#community

这里用的版本是:mongodb-linux-x86_64-rhel62-3.2.10.tgz

2.创建目录:

mkdir -p /home/mongo/{config,router,shard} 
mkdir -p /home/mongo/config/{data,logs} 
mkdir -p /home/mongo/router/logs 
mkdir -p /home/mongo/shard/{data,logs} 
mkdir -p /home/mongo/shard/data/{shard1,shard2,shard3}

3.解压和复制:

解压文件,并将文件夹下的内容,分别复制到config/router/shard三个目录下面。

4.配置config server

1) 新建config实例启动所需的配置文件,并启动实例。【每台服务器顺序执行以下操作】

[root@mini1 ~]# cd /home/mongo/config/ 
[root@mini1 config]# vi mongo.config 
dbpath=/home/mongo/config/data 
logpath=/ home /mongo/config/logs/mongo.log 
port=27017 
logappend=true 
fork=true 
quiet=true 
journal=true 
configsvr=true 
replSet=configRS/192.168.141.201:27017,192.168.141.202:27017,192.168.141.203:27017 
##启动实例(服务端) 
[root@mini1 bin]# cd /home /mongo/config/bin/ 
[root@mini1 bin]# ./mongod /home/mongo/config/mongo.config

2) 初始化config server。任意进入一台服务器,配置config server的副本集

[root@mini1 bin]# ./mongo –port 27017 
rs.initiate({_id:”configRS”,configsvr:true,members:[{_id:1,host:”192.168.141.201:27017”,priority:2},{_id:2,host:”192.168.141.202:27017”},{_id:3,host:”192.168.141.203:27017”}]}) 
{ “ok” : 1 } 
注:可用rs.status()查看副本集的状态

5.启动mongos server(路由服务)

[root@mini1 /]# cd /home/mongo/router/bin/ 
[root@mini1 bin]# ./mongos –configdb configRS/192.168.141.201:27017,192.168.141.202:27017,192.168.141.203:27017 –port 17017 –fork –logpath=/home/mongo/router/logs/mongos.log

6.配置shard server(分片服务)

1) 新建config实例启动所需的配置文件,并启动实例。每台服务器顺序执行以下操作

[root@mini1 ~]# cd /home/mongo/shard/ 
[root@mini1 shard]# vi shard1.config 
dbpath=/ home /mongo/shard/data/shard1 
logpath=/ home /mongo/shard/logs/shard1.log 
port=37017 
logappend=true 
fork=true 
quiet=true 
journal=true 
shardsvr=true 
replSet= shard1RS/192.168.141.201:37017,192.168.141.202:37017,192.168.141.203:37017

[root@mini1 shard]# vi shard2.config 
dbpath=/home/mongo/ shard /data/ shard2 
logpath=/ home /mongo/ shard /logs/ shard2.log 
port=47017 
logappend=true 
fork=true 
quiet=true 
journal=true 
shardsvr =true 
replSet= shard2RS/192.168.141.201:47017,192.168.141.202:47017,192.168.141.203:47017

[root@mini1 shard]# vi shard3.config 
dbpath=/home/mongo/ shard /data/ shard3 
logpath=/ home /mongo/ shard /logs/ shard3.log 
port=57017 
logappend=true 
fork=true 
quiet=true 
journal=true 
shardsvr =true 
replSet= shard3RS/192.168.141.201:57017,192.168.141.202:57017,192.168.141.203:57017

##启动实例(服务端)第一台服务器先启动shard1,然后去第二台服务器启动shard2,再去第三台服务器启动shard3。 启动完后,每个服务器再去启动剩下的2个实例。 
[root@mini1 /]# cd /home/mongo/shard/bin/ 
[root@mini1 bin]# ./mongod -f /home/mongo/shard/shard1.config 
[root@mini1 bin]# ./mongod -f /home/mongo/shard/shard2.config 
[root@mini1 bin]# ./mongod -f /home/mongo/shard/shard3.config

2) 初始化shard server。任意进入一台服务器,配置每个shard的副本集
[root@mini1 bin]# ./mongo 192.168.141.201:37017
>rs.initiate({_id:"shard1RS",members:[{_id:1,host:"192.168.141.201:37017",priority:2},{_id:2,host:"192.168.141.202:37017"},{_id:3,host:"192.168.141.203:37017"}]})
{ "ok" : 1 }

[root@mini1 bin]# ./mongo 192.168.141.201:47017
>rs.initiate({_id:"shard2RS",members:[{_id:1,host:"192.168.141.202:47017",priority:2},{_id:2,host:"192.168.141.201:47017"},{_id:3,host:"192.168.141.203:47017"}]})
{ "ok" : 1 }

[root@mini1 bin]# ./mongo 192.168.141.201:57017
>rs.initiate({_id:"shard3RS",members:[{_id:1,host:"192.168.141.203:57017",priority:2},{_id:2,host:"192.168.141.201:57017"},{_id:3,host:"192.168.141.202:57017"}]})
{ "ok" : 1 }
  • 7.配置分片
[root@mini1 /]# cd /home/mongo/router/bin/
[root@mini1 bin]# ./mongo --port 17017
>use admin 
>db.runCommand({"addShard":"shard1RS/192.168.141.201:37017" ,"maxsize":1024}) 
>db.runCommand({"addShard":"shard2RS/192.168.141.202:47017" ,"maxsize":1024}) 
>db.runCommand({"addShard":"shard3RS/192.168.141.203:57017" ,"maxsize":1024})
注:可用命令db.runCommand({listshards:1}) 查看分片的状态信息
  • 判断当前是否是shard集群

  • db.runCommand({isdbgrid:1});
    是:
    { "isdbgrid" : 1, "hostname" : "xxxhost", "ok" : 1 }
    不是:
    {
            "ok" : 0,
            "errmsg" : "no such cmd: isdbgrid",
            "code" : 59,
            "bad cmd" : {
                    "isdbgrid" : 1
            }
    }

  • 删除分片

    use admin

    db.runCommand( { removeShard: "mongodb0" } )

    从副本集中删除一个成员,步骤如下:

    1、通过mongo shell登陆分片的primary,删除指定的副本集成员,如

    rs.remove("15.62.32.123:27021")

    #添加新节点到集群的某一个分片中,步骤如下:

    1、设置好新节点机器的staticIP

    2、下载mongodb安装包到新节点机器,新建好log目录,data目录和keyFile文件目录

    3、开放相关的防火墙(如27017或27018等)

    4、启动需要添加到分片(副本集)中的mongod实例,如

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

    5、通过mongo shell登陆分片的primary,添加新节点到副本集中,如

    rs.add({host: "15.62.32.111:27018", priority: 1 })  

    rs.add({host: "15.62.32.109:30001", arbiterOnly: true }) //添加仲裁节点
    rs.add({host: "15.62.32.109:30003", arbiterOnly: true }) //添加仲裁节点

    rs.add({host: "15.62.32.123:27021", priority: 0, hidden: true})  //添加隐藏节点

    rs.add({host: "15.62.32.123:27021", priority: 0, hidden: true, slaveDelay:  259200})  //添加延时节点

    #给集群新增用户,如:

    首先使用带有“userAdmin”角色的用户登录集群,执行如下命令

    use admin
    db.createUser(
      {
        "user" : "backupUser",
        "pwd" : "123",
        roles: [{role:"backup", db:"admin"}]
      }
    )
    db.auth("backupUser","123")  //使新增的用户生效

    至此,就完成了新增一个用户备份整个集群的用户

    #给集群用户新增权限,如:

    use admin

    db.grantRolesToUser(
    "pubUser",
    [{role:"readWrite", db:"Philippines"},
    {role:"readWrite", db:"Italy"},
    {role:"readWrite", db:"India"},
    {role:"readWrite", db:"Japan"}]
    )


    (1)所有DB的分片存储信息,包括chunks数、shard key信息:db.printShardingStatus()

    (2)db.collection.getShardDistribution() 获取collection各个分片的数据存储情况

    (3)sh.status() 显示本mongos集群所有DB的信息, 包含了Shard Key信息

     (4)仅显示分片:

    use config; db.shards.find()

            { "_id" : "shard0000", "host" : "xxhost:10001" }

            { "_id" : "shard0001", "host" : "yyhost:10002" }

    5)开启user collection分片功能:

  • . ./bin/mongo –port 20000

    2. mongos> use admin

    3. switched to db admin

    4. mongos> db.runCommand({'enablesharding"' 'test'})

    5. { "ok" : 1 }

    开启user collection分片功能:

    1. mongos> db.runCommand({'shardcollection': 'test.user', 'key': {'_id': 1}})

    { "collectionsharded" : "test.user", "ok" : 1 }

    mongodb默认开启autobalancer

    balancer是sharded集群的负载均衡工具,新建集群的时候默认开启,除非你在config里把它关闭掉:

    config> db.settings.find()

    { "_id" : "chunksize", "value" : 64 }

    { "_id" : "balancer", "activeWindow" : { "start" : "14:00", "stop" : "19:30" }, "stopped" : false}

    activeWindow指定autobalancer执行均衡的时间窗口。

    stopped说明是否使用autobalancer。

    手动启动balancer:sh.startBalancer()

    判断当前balancer是否在跑:sh.isBalancerRunning()


8.使用

在使用的时候,需要对数据库开启分片功能,并对数据库下的表的字段指定分片算法。
>use admin 
--对库hdctest开启分片 
>db.runCommand({"enablesharding":"hdctest"}) 
--对库hdctest下的表person按字段ID配置hash分库算法 
>db.runCommand({"shardcollection":"hdctest.person","key":{_id:'hashed'}}) 

9.其他注意

在登陆从库查看数据信息的时候,会报一个错误,如下图: 
这里写图片描述 
解决办法:执行命令db.getMongo().setSlaveOk()后,即可。

六、集群监控(mongodb-mms)

MongoDB的管理服务(MMS)是用于监控和备份MongoDB的基础设施服务,提供实时的报告,可视化,警报,硬件指标,并以直观的Web仪表盘展现数据。只需要安装上一个轻量级的监控代理,来收集mongodb运行信息并传回给MMS。MMS用户界面允许用户查看可视化的数据和设置警报。其中监控的服务是免费的,备份的服务是需要收费的。

1.分配一台符合MMS硬件要求的服务器.

MMS支持以下64位Linux发行版本:CentOS 5 or later,Red Hat Enterprise Linux 5, or later,SUSE 11 or Later,Amazon Linux AMI (latest version only,)Ubuntu 12.04 or later.

2.安装一个单独的mongodb复本集作为MMS应用数据库。(此步骤略)

后端mongodb数据库是单独的:MongoDB2.4.9或更高版本;后端mongodb数据库是复本集和分片集群必须运行MongoDB2.4.3或更高版本,官方建议是使用复制集。

3.安装SMTP邮件服务器

MMS依赖SMTP服务,是以电子邮件作为用户的,需要根据MMS服务器回复的邮件来进行用户注册和密码设置的,报警信息也是通过邮件来发送的。可以不用配置SMTP服务器,用第三方的即可。

4. 安装MMS应用程序包

https://www.mongodb.com/download-center#ops-manager 
这里写图片描述

5. 配置MMS服务的URL、电子邮件、mongo URI连接串

修改/mms/conf/conf-mms.properties文件,以下参数必须设置:
## MMS的监控服务,完整的URL
mms.centralUrl=http://mini1:8080
## MMS备份服务的用户名和端口
mms.backupCentralUrl=http://mini1:8081
##发送一般的电子邮件
mms.fromEmailAddr=
## 发送回复到一般的电子邮件
mms.replyToEmailAddr=
## 从MMS管理员发送消息
mms.adminFromEmailAddr=
## 发送信息或回复到MMS管理员
mms.adminEmailAddr=
## 发送退回邮件
mms.bounceEmailAddr=
## MMS连接mongodb服务器的连接串,即MMS应用程序数据库
mongo.mongoUri
## 如果mongo.mongoUri使用的是复制集,需要指定复制集的名称
mongo.replicaSet

6.启动MMS服务

启动mongodb-mms服务:mongodb-mms start 
这里写图片描述 
至此,mms 的监控功能就安装好了。

7.访问http://mini1:8080来进行管理。

这里写图片描述

8.把已有的集群部署到MMS上。

这里写图片描述

9.部署完成后,即可看到整个集群的运行状况。

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值