广告
返回顶部
首页 > 资讯 > 数据库 >mongodb 副本集
  • 342
分享到

mongodb 副本集

2024-04-02 19:04:59 342人浏览 安东尼
摘要

系统:Centos6.5IP:10.19.21.244 主节点 10.19.21.245 备节点 10.19.21.248 仲裁点不只是主节点、副本节点、仲裁节点,还有Secondary-Only、Hidd

系统:Centos6.5


IP:10.19.21.244 主节点

10.19.21.245 备节点

10.19.21.248 仲裁点


不只是主节点、副本节点、仲裁节点,还有Secondary-Only、Hidden、Delayed、Non-Voting。

Secondary-Only:不能成为primary节点,只能作为secondary副本节点,防止一些性能不高的节点成为主节点。

Hidden:这类节点是不能够被客户端制定IP引用,也不能被设置为主节点,但是可以投票,一般用于备份数据。

Delayed:可以指定一个时间延迟从primary节点同步数据。主要用于备份数据,如果实时同步,误删除数据马上同步到从节点,恢复又恢复不了。

Non-Voting:没有选举权的secondary节点,纯粹的备份数据节点。



三台主机安装mongoDB

下载monGodb
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.9.tgz
解压到目录
tar xf mongodb-linux-x86_64-2.6.9.tgz -C /usr/local/src
更改名
mv mongodb-linux-x86_64-2.6.9 /usr/local/mongodb

cd /usr/local/mongodb/
创建数据目录和日志目录
mkdir -p data log
创建用户
useradd mongodb -s /sbin/nologin
更改目录属主属组
chown mongod:mongodb /usr/local/mongodb -R
更改环境变量
vim ~/.bash_profile

PATH=$PATH:/usr/local/mongodb/bin

source ~/.bash_profile
配置文件
vim /etc/mongodb.conf
port = 27017
fork = true
logpath = /usr/local/mongodb/log/mongodb.log
dbpath =/usr/local/mongodb/data/
journal = true
#以目录的形式存数据,如果已经存在,修改此配置会导致原始数据消失(注释次参数会回来),除非迁移现有数据文件到directoryperdb所产生的数据目录中。
directoryperdb=true
#日志增加形式写入
logappend=true
#配置副本集,指定副本名称作为参数,所有主机都必须有相同名称作为同一个副本集
replSet=testrs
#使用预分配方式来保证写入性能的稳定,预分配在后台进行,并且每个预分配的文件都用0进行填充。这会让MongoDB始终保持额外的空间和空余的数据文件,从而避免了数据增长过快而带来的分配磁盘空间引起的阻塞。设置noprealloc= true来禁用预分配的数据文件,会缩短启动时间,但在正常操作过程中,可能会导致性能显著下降。
noprealloc=true
启动服务
mongod -f /etc/mongodb.conf
首先连接主节点
mongo
> use admin
> conf = {_id:"testrs",members:[{_id:0,host:"10.19.21.244:27017",priority:2},{_id:1,host:"10.19.21.245:27017",priority:1},{_id:2,host:"10.19.21.248:27017",arbiterOnly:true}]};

{
	"_id" : "testrs",
	"version" : 1,
	"members" : [
		{
			"_id" : 0,
			"host" : "10.19.21.244:27017",
			"priority" : 2
		},
		{
			"_id" : 1,
			"host" : "10.19.21.245:27017"
		},
		{
			"_id" : 2,
			"host" : "10.19.21.248:27017",
			"arbiterOnly" : true
		}
	]
}
注意最初的_id的值就是我们配置文件中设定的replSet的值,arbiterOnly是大写的O,配置完成后进行初始化:
> rs.initiate(conf)
{
	"info" : "Config now saved locally.  Should come online in about a minute.",
	"ok" : 1
}
此步骤必须备节点和仲裁节点的mongo启动,不然无法执行此步骤。
> rs.status()
{
	"set" : "testrs",
	"date" : ISODate("2015-05-07T11:55:17Z"),
	"myState" : 1,
	"members" : [
		{
			"_id" : 0,
			"name" : "10.19.21.244:27017",
			"health" : 1,
			"state" : 1,
			"stateStr" : "PRIMARY",
			"uptime" : 5737,
			"optime" : Timestamp(1430995665, 1),
			"optimeDate" : ISODate("2015-05-07T10:47:45Z"),
			"electionTime" : Timestamp(1430993992, 1),
			"electionDate" : ISODate("2015-05-07T10:19:52Z"),
			"self" : true
		},
		{
			"_id" : 1,
			"name" : "10.19.21.245:27017",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 3077,
			"optime" : Timestamp(1430995665, 1),
			"optimeDate" : ISODate("2015-05-07T10:47:45Z"),
			"lastHeartbeat" : ISODate("2015-05-07T11:55:17Z"),
			"lastHeartbeatRecv" : ISODate("2015-05-07T11:55:17Z"),
			"pingMs" : 0,
			"syncingTo" : "10.19.21.244:27017"
		},
		{
			"_id" : 2,
			"name" : "10.19.21.248:27017",
			"health" : 1,
			"state" : 7,
			"stateStr" : "ARBITER",
			"uptime" : 5735,
			"lastHeartbeat" : ISODate("2015-05-07T11:55:17Z"),
			"lastHeartbeatRecv" : ISODate("2015-05-07T11:55:17Z"),
			"pingMs" : 0
		}
	],
	"ok" : 1
}
> use test
插入数据
> db.testdb.insert({"tset1":"i'm master"})
然后到备份节点查看数据是否有
mongo 10.19.21.245
testrs:SECONDARY> use test
switched to db test
testrs:SECONDARY> show tables;
2015-05-07T19:57:29.670+0800 error: { "$err" : "not master and slaveOk=false", "code" : 13435 } at src/mongo/shell/query.js:131
需要进行配置
testrs:SECONDARY> db.setSlaveOk()
testrs:SECONDARY> show tables;
system.indexes
testdb
testrs:SECONDARY> db.testdb.find()
{ "_id" : ObjectId("554a4ee4eb804a0f1b6ec347"), "test1" : "i'm master" }
停止主节点,查看整个集群状态
testrs:PRIMARY> rs.status()
{
	"set" : "testrs",
	"date" : ISODate("2015-05-07T11:59:42Z"),
	"myState" : 1,
	"members" : [
		{
			"_id" : 0,
			"name" : "10.19.21.244:27017",
			"health" : 0,
			"state" : 8,
			"stateStr" : "(not reachable/healthy)",
			"uptime" : 0,
			"optime" : Timestamp(1430995665, 1),
			"optimeDate" : ISODate("2015-05-07T10:47:45Z"),
			"lastHeartbeat" : ISODate("2015-05-07T11:59:40Z"),
			"lastHeartbeatRecv" : ISODate("2015-05-07T11:59:32Z"),
			"pingMs" : 0
		},
		{
			"_id" : 1,
			"name" : "10.19.21.245:27017",
			"health" : 1,
			"state" : 1,
			"stateStr" : "PRIMARY",
			"uptime" : 3342,
			"optime" : Timestamp(1430995665, 1),
			"optimeDate" : ISODate("2015-05-07T10:47:45Z"),
			"electionTime" : Timestamp(1430999976, 1),
			"electionDate" : ISODate("2015-05-07T11:59:36Z"),
			"self" : true
		},
		{
			"_id" : 2,
			"name" : "10.19.21.248:27017",
			"health" : 1,
			"state" : 7,
			"stateStr" : "ARBITER",
			"uptime" : 3340,
			"lastHeartbeat" : ISODate("2015-05-07T11:59:42Z"),
			"lastHeartbeatRecv" : ISODate("2015-05-07T11:59:41Z"),
			"pingMs" : 0
		}
	],
	"ok" : 1
}
主节点已切换过来,此时备节点已经变成了主节点。再插入一条数据
testrs:PRIMARY> db.testdb.insert({"test2":"i'm new master"})
testrs:PRIMARY> db.testdb.find();
{ "_id" : ObjectId("554a4ee4eb804a0f1b6ec347"), "test1" : "i'm master" }
{ "_id" : ObjectId("554a505d494f70c600422b41"), "test2" : "i'm new master" }
重启原来的主节点查看状态
testrs:SECONDARY> rs.status()
{
	"set" : "testrs",
	"date" : ISODate("2015-05-07T14:00:33Z"),
	"myState" : 1,
	"members" : [
		{
			"_id" : 0,
			"name" : "10.19.21.244:27017",
			"health" : 1,
			"state" : 1,
			"stateStr" : "PRIMARY",
			"uptime" : 15,
			"optime" : Timestamp(1430995665, 1),
			"optimeDate" : ISODate("2015-05-07T10:47:45Z"),
			"electionTime" : Timestamp(1431007222, 1),
			"electionDate" : ISODate("2015-05-07T14:00:22Z"),
			"self" : true
		},
		{
			"_id" : 1,
			"name" : "10.19.21.245:27017",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 13,
			"optime" : Timestamp(1430995665, 1),
			"optimeDate" : ISODate("2015-05-07T10:47:45Z"),
			"lastHeartbeat" : ISODate("2015-05-07T14:00:32Z"),
			"lastHeartbeatRecv" : ISODate("2015-05-07T14:00:33Z"),
			"pingMs" : 0,
			"lastHeartbeatMessage" : "syncing to: 10.19.21.244:27017",
			"syncingTo" : "10.19.21.244:27017"
		},
		{
			"_id" : 2,
			"name" : "10.19.21.248:27017",
			"health" : 1,
			"state" : 7,
			"stateStr" : "ARBITER",
			"uptime" : 13,
			"lastHeartbeat" : ISODate("2015-05-07T14:00:32Z"),
			"lastHeartbeatRecv" : ISODate("2015-05-07T14:00:33Z"),
			"pingMs" : 0
		}
	],
	"ok" : 1
}
查看数据是否同步过来
testrs:PRIMARY> use test
switched to db test
testrs:PRIMARY> db.testdb.find()
{ "_id" : ObjectId("554a4ee4eb804a0f1b6ec347"), "test1" : "i'm master" }
{ "_id" : ObjectId("554a505d494f70c600422b41"), "test2" : "i'm new master" }
向集群中增加节点
cfg = rs.conf()
cfg.members[3] = {_id:3,host:"10.19.21.246:27017",priority:0.5}
rs.reconfig(cfg)

如果备份节点无法读取数据,需要设置db.setSlaveOK()。如果备份节点可读但不可写,修改优先级
cfg = rs.conf()
cfg.members[0].priority = 0.5
cfg.members[1].priority = 2
cfg.members[2].priority = 2
rs.reconfig(cfg)
需要 reconfig后配置才能生效。
PHP与mongodb连接
<?php
$options = array(
        'replicaSet' => 'testrs',
        'readPreference' => 'secondaryPreferred',
);
$m = new MongoClient("mongodb://10.19.21.244:27017,10.19.21.245:27017/", $options);
foreach ( $m->getConnections() as $c )
{
    echo $c['hash'], ":\n",
    " - {$c['connection']['connection_type_desc']}, ",
    "{$c['connection']['ping_ms']} ms\n";
}
?>

primary:默认参数,只从主节点上进行读取操作;

primaryPreferred:大部分从主节点上读取数据,只有主节点不可用时从secondary节点读取数据。

secondary:只从secondary节点上进行读取操作,存在的问题是secondary节点的数据会比primary节点数据“旧”。

secondaryPreferred:优先从secondary节点进行读取操作,secondary节点不可用时从主节点读取数据;

nearest:不管是主节点、secondary节点,从网络延迟最低的节点上读取数据。


您可能感兴趣的文档:

--结束END--

本文标题: mongodb 副本集

本文链接: https://www.lsjlt.com/news/40740.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mongodb 副本集
    系统:centos6.5IP:10.19.21.244 主节点 10.19.21.245 备节点 10.19.21.248 仲裁点不只是主节点、副本节点、仲裁节点,还有Secondary-Only、Hidd...
    99+
    2022-10-18
  • mongodb副本集
           其实mongodb也可以做主从机制,mongodb一主一从类似mysql,但是slave在架构中为只读,并且主机宕机后从不...
    99+
    2022-10-18
  • mongodb集群-副本集(CSRS)
    一、概述(1)MongoDB复制是将数据同步在多个服务器的过程。(2)复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。(3)复制还允许您从硬件故障和服务...
    99+
    2022-10-18
  • MongoDB Replica Set 副本集
    1、简介MongoDB复制是将数据同步在多个服务器的过程,类似MySQL Replication是一种异步复制;复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的...
    99+
    2022-10-18
  • mongodb 副本集搭建
    mongodb的副本集模式较早前的master-slave模式有了很大的改进,由于之前的master-slave模式不支持主机宕机之后切换到从机,已经逐渐被淘汰。而现在官方推荐的副本集模式,支持多个节点并存...
    99+
    2022-10-18
  • mongodb 副本集创建
    vi install_mongo.shtar -zxvf mongodb-linux-x86_64-rhel62-3.2.9.tgzmv mongodb-linux-x86_64-rhel62-3.2.9 ...
    99+
    2022-10-18
  • mongodb副本集维护
    一、概述mongodb副本集维护主要工作:1、查看副本集状态(集群状态、同步延迟、单个库的运行状态mongostate)2、增删节点、停节点shutdownmongodb副本集集群同步机制数据复制的目的是使...
    99+
    2022-10-18
  • 配置mongodb副本集
    主机信息:[root@my2 db]# cat /etc/hosts127.0.0.1   localhost localhost.localdomain localhost4 loca...
    99+
    2022-10-18
  • 3.4-MongoDB副本集搭建
    * MongoDB 副本集(repl set)介绍早期版本使用master-slave,一主一从和MySQL类似,但slave在此架构中为只读,当主库宕机后,从库不能自动切换为主目前已经淘汰master-s...
    99+
    2022-10-18
  • mongoDB副本集的搭建
    环境简介    192.168.1.151      FedoraServer   用作副本集的主库,已经有数据    192...
    99+
    2022-10-18
  • 3.5-MongoDB副本集测试
    *MongoDB副本集测试主上建库,建集合>use mydb   #建库>db.acc.insert({AccountID:1,UserName:"123",password:"123...
    99+
    2022-10-18
  • MongoDB副本集成员状态
    副本集成员状态副本集的每个成员都有一个状态,反映了它在集合中的配置情况。数字名称状态描述0STARTUP还不是任何集合的活动成员。所有的成员启动在该状态。在STARTUP状态mongod解析副本集配置文档。...
    99+
    2022-10-18
  • Docker搭建MongoDB 4.0副本集
    环境: 系统版本:CentOS 7.5 内核:4.18.7-1.el7.elrepo.x86_64 Docker-ce: 18.06 MongoDB: 4.0.3 宿主机IP:192.168.1.1 M...
    99+
    2022-10-18
  • MongoDB学习笔记:副本集
    本文更新于2022-01-08,使用MongoDB 4.4.5。 目录单台服务器下创建副本集多台服务器下创建副本集重新启动并连接到副本集维护副本集节点 单台服务器下创建副本集 确保/data/db目录存在且当前系统用户有读写权限。例如...
    99+
    2019-12-08
    MongoDB学习笔记:副本集
  • 如何配置 MongoDB 副本集
    MongoDB 已经成为市面上最知名的 NoSQL 数据库。MongoDB是面向文档的,它的无模式设计使得它在各种各样的WEB 应用当中广受欢迎。最让我喜欢的特性之一是它的副本集(Replica Set),...
    99+
    2022-10-18
  • mongodb 副本集的维护(1)
    一、修改副本集中各成员的优先级:shard1:PRIMARY> conf=rs.conf(){"_id" : "shard1","version" : 3,"protocolVersion" : Nu...
    99+
    2022-10-18
  • mongodb如何更换副本集
    要更换MongoDB副本集,需要遵循以下步骤:1. 添加新副本集成员:首先,在新服务器上安装MongoDB,并确保它可以连接到现有的...
    99+
    2023-08-23
    mongodb
  • MongoDB安装与副本集配置
    副本集是一组,由N个mongo节点组成并协同工作的,提供自动的故障集群转移。...
    99+
    2022-10-18
  • MongoDB副本集的示例分析
    小编给大家分享一下MongoDB副本集的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!实验环境使用的Mongodb版本为...
    99+
    2022-10-19
  • MongoDB中怎么管理副本集
    这期内容当中小编将会给大家带来有关MongoDB中怎么管理副本集,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 1)诊断副本集中的机器,可以...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作