CentOS6.8部署MongoDB集群及支持auth认证
三个节点的副本集如下图所示:
实验目的:
配置MongoDB的3节点副本集
3个节点的副本集都要开启auth认证,并且开启认证后,能互相通信
第一步 - 准备环境
准备三个虚拟机,其中一个用作Primary,另外两个用作Secondary。如上图展示的那样
- 虚拟机信息如下:
- Primary:172.xx.xx.107
- Secondary:172.xx.xx.105 和172.xx.xx.106
第二步 - yum安装Mongo
在/etc/yum.repos.d/目录下,创建一个mongodb.repo文件,指定MongoDB资源库即可。
使用 vim /etc/yum.repos.d/mongodb.repo命令,创建并打开文件mongodb.repo
- [mongodb-org-3.4]
- name=MongoDB Repository
- baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
- gpgcheck=1
- enabled=1
- gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
- ### 然后
- # yum repolist
- # yum install mongodb-org
第三步 - 配置副本集
使用vim /etc/mongod.conf配置,每一台虚拟机上的Mongod配置文件。
在replication选项中添加oplogSizeMB 和 replSetName两个属性
- # vim /etc/mongod.conf
- replication:
- oplogSizeMB: 1024
- replSetName: test
查看mongod.conf文件配置
- # cat /etc/mongod.conf
- # mongod.conf
- # for documentation of all options, see:
- # http://docs.mongodb.org/manual/reference/configuration-options/
- # where to write logging data.
- systemLog:
- destination: file
- logAppend: true
- path: /var/log/mongodb/mongod.log
- # Where and how to store data.
- storage:
- dbPath: /var/lib/mongo
- journal:
- enabled: true
- # engine:
- # mmapv1:
- # wiredTiger:
- # how the process runs
- processManagement:
- fork: true # fork and run in background
- pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
- # network interfaces
- net:
- port: 27017
- bindIp: 0.0.0.0 # Listen to local interface only, comment to listen on all interfaces.
- #security:
- #operationProfiling:
- replication:
- oplogSizeMB: 1024
- replSetName: test
- #sharding:
- ## Enterprise-Only Options
- #auditLog:
- #snmp:
- 注意:
- 3台虚拟机,MongoDB配置文件mongod.conf中的replSetName名字要保持一致,
- 在本例中,replSetName的名字为test,这个名字可以随便取
第四步 - 启动
配置好副本集之后,通过mongod --config /etc/mongod.conf 命令启动三个虚拟机中的Mongo服务
- [root@dev04 mongodb]# mongod --config /etc/mongod.conf
- about to fork child process, waiting until server is ready for connections.
- forked process: 30799
- child process started successfully, parent exiting
因为107端口的虚拟机安装的MongoDB要用作Primary节点,所以,我们可以使用mongo命令来连接
- [root@dev04 mongodb]# mongo
- MongoDB shell version v3.4.2
- connecting to: mongodb://127.0.0.1:27017
- MongoDB server version: 3.4.2
- ### 使用use admin, 切换到时admin数据库
- > use admin
- switched to db admin
然后通过config配置设置副本集节点成员
- config={_id:"test",members:[{_id:0,host:"172.xxx.xxx.107:27017"},{_id:1,host:"172.xxx.xxx.106:27017"},{_id:2,host:"172.xxx.xxx.105:27017"}]}
- 注:
- _id:"test", test是副本集中取得名字。
- members中添加每个副本集Mongod的_id和host信息
- > config={_id:"test",members:[{_id:0,host:"172.xxx.xxx.107:27017"},{_id:1,host:"172.xxx.xxx.106:27017"},{_id:2,host:"172.xxx.xxx.105:27017"}]}
- {
- "_id" : "test",
- "members" : [
- {
- "_id" : 0,
- "host" : "172.xxx.xxx.107:27017"
- },
- {
- "_id" : 1,
- "host" : "172.xxx.xxx.106:27017"
- },
- {
- "_id" : 2,
- "host" : "172.xxx.xxx.105:27017"
- }
- ]
- }
- >
然后,执行配置初始化,看到{ "ok" : 1 },则表明初始化成功
- > rs.initiate(config)
- { "ok" : 1 }
使用rs.status()查看副本节点状态
- test:PRIMARY> rs.status()
- {
- "set" : "test",
- "date" : ISODate("2017-02-17T01:30:53.128Z"),
- "myState" : 1,
- "term" : NumberLong(1),
- "heartbeatIntervalMillis" : NumberLong(2000),
- "optimes" : {
- "lastCommittedOpTime" : {
- "ts" : Timestamp(1487295047, 1),
- "t" : NumberLong(1)
- },
- "appliedOpTime" : {
- "ts" : Timestamp(1487295047, 1),
- "t" : NumberLong(1)
- },
- "durableOpTime" : {
- "ts" : Timestamp(1487295047, 1),
- "t" : NumberLong(1)
- }
- },
- "members" : [
- {
- "_id" : 0,
- "name" : "172.xxx.xxx.107:27017",
- "health" : 1,
- "state" : 1,
- "stateStr" : "PRIMARY",
- "uptime" : 693,
- "optime" : {
- "ts" : Timestamp(1487295047, 1),
- "t" : NumberLong(1)
- },
- "optimeDate" : ISODate("2017-02-17T01:30:47Z"),
- "infoMessage" : "could not find member to sync from",
- "electionTime" : Timestamp(1487294966, 1),
- "electionDate" : ISODate("2017-02-17T01:29:26Z"),
- "configVersion" : 1,
- "self" : true
- },
- {
- "_id" : 1,
- "name" : "172.xxx.xxx.106:27017",
- "health" : 1,
- "state" : 2,
- "stateStr" : "SECONDARY",
- "uptime" : 96,
- "optime" : {
- "ts" : Timestamp(1487295047, 1),
- "t" : NumberLong(1)
- },
- "optimeDurable" : {
- "ts" : Timestamp(1487295047, 1),
- "t" : NumberLong(1)
- },
- "optimeDate" : ISODate("2017-02-17T01:30:47Z"),
- "optimeDurableDate" : ISODate("2017-02-17T01:30:47Z"),
- "lastHeartbeat" : ISODate("2017-02-17T01:30:52.708Z"),
- "lastHeartbeatRecv" : ISODate("2017-02-17T01:30:51.674Z"),
- "pingMs" : NumberLong(0),
- "syncingTo" : "172.xxx.xxx.107:27017",
- "configVersion" : 1
- },
- {
- "_id" : 2,
- "name" : "172.xxx.xxx.105:27017",
- "health" : 1,
- "state" : 2,
- "stateStr" : "SECONDARY",
- "uptime" : 96,
- "optime" : {
- "ts" : Timestamp(1487295047, 1),
- "t" : NumberLong(1)
- },
- "optimeDurable" : {
- "ts" : Timestamp(1487295047, 1),
- "t" : NumberLong(1)
- },
- "optimeDate" : ISODate("2017-02-17T01:30:47Z"),
- "optimeDurableDate" : ISODate("2017-02-17T01:30:47Z"),
- "lastHeartbeat" : ISODate("2017-02-17T01:30:52.708Z"),
- "lastHeartbeatRecv" : ISODate("2017-02-17T01:30:51.745Z"),
- "pingMs" : NumberLong(0),
- "syncingTo" : "172.xxx.xxx.106:27017",
- "configVersion" : 1
- }
- ],
- "ok" : 1
- test:PRIMARY>
第五步:副本集的认证
副本集总体思路是用户名、密码和keyfile文件,keyfile需要各个副本集服务启动时加载而且要是同一文件,然后在操作库是需要用户名、密码
KeyFile文件必须满足条件:
- 至少6个字符,小于1024字节
- 认证时候不考虑文件中空白字符
- 连接到副本集的成员和mongos进成的keyfile文件内容必须一样
- 必须是base64编码,但是不能有等号
- 文件权限必须是x00,也就是说,不能分配任何权限给group成员和other成员
- ### 在107节点生成Keyfile
- [root@localhost ~]# openssl rand -base64 90 > /usr/local/mongodb/keyfiletest
- ### 然后该文件scp到105、106上面
- scp /usr/local/mongodb/keyfile root@172.xxx.xxx.105[106]:/usr/local/mongodb/
- ### 修改配置文件
- # vim /etc/mongod.conf
- security:
- keyFile: /usr/local/mongodb/keyfiletest
- authorization: enabled
- # cat /etc/mongod.conf
- # mongod.conf
- # for documentation of all options, see:
- # http://docs.mongodb.org/manual/reference/configuration-options/
- # where to write logging data.
- systemLog:
- destination: file
- logAppend: true
- path: /var/log/mongodb/mongod.log
- # Where and how to store data.
- storage:
- dbPath: /var/lib/mongo
- journal:
- enabled: true
- # engine:
- # mmapv1:
- # wiredTiger:
- # how the process runs
- processManagement:
- fork: true # fork and run in background
- pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
- # network interfaces
- net:
- port: 27017
- bindIp: 0.0.0.0 # Listen to local interface only, comment to listen on all interfaces.
- security:
- keyFile: /usr/local/mongodb/keyfiletest
- authorization: enabled
- #operationProfiling:
- replication:
- oplogSizeMB: 1024
- replSetName: test
- #sharding:
- ## Enterprise-Only Options
- #auditLog:
- #snmp:
重启mongod服务,认证OK
转载及借鉴博客地址:
https://my.oschina.net/wangmengjun/blog/840997?from=timeline&isappinstalled=0
http://www.cnblogs.com/xiaoit/p/4522218.html
http://www.cnblogs.com/libingql/archive/2011/06/09/2076440.html
CentOS6.8部署MongoDB集群及支持auth认证的更多相关文章
- 在Docker中安装和部署MongoDB集群
此文已由作者袁欢授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 在Docker中安装mongodb 采用的mongodb镜像:https://registry.hub.doc ...
- Centos6.6部署Redis集群
Centos6.6部署Redis集群 1环境准备 1环境安装redis 1安装ruby 2配置redis主从环境 3部署redis sentinel服务器 5集群使用 13当前集群环境说明 13测试功 ...
- 在CentOS6.6上以replSet方式部署MongoDB集群
此文已由作者袁欢授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 部署方式在3台centos6.6系统上以Replica Set方式部署mongodb3.0.2集群. 官方参考 ...
- centos7下安装部署mongodb集群(副本集模式)
环境需求:Mongodb集群有三种模式: Replica Set, Sharding,Master-Slaver. 这里部署的是Replica Set模式. 测试环境: 这里副本集(Replica ...
- 一键部署MongoDB集群Windows版
由于周末在家手头没有虚拟机,所以在windows下单机完毕部署要求,并编写bat执行脚本. 1.创建配置文件及相关文件夹 总的启动脚本例如以下(startmc.bat): rem m1 start m ...
- Centos6.9下RabbitMQ集群部署记录
之前简单介绍了CentOS下单机部署RabbltMQ环境的操作记录,下面详细说下RabbitMQ集群知识,RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言, ...
- 手把手教你用Docker部署一个MongoDB集群
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中最像关系数据库的.支持类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引 ...
- MongoDB集群部署 - 带访问控制的分片副本集
1. 前言 Ceilometer将meter.event等数据保存在MongoDB中,之前将MongoDB部署在控制节点上,使用三副本模式,时间长了发现meter数据爆炸式增长,区区2T的磁盘捉襟见肘 ...
- [转]搭建高可用mongodb集群(二)—— 副本集
在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...
随机推荐
- 在看 jquery 源码中发现的一些优化方向
1. 避免使用 $.fn.each 或 $.each 因为它比原生的 for/while 真的会慢一些,循环次数越多差距越大. 另外,对象的 for-in 比 for 是要快一丢丢的,但数组的 for ...
- Kubernetes Ingress
Kubernetes关于服务的暴露主要是通过NodePort方式,通过绑定node主机的某个端口,然后进行pod的请求转发和负载均衡,但这种方式下缺陷是 Service可能有很多个,如果每个都绑定一个 ...
- kubernetes liveness readiness
Liveness Probe(存活探针):用于判断容器是否存货(running状态),如果LivenessProbe探测到容器不健康,则kubelet将杀掉该容器,并根据容器的重启策略做相应的处理.如 ...
- HTML文本/文字竖直方向/纵向显示
HTML vertical text (Safari, Firefox, Chrome, and Opera) .vText { -moz-transform: rotate(-90deg) tran ...
- Java之File文件类
package IoDemo; import java.io.File; import java.io.FileFilter; import java.io.IOException; import j ...
- JAVA题库01
说出一些常用的类,包,接口,请各举5个 常用的类:BufferedReader BufferedWriter FileReader FileWirter String Integer java ...
- 天地图OGC WMTS服务规则
图层名称 服务地址 投影类型 矢量底图 http://t0.tianditu.gov.cn/vec_c/wmts?tk=您的密钥 经纬度投影 http://t0.tianditu.gov.cn/vec ...
- npm全局安装
时间长了,很多东西都忘了. 全局安装以后,在你自己的电脑任何位置都可以使用的包.直接用命令使用的: 比如:supervisor mok 还有cnpm,express之类的.gulp之类的. 剩下的我们 ...
- Microsoft Prism安装使用教程 搭建WPF松耦合架构框架
Microsoft Prism安装使用教程 搭建WPF松耦合架构框架 Prism是由微软Patterns & Practices团队开发的项目,目的在于帮助开发人员构建松散耦合的.更灵活.更易 ...
- php实现微信扫码自动登陆与注册功能
本文实例讲述了php实现微信扫码自动登陆与注册功能.分享给大家供大家参考,具体如下: 微信开发已经是现在程序员必须要掌握的一项基本的技术了,其实做过微信开发的都知道微信接口非常的强大做起来也非常的简单 ...