频道栏目
首页 > 资讯 > DB2 > 正文

mongodb简单部署方案及实例

17-08-28        来源:[db:作者]  
收藏   我要投稿

第一节 准备工作

一 安装mongodb

我这里选用rehl 5.6作为其运行载体。

1. 下载mongodb的linux版本(注意32位和64位的区别),下载地址:http://www.mongodb.org/downloads

# wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.4.tgz

2. 将下载的mongodb安装文件 mongodb-linux-x86_64-2.0.4.tgz 放到/usr/local/下

3. 解压

# tar -zxvf mongodb-linux-x86_64-2.0.4.tgz

重命名

# mv mongodb-linux-x86_64-2.0.4 /usr/local/mongodb

4. 创建数据库文件目录, # mkdir -p /data/mongodb,我把数据库文件目录放在当前文件夹下,# mkdir -p data/db,创建日志目录 #mkdir -p log

二 启动

首先用命令进入到bin目录下:cd /usr/local/mongodb/bin

方式一:直接运行命令启动

./mongod –port 10000 –fork –logpath= logpath=/data/mongodb/log/mongodb.log -- logappend -- dbpath=/data/mongodb/data/db

方式二:通过配置文件方式启动(推荐)。

1.在服务器上新建mongodb.conf配置文件(建议用命令生成,放在mongodb同一个目录下)

内容为:

port=10000 #端口号

fork=true #以守护进程的方式运行,创建服务器进程

#master=true #单主从配置时设为主服务器

#salve=true ##单主从配置时设为从服务器

logpath=/data/mongodb/log/mongodb.log #日志输出文件路径

logappend=true #日志输出方式

dbpath=/data/mongodb/data/db #数据库路径

replSet=blort #设置富本集的名字

shardsvr=true #设置是否分片

2.运行./mongod –config ~/.mongodb.conf 命令(--config可以直接写成-f)。

输出:

all output going to: /data/mongodb/log/mongodb.log

forked process: 5315

mongodb 启动参数

--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数据保存?

三 查询进程和关闭数据库

1. 运行 ps -ef|grep mongo 命令查询服务器进程

2. 运行 kill -2 5315命令kill掉5315的进程

四 进入数据库并简单操作数据库

1.运行./mongo –port 1000进入刚刚启动的端口号为10000的数据库

2.使用use test可以切换集合(相当于数据库表),这里切换到了test集合

3.使用db.test.insert("a","b");向集合插入数据

4.使用db.test.find();查询集合里的数据

5.更多shell命令请查阅相关文档

五 注意事项

1. 防火墙设置(测试时可直接关闭linux关闭防火墙:立即但不永久生效:service iptables stop重启永久生效:chkconfig iptables off)

第二节 副本集

简单的说,副本集就是有自动故障恢复功能的主从集群,副本集没有固定的"主节点",集群会通过投票选举一个"主节点"。当主节点岩机时,会变更到其他节点。副本集布在不同机器上时,至少要启动三个(单数)数据库服务器进程,否则启动时投票不成功会一直初始化不了。

一 以配置文件方式启动三台机器上的数据库服务器

1. 三台服务器的配置文件:

port=10000 #端口号

fork=true #以守护进程的方式运行,创建服务器进程

logpath=/data/mongodb/log/mongodb.log #日志输出文件路径

logappend=true #日志输出方式

dbpath=/data/mongodb/data/db #数据库路径

replSet=blort #设置富本集的名字为blort,replSet是让服务器知道在这个"blort"副本集中还有别的机器

# replSet=blort /10.10.112.181:10000, 10.10.112.191:10000#设置富本集的名字,这种方式也可以,意思就是"blort"副本集其他机器,位置在10.10.112.181:10000和10.10.112.191:10000,但不推荐

2. 通命令启动三台数据库服务器

/usr/local/mongodb/bin/mongod -f /data/mongodb/blort/config.conf

/usr/local/mongodb/bin/mongod -f /data/mongodb/blort2/config.conf

/usr/local/mongodb/bin/mongod -f /data/mongodb/blort3/config.conf

二 初始化副本集(只能初始化一次)

/usr/local/mongodb/bin/mongo --port 30001

use admin

方法一:

db.runCommand({"replSetInitiate":{"_id":"blort","members":[{"_id":0,"host":"10.10.113.122:30001"},{"_id":1,"host":"10.10.113.122:30002"},{"_id":2,"host":"10.10.113.122:30003","arbiterOnly":true}]}})

方法二:

config={_id:'blort',members:[{"_id":0,host:'10.10.113.122:30001},{"_id":1,host:'10.10.113.122:30002'},{"_id":2,"host":"10.10.113.122:30003","arbiterOnly":true}]};

rs.initiate(config);

三 增加和设置副本集

有几种不同类型的节点可以存在于副本集:

Standard :存在于副本,参与投票,有可能成为活跃节点(即主节点)

Passive :存储了完整的数据副本,参与投票,不能成为活跃节点

Arbiter:仲裁者,只参与投票,不能成为活跃节点

Priority:优先级,(投票会投优先级高的,如果相同,则投数据最新的)

以上类型可以通过以下命令对副本集合进行修改或者增加服务器

db.runCommand({"replSetReconfig":{"_id":"test3","version":2,"members":[{"_id":0,"host":"10.10.113.122:30001"},{"_id":1,"host":"10.10.113.122:30002"},{"_id":2,"host":"10.10.113.122:30003","arbiterOnly":true}]}})

增加副本服务器

在增加一个从服务器节点

a.以相同副本集名字启动一台服务器

b.通过rs.add命令往system.replset添加新的从服务器成员

rs.add("10.10.113.122:30005"); 或者rs.add({"_id":4,"host":"10.10.113.122:30005"})

添加仲裁

rs.addArb("10.10.113.122:30004");

四 读扩展

待研究

五 用户校验

未成功

use test;

db.addUser("test","123456");

db.auth("test","123456");

db.system.users.find();

db.system.users.remove("test","123456");

第二节 replica sets + shard (双机方案,单机模拟)

一 准备

mkdir -p /data/mongodb/shard1-1/db/

mkdir -p /data/mongodb/shard1-1/log/

/data/mongodb/shard1-1/config.conf

port=30001 #端口号

fork=true #以守护进程的方式运行,创建服务器进程

#nohttpinterface=true # 关闭http接口,默认关闭27018端口访问 port + 1000

rest = true #http接口 启动rest 使能访问 。与nohttpinterface 对应 只开一个

shardsvr=true #启动分片

#oplogSize=100 #复制日志大小 MB

logpath=/data/mongodb/shard1-1/log/shard1-1.log #日志输出文件路径

logappend=true #日志输出方式

dbpath=/data/mongodb/shard1-1/db #数据库路径

directoryperdb=true # 设置每个数据库将被保存在一个单独的目录

replSet=shard1 #设置富本集的名字为shard1,replSet是让服务器知道在这个"shard1"副本集中还有别的机器

#auth=true # 启用验证

mkdir -p /data/mongodb/shard1-1a/db/

mkdir -p /data/mongodb/shard1-1a/log/

/data/mongodb/shard1-1a/config.conf

port=30002 #端口号

fork=true #以守护进程的方式运行,创建服务器进程

#nohttpinterface=true # 关闭http接口,默认关闭27018端口访问 port + 1000

rest = true #http接口 启动rest 使能访问 。与nohttpinterface 对应 只开一个

shardsvr=true #启动分片

#oplogSize=100 #复制日志大小 MB

logpath=/data/mongodb/shard1-1a/log/shard1-1a.log #日志输出文件路径

logappend=true #日志输出方式

dbpath=/data/mongodb/shard1-1a/db #数据库路径

directoryperdb=true # 设置每个数据库将被保存在一个单独的目录

replSet=shard1 #设置富本集的名字为shard1,replSet是让服务器知道在这个"shard1"副本集中还有别的机器

#auth=true # 启用验证

mkdir -p /data/mongodb/shard1-2/db/

mkdir -p /data/mongodb/shard1-2/log/

/data/mongodb/shard1-2/config.conf

port=30003 #端口号

fork=true #以守护进程的方式运行,创建服务器进程

#nohttpinterface=true # 关闭http接口,默认关闭27018端口访问 port + 1000

rest = true #http接口 启动rest 使能访问 。与nohttpinterface 对应 只开一个

shardsvr=true #启动分片

#oplogSize=100 #复制日志大小 MB

logpath=/data/mongodb/shard1-2/log/shard1-2.log #日志输出文件路径

logappend=true #日志输出方式

dbpath=/data/mongodb/shard1-2/db #数据库路径

directoryperdb=true # 设置每个数据库将被保存在一个单独的目录

replSet=shard1 #设置富本集的名字为shard1,replSet是让服务器知道在这个"shard1"副本集中还有别的机器

#auth=true # 启用验证

mkdir -p /data/mongodb/shard2-1/db/

mkdir -p /data/mongodb/shard2-1/log/

/data/mongodb/shard2-1/config.conf

port=32001 #端口号

fork=true #以守护进程的方式运行,创建服务器进程

#nohttpinterface=true # 关闭http接口,默认关闭27018端口访问 port + 1000

rest = true #http接口 启动rest 使能访问 。与nohttpinterface 对应 只开一个

shardsvr=true #启动分片

#oplogSize=100 #复制日志大小 MB

logpath=/data/mongodb/shard2-1/log/shard2-1.log #日志输出文件路径

logappend=true #日志输出方式

dbpath=/data/mongodb/shard2-1/db #数据库路径

directoryperdb=true # 设置每个数据库将被保存在一个单独的目录

replSet=shard2 #设置富本集的名字为shard2,replSet是让服务器知道在这个"shard2"副本集中还有别的机器

#auth=true # 启用验证

mkdir -p /data/mongodb/shard2-1a/db/

mkdir -p /data/mongodb/shard2-1a/log/

/data/mongodb/shard2-1a/config.conf

port=32002 #端口号

fork=true #以守护进程的方式运行,创建服务器进程

#nohttpinterface=true # 关闭http接口,默认关闭27018端口访问 port + 1000

rest = true #http接口 启动rest 使能访问 。与nohttpinterface 对应 只开一个

shardsvr=true #启动分片

#oplogSize=100 #复制日志大小 MB

logpath=/data/mongodb/shard2-1a/log/shard2-1a.log #日志输出文件路径

logappend=true #日志输出方式

dbpath=/data/mongodb/shard2-1a/db #数据库路径

directoryperdb=true # 设置每个数据库将被保存在一个单独的目录

replSet=shard2 #设置富本集的名字为shard2,replSet是让服务器知道在这个"shard2"副本集中还有别的机器

#auth=true # 启用验证

mkdir -p /data/mongodb/shard2-2/db/

mkdir -p /data/mongodb/shard2-2/log/

/data/mongodb/shard2-2/config.conf

port=32003 #端口号

fork=true #以守护进程的方式运行,创建服务器进程

#nohttpinterface=true # 关闭http接口,默认关闭27018端口访问 port + 1000

rest = true #http接口 启动rest 使能访问 。与nohttpinterface 对应 只开一个

shardsvr=true #启动分片

#oplogSize=100 #复制日志大小 MB

logpath=/data/mongodb/shard2-2/log/shard2-2.log #日志输出文件路径

logappend=true #日志输出方式

dbpath=/data/mongodb/shard2-2/db #数据库路径

directoryperdb=true # 设置每个数据库将被保存在一个单独的目录

replSet=shard2 #设置富本集的名字为shard2,replSet是让服务器知道在这个"shard2"副本集中还有别的机器

#auth=true # 启用验证

mkdir -p /data/mongodb/config1/db/

mkdir -p /data/mongodb/config1/log/

/data/mongodb/config1/config.conf

dbpath = /data/mongodb/config1/db

configsvr = true

port = 40001

logpath =/data/mongodb/config1/log/config1.log

logappend = true

fork = true

#auth=true # 启用验证

mkdir -p /data/mongodb/config2/db/

mkdir -p /data/mongodb/config2/log/

/data/mongodb/config2/config.conf

dbpath = /data/mongodb/config2/db

configsvr = true

port = 40002

logpath =/data/mongodb/config2/log/config2.log

logappend = true

fork = true

#auth=true # 启用验证

mkdir -p /data/mongodb/config3/db/

mkdir -p /data/mongodb/config3/log/

/data/mongodb/config3/config.conf

dbpath = /data/mongodb/config3/db

configsvr = true

port = 40003

logpath =/data/mongodb/config3/log/config3.log

logappend = true

fork = true

#auth=true # 启用验证

mkdir -p /data/mongodb/mongos1/log/

/data/mongodb/mongos1/config.conf

configdb =10.10.113.122:40001,10.10.113.122:40002,10.10.113.122:40003

port = 50001

chunkSize = 1

logpath =/data/mongodb/mongos1/log/mongos1.log

logappend = true

fork = true

#auth=true # 启用验证

mkdir -p /data/mongodb/mongos2/log/

/data/mongodb/mongos2/config.conf

configdb =10.10.113.122:40001,10.10.113.122:40002,10.10.113.122:40003

port = 50002

chunkSize = 1

logpath =/data/mongodb/mongos2/log/mongos2.log

logappend = true

fork = true

#auth=true # 启用验证

二 启动

shard1 副本 启动

/usr/local/mongodb/bin/mongod -f /data/mongodb/shard1-1/config.conf

/usr/local/mongodb/bin/mongod -f /data/mongodb/shard1-1a/config.conf

/usr/local/mongodb/bin/mongod -f /data/mongodb/shard1-2/config.conf

/usr/local/mongodb/bin/mongo --port 30001

use admin

db.runCommand({"replSetInitiate":{"_id":"shard1","members":[{"_id":0,"host":"10.10.113.122:30001"},{"_id":1,"host":"10.10.113.122:30002","arbiterOnly":true},{"_id":2,"host":"10.10.113.122:30003"}]}})

shard2 副本 启动

/usr/local/mongodb/bin/mongod -f /data/mongodb/shard2-1/config.conf

/usr/local/mongodb/bin/mongod -f /data/mongodb/shard2-1a/config.conf

/usr/local/mongodb/bin/mongod -f /data/mongodb/shard2-2/config.conf

/usr/local/mongodb/bin/mongo --port 31001

use admin

db.runCommand({"replSetInitiate":{"_id":"shard2","members":[{"_id":0,"host":"10.10.113.122:32001"},{"_id":1,"host":"10.10.113.122:32002","arbiterOnly":true},{"_id":2,"host":"10.10.113.122:32003"}]}})

config1 启动

/usr/local/mongodb/bin/mongod -f /data/mongodb/config1/config.conf

config2 启动

/usr/local/mongodb/bin/mongod -f /data/mongodb/config2/config.conf

config3 启动

/usr/local/mongodb/bin/mongod -f /data/mongodb/config3/config.conf

mongos1 启动

/usr/local/mongodb/bin/mongos -f /data/mongodb/mongos1/config.conf

mongos2 启动

/usr/local/mongodb/bin/mongos -f /data/mongodb/mongos2/config.conf

/usr/local/mongodb/bin/mongo --port 50001

use admin

db.runCommand({addshard:"shard1/10.10.113.122:30001,10.10.113.122:30003",name:"shard1", maxsize:100})

db.runCommand({addshard:"shard2/10.10.113.122:32001,10.10.113.122:32003",name:"shard2", maxsize:100})

db.runCommand({listshards:1})

use test

db.test.insert({"aaa":"bbb"});

第三节 replica sets + shard (3机高可用 , 一主双备份)

一 方案

每个分片3服务器,前期采用三台,日后服务器的增加考虑灾备,服务增加的基数最少为三台(或才有双机方案)。

Server1 10.10.113.122 Server1 10.10.113.132 Server3 10.10.113.133

类型 服务器 用途 系统 说明

存储/数据 Server1 Shard1/Shard2/Shard3 Linux 64位 Shard1:10001;Shard2:10002,Shard3:10003;

Server2 Shard1/Shard2/Shard3 Linux 64位 Shard1:10001;Shard2:10002,Shard3:10003;

Server3 Shard1/Shard2/Shard3 Linux 64位 Shard1:10001;Shard2:10002,Shard3:10003;

配置 Server1 Config1 Linux 64位 Config1:20000;

Server2 Config2 Linux 64位 Config2:20000;

Server3 Config3 Linux 64位 Config3:20000;

路由 Server1 Mongos1 Linux 64位 Mongos:30000;

Server2 Mongos2 Linux 64位 Mongos:30000;

Server3 Mongos3 Linux 64位 Mongos:30000;

二 准备

安装mongodb 参照第一节

linux 传文件

# scp mongodb-linux-x86_64-2.0.4.tgz root@10.10.113.132:/root

# ssh 10.10.113.132

删除目录

# rm -r -f /data/mongodb

创建配置、日志、分片、key文件存储目录及验证文件

mkdir /data/mongodb/configsvr/ -p

mkdir /data/mongodb/log/ -p

mkdir /data/mongodb/shard1/ -p

mkdir /data/mongodb/shard2/ -p

mkdir /data/mongodb/shard3/ -p

mkdir /data/mongodb/key/ -p

mkdir /data/mongodb/conf/security/ -p

mkdir /data/mongodb/conf/nosecurity/ -p

创建配置文件

1、 创建验证文件security于/data/mongodb/key/目录,关赋予可读权限,命令如下:

cd /data/mongodb/key/

echo 'hycloudmongodbkey' > security

chmod 600 security

2、 创建shard1.conf、shard2.conf、shard3.conf、configsvr.conf、mongos.conf于/data/mongodb/conf/security/ 和 /data/mongodb/conf/nosecurity/的目录,内容分别如下:

shard1.conf

dbpath = /data/mongodb/shard1

directoryperdb = true

shardsvr = true

replSet = shard1

#bind_ip = 10.10.113.122,localhost

port = 10001

oplogSize = 100

logpath =/data/mongodb/log/shard1.log

logappend = true

profile = 1

slowms = 5

rest = true

fork = true

keyFile = /data/mongodb/key/security #nosecurity目录将该行删除

shard2.conf

dbpath = /data/mongodb/shard2

directoryperdb = true

shardsvr = true

replSet = shard2

#bind_ip = 10.10.113.122,localhost

port = 10002

oplogSize = 100

logpath = /data/mongodb/log/shard2.log

logappend = true

profile = 1

slowms = 5

rest = true

fork = true

keyFile = /data/mongodb/key/security #nosecurity目录将该行删除

shard3.conf

dbpath = /data/mongodb/shard3

directoryperdb = true

shardsvr = true

replSet = shard3

#bind_ip = 10.10.113.122,localhost

port = 10003

oplogSize = 100

logpath = /data/mongodb/log/shard3.log

logappend = true

profile = 1

slowms = 5

rest = true

fork = true

keyFile = /data/mongodb/key/security #nosecurity目录将该行删除

configsvr.conf

dbpath = /data/mongodb/configsvr

directoryperdb = true

configsvr = true

port = 20000

logpath =/data/mongodb/log/configsvr.log

logappend = true

fork = true

keyFile = /data/mongodb/key/security #nosecurity目录将该行删除

mongos.conf

configdb =10.10.113.122:20000, 10.10.113.132:20000, 10.10.113.133:20000

port = 30000

chunkSize = 1 #单位 mb 生成环境请使用 200 或删除

logpath =/data/mongodb/log/mongos.log

logappend = true

fork = true

keyFile = /data/mongodb/key/security #nosecurity目录将该行删除

分片配置

说明:分片要在无验证环境中配置,否则会出现无权限等异常。采用以下命令启动Server1\Server2\Server3上的shard1\shard2\shard3:

# /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/nosecurity/shard1.conf

# /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/nosecurity/shard2.conf

# /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/nosecurity/shard3.conf

以下命令查看是否正常启动:

# netstat -lnpt # 或 ps -ef | grep mongo

启动后连接到shard1\shard2\shard3分别进行配置,在任意一台服务器即可,以下是具体配置过程:

# /usr/local/mongodb/bin/mongo --port 10001

>use admin

>config = {_id:"shard1", members: [

{_id: 0, host:"10.10.113.122:10001"},

{_id: 1, host:"10.10.113.132:10001"},

{_id: 2, host:"10.10.113.133:10001"}]

};

>rs.initiate(config)

>exit

# /usr/local/mongodb/bin/mongo --port 10002

>use admin

>config = {_id:"shard2", members: [

{_id: 0, host:"10.10.113.132:10002"},

{_id: 1, host:"10.10.113.133:10002"},

{_id: 2, host:"10.10.113.122:10002"}]

};

>rs.initiate(config)

>exit

# /usr/local/mongodb/bin/mongo --port 10003

>use admin

>config = {_id:"shard3", members: [

{_id: 0, host:"10.10.113.133:10003"},

{_id: 1, host:"10.10.113.122:10003"},

{_id: 2, host:"10.10.113.132:10003"}]

};

>rs.initiate(config)

至此,已完成分片配置

路由设置

路由是能过config来连接分片服务器,在启动路由进程时,先启动配置进程,路由配置过程如下:

# /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/nosecurity/configsvr.conf

# /usr/local/mongodb/bin/mongos -f /data/mongodb/conf/nosecurity/mongos.conf

启动后,连接路由进行分片添加,只需配置一台路由。注:分片操作需在admin库下进行,另外必需在无验证要求下进行,即采用前面创建于nosecurity文件夹下的配置。

# /usr/local/mongodb/bin/mongo --port 30000

mongos> use admin

mongos> db.runCommand({addshard:"shard1/10.10.113.122:10001,10.10.113.132:10001,10.10.113.133:10001",name:"shard1", maxsize:20480} )

mongos> db.runCommand({addshard:"shard2/10.10.113.122:10002,10.10.113.132:10002,10.10.113.133:10002",name:"shard2", maxsize:20480} )

mongos> db.runCommand({addshard:"shard3/10.10.113.122:10003,10.10.113.132:10003,10.10.113.133:10003",name:"shard3", maxsize:20480} )

命令检查分片添加情况,如出现以下结果则表示配置成功:

mongos> db.runCommand( {listshards : 1 } )

权限控制

MongoDB默认为验证模式。如需对数据库进行权限控制,需先采用无验证模式登录,进入admin库创建管理员用户后,再采用验证模式登录。通过前面创建的管理员帐号进行数据库与用户的创建。MongoDB集群的权限与单台的权限控制的不同之处在于,单台是通过-auth属性,集群是通过keyFile来进行服务器间的验证。以下介绍配置全过程。

前面的所有步骤,都是在nosecurity模式下进行。如果没有采用非验证模式的需要将所有进程(分片、配置、mongos)停止,将切换到无验证模式。

步骤一:先进行登录,并切换进admin库创建管理员帐号

# /usr/local/mongodb/bin/mongo --port 30000

mongos>use admin

mongos>db.addUser('admin','123456')

{

"singleShard" :"192.168.2.88:20000,192.168.2.89:20000,192.168.2.90:20000",

"n" : 0,

"connectionId" : 211,

"err" : null,

"ok" : 1

}

{

"_id" :ObjectId("4f6c78ddad912a3ac6833ece"),

"user" : "admin",

"readOnly" : false,

"pwd" :"95ec4261124ba5951720b199908d892b"

}

验证用户名与密码

mongos> db.auth('admin','123456')

1

mongos>exit

步骤二:退出后,将Server1\Server2\Server3服务器上MongoDB的所有进程(分片、配置、mongos)停止,将切换到验证模式。具体命令如下:

#killall mongod mongos

#netstat -lnpt

# /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/security/shard1.conf

# /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/security/shard2.conf

# /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/security/shard3.conf

# netstat -lnpt

# /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/security/configsvr.conf

# /usr/local/mongodb/bin/mongos -f /data/mongodb/conf/security/mongos.conf

启动后,如对库进行查看,则会报以下异常:

# /usr/local/mongodb/bin/mongo 10.10.113.122:30000/admin

MongoDB shell version: 2.0.4

connecting to:10.10.113.122:30000/admin

> show dbs

Fri Mar 23 22:28:28 uncaughtexception: listDatabases failed:{ "ok" : 0, "errmsg" :"unauthorized" }

以下是正常登录后显示的信息:

# /usr/local/mongodb/bin/mongo 10.10.113.122:30000/admin

MongoDB shell version: 2.0.4

connecting to:10.10.113.122:30000/admin

>db.auth('admin','123456')

1

mongos>

步骤三:以下是数据库及数据库用户创建的过程:

mongos> use hello

switched to db hello

mongos>db.addUser('sa','sa')

{

"singleShard" :"shard2/10.10.113.122:10002,10.10.113.132:10002,10.10.113.133:10002",

"n" : 0,

"lastOp" :NumberLong("5723101431532093441"),

"connectionId" : 38,

"err" : null,

"ok" : 1

}

{

"user" : "sa",

"readOnly" : false,

"pwd" :"75692b1d11c072c6c79332e248c4f699",

"_id" :ObjectId("4f6c8a6e9f67b049a20a00de")

}

mongos> exit

bye

# /usr/local/mongodb/bin/mongo 10.10.113.122:30000/hello -u sa -p

MongoDB shell version: 2.0.4

Enter password:

connecting to:10.10.113.122:30000/hello

> show collections

system.indexes

system.users

> db.system.users.find()

{ "_id" :ObjectId("4f6c8a6e9f67b049a20a00de"), "user" :"sa", "readOnly" : false, "pwd" :"75692b1d11c072c6c79332e248c4f699" }

分片

# /usr/local/mongodb/bin/mongo -port 30000

> use test

导入数据

> use admin

> db.runCommand({"enablesharding":"test"})

> db.runCommand({"shardcollection":"test.doc","key":{"_id":1}})

第四节 replica sets + shard (3机高可用 , 一主一备份一仲裁)

一 方案

每个分片3服务器,前期采用三台,日后服务器的增加考虑灾备,服务增加的基数最少为三台(或用有双机方案)。

Server1 10.10.113.122 Server1 10.10.113.132 Server3 10.10.113.133

类型 服务器 用途 系统 说明

存储/数据 Server1 Shard1/Shard2/Shard3 Linux 64位 Shard1:10001;Shard2:10002,Shard3:10003;

Server2 Shard1/Shard2/Shard3 Linux 64位 Shard1:10001;Shard2:10002,Shard3:10003;

Server3 Shard1/Shard2/Shard3 Linux 64位 Shard1:10001;Shard2:10002,Shard3:10003;

配置 Server1 Config1 Linux 64位 Config1:20000;

Server2 Config2 Linux 64位 Config2:20000;

Server3 Config3 Linux 64位 Config3:20000;

路由 Server1 Mongos1 Linux 64位 Mongos:30000;

Server2 Mongos2 Linux 64位 Mongos:30000;

Server3 Mongos3 Linux 64位 Mongos:30000;

二 准备

安装mongodb 参照第一节

linux 传文件

# scp mongodb-linux-x86_64-2.0.4.tgz root@10.10.113.132:/root

# ssh 10.10.113.132

创建配置、日志、分片、key文件存储目录及验证文件

mkdir /data/mongodb/configsvr/ -p

mkdir /data/mongodb/log/ -p

mkdir /data/mongodb/shard1/ -p

mkdir /data/mongodb/shard2/ -p

mkdir /data/mongodb/shard3/ -p

mkdir /data/mongodb/key/ -p

mkdir /data/mongodb/conf/security/ -p

mkdir /data/mongodb/conf/nosecurity/ -p

创建配置文件

1、 创建验证文件security于/data/mongodb/key/目录,关赋予可读权限,命令如下:

cd /data/mongodb/key/

echo 'hycloudmongodbkey' > security

chmod 600 /data/mongodb/key/security

2、 创建shard1.conf、shard2.conf、shard3.conf、configsvr.conf、mongos.conf于/data/mongodb/conf/security/ 和 /data/mongodb/conf/nosecurity/的目录,内容分别如下:

shard1.conf

dbpath = /data/mongodb/shard1

directoryperdb = true

shardsvr = true

replSet = shard1

#bind_ip = 10.10.113.122,localhost

port = 10001

oplogSize = 100

logpath =/data/mongodb/log/shard1.log

logappend = true

profile = 1

slowms = 5

rest = true

fork = true

keyFile = /data/mongodb/key/security #nosecurity目录将该行删除

shard2.conf

dbpath = /data/mongodb/shard2

directoryperdb = true

shardsvr = true

replSet = shard2

#bind_ip = 10.10.113.122,localhost

port = 10002

oplogSize = 100

logpath = /data/mongodb/log/shard2.log

logappend = true

profile = 1

slowms = 5

rest = true

fork = true

keyFile = /data/mongodb/key/security #nosecurity目录将该行删除

shard3.conf

dbpath = /data/mongodb/shard3

directoryperdb = true

shardsvr = true

replSet = shard3

#bind_ip = 10.10.113.122,localhost

port = 10003

oplogSize = 100

logpath = /data/mongodb/log/shard3.log

logappend = true

profile = 1

slowms = 5

rest = true

fork = true

keyFile = /data/mongodb/key/security #nosecurity目录将该行删除

configsvr.conf

dbpath = /data/mongodb/configsvr

directoryperdb = true

configsvr = true

port = 20000

logpath =/data/mongodb/log/configsvr.log

logappend = true

fork = true

keyFile = /data/mongodb/key/security #nosecurity目录将该行删除

mongos.conf

configdb =10.10.113.122:20000, 10.10.113.132:20000, 10.10.113.133:20000

port = 30000

chunkSize = 1 #单位 mb 生成环境请使用 200 或删除

logpath =/data/mongodb/log/mongos.log

logappend = true

fork = true

keyFile = /data/mongodb/key/security #nosecurity目录将该行删除

分片配置

说明:分片要在无验证环境中配置,否则会出现无权限等异常。采用以下命令启动Server1\Server2\Server3上的shard1\shard2\shard3:

# /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/nosecurity/shard1.conf

# /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/nosecurity/shard2.conf

# /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/nosecurity/shard3.conf

以下命令查看是否正常启动:

# netstat -lnpt # 或 ps -ef | grep mongo

启动后连接到shard1\shard2\shard3分别进行配置,在任意一台服务器即可,以下是具体配置过程:(注意不能在仲裁机器初始化)

# /usr/local/mongodb/bin/mongo --port 10001

>use admin

>config = {_id:"shard1", members: [

{_id: 0, host:"10.10.113.122:10001"},

{_id: 1, host:"10.10.113.132:10001"},

{_id: 2, host:"10.10.113.133:10001","arbiterOnly":true}]

};

>rs.initiate(config)

>exit

# /usr/local/mongodb/bin/mongo --port 10002

>use admin

>config = {_id:"shard2", members: [

{_id: 0, host:"10.10.113.132:10002"},

{_id: 1, host:"10.10.113.133:10002"},

{_id: 2, host:"10.10.113.122:10002","arbiterOnly":true}]

};

>rs.initiate(config)

>exit

# /usr/local/mongodb/bin/mongo --port 10003

>use admin

>config = {_id:"shard3", members: [

{_id: 0, host:"10.10.113.133:10003"},

{_id: 1, host:"10.10.113.122:10003"},

{_id: 2, host:"10.10.113.132:10003","arbiterOnly":true}]

};

>rs.initiate(config)

至此,已完成分片配置

路由设置

路由是能过config来连接分片服务器,在启动路由进程时,先启动配置进程,路由配置过程如下:

# /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/nosecurity/configsvr.conf

# /usr/local/mongodb/bin/mongos -f /data/mongodb/conf/nosecurity/mongos.conf

启动后,连接路由进行分片添加,只需配置一台路由。注:分片操作需在admin库下进行,另外必需在无验证要求下进行,即采用前面创建于nosecurity文件夹下的配置。

# /usr/local/mongodb/bin/mongo --port 30000

mongos> use admin

# maxsize:20480 #单位 mb 分片限制大小 根据实际服务器来定

mongos> db.runCommand({addshard:"shard1/10.10.113.122:10001,10.10.113.132:10001,10.10.113.133:10001",name:"shard1", maxsize:20480} )

mongos> db.runCommand({addshard:"shard2/10.10.113.132:10002,10.10.113.133:10002,10.10.113.122:10002",name:"shard2", maxsize:20480} )

mongos> db.runCommand({addshard:"shard3/10.10.113.133:10003,10.10.113.122:10003,10.10.113.132:10003",name:"shard3", maxsize:20480} )

命令检查分片添加情况,如出现以下结果则表示配置成功:

mongos> db.runCommand( {listshards : 1 } )

权限控制

MongoDB默认为验证模式。如需对数据库进行权限控制,需先采用无验证模式登录,进入admin库创建管理员用户后,再采用验证模式登录。通过前面创建的管理员帐号进行数据库与用户的创建。MongoDB集群的权限与单台的权限控制的不同之处在于,单台是通过-auth属性,集群是通过keyFile来进行服务器间的验证。以下介绍配置全过程。

前面的所有步骤,都是在nosecurity模式下进行。如果没有采用非验证模式的需要将所有进程(分片、配置、mongos)停止,将切换到无验证模式。

步骤一:先进行登录,并切换进admin库创建管理员帐号

# /usr/local/mongodb/bin/mongo --port 30000

mongos>use admin

mongos>db.addUser('admin','123456')

{

"singleShard" :"192.168.2.88:20000,192.168.2.89:20000,192.168.2.90:20000",

"n" : 0,

"connectionId" : 211,

"err" : null,

"ok" : 1

}

{

"_id" :ObjectId("4f6c78ddad912a3ac6833ece"),

"user" : "admin",

"readOnly" : false,

"pwd" :"95ec4261124ba5951720b199908d892b"

}

验证用户名与密码

mongos> db.auth('admin','123456')

1

mongos>exit

步骤二:退出后,将Server1\Server2\Server3服务器上MongoDB的所有进程(分片、配置、mongos)停止,将切换到验证模式。具体命令如下:

# killall mongod mongos

# netstat -lnpt

# /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/security/shard1.conf

# /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/security/shard2.conf

# /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/security/shard3.conf

# netstat -lnpt # ps -ef | grep mongo

# /usr/local/mongodb/bin/mongod -f /data/mongodb/conf/security/configsvr.conf

# /usr/local/mongodb/bin/mongos -f /data/mongodb/conf/security/mongos.conf

启动后,如对库进行查看,则会报以下异常:

# /usr/local/mongodb/bin/mongo 10.10.113.122:30000/admin

MongoDB shell version: 2.0.4

connecting to:10.10.113.122:30000/admin

> show dbs

Fri Mar 23 22:28:28 uncaughtexception: listDatabases failed:{ "ok" : 0, "errmsg" :"unauthorized" }

以下是正常登录后显示的信息:

# /usr/local/mongodb/bin/mongo 10.10.113.122:30000/admin

MongoDB shell version: 2.0.4

connecting to:10.10.113.122:30000/admin

>db.auth('admin','123456')

1

mongos>

步骤三:以下是数据库及数据库用户创建的过程:

mongos> use hello

switched to db hello

mongos>db.addUser('sa','sa')

{

"singleShard" :"shard2/10.10.113.122:10002,10.10.113.132:10002,10.10.113.133:10002",

"n" : 0,

"lastOp" :NumberLong("5723101431532093441"),

"connectionId" : 38,

"err" : null,

"ok" : 1

}

{

"user" : "sa",

"readOnly" : false,

"pwd" :"75692b1d11c072c6c79332e248c4f699",

"_id" :ObjectId("4f6c8a6e9f67b049a20a00de")

}

mongos> exit

bye

# /usr/local/mongodb/bin/mongo 10.10.113.122:30000/hello -u sa -p

MongoDB shell version: 2.0.4

Enter password:

connecting to:10.10.113.122:30000/hello

> show collections

system.indexes

system.users

> db.system.users.find()

{ "_id" :ObjectId("4f6c8a6e9f67b049a20a00de"), "user" :"sa", "readOnly" : false, "pwd" :"75692b1d11c072c6c79332e248c4f699" }

分片

# /usr/local/mongodb/bin/mongo -port 30000

> use admin

> db.runCommand({"enablesharding":"test"})

> db.runCommand({"shardcollection":"test.doc","key":{"_id":1}})

> db.runCommand({"shardcollection":"test.txt","key":{"_id":1}})

索引

> use test

> db.fs.chunks.ensureIndex({files_id: 1});

> use admin

> db.runCommand({ shardcollection : "test.fs.chunks", key : { files_id : 1 }})

索引

> use test

> db.doc.ensureIndex({"letter":1})

导入数据

查询数据

分片管理

> use config

> show collections

> db.shards.find()

> db.databases.find()

> db.chunks.find()

> db.printShardingStatus()

相关TAG标签
上一篇:nginx使用阿里云的免费ssl证书
下一篇:[] redis中的maxmemory
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站