mongodb集群快速搭建

记录这个纯属方便自己以后使用。。

mongodb官方最新版本3.2.6,某些功能都加以改进并且性能提升很大,下面操作只是快速搭建mongodb复制集以及shard分片等 
一共分为如下几步骤

  1. 启动某个节点主master进行设置单个节点账号和密码
  2. 配置mongodb复制集
  3. 配置mongos-shard分片
  4. 设置mongos路由账号和密码并启用验证

架构图如下 

目录规划创建

mkdir /data/{config,shard1,shard2,shard3,mongos,logs,configsvr,keyfile} -pv
touch /data/keyfile/security
touch /data/logs/shard{1..3}.log
touch /data/logs/{configsvr,mongos}.log
touch /data/config/shard{1..3}.conf
touch /data/config/{configsvr,mongos}.conf

由于操作系统是Ubuntu14.04 64位的,所以mongodb软件也是Ubuntu的

wget 
 tar fxz mongodb-linux-x86_64-ubuntu1404-3.2.6.tgz -C /usr/local/
 mv mongodb-linux-x86_64-ubuntu1404-3.2.6 mongodb

设置mongo环境变量

echo "export PATH=$PATH:/usr/local/mongodb/bin" >> /etc/profile
source /etc/profile

第一个节点配置文件如shard1、shard2、shard3、configsvr、mongos配置文件 
shard1.conf配置文件如下

shard2.conf配置文件如下

shard3配置文件如下

confisvr.conf配置文件如下

mongos.conf配置文件如下

注:以上配置文件分别拷贝到另外2台节点上

启动第一台节点主mongod

[email protected]:/data/config# mongod -f /data/config/shard1.conf
about to fork child process, waiting until server is ready for connections.
forked process: 10686
child process started successfully, parent exiting

登陆进去,创建账号

[email protected]:/data/config# mongo --port 20001 
> use admin
db.createUser( {  
  user: "administrator",    
  pwd: "123456",    
  roles: [ { role: "root", db: "admin" } ]  
  }); 
> db.auth("administrator","123456")
1

注:第二个节点和第三个节点设置单个mongod账号一样,操作下吧,示例如下

启动第2台节点主mongod

[email protected]:/data/config# mongod -f /data/config/shard2.conf
about to fork child process, waiting until server is ready for connections.
forked process: 10986
child process started successfully, parent exiting

登陆进去,创建账号

[email protected]:/data/config# mongo --port 20002
> use admin
db.createUser( {   
 user: "administrator",   
 pwd: "123456",   
 roles: [ { role: "root", db: "admin" } ] 
  }); 
> db.auth("administrator","123456")
1

启动第3台节点主mongod

[email protected]:/data/config# mongod -f /data/config/shard3.conf
about to fork child process, waiting until server is ready for connections.
forked process: 11982
child process started successfully, parent exiting

登陆进去,创建账号

[email protected]:/data/config# mongo --port 20003 
> use admin
db.createUser( {   
 user: "administrator",   
 pwd: "123456",    
 roles: [ { role: "root", db: "admin" } ] 
 }); 
 > db.auth("administrator","123456")
 1

生成keyfile文件,文件权限600

openssl rand -base64 741 > /data/keyfile/security、
chmod 600   /data/keyfile/security

注:生成security文件拷贝到其他节点上,注意文件权限600切记

关闭每个节点上主mongod,并打开第一个节点的shard1.conf配置文件中security去掉注释,以及第二节点上shard2.conf和第三个节点shard3.conf配置文件去掉注释即可 
关闭mongod命令

pkill mongod

再次启动mongod

第一台机器上执行命令如下
mongod -f /data/config/shard1.conf 

第2台机器上执行命令如下
mongod -f /data/config/shard2.conf 

第3台机器上执行命令如下
mongod -f /data/config/shard3.conf

登陆每个主节点上mongod,进行show或者其他命令的时候回提示没有认证,认证后就可以查看了,这里就不演示了

如果以上操作成功后,关闭mongod,之前去掉security选项注释现在打开注释即可,并且去掉shard配置文件中复制集注释选项去掉即可,避免影响下面复制集操作

启动每个节点上shard、confisvr以及mongos即可 
命令如下

mongod -f /data/config/shard1.conf
mongod -f /data/config/shard2.conf
mongod -f /data/config/shard3.conf
mongod -f /data/config/configsvr.conf
mongos -f /data/config/mongos.conf

注:启动后使用netstat -ntpl或者ps -ef|grep mongo查看即可

第一台节点 mongodb-01机器配置复制集,mongo –port 20001登陆操作

> use admin

switched to db admin

> config = { _id:"shard2",members:[{_id:0,host:"mongodb-02:20002"},{_id:1,host:"mongodb-03:20002"},{_id:2,host:"mongodb-01:20002",arbiterOnly:true}]}


第二台节点 mongodb-02机器配置复制集,mongo –port 20002

> use admin

switched to db admin

> config = { _id:"shard2",members:[{_id:0,host:"mongodb-02:20002"},{_id:1,host:"mongodb-03:20002"},{_id:2,host:"mongodb-01:20002",arbiterOnly:true}]}

第三台节点 mongodb-03机器配置复制集,登陆mongo –port 20003

> use admin

switched to db admin

> config = { _id:"shard3",members:[{_id:0,host:"mongodb-03:20003"},{_id:1,host:"mongodb-01:20003"},{_id:2,host:"mongodb-02:20003",arbiterOnly:true}]}

注:以上就是每个节点上配置rs复制集,可以使用rs.status(),查看每个节点上rs复制集相关状态信息等

 

######################################################################



登陆任意节点上进行mongo路由配置,mongo --port 20000

mongos> use admin

switched to db admin

mongos> db.runCommand({addshard:”shard1/mongodb-01:20001,mongodb-02:20001,mongodb-03:20001”});

{ “shardAdded” : “shard1”, “ok” : 1 }

mongos> db.runCommand({addshard:”shard2/mongodb-01:20002,mongodb-02:20002,mongodb-03:20002”});

{ “shardAdded” : “shard2”, “ok” : 1 }

mongos> db.runCommand({addshard:”shard3/mongodb-01:20003,mongodb-02:20003,mongodb-03:20003”});

{ “shardAdded” : “shard3”, “ok” : 1 }

查看shard状态命令

mongos路由设置账户来进行管理 
快速执行命令创建账号命令如下

db.createUser( {    
user: "admin",    
pwd: "123456",    
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
});

实际操作如下,创建userAdminAnyDatabase角色账号

mongos> db.createUser( {
...     user: "admin",
...     pwd: "123456",
...     roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
... });
Successfully added user: {
    "user" : "admin",
    "roles" : [
        {
            "role" : "userAdminAnyDatabase",
            "db" : "admin"
        }
    ]
}
mongos> db.auth("admin","123456")
1


快速创建root角色账号命令如下

db.createUser
( {    user: "sa",    
pwd: "123456",    
roles: [ { role: "root", db: "admin" } ]
});

实际操作如下,创建成功

mongos> db.createUser( {
...     user: "sa",
...     pwd: "123456",
...     roles: [ { role: "root", db: "admin" } ]
... });
Successfully added user: {
    "user" : "sa",
    "roles" : [
        {
            "role" : "root",
            "db" : "admin"
        }
    ]
}
mongos> db.auth("sa","123456")
1

注:userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限,root:只在admin数据库中可用。超级账号,超级权限,其实 创建一个userAdminAnyDatabase角色就可以,然后可以创建N个用户角色。

如何验证mongos账号?

还记得之前使用openssl命令生成的security文件吗? 
现在关闭mongod以及mongos命令如下,并且打开每个节点上配置文件关于security选项注释去掉即可

netstat -ntpl|grep mongo|awk ‘{print $NF}‘|awk -F‘/‘ ‘{print $1}‘|xargs kill

启动每个节点上shard、confisvr以及mongos

mongod -f /data/config/shard1.conf
mongod -f /data/config/shard2.conf
mongod -f /data/config/shard3.conf
mongod -f /data/config/configsvr.conf
mongos -f /data/config/mongos.conf

登陆任意节点上mongos进行认证即可,这里就不演示了,可以参考其他mongo3.2集群认证文章,其实也就是登陆是否有权限进行查看以及其他操作,没认证会有提示信息。。。

时间: 2024-10-25 17:46:00

mongodb集群快速搭建的相关文章

MongoDB集群的搭建

一.环境准备 1.Centos7 2.mongodb3.4.10 3.三台机器IP分别是:192.168.1.100.192.168.1.135.192.168.1.136 二.mongdb数据库的安装 1.分别在三台机器进行mongdb的安装,具体参考前面教程mongodb安装及配置 2.分别在三台机器上启动mongodb,具体命令如下 [[email protected] mongodb]# ./bin/mongod -f  mongodb-config/server.conf --repl

搭建高可用mongodb集群(四)—— 分片(经典)

转自:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的时候能否做到自动扩展? 在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的.而mongodb主打的就是海量数据架构,他不能解决海量数据怎么

搭建高可用mongodb集群—— 分片

从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的时候能否做到自动扩展? 在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的.而mongodb主打的就是海量数据架构,他不能解决海量数据怎么行!不行!“分片”就用这个来解决这个问题. 传统数据库怎么做海量数据读写?其实一句话概括:分而治之.上图看看就清楚了,如下 taobao岳旭强在infoq中提到的 架构图: 上图中有个TDDL,是taobao的一

搭建高可用mongodb集群(四)—— 分片

转载自LANCEYAN.COM 按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的时候能否做到自动扩展? 在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的.而mongodb主打的就是海量数据架构,他不能解决海量数据怎么行!不行!“分片”就用这个来解决这个问题. 传统数据库怎么做海量数据读写?其实一句

搭建高可用mongodb集群(一)——配置mongodb

搭建高可用mongodb集群(一)--配置mongodb 在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写.海量数据高效存储.高可扩展性和高可用性这些难题.不过就是因为这些问题Nosql诞生了. NOSQL有这些优势: 大数据量,可以通过廉价服务器存储大量的数据,轻松摆脱传统mysql单表存储量级限制. 高扩展性,Nosql去掉了关系数据库的关系型特性,很容易横向扩展,摆脱了以往老是纵向扩展的诟病. 高性能,Nosql通过简单的key-value方式获取数据,非常快速.还有N

搭建高可用MongoDB集群(四):分片

按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的时候能否做到自动扩展? 在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的.而mongodb主打的就是海量数据架构,他不能解决海量数据怎么行!不行!"分片"就用这个来解决这个问题. 传统数据库怎么做海量数据读写?其实一句话概括:分而

【转】搭建高可用mongodb集群(四)—— 分片

按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的时候能否做到自动扩展? 在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的.而mongodb主打的就是海量数据架构,他不能解决海量数据怎么行!不行!“分片”就用这个来解决这个问题. 传统数据库怎么做海量数据读写?其实一句话概括:分而治之.上图看看就清楚

搭建高可用mongodb集群

搭建高可用mongodb集群(一)——配置mongodb Posted on 17 十一月, 2013 by lanceyan | 9条评论 在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写.海量数据高效存储.高可扩展性和高可用性这些难题.不过就是因为这些问题Nosql诞生了. NOSQL有这些优势: 大数据量,可以通过廉价服务器存储大量的数据,轻松摆脱传统mysql单表存储量级限制. 高扩展性,Nosql去掉了关系数据库的关系型特性,很容易横向扩展,摆脱了以往老是纵向扩展的

[转]搭建高可用mongodb集群(四)—— 分片

按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的时候能否做到自动扩展? 在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的.而mongodb主打的就是海量数据架构,他不能解决海量数据怎么行!不行!“分片”就用这个来解决这个问题. 传统数据库怎么做海量数据读写?其实一句话概括:分而治之.上图看看就清楚