mongodb之replSet复制集 + auth

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 MongoDB,通用型 2核4GB
简介:

### 开启auth认证的mongodb的复制集


### 注意点

- 服务器节点之前时间要同步

- 开启防火墙的一定要允许通过

- 开启selinux的也要进行设置

- 建立双击互信模式最好不过



### 提前要做的事情

  • 生产高端大气上档次的keyFile文件


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@redis journal]# openssl rand -base64 753
3LC/EZGPOLXdVBQInqeKVglqNNWo2Et93ib51BQJZRAUB2gRUovi4b6ZkAeNAQxc
vu3UEOLWA9IyWvHy6g3rAQ8lAWqVX+dIJ52Lf5EKiUp9uTwqlzGd6FKgtheN6hNL
HV1YhwdzHLN7itmUgcTSe5qCSNJJijQh+OtKipkPH3laE+UxvC4rafPqNtzcBBjU
7P2GOAq7zyHqT68IBysNzcdribb9qVQ35Q+kFG3sB4ne26pgk2qjnUYAK2r42BLm
ec6VfKw0LnemJsSCB1d2M+5fLMvBe8w59lOL7/n8IHeeT4jiTmFhrWcgyTATK7D3
16Zbf8DJOkHobfnW7v0eUJINAS7BrVLjItSR51qQ4nqQAQpWd5DyNCsycDcNIzQj
u9pGO2OzBiroOlo/tz/tLjS8jPHaa7GamOI+L+OF1sn9ytpSq0T0BswItbaNIFjr
g97Nj6iwL86zblDY1U2380qBqKZdBP/yZdYi9Mj05328PdjPvF32vPt3wAHmkxTW
zHXMELO6AO4q4LxTPUbIGuLzbeGoLF/ZZia5ndXWzJxVaLNUxxdzrCtcoCXvfwXw
NXiN6Gg2Ep/IwkVZtNILtmbUZG51q45bb7afvS7p27P89WTk0TZ4rWNdnpNNJ1ry
Nwz8jMUFe9DdAY50KYUqYiIEDFltICYycnXwtmKYTpaun/6gXLKKp6PwHtfdid1t
v6dkv1FHB0fU0bReOBTTSfaFkwbdKcxHcLV2p6xiFdRKLMGDrgCQNXlJN0SaUUgP
U55DrScsWT3A6Pzx2Ga6yl/xnGaJpXBHb+g2gWFhSL64oo58KB4e1TQT5z/pkI0Y
Ow+GLv8m82K2epU7hpTB6ks0PZcalGlGPy4OBxu7tNQqJIY/pLa60Gtqbs5KBCIX
p7MV9JxCnOML68JU3ZKqlZUIkZeNSLpFXbnHNsuRtXWRuARdb3WM6BxsNS6uOfjA
/iYa0dsUtz5w8z6CQOEJ0bPo5GjpA95WSjXnwiCY8Hvf
[root@redis journal]#


  • - 把生产的key复制到/usr/local/mongodb/key

  • - 设置key文件的权限为600

  • - 修改key文件的属主属组



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@redis mongodb]# ll
total 72
drwxr-xr-x 2 mongodb mongodb  4096 Jul 19 12:58 bin
-rw-r--r-- 1 mongodb mongodb 34520 Jun 19 22:41 GNU-AGPL-3.0
-rw-r--r-- 1 root    root     1020 Jul 21 08:26 key
-rw-r--r-- 1 mongodb mongodb     5 Jul 21 07:54 mongo.pid
-rw-r--r-- 1 mongodb mongodb  1359 Jun 19 22:41 README
-rw-r--r-- 1 mongodb mongodb 17793 Jun 19 22:41 THIRD-PARTY-NOTICES
[root@redis mongodb]# chmod 600 key 
[root@redis mongodb]# ll
total 72
drwxr-xr-x 2 mongodb mongodb  4096 Jul 19 12:58 bin
-rw-r--r-- 1 mongodb mongodb 34520 Jun 19 22:41 GNU-AGPL-3.0
-rw------- 1 
mongodb mongodb
   1020 Jul 21 08:26 key
-rw-r--r-- 1 mongodb mongodb     5 Jul 21 07:54 mongo.pid
-rw-r--r-- 1 mongodb mongodb  1359 Jun 19 22:41 README
-rw-r--r-- 1 mongodb mongodb 17793 Jun 19 22:41 THIRD-PARTY-NOTICES
[root@redis mongodb]#



### 把key文件复制到另外一个节点上去


  • - 注意属组属主

  • - 创建一个全局账户


1
2
3
4
5
6
7
8
9
10
11
> show dbs
admin  (empty)
local  1.078GB
test   (empty)
> use admin
switched to db admin
> db.addUser("zhuima","zhuima")
WARNING: The 'addUser' shell helper is DEPRECATED. Please use 'createUser' instead
Successfully added user: { "user" : "zhuima", "roles" : [ "root" ] }
>





### 主服务器配置文件


1
2
3
4
5
6
7
8
9
10
11
12
[root@redis mongodb]# sed -e '/^$/d;/^#/d' /etc/mongod.conf
port=27017
dbpath=/mongo/data/mongodb_data/
logpath=/mongo/data/mongodb_log/mongodb.log
pidfilepath=/usr/local/mongodb/mongo.pid
fork=true
logappend=true
shardsvr=true
directoryperdb=true
replSet=zhuima
keyFile=/usr/local/mongodb/key
bind_ip=192.168.58.30




### 从服务器上配置文件


1
2
3
4
5
6
7
8
9
10
[root@mongo1 data]# vim /etc/mongod.conf 
[root@mongo1 data]# sed -e '/^$/d;/^#/d' /etc/mongod.conf
logpath=/var/log/mongodb/mongod.log
logappend=true
fork=true
dbpath=/mongo/data
pidfilepath=/var/run/mongodb/mongod.pid
bind_ip=192.168.58.10
replSet = zhuima
keyFile = /mongo/data/key


### 重启mongodb服务观察结果

  • - 初始化副本集

1
> rs.initiate()
  • - 由下面的可以看出,keyFile默认就包含了开启auth功能


1
2
3
4
5
6
7
zhuima:SECONDARY> show dbs
2014-07-21T08:52:44.617+0200 listDatabases failed:{
"ok" : 0,
"errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
"code" : 13
} at src/mongo/shell/mongo.js:47
zhuima:SECONDARY>





### 验证信息

  • - 主节点上


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
zhuima:PRIMARY> show dbs
admin  0.078GB
local  1.078GB
zhuima:PRIMARY> use zhuima
switched to db zhuima
zhuima:PRIMARY> info = {Name:"zhuima",Age:26,Gender:"F",Address:"Beijing China"}
{
"Name" : "zhuima",
"Age" : 26,
"Gender" : "F",
"Address" : "Beijing China"
}
zhuima:PRIMARY> db.person.insert(info)
WriteResult({ "nInserted" : 1 })
zhuima:PRIMARY> db.person.find()
{ "_id" : ObjectId("53ccb955f09dbb6f5a213faf"), "Name" : "zhuima", "Age" : 26, "Gender" : "F", "Address" : "Beijing China" }
zhuima:PRIMARY>






  • - 从节点上


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
zhuima:SECONDARY> show dbs
admin   0.078GB
local   1.078GB
zhuima  0.078GB
zhuima:SECONDARY> use zhuima
switched to db zhuima
zhuima:SECONDARY> show collections
2014-07-21T08:55:40.267+0200 error: { "$err" : "not master and slaveOk=false", "code" : 13435 } at src/mongo/shell/query.js:131
zhuima:SECONDARY> rs.slaveOk()
zhuima:SECONDARY> rs.slaveOk()
zhuima:SECONDARY> show collections
person
system.indexes
zhuima:SECONDARY> db.person.find()
{ "_id" : ObjectId("53ccb955f09dbb6f5a213faf"), "Name" : "zhuima", "Age" : 26, "Gender" : "F", "Address" : "Beijing China" }
zhuima:SECONDARY>




### 关于mongodb 复制集 + auth的配置要感谢灿哥的指点

灿哥博客:http://www.shencan.net/



### 后记:

  • 生产环境中虽说mongdb不对外服务,但是加上auth认证总归是有好处的

  • 还记得曾经被乌云爆过的痛么~

  • 后续博客将会讲诉索引记忆分片操作



本文转自lovelace521 51CTO博客,原文链接:http://blog.51cto.com/lovelace/1441047,如需转载请自行联系原作者
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
9月前
|
NoSQL MongoDB
MongoDB-复制集搭建
在安装目录下新建 data/conf/log 3个文件夹,在conf文件夹下新建 mongo.config,在mongo.config中配置如下内容:
59 0
|
3月前
|
NoSQL Linux MongoDB
centos7搭建MongoDB以及MongoDB复制集
centos7搭建MongoDB以及MongoDB复制集
45 0
|
9月前
|
数据库
MongoDB-复制集投票节点
?> 投票节点就是不保存任何数据, 只参与投票的节点
50 0
|
6月前
|
监控 NoSQL MongoDB
轻松掌握组件启动之MongoDB(番外篇):高可用复制集架构环境搭建-mtools
mtools是一个基于Python实现的MongoDB工具集,旨在提供一系列功能,包括MongoDB日志分析、报表生成以及简易的数据库安装等。它由MongoDB原生的工程师单独发起并进行开源维护。mtools包含了一些常用的组件,如mlaunch、mlogfilter、mplotqueries和mlogvis等,可以帮助我们更方便地启动和创建MongoDB数据库。
|
6月前
|
监控 NoSQL 安全
轻松掌握组件启动之MongoDB(下):高可用复制集架构环境搭建
本章介绍了MongoDB复制集的配置和使用方法,如何初始化和添加节点到复制集,验证主节点的写入和从节点的读取功能。了解如何查询复制集的状态,包括成员的健康状况、同步信息和角色等。最后,我们介绍了如何配置复制集的安全认证,包括创建用户和生成keyFile文件,并演示了使用认证信息连接复制集的方式。通过本章的学习,你将掌握MongoDB复制集的基本使用和配置方法。
|
6月前
|
存储 NoSQL 容灾
轻松掌握组件启动之MongoDB(上):高可用复制集架构环境搭建
本文介绍了MongoDB复制集的架构和特点,强调了使用复制集提供数据的高可用性和冗余性的重要性。复制集由Primary节点和Secondary节点组成,确保数据一致性。复制集还具有数据分发、读写分离和异地容灾等附加功能。使用MongoDB复制集可以提供稳定可靠的数据存储和高可用性。
轻松掌握组件启动之MongoDB(上):高可用复制集架构环境搭建
|
9月前
|
数据库 索引
MongoDB-复制集同步规则
初始化同步 • 将一个新的节点加入到复制集中时, 就需要进行初始化同步 • 初始化同步会先清空自己所有的内容, 保证将来自己和主节点一模一样 • 初始化同步会将主节点中现有所有的 ‘数据库’, ‘集合’, ‘文档’, ‘索引’ 全部拷贝过来 • 但是在拷贝的过程中主节点仍然可能会做一些其它操作, 新增一些其它的数据等
56 0
|
9月前
MongoDB-复制集选举规则
选举规则 • 一旦发现主节点没有响应 / 发送心跳请求, 那么副节点就会认为主节点挂了 • 一旦发现主节点挂了, 任意一个副节点都可以发起选举 • (发起选举的节点我们称之为 候选节点, 每一个节点内部都有一个 选举计数器) • 发起选举的节点会给自己先投一票, 然后将自己的票数依次发送给其它节点
54 0
|
9月前
|
NoSQL MongoDB 数据库
MongoDB-复制集特点
MongoDB 复制集特点 !> 复制集中必须有一个主节点 • 主节点主要负责写入数据和读取 • 复制集中除了主节点以外的节点我们称之为 副节点: • 副节点默认情况下只能读取数据, 不能写入数据 • 副节点主要负责从主节点不断复制数据
37 0
|
9月前
|
存储 NoSQL 数据处理
MongoDB-复制集开篇
MongoDB 高可用性 • 如果所有用户都从同一台MongoDB服务器上读写数据, 那么如果这台MongoDB服务器宕机了, 用户就不能进行读写了 • 如果我们有多台MongoDB服务器, 并且每台服务器中存储的内容都相同,那么即使有一台服务器宕机了, 用户依然可以进行读写数据, 因为用户还可以继续使用其它保存了相同内容的服务器
45 0