详解mongodb搭建Replica Set的方法

(编辑:jimmy 日期: 2024/12/24 浏览:2)

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"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)
}

配置完成!

一句话新闻

一文看懂荣耀MagicBook Pro 16
荣耀猎人回归!七大亮点看懂不只是轻薄本,更是游戏本的MagicBook Pro 16.
人们对于笔记本电脑有一个固有印象:要么轻薄但性能一般,要么性能强劲但笨重臃肿。然而,今年荣耀新推出的MagicBook Pro 16刷新了人们的认知——发布会上,荣耀宣布猎人游戏本正式回归,称其继承了荣耀 HUNTER 基因,并自信地为其打出“轻薄本,更是游戏本”的口号。
众所周知,寻求轻薄本的用户普遍更看重便携性、外观造型、静谧性和打字办公等用机体验,而寻求游戏本的用户则普遍更看重硬件配置、性能释放等硬核指标。把两个看似难以相干的产品融合到一起,我们不禁对它产生了强烈的好奇:作为代表荣耀猎人游戏本的跨界新物种,它究竟做了哪些平衡以兼顾不同人群的各类需求呢?