专栏首页进击的全栈mongodb副本集搭建
原创

mongodb副本集搭建

mongodb集群的副本集和sharding模式目前是用的最广的方案,通常这2种方案的选择通过数据量和并发数来权衡。在GB级别的基本上副本集方案可满足,TB级别或以上采用sharding模式,解决单机容量和单机并发能力。这两种既有自己的优势也有自己的缺点,比如sharding模式分片越多,性能自然下降越多。

摘自:Mongodb 集群keyFile认证

  • 环境、安装包版本
  • 一、安装、配置
  • 二、更改服务器节点
  • 三、mongodb.conf文件配置
  • 四、参考资料
mongodb 副本集理论请移步mongoDB复制(译 v4.0)
环境、安装包版本
操作系统:CentOS 7.2
MongoDB版本:4.0.10

安装软件包

安装 mongodb 的服务器

服务器端口地址

默认角色

10.13.8.232:27017

primary

10.5.101.8:27017

secondary

10.16.4.200:27110

arbiter

一、安装、配置
1. 分别在3台机器上都创建文件夹
# mkdir -p /data/mongodb/data
# mkdir -p /data/mongodb/log
# mkdir -p /data/mongodb/keyfile
2. 分别在3台机器上安装mongodb,安装目录统一为/usr/local/
1.去官网上下载mongodb 版本:
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.10.tgz
2.分别上传到3台机器上,并解压,修改目录名,删除安装包:
[/usr/local/]$ tar -xzvf mongodb-linux-x86_64-rhel70-4.0.10.tgz
[/usr/local/]$ mv mongodb-linux-x86_64-rhel70-4.0.10 mongodb-4.0.10
[/usr/local/]$ rm -rf mongodb-linux-x86_64-rhel70-4.0.10.tgz
3. 分别在3台机器上上传同一份 mongodb.conf 文件,放在/usr/local/mongodb-4.0.10目录下(具体配置文件见文末)
/usr/local/mongodb-4.0.10/]$ mkdir conf
[/usr/local/mongodb-4.0.10/]$ cd conf
[/usr/local/mongodb-4.0.10/conf/]$ rz
4. 分别在3台机器上都启动mongodb,在路径/usr/local/mongodb-4.0.10/bin下启动
[/usr/local/mongodb-4.0.10/bin/]$ ./mongod -f /usr/local/mongodb-4.0.10/conf/mongodb.conf

可通过 ps -aux|grep mongo 或者 lsof -i:27017来查看是否启动成功

5. 进入其中一个节点(主节点)的mongo控制台, 配置集群(务必保证节点防火墙关闭或开放mongo服务端口)
[/usr/local/mongodb-4.0.10/bin/]$ ./mongo
// 下面配置中的_id:"mongors"要与mongodb.conf文件中的replSetName一致。priority 参数的值决定了选举中该节点的优先级。值越高,优先级越高
> config = { _id: "mongors", members: [
{_id: 0, host: "10.13.8.232:27017", priority:2},
{_id: 2, host: "10.5.101.8:27017", priority:1},
{_id: 1, host: "10.16.4.200:27110",arbiterOnly:true}]
}
 // 初始化副本集,配置成功:"ok" : 1
> rs.initiate(config)
 // 查看副本集状态,确认主节点
> rs.status()
// 查看副本同步状态
> db.printSlaveReplicationInfo()
6. 创建相关用户及权限,只在其中一个节点上(主节点)操作即可
//在主节点上
> use admin
> db.createUser({user: 'root', pwd: 'pwd', roles: ['root']})
> db.auth('root','pwd')
> use ApiHub
> db.createUser({user: 'test', pwd: 'testpwd', roles: ['readWrite']})
> db.auth('test', 'testpwd')

//查看创建的用户
> use admin
> db.system.users.find().pretty()
7. 关闭所有节点(先关闭仲裁和从节点, 再关闭主节点, 避免主节点切换)
> use admin
> db.shutdownServer()       #关闭mongo后台进程
8. 开启用户认证

(1)创建 keyfile 文件。在其中1台机器上执行以下命令生成 keyfile 文件(修改权限的chmod命令使用方法):

//生成key
[/usr/local/]$ openssl rand -base64 745 > /data/mongodb/keyfile/keyfile
[/usr/local/]$ chmod 600 /data/mongodb/keyfile/keyfile

(2)将这份keyfile文件拷贝到另外2台机器上的相同路径下:/data/mongodb/keyfile/。

(3)分别在三个节点的 mongod.conf 文件中添加以下配置:

security:
		keyFile: "/data/mongodb/keyfile/keyfile"
		authorization: enabled

(4)重新启动3个节点

./mongod -f /usr/local/mongodb-4.0.10/conf/mongodb.conf

(4)进行认证(因为已启用身份认证功能):

> use admin
> db.auth('root','pwd')
10. 副本集更改权重模拟主宕机,验证配置是否成功。

若验证主从节点切换成功,则配置 OK。

二、更改服务器节点

根据实际情况,需要将10.5.101.8:27017变成10.5.101.9:27017。

策略:先添加从节点再删除不再使用的从节点,避免出错。
1. 按“一、安装、配置”的方法在10.5.101.9上安装同一版本的 mongodb、创建相关文件夹、同步上面生成的 keyfile 和 mongodb.conf 文件,并用 mongod 命令启动数据库。
2. 在主节点(10.13.8.232)上进入数据库
[/usr/local/mongodb-4.0.10/bin]$ ./mongo
mongors:PRIMARY> use admin
mongors:PRIMARY> db.auth('root','pwd')
mongors:PRIMARY> rs.add("10.5.101.9:27017")
// 使用 rs.printReplicationInfo() 来确认复制集的oplog状态。
mongors:PRIMARY> rs.printReplicationInfo()
// 删除不再使用的从节点
mongors:PRIMARY> rs.remove("10.5.101.8:27017")
//使用rs.status()或者 rs.conf()来确认配置
3. 使用第二步中的第10点来验证节点变更是否成功。
三、mongodb.conf文件配置

mongodb配置字段说明

为了安全,bindIp需要配置具体的 ip,只允许特定 ip 接入,避免暴露在公网上。
systemLog:
   destination: file
   path: "/data/mongodb/log/mongodb.log"
   logAppend: true
storage:
   dbPath: "/data/mongodb/data/"
   journal:
      enabled: true
   wiredTiger:
      engineConfig:
         cacheSizeGB: 6
replication:
    oplogSizeMB: 10000
    replSetName: "mongors"
processManagement:
   fork: true
   pidFilePath: "/data/mongodb/mongodb.pid"
net:
   bindIp: 127.0.0.1,10.13.8.232,10.5.101.8,10.16.4.200
   port: 27017
setParameter:
   enableLocalhostAuthBypass: false
四、参考资料
  1. MongoDB 副本集部署-3.6版本
  2. Mongodb 集群keyFile认证
  3. CentOS7.4搭建基于用户认证的MongoDB4.0三节点副本集集群详细文档

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • mongodb副本集的备份与恢复

    shirley
  • Hooks概览(译)

    Hooks是React v16.7.0-alpha中加入的新特性。它可以让你在class以外使用state和其他React特性。你可以在这里看到关于它的一些讨论...

    shirley
  • 基于webpack4+react 的js懒加载

    此处主要介绍使用动态导入(通过模块中的内联函数调用来分离代码)的懒加载。这种动态代码拆分的方式是webpack提供并推荐选择的方式。其原理是使用符合 ECMAS...

    shirley
  • Linux安装mongodb总结

    工作的时候mongodb都是运维人员早早给我们搭建好了,然后开发就在已经搭建好的基础上面进行mongodb的增删改查,所以关于mongodb的安装细节就不是很清...

    林老师带你学编程
  • mongoDB(二)mongoDB副本集实战

    alexhuiwang
  • 【通用方法】CentOS7 安装 Mogodb3.4(在线 && 离线)

    平台之大势何人能挡? 带着你的Net飞奔吧!http://www.cnblogs.com/dunitian/p/4822808.html 先说推荐安装:在线安装...

    逸鹏
  • 在线商城项目07-mac下mongodb的下载与配置

    这一章本来不想讲的,因为关于配环境这种事,其实网上真的很多资料,但是考虑到确实好多人都不喜欢配环境这种事,因为觉着很麻烦而止步不前,很是可惜。这一节我们来看看如...

    love丁酥酥
  • kali 配置 MongoDB

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    suveng
  • linux 下的 CentOS 6.8 安装mongodb

    [root@xxxx local]# curl -o mongodb-linux-x86_64-3.4.6.tgz https://fas tdl.mongod...

    学到老
  • mac环境下mongodb的安装和使用

    简介 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据...

    xiangzhihong

扫码关注云+社区

领取腾讯云代金券