CentOS 7 mongodb集群部署常用知识点及注意事项

Step1.

先在primary的机器上创建集群的超级用户。集群超级用户需要有clusterAdmin的角色
> use admin
switched to db admin
> db.addUser( { user: "admin", pwd: "admin", roles: [ "userAdminAnyDatabase","clusterAdmin" ] } )
 
Step2.
 
Mongodb启动命令mongod参数说明

mongod的主要参数有:

 基本配置

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

--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# 最大同时连接数 默认2000
--noauth# 不启用验证
--nohttpinterface# 关闭http接口,默认关闭27018端口访问
--noprealloc# 禁用数据文件预分配(往往影响性能)
--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 参数

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

--fastsync# 从一个dbpath里启用从库复制服务,该dbpath的数据库是主库的快照,可用于快速启用同步
--autoresync# 如果从库与主库同步数据差得多,自动重新同步,
--oplogSize arg# 设置oplog的大小(MB)
 * 主/从参数
--------------------------------------------------------------------------------

--master# 主库模式
--slave# 从库模式
--source arg# 从库 端口号
--only arg# 指定单一的数据库复制
--slavedelay arg# 设置从库同步主库的延迟时间
 * Replica set(副本集)选项:

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

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

--------------------------------------------------------------------------------
--configsvr# 声明这是一个集群的config服务,默认端口27019,默认目录/data/configdb
--shardsvr# 声明这是一个集群的分片,默认端口27018
--noMoveParanoia# 关闭偏执为moveChunk数据保存

 

-------------------------------------------------样例-----------------------------------

 

这里我说明下这个图所表达的意思。

  • l Shard服务器:使用Replica Sets确保每个数据节点都具有备份、自动容错转移、自动恢复的能力。
  • l  配置服务器:使用使用3个配置服务器确保元数据完整性。

  • l  路由进程:使用3个路由进程实现平衡,提高客户端接入性能

  • l  3 个分片进程:Shard11,Shard12,Shard13 组成一个副本集,提供Sharding 中 shard1 的功能。

  • l  3 个分片进程:Shard21,Shard22,Shard23 组成一个副本集,提供Sharding 中 Shard2 的功能。

  • l  3个配置服务器进程和3个路由器进程。

  构建一个 mongoDB Sharding Cluster 需要三种角色:shard 服务器(ShardServer)、配置服务器(config Server)、路由进程(Route Process)

  Shard 服务器

  shard 服务器即存储实际数据的分片,每个 shard 可以是一个 mongod 实例, 也可以是一组 mongod 实例构成的 Replica Sets.为了实现每个 Shard 内部的故障 自动转换,MongoDB 官方建议每个 shard 为一组 Replica Sets.
  配置服务器

  为了将一个特定的 collection 存储在多个 shard 中,需要为该 collection 指定 一个 shard key,决定该条记录属于哪个 chunk,配置服务器可以存储以下信息, 每个shard节点的配置信息,每个chunk的shard key范围,chunk在各shard 的分布情况,集群中所有 DB 和 collection 的 sharding 配置信息。
  路由进程

  它是一个前段路由,客户端由此接入,首先询问配置服务器需要到哪个 shard 上查询或保存记录,然后连接相应的 shard 执行操作,最后将结果返回给客户端,客 户端只需要将原本发给 mongod 的查询或更新请求原封不动地发给路由进程,而 不必关心所操作的记录存储在哪个 shard 上。

按照架构图,理论上是需要 16 台机器的,由于资源有限,用目录来替代物理机(有风险,若其中某台机器宕机,配置在该机器的服务都会 down 掉)

务器

Host

服务和端口

1

10.211.55.28

Shard11:10011 Shard21:10021 ConfigSvr:10031 Mongos:10040

2

10.211.55.28

Shard12:10012 Shard22:10022 ConfigSvr:10032 Mongos:10042

3       

10.211.55.28

Shard13:10013 Shard23:10023 ConfigSvr:10033 Mongos:10043

环境变量

  下面给出 MongoDB 的环境变量配置,输入命令并配置: 

[root@mongo ~]# vi /etc/profile
export MONGO_HOME=/root/mongodb-linux-x86_64-2.6.7 
export PATH=$PATH:$MONGO_HOME/bin

  然后保存退出,输入以下命令配置文件立即生效:

[root@mongo ~]# . /etc/profile

配置 Shard+Replica Sets

 

我们分别启动 Shard1 的所有进程,并设置副本集为:shard1。下面给出启动 Shard1 的脚本文件。

shard11.conf 

dbpath=/mongodb/data/shard11 
logpath=/mongodb/log/shard11.log 
pidfilepath=/mongodb/pid/shard11.pid 
directoryperdb=true
logappend=true 
replSet=shard1 
port=10011 
fork=true 
shardsvr=true 
journal=true

shard12.conf 

dbpath=/mongodb/data/shard12 
logpath=/mongodb/log/shard12.log 
pidfilepath=/mongodb/pid/shard12.pid 
directoryperdb=true
logappend=true 
replSet=shard1 
port=10012 
fork=true 
shardsvr=true 
journal=true

shard13.conf 

dbpath=/mongodb/data/shard13 
logpath=/mongodb/log/shard13.log 
pidfilepath=/mongodb/pid/shard13.pid 
directoryperdb=true
logappend=true 
replSet=shard1 
port=10013 
fork=true 
shardsvr=true 
journal=true

shard21.conf 

dbpath=/mongodb/data/shard21
logpath=/mongodb/log/shard21.log 
pidfilepath=/mongodb/pid/shard21.pid 
directoryperdb=true
logappend=true 
replSet=shard2 
port=10021 
fork=true 
shardsvr=true 
journal=true

 

shard22.conf

dbpath=/mongodb/data/shard22
logpath=/mongodb/log/shard22.log 
pidfilepath=/mongodb/pid/shard22.pid 
directoryperdb=true
logappend=true 
replSet=shard2 
port=10022
fork=true 
shardsvr=true 
journal=true

shard23.conf 

dbpath=/mongodb/data/shard23
logpath=/mongodb/log/shard23.log 
pidfilepath=/mongodb/pid/shard23.pid 
directoryperdb=true
logappend=true 
replSet=shard2 
port=10023
fork=true 
shardsvr=true 
journal=true

 

config1.conf 

dbpath=/mongodb/config/config1 
logpath=/mongodb/log/config1.log 
pidfilepath=/mongodb/pid/config1.pid 
directoryperdb=true
logappend=true 
port=10031 
fork=true 
configsvr=true 
journal=true

config2.conf 

dbpath=/mongodb/config/config2 
logpath=/mongodb/log/config2.log 
pidfilepath=/mongodb/pid/config2.pid 
directoryperdb=true
logappend=true 
port=10032 
fork=true 
configsvr=true 
journal=true

config3.conf 

dbpath=/mongodb/config/config3 
logpath=/mongodb/log/config3.log 
pidfilepath=/mongodb/pid/config3.pid 
directoryperdb=true
logappend=true 
port=10033 
fork=true 
configsvr=true 
journal=true

路由配置文件即为mongos 节点配置文件

  • route.conf 
configdb=mongo:10031,mongo:10032,mongo:10033 
pidfilepath=/mongodb/pid/route.pid
port=10040
chunkSize=1
logpath=/mongodb/log/route.log 
logappend=true
fork=true
  • route2.conf 
configdb=mongo:10031,mongo:10032,mongo:10033 
pidfilepath=/mongodb/pid/route.pid
port=10042
chunkSize=1
logpath=/mongodb/log/route2.log 
logappend=true
fork=true
  • route3.conf 
configdb=mongo:10031,mongo:10032,mongo:10033 
pidfilepath=/mongodb/pid/route3.pid
port=10043
chunkSize=1
logpath=/mongodb/log/route3.log 
logappend=true
fork=true

注:配置文件中的目录必须存在,不存在需创建。

启动批处理 

  下面给出启动批处理的脚本,内容如下:

 

mongod -f /etc/shard11.conf
mongod -f /etc/shard12.conf
mongod -f /etc/shard13.conf
mongod -f /etc/shard21.conf
mongod -f /etc/shard22.conf
mongod -f /etc/shard23.conf
mongod -f /etc/config1.conf
mongod -f /etc/config2.conf
mongod -f /etc/config3.conf
mongos -f /etc/route.conf
mongos -f /etc/route2.conf
mongos -f /etc/route3.conf

参数说明

dbpath:数据存放目录
logpath:日志存放路径 logappend:以追加的方式记录日志
replSet:replica set 的名字
port:mongodb 进程所使用的端口号,默认为 27017 fork:以后台方式运行进程

journal:写日志
smallfiles:当提示空间不够时添加此参数
其他参数
pidfilepath:进程文件,方便停止 mongodb directoryperdb:为每一个数据库按照数据库名建立文件夹存放 bind_ip:mongodb 所绑定的 ip 地址
oplogSize:mongodb 操作日志文件的最大大小。单位为 Mb,默认为硬盘剩余 空间的 5%
noprealloc:不预先分配存储
shardsvr:分片
configsvr:配置服务节点
configdb:配置 config 节点到 route 节点 

 

配置分片的表和片键 

  首先,我们需要登录到路由节点(mongos),这里我们登录到其中一个 10040 端口下的节点。输入如下命令: 

 

mongo mongo:10040
use admin 
db.runCommand({addshard:"shard1/mongo:10011,mongo:10012,mongo:10013"}) 
db.runCommand({addshard:"shard2/mongo:10021,mongo:10022,mongo:10023"}) 
db.runCommand({ listshards:1 }) #列出 shard 个数 
db.runCommand({enablesharding:"friends"}); #创建 friends 库
db.runCommand( { shardcollection : "friends.user",key : {id: 1},unique : true } ) # 使用 user 表来做分片,片键为 id 且唯一

至此,整个集群的搭建完成,下面我们测试集群的高可用性。

 

贴出创建目录的脚本,方便搭建的时候,快速创建目录。

1
2
3
4
5
6
7
8
9
10
11
mkdir -p /mongodb/data/shard11
mkdir -p /mongodb/data/shard12
mkdir -p /mongodb/data/shard13
mkdir -p /mongodb/data/shard21
mkdir -p /mongodb/data/shard22
mkdir -p /mongodb/data/shard23
mkdir -p /mongodb/log
mkdir -p /mongodb/pid
mkdir -p /mongodb/config/config1
mkdir -p /mongodb/config/config2
mkdir -p /mongodb/config/config3

 停止脚本:

1
2
3
4
5
6
7
8
9
10
11
12
kill - 9  $(cat /mongodb/pid/shard11.pid)
kill - 9  $(cat /mongodb/pid/shard12.pid)
kill - 9  $(cat /mongodb/pid/shard13.pid)
kill - 9  $(cat /mongodb/pid/shard21.pid)
kill - 9  $(cat /mongodb/pid/shard22.pid)
kill - 9  $(cat /mongodb/pid/shard23.pid)
kill - 9  $(cat /mongodb/pid/config1.pid)
kill - 9  $(cat /mongodb/pid/config2.pid)
kill - 9  $(cat /mongodb/pid/config3.pid)
kill - 9  $(cat /mongodb/pid/route.pid)
kill - 9  $(cat /mongodb/pid/route2.pid)
kill - 9  $(cat /mongodb/pid/route3.pid)
 
 
备注:一个集群中如果想配置多个mongos和多个configserver,则需要注意:每个configserver内容需要相同;mongos连接的configserver需要相同;务必保证configserver之间数据同步的问题,不然使用多个mongos会出现问题。
 
学习参考文章:http://www.cnblogs.com/smartloli/p/4305739.html
         http://blog.csdn.net/luonanqin/article/details/8497860
 
windows集群部署请参考:http://www.cnblogs.com/zhanjun/p/4649277.html
分片概念参考文章:http://www.cnblogs.com/refactor/archive/2012/08/14/2601651.html
结构:http://blog.csdn.net/vellin/article/details/53994014
集群分片添加新的configserver:http://blog.csdn.net/mchdba/article/details/51920458
 阿里云栖https://yq.aliyun.com/articles/200499?spm=5176.8279002.620388.3
 

转载于:https://www.cnblogs.com/OneDirection/articles/6802228.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值