mongodb3.0集群部署及数据迁移

本文主要介绍mongodb3.0新特性、集群部署及从mongodb2.6中数据迁移到mongodb3.0。

mongodb3.0介绍

一、mongodb3.0新特性

引入了插件式存储引擎API

新增WiredTiger存储引擎

支持文档级别的锁

二、WiredTiger存储引擎特性介绍

文档级别锁

WiredTiger通过MVCC实现文档级别的并发控制,即文档级别锁。这就允许多个客户端请求同时更新一个集合内存的多个文档,再也不需要在排队等待库级别的写锁。这在提升数据库读写性能的同时,大大提高了系统的并发处理能力。

磁盘数据压缩

WiredTiger支持对所有集合和索引进行Block压缩和前缀压缩(如果数据库启用了journal,journal文件一样会压缩),已支持的压缩选项包括:不压缩、Snappy压缩和Zlib压缩。这为广大Mongo使用者们带来了又一福音,因为很多Mongo数据库都是因为MMAP存储引擎消耗了过多的磁盘空间而不得已进行扩容。其中Snappy压缩为数据库的默认压缩方式,用户可以根据业务需求选择适合的压缩方式。理论上来说,Snappy压缩速度快,压缩率OK,而Zlib压缩率高,CPU消耗多且速度稍慢。当然,只要选择使用压缩,Mongo肯定会占用更多的CPU使用率,但是考虑到Mongo本身并不是十分耗CPU,所以启用压缩完全是值得的。

存储方式上的改进

旧版本Mongo在数据库级别分配文件,数据库中的所有集合和索引都混合存储在数据库文件中,所以即使删掉了某个集合或者索引,占用的磁盘空间也很难及时自动回收。WiredTiger在集合和索引级别分配文件,数据库中的所有集合和索引均存储在单独的文件中,集合或者索引删除后,对应的存储文件随即删除。当然,因为存储方式不同,低版本的数据库无法直接升级到WiredTiger存储引擎,只能通过导出导入数据的方式来实现。

安装部署

一、系统环境

平台:Centos6.6_x86_64

实验环境:三台主机部署副本集模式集群

主机:192.168.115.21、192.168.115.22、192.168.115.23

规划:21为master节点,22为副本节点,23为副本节点

二、软件安装

1.软件安装

软件包:mongodb-linux-x86_64-rhel62-3.0.6.tgz

下载地址:wget  https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.0.6.tgz

# tar  xf  mongodb-linux-x86_64-rhel62-3.0.6.tgz
#  mv mongodb-linux-x86_64-rhel62-3.0.6   /usr/local/mongodb3.0.6
# cd /usr/local/mongodb3.0.6
# mkdir {etc,logs}

2.创建配置文件

# vi /usr/local/mongodb3.0.6/etc/mongodb.conf
fork = true
quiet = true
port = 27017
dbpath = /data/mongodb3.0.6
logpath = /usr/local/mongodb3.0.6/logs/server.log
logappend = true
journal = true
rest = true
httpinterface = true
storageEngine = wiredTiger

3.启动服务

# /usr/local/mongodb3.0.6/bin/mongod -f /usr/local/mongodb3.0.6/etc/mongodb.conf

4.连接数据库,插入一条数据

# /usr/local/mongodb3.0.6/bin/mongo 192.168.115.21:27017
> db.test.insert({"a":1})

通过查看数据目录文件,mongodb3.0数据存储方式不在是预分配空间

三、集群配置

1.每个节点修改配置文件添加如下一行

replSet =
hnrtest/192.168.115.21:27017,192.168.115.22:27017,192.168.115.23:27017

2.每个节点启动mongodb服务

3.连接mongodb初始化集群

# /usr/local/mongodb3.0.6/bin/mongo 192.168.115.21:27017
> use admin
>db.runCommand({"replSetInitiate"
: { "_id" : "hnrtest" ,"members" : [ {
"_id" : 1, "host" : "192.168.115.21:27017"},{
"_id" : 2, "host" : "192.168.115.22:27017"},{
"_id" : 3, "host" : "192.168.115.23:27017"}]}})

四、数据迁移

使用mongodump、mongorestore工具的方式:

1.将测试环境2.6.9版本mongodb数据迁移到3.0.6版本

连接主节点192.168.1.227

#
/usr/local/mongodb2.6.9/bin/mongo 192.168.1.227:27017

2.查询当前所有的库

3.备份所有库

#
/usr/local/mongodb2.6.9/bin/mongodump -h 192.168.1.227:27017 -o
/tmp/6.0test_alldb.dmp

4.导入数据

在192.168.115.21上导入数据

#
/usr/local/mongodb3.0.6/bin/mongorestore -h 192.168.115.21:27017
/tmp/6.0test_alldb.dmp

5.验证数据

在192.168.115.21上查看6commodity库

在192.168.1.227上查看6commodity库

使用数据同步方式:

1.在2.6.9集群中加入一台部署3.0.6版本的mongodb节点

2.6.9版本集群信息:

192.168.115.22:37017安装3.0.6版本mongodb,并加入到上述集群中

2.连接主节点,添加一个节点

hnrtest2_9:PRIMARY>
rs.add("192.168.115.22:37017")

连接上192.168.115.22:37017

#
/usr/local/mongodb3.0.6/bin/mongo 192.168.115.22:37017

数据正常同步

数据同步完成后将3.0.6版本的mongodb节点(192.168.115.22:37017)移除2.6.9集群

3.重新构建基于3.0.6版本的mongodb集群

192.168.115.22:37017为主节点

192.168.115.21:37017为从节点

连接上192.168.115.22:37017

> use admin
switched to db admin
>db.runCommand({"replSetInitiate" : { "_id" :
"hnrtest3_0" ,"members" : [ { "_id" : 1,
"host" : "192.168.115.22:37017"},{ "_id" : 2,
"host" : "192.168.115.21:37017"}]}})
{
        "info" : "try querying
local.system.replset to see current configuration",
        "ok" : 0,
        "errmsg" : "already
initialized",
        "code" : 23
}

出现以上错误信息,是由于该节点先前已加入过2.6.9集群中需要先删除相关信息

>db.system.replset.find()
{ "_id" :
"hnrtest2_9", "version" : 3, "members" : [ {
"_id" : 1, "host" : "192.168.115.23:27017",
"arbiterOnly" : false, "buildIndexes" : true,
"hidden" : false, "priority" : 1, "tags" : {  }, "slaveDelay" : 0,
"votes" : 1 }, { "_id" : 2, "host" :
"192.168.115.24:27017", "arbiterOnly" : false,
"buildIndexes" : true, "hidden" : false,
"priority" : 1, "tags" : { 
}, "slaveDelay" : 0, "votes" : 1 } ],
"settings" : { "chainingAllowed" : true,
"heartbeatTimeoutSecs" : 10, "getLastErrorModes" : {  }, "getLastErrorDefaults" : {
"w" : 1, "wtimeout" : 0 } } }
>db.system.replset.remove({ "_id" : "hnrtest2_9",
"version" : 3, "members" : [ { "_id" : 1,
"host" : "192.168.115.23:27017", "arbiterOnly" :
false, "buildIndexes" : true, "hidden" : false,
"priority" : 1, "tags" : { 
}, "slaveDelay" : 0, "votes" : 1 }, {
"_id" : 2, "host" : "192.168.115.24:27017",
"arbiterOnly" : false, "buildIndexes" : true,
"hidden" : false, "priority" : 1, "tags" : {  }, "slaveDelay" : 0,
"votes" : 1 } ], "settings" : { "chainingAllowed"
: true, "heartbeatTimeoutSecs" : 10, "getLastErrorModes" :
{  }, "getLastErrorDefaults" :
{ "w" : 1, "wtimeout" : 0 } } })
WriteResult({
"nRemoved" : 1 })

再重新初始化集群就不会报错,并且集群正常运行

时间: 2024-10-10 00:30:33

mongodb3.0集群部署及数据迁移的相关文章

redis3.0集群部署和测试

redis3.0集群部署和测试 环境介绍 两台Centos7的虚拟机模拟6个节点,A台3个master节点,B台3个slave节点A地址:172.16.81.140B地址:172.16.81.141redis版本:redis-3.2.4 部署前准备 关闭防火墙--->systemctl stop firewalld开机禁用防火墙--->systemctl disable firewalld临时关闭selinux--->setenforce 0永久关闭selinux--->sed -

redis3.0集群部署方案

redis3.0集群部署方案redis1:192.168.1.10:6379       192.168.1.10:6380redis2:192.168.1.11:6379       192.168.1.11:6380redis3:192.168.1.12:6379       192.168.1.12:6380关闭 selinux ,防火墙允许6379 6380端口通过, 先启动各服务器的redis节点在制作集群       redis1配置:yum -y insall gcc ruby r

_00024 妳那伊抹微笑_云计算之ClouderaManager以及CHD5.1.0集群部署安装文档V1.0

博文作者:妳那伊抹微笑 博客地址:http://blog.csdn.net/u012185296 博文标题:_00024 妳那伊抹微笑_云计算之ClouderaManager以及CHD5.1.0集群部署安装文档V1.0 个性签名:世界上最遥远的距离不是天涯,也不是海角,而是我站在妳的面前,妳却感觉不到我的存在 技术方向:Flume+Kafka+Storm+Redis/Hbase+Hadoop+Hive+Mahout+Spark ... 云计算技术 转载声明:可以转载, 但必须以超链接形式标明文章

Elasticsearch 7.5.0集群部署

一.背景介绍ELK 不是一款软件,而是 Elasticsearch.Logstash 和 Kibana 三种软件产品的首字母缩写.这三者都是开源软件,通常配合使用,而且又先后归于 Elastic.co 公司名下,所以被简称为 ELK Stack.根据 Google Trend 的信息显示,ELK Stack 已经成为目前最流行的集中式日志解决方案. Elasticsearch:分布式搜索和分析引擎,具有高可伸缩.高可靠和易管理等特点.基于 Apache Lucene 构建,能对大容量的数据进行接

kafka集群扩容以及数据迁移

一 kafka集群扩容比较简单,机器配置一样的前提下只需要把配置文件里的brokerid改一个新的启动起来就可以.比较需要注意的是如果公司内网dns更改的不是很及时的话,需要给原有的旧机器加上新服务器的host,不然可能会产生controller服务器从zk上拿到域名但是解析不到新机器地址的情况. 二 集群扩容后数据是不会自动均衡到新机器上的,需要采用kafka-reassign-partitions.sh这个工具脚本.脚本可以工作在三种模式--generate,--execute,--veri

elasticsearch5.0集群部署及故障测试

本文主要介绍两节点集群部署,节点故障测试,模拟验证集群脑裂现象. 一.实验环境 节点1:192.168.115.11 节点1:192.168.115.12 版本:5.0.1 二.安装配置 具体部署过程见单机版:http://hnr520.blog.51cto.com/4484939/1867033 1.修改配置文件 cat elasticsearch.yml cluster.name: hnrtest node.name: hnr01 path.data: /data/elasticsearch

GreenPlum 5.10.0 集群部署

第1部分 初始化系统配置 1.1 部署环境 序号 ip地址 主机名 内存 系统版本 内核版本 1 192.168.61.61 gpmaster61 16Gb CentOS 7.5.1804 3.10.0-862.9.1.el7.x86_64 2 192.168.61.62 gpsegment62 16Gb CentOS 7.5.1804 3.10.0-862.9.1.el7.x86_64 3 192.168.61.63 gpsegment63 16Gb CentOS 7.5.1804 3.10.

Redis3.0集群crc16算法php客户端实现方法(php取得redis3.0集群中redis数据所在的redis分区插槽,并根据分区插槽取得分区所在redis服务器地址)

数据分区        Redis集群将数据分区后存储在多个节点上,即不同的分区存储在不同的节点上,每个节点可以存储多个分区.每个分区在Redis中也被称为"hash slot",Redis集群中总共规划了16384个分区. 例如:当集群中有3个节点时,节点A将包含0-5460分区,节点B将包含5461-10922分区,节点C将包含10923-16383分区. 每个key将会存储到一个唯一的分区中,每个分区其实就是一组key的集合,两者对应关系为:key的CRC16校验码%16384=

Redis3.0集群部署(centos系统)

(要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下) 192.168.1.160:7000192.168.1.160:7001 192.168.1.160:7002 192.168.1.160:7003 192.168.1.160:7004 192.168.1.160:7005 1:下载redis.官网下载3.0.0版本,之前2.几的版本不支持集群模式 下载地址:http://download.r