详解mongodb搭建Replica Set的方法

1.创建数据文件夹:

mkdir -p /data/master
mkdir -p /data/slaver
mkdir -p /data/arbiter

效果:

data 文件夹包含 arbiter   master  slaver 三个文件夹

2.创建日志存放文件

vi /log/master.log
vi /log/slaver.log
vi /log/arbiter.log

效果:

log文件夹包含 master.log  slaver.log  arbiter.log 三个文件(注意,data文件夹和lon文件夹均无上级文件夹,可自行创建不同名称不同位置的文件夹,注意路径与下文中的配置文件一致即可)

3.创建配置文件

在第一步创建的三个文件中创建 文件夹同名.conf 后缀文件,即:master文件夹中应有 master.conf 文件,slaver文件夹中应有 slaver.conf文件,arbiter文件夹中应有 arbiter.conf文件。

各配置文件内容如下:

master.conf

dbpath =/data/master
logpath = /log/master.log
pidfilepath =/data/ master.pid
directoryperdb = true
logappend = true
replSet = away
bind_ip = localhost
port = 27018
#fork = true

slaver.conf

dbpath =/data/slaver
logpath =/log/slaver.log
pidfilepath = /data/slaver.pid
directoryperdb = true
logappend = true
replSet = away
bind_ip = localhost
port = 27019
#fork = true

arbiter.conf

dbpath = /data/arbiter
logpath = /log/arbiter.log
pidfilepath = arbiter.pid
directoryperdb = true
logappend = true
replSet = away
bind_ip = localhost
port = 27020
#fork = true

replSet、bind_ip、port三个属性可根据自己情况进行更改。

属性大致解释如下:

dbpath:数据存放目录

logpath:日志存放路径

pidfilepath:进程文件,方便停止mongodb

directoryperdb:为每一个数据库按照数据库名建立文件夹存放

logappend:以追加的方式记录日志

replSet:replica set的名字

bind_ip:mongodb所绑定的ip地址

port:mongodb进程所使用的端口号,默认为27017

oplogSize:mongodb操作日志文件的最大大小。单位为Mb,默认为硬盘剩余空间的5%

fork:以后台方式运行进程

noprealloc:不预先分配存储

4.启动mongod程序

mongod --config <配置路径>

例如:

lhd@lhd:~$ sudo mongod --config /data/master/master.conf
[sudo] lhd 的密码:

输入密码即可,此出应注意启动权限。

5.主从配置

1).启动mongo客户端:

mongo localhost:27018

运行结果如下:

mongo localhost:27018
MongoDB shell version v4.4.2
connecting to: mongodb://localhost:27018/test?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("0078e025-5485-4967-85c8-160755ac3d58") }
MongoDB server version: 4.4.2
---
The server generated these startup warnings when booting:
        2020-12-22T09:39:40.347+08:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem
        2020-12-22T09:39:41.093+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
        2020-12-22T09:39:41.094+08:00: You are running this process as the root user, which is not recommended
        2020-12-22T09:39:41.095+08:00: Soft rlimits too low
        2020-12-22T09:39:41.095+08:00:         currentValue: 1024
        2020-12-22T09:39:41.095+08:00:         recommendedMinimum: 64000
---
---
        Enable MongoDB's free cloud-based monitoring service, which will then receive and display
        metrics about your deployment (disk utilization, CPU, operation statistics, etc).
 
        The monitoring data will be available on a MongoDB website with a unique URL accessible to you
        and anyone you share the URL with. MongoDB may use this information to make product
        improvements and to suggest MongoDB products and deployment options to you.
 
        To enable free monitoring, run the following command: db.enableFreeMonitoring()
        To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---

2).设置主,从,仲裁点

use admin
switched to db admin
zjd={_id:"one",members:[{_id:0,host:"localhost:27018",priority:2},{_id:1,host:"localhost:27019",priority:1},{_id:2,host:"localhost:27020",arbiterOnly:true}]};

zjd是可以任意的名字,不要用mongodb的关键字,conf,config都可以。

第一个_id表示replica set的名字,这个数据必须和第三步配置文件中的replica set一致,不然会报错。

members里包含的是所有节点的地址以及优先级,优先级最高的即成为主节点,值为0则不会参加选举成为主节点,对于仲裁节点,需要有个特别的配置——arbiterOnly:true。这个千万不能少了,不然主备模式就不能生效。

配置的生效时间根据不同的机器配置会有长有短,配置不错的话基本上十几秒内就能生效,有的配置需要一两分钟。

3).使配置生效

rs.initiate(zjd)

显示:

{
	"operationTime" : Timestamp(0, 0),
	"ok" : 0,
	"errmsg" : "Rejecting initiate with a set name that differs from command line set name, initiate set name: one, command line set name: away",
	"code" : 93,
	"codeName" : "InvalidReplicaSetConfig",
	"$clusterTime" : {
		"clusterTime" : Timestamp(0, 0),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
}

4).查看状态

> rs.status()

显示:

{
	"set" : "away",
	"date" : ISODate("2020-12-22T02:07:27.058Z"),
	"myState" : 2,
	"term" : NumberLong(0),
	"syncSourceHost" : "",
	"syncSourceId" : -1,
	"heartbeatIntervalMillis" : NumberLong(2000),
	"majorityVoteCount" : 2,
	"writeMajorityCount" : 2,
	"votingMembersCount" : 3,
	"writableVotingMembersCount" : 2,
	"optimes" : {
		"lastCommittedOpTime" : {
			"ts" : Timestamp(0, 0),
			"t" : NumberLong(-1)
		},
		"lastCommittedWallTime" : ISODate("1970-01-01T00:00:00Z"),
		"appliedOpTime" : {
			"ts" : Timestamp(1608602837, 1),
			"t" : NumberLong(-1)
		},
		"durableOpTime" : {
			"ts" : Timestamp(1608602837, 1),
			"t" : NumberLong(-1)
		},
		"lastAppliedWallTime" : ISODate("2020-12-22T02:07:17.467Z"),
		"lastDurableWallTime" : ISODate("2020-12-22T02:07:17.467Z")
	},
	"lastStableRecoveryTimestamp" : Timestamp(0, 0),
	"members" : [
		{
			"_id" : 0,
			"name" : "localhost:27018",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 1667,
			"optime" : {
				"ts" : Timestamp(1608602837, 1),
				"t" : NumberLong(-1)
			},
			"optimeDate" : ISODate("2020-12-22T02:07:17Z"),
			"syncSourceHost" : "",
			"syncSourceId" : -1,
			"infoMessage" : "Could not find member to sync from",
			"configVersion" : 1,
			"configTerm" : 0,
			"self" : true,
			"lastHeartbeatMessage" : ""
		},
		{
			"_id" : 1,
			"name" : "localhost:27019",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 9,
			"optime" : {
				"ts" : Timestamp(1608602837, 1),
				"t" : NumberLong(-1)
			},
			"optimeDurable" : {
				"ts" : Timestamp(1608602837, 1),
				"t" : NumberLong(-1)
			},
			"optimeDate" : ISODate("2020-12-22T02:07:17Z"),
			"optimeDurableDate" : ISODate("2020-12-22T02:07:17Z"),
			"lastHeartbeat" : ISODate("2020-12-22T02:07:26.714Z"),
			"lastHeartbeatRecv" : ISODate("2020-12-22T02:07:26.768Z"),
			"pingMs" : NumberLong(0),
			"lastHeartbeatMessage" : "",
			"syncSourceHost" : "",
			"syncSourceId" : -1,
			"infoMessage" : "",
			"configVersion" : 1,
			"configTerm" : 0
		},
		{
			"_id" : 2,
			"name" : "localhost:27020",
			"health" : 1,
			"state" : 7,
			"stateStr" : "ARBITER",
			"uptime" : 9,
			"lastHeartbeat" : ISODate("2020-12-22T02:07:26.713Z"),
			"lastHeartbeatRecv" : ISODate("2020-12-22T02:07:25.991Z"),
			"pingMs" : NumberLong(0),
			"lastHeartbeatMessage" : "",
			"syncSourceHost" : "",
			"syncSourceId" : -1,
			"infoMessage" : "",
			"configVersion" : 1,
			"configTerm" : 0
		}
	],
	"ok" : 1,
	"$clusterTime" : {
		"clusterTime" : Timestamp(1608602837, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	},
	"operationTime" : Timestamp(1608602837, 1)
}

配置完成!

到此这篇关于mongodb搭建Replica Set的方法的文章就介绍到这了,更多相关mongodb搭建Replica Set内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • mongodb replica set 添加删除节点的2种方法

    一,利用rs.reconfig,来添加,删除节点 1,添加节点 repmore:PRIMARY> config = {_id:"repmore",members:[{_id:0,host:'127.0.0.1:27017',priority :2},{_id:1,host:'127.0.0.1:27018',priority:1}]}; //添加节点 repmore:PRIMARY> rs.reconfig(config); //使配置生效 repmore:PRIMARY&

  • MongoDB添加仲裁节点报错:replica set IDs do not match的解决方法

    背景: 由于历史原因,某个MongoDB副本集只有一主一从双节点,无法满足自动故障转移要求,需要配置一个仲裁节点. 原有节点192.168.10.20:27017,192.168.10.21:27017,现在准备在20上配置一个新节点27018当做仲裁 在当前主节点上执行 repset:PRIMARY> cfg={_id:"repset", members:[{_id:0, host:'192.168.10.20:27017', priority:1},{_id:2, host:

  • mongodb replica set 配置高性能多服务器详解

    mongodb的多服务器配置,以前写过一篇文章,是master-slave模式的,请参考:详解mongodb 主从配置.master-slave模式,不能自动实现故障转移和恢复.所以推荐大家使用mongodb的replica set,来实现多服务器的高可用.给我的感觉是replica set好像自带了heartbeat功能,挺强大的. 一,三台服务器,1主,2从 服务器1:127.0.0.1:27017 服务器2:127.0.0.1:27018 服务器3:127.0.0.1:27019 1,创建

  • 详解mongodb搭建Replica Set的方法

    1.创建数据文件夹: mkdir -p /data/master mkdir -p /data/slaver mkdir -p /data/arbiter 效果: data 文件夹包含 arbiter   master  slaver 三个文件夹 2.创建日志存放文件 vi /log/master.log vi /log/slaver.log vi /log/arbiter.log 效果: log文件夹包含 master.log  slaver.log  arbiter.log 三个文件(注意,

  • 图文详解Ubuntu搭建Ftp服务器的方法(包成功)

    一.今天下午由于课程的要求不得已做了Ubuntu搭建Ftp服务器的实验,但是实验指导书还是N年前的技术,网上搜了一大把,都是模模糊糊的! 在百般困难中终于试验成功,特把经验分给大家 希望大家少走弯路! 二.详细步骤如下: (1)首先打开终端进入root模式下(在终端中输入:sudo su 回车 提示输入密码  输入密码即可): (2)安装vsftpd软件(首先要联网,或者通过新立德软件安装!卸载软件命令:sudo apt-get remove vsftpd) <span style="fo

  • 详解mongoDB主从复制搭建详细过程

    详解mongoDB主从复制搭建详细过程 实验目的搭建mongoDB主从复制 主 192.168.0.4 从 192.168.0.7 mongodb的安装 1: 下载mongodb www.mongodb.org 下载最新的stable版 查看自己服务器 适合哪个种方式下载(wget 不可以的 可以用下面方式下载) wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.0.5.tgz curl -O -L https

  • 详解Spring与Mybatis的整合方法(基于Eclipse的搭建)

    项目工程总览: 项目路径建的包不是唯一,只要之后配置的路径映射正确即可 Emp.java <properties> <spring.version>5.1.5.RELEASE</spring.version> <mybatis.version>3.4.6</mybatis.version> <log4j.version>1.2.17</log4j.version> </properties> <depen

  • 详解MongoDB范围片键和哈希片键

    01 片键 MongoDB的片键决定了集合中存储的数据在集合中的分布情况,具体的方法是使用片键值的范围来对集合中的数据进行分区.举个例子: 假如我们以年龄age来作为片键,那么age的范围理论上是0~80,此时,MongoDB会为我们定义age的四个范围区间,他们分别是:0~20,20~40,40~60,60~80,每个范围都是一个chunk,这样我们写入数据之后,数据里面的数据块就有: chunk1:  age  0~20 chunk2:  age  20~40 chunk3:age  40~

  • 详解MongoDB的角色管理

    NO.1 MongoDB内建角色 内建角色的种类和特点? 想要了解内建角色,还是少不了下面这张图,在MongoDB中,用户的权限是通过角色绑定的方法来分配的.把某个角色绑定在某个用户上,那么这个用户就有这个角色对应的权限了. MongoDB 4.0中的内建角色类型如下: 这里对上面的内建角色所拥有的权限做以说明: 数据库用户角色: read:用于读取所有非系统集合,以及下面三个系统集合: system.indexes.system.js以及system.namesp readWrite:拥有re

  • 详解MongoDB中的日志模块

    今天简单研究了一下MongoDB里面的日志模块,写篇文章记录下. 01 MongoDB日志组件种类及日志等级 每种数据库都有自己的日志模块,MongoDB也不例外,通常情况下,一个数据库的日志中,记录的是数据库的连接信息.存储信息.网络信息.索引信息以及查询信息等.从MongoDB3.0版本开始,MongoDB在日志中引入了日志等级和日志组件的概念,作为DBA来讲,关注的最多的应该是慢查询日志和连接日志. 在MongoDB中,我们可以通过下面的命令,来获取所有的日志组件种类和对应的日志等级: d

  • 详解Vue开发网站seo优化方法

    因为用了vue等js的数据绑定机制来展示页面数据,爬虫获取到的html是模型页面而不是最终数据的渲染页面,搜索引擎是不回去执行请求到的js.vue的项目都是ajax请求数据,引擎爬虫进入页面获取不到文字内容,现在大多数解决方案是不采用ajax渲染数据,而是采用server端渲染,也就是所谓的SSR. 目前基于vue的方案是Nuxt.js,同类型的也有React版的Nuxt.js所以服务端渲染就是尽量在服务器发送到浏览器前,页面上是有数据可让爬虫进行爬取 方法一.利用prerender-spa-p

  • 详解MongoDB的条件查询和排序

    目录 find 方法 条件组合 比较操作符 IN 查询 限制返回结果条数和跳过数据 排序 总结 find 方法 查询的基本格式是db.collection.find({条件}),其中条件是可选的,类似于 MySQL 的 WHERE 条件一样.示例如下: // 查找全部文档 db.collection.find({}); // 查找指定条件的文档 db.collection.find({key: value}); // 查找昵称为岛上码农的用户 db.users.find({nickname: '

  • 详解java.lang.reflect.Modifier.isInterface()方法

    详解java.lang.reflect.Modifier.isInterface()方法 java.lang.reflect.Modifier.isInterface(int mod)方法判断如果给定mod参数包含final修饰符,则返回true,否则返回false. 声明 以下是java.lang.reflect.Modifier.isInterface()方法的声明. public static boolean isInterface(int mod) 参数 mod - 一组修饰符. 返回值

随机推荐