mongodb 集群Replica Set搭建
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搭建相关推荐
- mongodb集群分片环境搭建
环境准备 Linux环境 主机 OS 备注 192.168.32.13 CentOS6.3 64位 普通PC 192.168.71.43 CentOS6.2 64位 服务器,NUMA CPU架构 Mo ...
- mongodb java连接 集群_java连接mongodb集群
MongoDb 的分片拓展与副本集 Mongodb 数据库分片是通过并行处理数据实现负载均衡的一种重要手段[12],同时也是数据库集群 实现分布式计算的关键技术.在生产环境中,...... 本地数据访 ...
- mongodb 集群shard_MongoDBV3.0.7版本(shard+replica)集群的搭建及验证
集群的模块介绍: 从MongoDB官方给的集群架构了解,整个集群主要有4个模块:Config Server.mongs. shard.replica set: Config Server:用来存放集群 ...
- linux mongodb集群搭建
MongoDB集群搭建 搭建之前先了解一下MongoDB分片群集主要有如下三个组件: Shard:分片服务器,用于存储实际的数据块,实际生产环境中一个shard server 角色可以由几台服务器组成 ...
- Mongodb的三种集群方式的搭建
Mongodb是时下流行的NoSql数据库,它的存储方式是文档式存储,并不是Key-Value形式.关于Mongodb的特点,这里就不多介绍了,大家可以去看看官方说明:http://docs.mong ...
- 【超详细】手把手教你搭建MongoDB集群搭建
MongoDB集群搭建 MongoDB集群简介 mongodb 集群搭建的方式有三种: 主从备份(Master - Slave)模式,或者叫主从复制模式. 副本集(Replica Set)模式 分片( ...
- mongodb集群搭建详情分片+副本集
在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置服务器等. 相关概念 mongodb集群架构图: 从图中可以看到有四个组件:mongos.config server.shard.repl ...
- Mongodb集群搭建的三种方式
Mongodb是时下流行的NoSql数据库,它的存储方式是文档式存储,并不是Key-Value形式.关于Mongodb的特点,这里就不多介绍了,大家可以去看看官方说明:http://docs.mong ...
- mongo学习笔记四:Mongodb的三种集群(Replica Set)
Replica Set 中文翻译叫做副本集,不过我并不喜欢把英文翻译成中文,总是感觉怪怪的.其实简单来说就是集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据 ...
最新文章
- 转载——Java与WCF交互(一):Java客户端调用WCF服务
- Solr字段类型field type的定义
- Apache Camel简介与入门
- 国内“重量级”单体数据中心开始运营 火了这个县
- 【网络协议】TCP分段与UDP/IP分片 (MTU最大传输单元,MSS最大分段大小)
- Acwing第 31 场周赛【完结】
- 【牛客OI周赛7-普及组ABCD 非官方题解】暴力,二分,KMP,尺取(STL或Hash)
- tornado学习笔记day01-高并发性能web框架
- 27岁博士毕业,32岁成清华博导!黄高助理教授:DenseNet发明者
- dos初始操作和全屏方法
- 点滴记录:管理工作的50点亲身感悟(分享!)
- java计算机毕业设计springboot+vue基本微信小程序的医疗耗材管理系统 uniapp
- 如何备份光猫html文件夹,华为光猫备份jffs2及HG8321R-RMS切换HG8321版本教程
- 千里追踪“假疫苗”产销链
- activemq消息清理
- EOJ 3322 万年历(历史题)
- Linux入门---环境搭建(腾讯云服务器)、XShell远程登陆Linux
- 如何应对项目范围变更管理
- CSS 实现切角效果
- 人生重开模拟器(Python实现)