mongo集群有三种方式

1.Replica Set副本
2.Sharding分片
3.Master-slave主备

通常来说,我们用第1、2种较多,第3种官方并不推荐。这里我们主要介绍Replica Set副本集。

Replica Set

中文翻译叫做副本集,不过我并不喜欢把英文翻译成中文,总是感觉怪怪的。其实简单来说就是集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据需要和主节点一致。如下图:

Mongodb(M)表示主节点,Mongodb(S)表示备节点,Mongodb(A)表示仲裁节点。主备节点存储数据,仲裁节点不存储数据。客户端同时连接主节点与备节点,不连接仲裁节点。

默认设置下,主节点提供所有增删查改服务,备节点不提供任何服务。但是可以通过设置使备节点提供查询服务,这样就可以减少主节点的压力,当客户端进行数据查询时,请求自动转到备节点上。这个设置叫做Read Preference Modes,同时Java客户端提供了简单的配置方式,可以不必直接对数据库进行操作。

仲裁节点是一种特殊的节点,它本身并不存储数据,主要的作用是决定哪一个备节点在主节点挂掉之后提升为主节点,所以客户端不需要连接此节点。这里虽然只有一个备节点,但是仍然需要一个仲裁节点来提升备节点级别。我开始也不相信必须要有仲裁节点,但是自己也试过没仲裁节点的话,主节点挂了备节点还是备节点,所以咱们还是需要它的。

由于资源有限,我只使用一台虚拟机(192.168.1.119)搭建三个节点,每个节点的端口号不一样:

Mongodb(M)端口号27017,Mongodb(S)端口号27018,Mongodb(A)端口号27019

先官网下载mongodb文件,这里我解压到/usr/local/mongodb4  文件夹下。

1、设置配置文件:

Mongodb(M): testrs_27017.yaml

systemLog:#MongoDB发送所有日志输出的目标指定为文件destination: file#指定日志文件路径path: "/usr/local/mongodb4/datasource/log/testrs_27017.log"logAppend: truestorage:#存储数据库的数据目录dbPath: "/usr/local/mongodb4/datasource/data/db/testrs_27017"#启用或禁用持久性日志以确保数据文件保持有效和恢复journal:enabled: trueprocessManagement:#支持后台启动fork: true#记录进程idpidFilePath: "/usr/local/mongodb4/datasource/pid/testr_27017.pid"net:#设置绑定ip地址bindIp:   192.168.1.119#绑定端口号port: 27017setParameter:#认证设置enableLocalhostAuthBypass: false#副本集名称
replication:replSetName: "testrs"

Mongodb(S)  testrs_27018.yaml

systemLog:#MongoDB发送所有日志输出的目标指定为文件destination: file#指定日志文件路径path: "/usr/local/mongodb4/datasource/log/testrs_27018.log"logAppend: truestorage:#存储数据库的数据目录dbPath: "/usr/local/mongodb4/datasource/data/db/testrs_27018"#启用或禁用持久性日志以确保数据文件保持有效和恢复journal:enabled: trueprocessManagement:#支持后台启动fork: true#记录进程idpidFilePath: "/usr/local/mongodb4/datasource/pid/testr_27018.pid"net:#设置绑定ip地址bindIp:   192.168.1.119#绑定端口号port: 27018setParameter:#认证设置enableLocalhostAuthBypass: false#副本集名称
replication:replSetName: "testrs"

Mongodb(A) :testrs_27019.yaml

systemLog:#MongoDB发送所有日志输出的目标指定为文件destination: file#指定日志文件路径path: "/usr/local/mongodb4/datasource/log/testrs_27019.log"logAppend: truestorage:#存储数据库的数据目录dbPath: "/usr/local/mongodb4/datasource/data/db/testrs_27019"#启用或禁用持久性日志以确保数据文件保持有效和恢复journal:enabled: trueprocessManagement:#支持后台启动fork: true#记录进程idpidFilePath: "/usr/local/mongodb4/datasource/pid/testr_27019.pid"net:#设置绑定ip地址bindIp: 192.168.1.119#绑定端口号port: 27019setParameter:#认证设置enableLocalhostAuthBypass: false#副本集名称
replication:replSetName: "testrs"

2、创建数据库文件夹和日志文件夹:

mkdir -p /usr/local/mongodb4/datasource/pid

mkdir -p /usr/local/mongodb4/datasource/log

mkdir -p /usr/local/mongodb4/datasource/data/db/testrs_27017

mkdir -p /usr/local/mongodb4/datasource/data/db/testrs_27018

mkdir -p /usr/local/mongodb4/datasource/data/db/testrs_27019

3、启动服务:

/usr/local/mongodb4/bin/mongod -f    /文件路径/testrs_27017.yaml

/usr/local/mongodb4/bin/mongod -f    /文件路径/testrs_27018.yaml

/usr/local/mongodb4/bin/mongod -f    /文件路径/testrs_27019.yaml

4、查看服务情况:

[root@localhost conf]# ps -ef|grep mongo
root     13289     1  1 18:07 ?        00:02:38 ../bin/mongod -f testrs_2017.conf
root     13813     1  1 19:00 ?        00:02:12 ../bin/mongod -f testrs_2018.conf
root     13837     1  1 19:00 ?        00:02:12 ../bin/mongod -f testrs_2019.conf

5、选择主节点进入:

/usr/local/mongodb4/bin/mongo 192.168.1.119:27017

6、初始化副本集

rs.initiate()

7、添加备节点

rs.add("192.168.1.119:27018")

8、添加仲裁节点

rs.add("192.168.1.119:27019",true) 或者rs.addArb("192.168.1.119:27019")

注意:6、7、8可以一部操作

rs.initiate({_id: "testrs",version: 1,members: [{ _id: 0, host : "192.168.1.121:27017" },{ _id: 1, host : "192.168.1.121:27019", arbiterOnly: true },{ _id: 2, host : "192.168.1.121:27018" }]}
)

9、查看配置

rs.conf()

10、 查看状态

rs.status()

11、删除节点

rs.remove("192.168.1.119:27019")

问题:

1、这个时候在备节点上执行命令都会报错。

原因,当前备节点只是一个备份,不是奴隶节点,无法读取数据,写操作更不行了,默认情况下从节点是没有读写权限的,可以增加读的权限,但是需要进行设置。

设置读操作权限:

rs.slaveOk()或者rs.slaveOk(true)

该命令是db.getMongo().setSlaveOk()的简化命令。

如果想取消奴隶节点:

rs.slaveOk(false)

二、设置用户名密码

1、生成密钥文件

openssl rand -base64 90 > keyfile

2、该key的权限必须是600

chmod 600 /文件目录/keyfile

3、在配置文件中testrs_27017.yaml、testrs_27018.yaml、testrs_27019.yaml都添加:

security:keyFile: /文件路径/keyfileauthorization: enabled

4、启动mongo服务,添加管理员可以操作复制集的权限(在primary节点上面)

#切换到admin库
>use admin
#创建系统超级用户myroot,设置密码123456,设置角色root
>db.createUser({user:"myroot",pwd:"123456",roles:[{role:"root",db:"admin"}]})
或者db.createUser({user:"myroot",pwd:"123456",roles:[role:"root"]})
#创建专门管理admin库的账号myadmin,只用来做为用户权限管理
>db.createUser({user:"myadmin",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})

5、创建普通用户

创建普通用户可以在没有开启认证的时候添加,也可以在开启认证之后添加,但是开启认证之后,必须使用有操作admin库的用户登录认证之后才能操作。

#切换将来要操作的数据库cumulo_order

>use cumulo_order

#创建用户qqbo,拥有cumulo_order数据库的读写权限readWrite,密码是123456

>db.createUser({user:"qqbo",pwd:"123456",roles:[{role:"readWrite",db:"cumulo_order"}]})

#查看已经创建的用户情况

>db.system.users.find()

#删除用户

>db.dropUser("myadmin")

#修改密码

>db.changeUserPassword("myroot","12345")

5、认证测试

#切换数据库

>use admin

#验证用户名密码

>db.auth("myroot","123456")

6、连接集群

mongo mongodb://192.168.1.119:27017,192.168.1.119:27018,192.168.1.119:27019/?replicaSet=testrs

mongodb 集群Replica Set搭建相关推荐

  1. mongodb集群分片环境搭建

    环境准备 Linux环境 主机 OS 备注 192.168.32.13 CentOS6.3 64位 普通PC 192.168.71.43 CentOS6.2 64位 服务器,NUMA CPU架构 Mo ...

  2. mongodb java连接 集群_java连接mongodb集群

    MongoDb 的分片拓展与副本集 Mongodb 数据库分片是通过并行处理数据实现负载均衡的一种重要手段[12],同时也是数据库集群 实现分布式计算的关键技术.在生产环境中,...... 本地数据访 ...

  3. mongodb 集群shard_MongoDBV3.0.7版本(shard+replica)集群的搭建及验证

    集群的模块介绍: 从MongoDB官方给的集群架构了解,整个集群主要有4个模块:Config Server.mongs. shard.replica set: Config Server:用来存放集群 ...

  4. linux mongodb集群搭建

    MongoDB集群搭建 搭建之前先了解一下MongoDB分片群集主要有如下三个组件: Shard:分片服务器,用于存储实际的数据块,实际生产环境中一个shard server 角色可以由几台服务器组成 ...

  5. Mongodb的三种集群方式的搭建

    Mongodb是时下流行的NoSql数据库,它的存储方式是文档式存储,并不是Key-Value形式.关于Mongodb的特点,这里就不多介绍了,大家可以去看看官方说明:http://docs.mong ...

  6. 【超详细】手把手教你搭建MongoDB集群搭建

    MongoDB集群搭建 MongoDB集群简介 mongodb 集群搭建的方式有三种: 主从备份(Master - Slave)模式,或者叫主从复制模式. 副本集(Replica Set)模式 分片( ...

  7. mongodb集群搭建详情分片+副本集

    在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置服务器等. 相关概念 mongodb集群架构图: 从图中可以看到有四个组件:mongos.config server.shard.repl ...

  8. Mongodb集群搭建的三种方式

    Mongodb是时下流行的NoSql数据库,它的存储方式是文档式存储,并不是Key-Value形式.关于Mongodb的特点,这里就不多介绍了,大家可以去看看官方说明:http://docs.mong ...

  9. mongo学习笔记四:Mongodb的三种集群(Replica Set)

    Replica Set    中文翻译叫做副本集,不过我并不喜欢把英文翻译成中文,总是感觉怪怪的.其实简单来说就是集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据 ...

最新文章

  1. 转载——Java与WCF交互(一):Java客户端调用WCF服务
  2. Solr字段类型field type的定义
  3. Apache Camel简介与入门
  4. 国内“重量级”单体数据中心开始运营 火了这个县
  5. 【网络协议】TCP分段与UDP/IP分片 (MTU最大传输单元,MSS最大分段大小)
  6. Acwing第 31 场周赛【完结】
  7. 【牛客OI周赛7-普及组ABCD 非官方题解】暴力,二分,KMP,尺取(STL或Hash)
  8. tornado学习笔记day01-高并发性能web框架
  9. 27岁博士毕业,32岁成清华博导!黄高助理教授:DenseNet发明者
  10. dos初始操作和全屏方法
  11. 点滴记录:管理工作的50点亲身感悟(分享!)
  12. java计算机毕业设计springboot+vue基本微信小程序的医疗耗材管理系统 uniapp
  13. 如何备份光猫html文件夹,华为光猫备份jffs2及HG8321R-RMS切换HG8321版本教程
  14. 千里追踪“假疫苗”产销链
  15. activemq消息清理
  16. EOJ 3322 万年历(历史题)
  17. Linux入门---环境搭建(腾讯云服务器)、XShell远程登陆Linux
  18. 如何应对项目范围变更管理
  19. CSS 实现切角效果
  20. 人生重开模拟器(Python实现)

热门文章

  1. 停车场管理系统C语言课程设计
  2. 【沐风老师】怎么在3DMAX中使用MAXScript脚本动画编程?
  3. BZOJ3331 [BeiJing2013]压力 广义圆方树
  4. 用canvas实现在线画板,带你找回童年乐趣
  5. LeetCode All in One 题目讲解汇总转载
  6. Android RecyclerView使用 及 滑动时加载图片优化方案
  7. OpenCV图像相似度检测,Python实现
  8. js ES6 fetch 方法
  9. 《程序员》杂志上的一篇文章涉嫌抄袭
  10. apache服务器的文件目录,apache服务器的文件目录