Mongodb复制集的安装和部署

Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写入Primary,Secondary从Primary同步写入的数据,以保持复制集内所有成员存储相同的数据集,提供数据的高可用。

准备工作

软件环境

OS:Oracle Linux 6.5

MongoDB:mongodb3.2.3

部署架构

模拟有三台服务器

10.1.5.123:28001 主节点

10.1.5.123:28002 从节点

10.1.5.123:28003 选举节点

复制集架构:一主,一从,一选举节点

下载安装

下载地址:https://www.mongodb.org/downloads

mongodb-linux-x86_64-rhel62-3.2.3.tgz

部署步骤

1.创建目录及用户

[root@devtest mongodb]# mkdir conf data log

[root@devtest data]# mkdir 28001 28002 28003

--创建mongo用户

[root@devtest conf]# groupadd mongod

[root@devtest conf]# useradd -g mongod mongod

2.创建配置文件 –配置三个实例的配置文件(修改相应的端口号即可)

–节点1

$ vi /home/mongod/mongodb3.2.3/conf/28001.conf

port=28001

bind_ip=10.1.5.123

logpath=/home/mongod/mongodb3.2.3/log/28001.log

dbpath=/home/mongod/mongodb3.2.3/data/28001/

logappend=true

pidfilepath=/home/mongod/mongodb3.2.3/data/28001/28001.pid

fork=true

oplogSize=1024

replSet=MyMongo

–节点2

$ vi /home/mongod/mongodb3.2.3/conf/28002.conf

port=28002

bind_ip=10.1.5.123

logpath=/home/mongod/mongodb3.2.3/log/28002.log

dbpath=/home/mongod/mongodb3.2.3/data/28002/

logappend=true

pidfilepath=/home/mongod/mongodb3.2.3/data/28002/28002.pid

fork=true

oplogSize=1024

replSet=MyMongo

–节点3

$ vi /home/mongod/mongodb3.2.3/conf/28003.conf

port=28003

bind_ip=10.1.5.123

logpath=/home/mongod/mongodb3.2.3/log/28003.log

dbpath=/home/mongod/mongodb3.2.3/data/28003/

logappend=true

pidfilepath=/home/mongod/mongodb3.2.3/data/28003/28003.pid

fork=true

oplogSize=1024

replSet=MyMongo

3.启动mongo复制集

$ mongod -f /home/mongod/mongodb3.2.3/conf/28001.conf

$ mongod -f /home/mongod/mongodb3.2.3/conf/28002.conf

$ mongod -f /home/mongod/mongodb3.2.3/conf/28003.conf

4.初始化复制集

[mongod@devtest ~]$ mongo 10.1.5.123:28001/admin

MongoDB shell version: 3.2.3

connecting to: 10.1.5.123:28001/admin

Welcome to the MongoDB shell.

For interactive helptype"help".

For more comprehensive documentation, see

•    http://docs.mongodb.org/

Questions? Try the support group

  http://groups.google.com/group/mongodb-user

\> db

admin

\> config = {

... "_id":"MyMongo",

... members:[

...{"_id":0,host:"10.1.5.123:28001"},

...{"_id":1,host:"10.1.5.123:28002"},

... {"_id":2,host:"10.1.5.123:28003"}]

... }

{

  "id" : "MyMongo",

  "members" : [

•        {

•            "_id" : 0,

•            "host" :"10.1.5.123:28001"

•        },

•        {

•            "_id" : 1,

•            "host" :"10.1.5.123:28002"

•        },

•        {

•            "_id" : 2,

•            "host" :"10.1.5.123:28003"

•        }

  ]

}

–查看复制集成员

\> config.members

[

  {

•        "_id" : 0,

•        "host" :"10.1.5.123:28001"

  },

  {

•        "_id" : 1,

•        "host" :"10.1.5.123:28002"

  },

  {

•        "_id" : 2,

•        "host" :"10.1.5.123:28003"

  }

]

–把节点3修改为arbiter选举节点

\> config.members[2]

{ "_id" : 2, "host" :"10.1.5.123:28003" }

\> config.members[2] ={"_id":2,"host":"10.1.5.123:28003",arbiterOnly:true}

{ "id" : 0, "host" :"10.1.5.123:28003""arbiterOnly" : true }

–进行复制集初始化

\> rs.initiate(config)

{ "ok" : 1 }

–查看复制集状态

MyMongo:OTHER> rs.status()

{

•    "set" : "MyMongo",

•    "date" :ISODate("2016-03-15T09:42:47.643Z"),

•    "myState" : 1,

•    "term" : NumberLong(1),

•    "heartbeatIntervalMillis" :NumberLong(2000),

•    "members" : [

•        {

•            "_id" : 0,

•            "name" :"10.1.5.123:28001",

•            "health" : 1,

•            "state" : 1,

•            "stateStr" :"PRIMARY",

•            "uptime" :1812,

•            "optime" : {

•                "ts": Timestamp(1458034899, 1),

•                "t" :NumberLong(1)

•            },

•            "optimeDate": ISODate("2016-03-15T09:41:39Z"),

•            "infoMessage""could not find member to sync from",

•           "electionTime" : Timestamp(1458034898, 1),

•            "electionDate": ISODate("2016-03-15T09:41:38Z"),

•           "configVersion" : 1,

•            "self" : true

•        },

•        {

•            "_id" : 1,

•            "name" :"10.1.5.123:28002",

•            "health" : 1,

•            "state" : 2,

•            "stateStr" :"SECONDARY",

•            "uptime" :80,

•            "optime" : {

•                "ts": Timestamp(1458034899, 1),

•                "t" :NumberLong(1)

•            },

•            "optimeDate": ISODate("2016-03-15T09:41:39Z"),

•           "lastHeartbeat" :ISODate("2016-03-15T09:42:46.947Z"),

•            "lastHeartbeatRecv" :ISODate("2016-03-15T09:42:46.445Z"),

•            "pingMs" :NumberLong(0),

•            "syncingTo" :"10.1.5.123:28001",

•           "configVersion" : 1

•        },

•        {

•            "_id" : 2,

•            "name" :"10.1.5.123:28003",

•            "health" : 1,

•            "state" : 7,

•            "stateStr" :"ARBITER",

•            "uptime" :80,

•           "lastHeartbeat" :ISODate("2016-03-15T09:42:46.946Z"),

•           "lastHeartbeatRecv" :ISODate("2016-03-15T09:42:44.428Z"),

•            "pingMs" :NumberLong(0),

•            "configVersion": 1

•        }

•    ],

•    "ok" : 1

}

MyMongo:PRIMARY>

\5. 验证复制集同步 分别登录两从节点查看登录状态,分别为secondary和arbite

下面登录从secondary节点进行测试:

在从节点进行查询时报下面的错误,因为在默认情况下,不通过驱动连接mongodb从节点数据库时,如果不开始slaveOK=true,是无法读取从节点数据的。

[mongod@devtest conf]$ mongo10.1.5.123:28002/admin

MongoDB shell version: 3.2.3

connecting to:10.1.5.123:28002/admin

MyMongo:SECONDARY> show dbs

2016-03-15T17:49:47.854+0800 EQUERY  [thread1] Error: listDatabasesfailed:{ "ok" : 0, "errmsg" : "not master andslaveOk=false""code" : 13435 } :

_getErrorWithCode@src/mongo/shell/utils.js:23:13

Mongo.prototype.getDBs@src/mongo/shell/mongo.js:53:1

shellHelper.show@src/mongo/shell/utils.js:700:19

shellHelper@src/mongo/shell/utils.js:594:15

@(shellhelp2):1:1

MyMongo:SECONDARY>rs.slaveOk(true)

MyMongo:SECONDARY> show dbs

local 0.000GB

test 0.000GB

MyMongo:SECONDARY> use test

switched to db test

MyMongo:SECONDARY> showtables

t1

MyMongo:SECONDARY>db.t1.find()

{ "_id" :ObjectId("56e7dc310ebd75f9ef3546c1"), "name" :"licz" }

下面登录从arbite节点进行测试:

然后登录arbite节点,会发现数据没有同步,因为arbite不参与数据库的同步,即不存储数据

但local数据库大小已经改变了,因为local库存储命名空间(local.ns文件)的内容。

MyMongo:ABITER> rs.slaveOk(true)

MyMongo:ARBITER> show dbs

local 0.000GB

6.模拟主-从故障切换 –杀掉当前主节点为28001端口

[mongod@devtest ~]$ ps -ef|grep mongo

root  7186 7150 0 09:15 pts/2  00:00:00 su - mongod

mongod 7187 7186 0 09:15 pts/2  00:00:00 -bash

mongod 7306 7187 0 09:16 pts/2  00:00:00 ps -ef

mongod 7307 7187 0 09:16 pts/2  00:00:00 grep mongo

mongod 16253  1 2 Mar15 ?    00:22:00 mongod -f/home/mongod/mongodb3.2.3/conf/28001.conf

mongod 16299  1 2 Mar15 ?    00:21:50 mongod -f/home/mongod/mongodb3.2.3/conf/28002.conf

mongod 16345  1 2 Mar15 ?    00:20:05 mongod -f/home/mongod/mongodb3.2.3/conf/28003.conf

[mongod@devtest ~]$ kill -9 16253

–发现主节点已经切换至28002端口

[mongod@devtest ~]$ mongo 10.1.5.123:28002/admin

MongoDB shell version: 3.2.3

connecting to: 10.1.5.123:28002/admin

MyMongo:PRIMARY>

–再次启动28001端口并登录,发现28001已为从节点

[mongod@devtest ~]$ mongod -f /home/mongod/mongodb3.2.3/conf/28001.conf

about to fork child process, waiting untilserver is ready for connections.

forked process: 21410

child process started successfully, parentexiting

[mongod@devtest ~]$ mongo 10.1.5.123:28001/admin          

MongoDB shell version: 3.2.3

connecting to: 10.1.5.123:28001/admin

MyMongo:SECONDARY>

原创文章,作者:晴川运维,如若转载,请注明出处:https://baike.qcidc.com/10098.html

(0)
晴川运维晴川运维
上一篇 2025年6月22日
下一篇 2025年6月22日

相关推荐

  • 详解Linux ncal命令使用方法

    在Linux系统中,cal和ncal命令都用御用显示日历,但是这两个命令不经常使用,尤其对ncal命令更不了解,本篇文章重点为大家讲解一下ncal命令使用方法。 ncal命令 nc…

    Linux系统 2025年7月1日
  • Vsphere中ESXi主机开启ssh详细步骤

    由于ESXi主机是创建虚拟机的基础,非常重要,所以默认安装了ESXi后,默认ssh服务是关闭着的,而且一旦开启,在vCenter里面也会出现ssh已开启的警告,以说明目前ESXi主…

    Linux系统 2025年10月10日
  • 在 Fedora 中获取最新的 Ansible 2.8

    Ansible 是世界上最受欢迎的自动化引擎之一。它能让你自动化几乎任何事情,从本地系统的设置到大量的平台和应用。它是跨平台的,因此你可以将其用于各种操作系统。请继续阅读以获取有关…

    Linux系统 2025年6月4日
  • Linux 服务器状态监控方法

    Linux 服务器我们天天打交道,特别是 Linux 工程师更是如此。为了保证服务器的安全与性能,我们经常需要监控服务器的一些状态,以保证工作能顺利开展,本篇重点为大家讲解一下Li…

    Linux系统 2025年10月9日
  • 使用selenium实现cookies免密登录

    一直想用selenium实现个小功能,比如发微博之类的,但是有的网站在登录会有验证码,没想到太好的方法解决,于是想到利用cookies来登录网站。 获取一个可用的cookies 获…

    Linux系统 2025年6月13日
  • Linux下安装与配置APF防火墙

    APF是一款Linux下的iptables防火墙,由R-fx Networks开发维护,实现代码基本为SHELL。个人觉得这是Linux下最易用,且强大的防火墙脚本。类似级别的还有…

    Linux系统 2025年9月19日
  • Linux下rsync的安装配置

    rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。目前,已支持跨平台,可以…

    Linux系统 2025年10月4日
  • Linux lsblk命令实例

    lsblk命令用来查看block设备的信息.主要应用场景: 获取wwnid,获取块设备列表,获取块设备类型(ssd,hdd),获取块设备的size等信息。 系统环境 Centos7…

    Linux系统 2025年6月11日
  • Ubuntu 18.04 LTS部署Rsyslog日志服务

    Rsyslog 是一个 syslogd 的多线程增强版。它提供高性能、极好的安全功能和模块化设计。虽然它基于常规的 syslogd,但 rsyslog 已经演变成了一个强大的工具,…

    Linux系统 2025年6月8日
  • MYSQL5.7与MariaDB10.3区别

    大家都知道MariaDB是MySQL源代码的一个分支,但是他们两个之间有什么不能呢?本篇文章重点为大家分享一下MYSQL5.7与MariaDB10.3区别。 二者基础架构是一样的,…

    Linux系统 2025年10月4日

发表回复

登录后才能评论