`
hevanwang
  • 浏览: 112200 次
社区版块
存档分类
最新评论

Nosql Mongodb 集群配置(一)

阅读更多

 

 

 

 

 

Mongo 安装配置集群

 

 

 

 

                                               上篇(复制集群) 下篇(切片集群)

 

 

 

 

 

 

 

 

 

2013.11

 

 

 

 

 

 

 

目录

 

1     MongoStandalone Server)升级... 4

1.1  Mongo升级到相同主版本2.2.6. 4

1.2  Mongo升级到2.4 版本(建议)... 4

2     集群方式选择... 6

2.1  Replica Set复制模式(首先模式)... 6

2.2  Sharding切片分布式模式(未来可扩展)... 8

2.3  Master-Slave模式(简单的复制模式)... 8

3     Mongo 安装(linux 64... 10

3.1  下载mongo linux x86_64. 10

3.2  解压mongodb安装包... 10

3.3  复制解压的文件到指定目录... 10

3.4  创建快捷链接... 10

3.5  启动默认的一个Mongo 实例... 10

4     手动配置Mongodb Linux Service. 12

4.1  安装Mongo 后创建Mongo快捷链接... 12

4.2  创建数据存储或者日志的路径... 12

4.3  创建mongod 的实例的配置文件... 12

4.4  创建启动和停止脚本并是可执行文件... 13

4.5  创建Linux服务mongodb Service. 14

4.6  启动并测试服务... 15

5     Mongo Replica Set Cluster 本地测试安装... 16

5.1  创建Replica Set Cluster 的本地数据存储路径... 16

5.2  本地创建mongod  3个实例... 16

5.3  连接到Mongo 实例,使用Mongo Shell 界面... 16

5.4  初始化第一个Replica Set Cluster17

5.5  New Collection 测试... 17

6     Mongo Replica Set Cluster Product安装... 19

6.1  安装Mongodb. 19

6.2  修改mongodb 的配置文件绑定IP.. 19

6.3  修改Linux 防火墙,开启27017的端口... 19

6.4  配置Replica Set  Primary主服务器... 20

6.5  造数据测试... 21

6.6  查看节点数据,检查是否配置成功... 21

6.6.1       默认Primary才具有读和写的权限,... 21

6.6.2       修改Secondary 支持可读(生产上可以不设置)... 21

6.7  增加节点... 22

6.8  关闭主节点测试自动切主节点... 22

6.9  强制某个节点为主节点... 22

 

 

 

1     MongoStandalone Server)升级

目前Mongo数据库版本为2.2.2,并且为独立服务器(Standalone Server)。

1.1         Mongo升级到相同主版本2.2.6

Mongo2.2.62.2.x最新版本,修复了2.2.2一些问题。

建议升级到2.2.6,本升级是同版本的内部的一些优化和Bug的修改,不会影响现有的数据和或配置。

升级安全。

1.     下载最新的Mongo 2.2.6,解压。

2.     关闭Mongod进程,替换新的Mongo2.2.6 Binary文件到Mongo2.2.2安装目录。

3.     重新启动Mongod,测试检查。

 

1.2         Mongo升级到2.4 版本(建议)

Mongo2.4.8是当前最新版本,在性能上和管理上都相对修复和改进很多。

建议升级到2.4.8,对于独立的数据库Standalone Server,不会影响现有的数据和或配置。只需更新MongoBinary文件。

升级安全。

1.     下载最新的Mongo 2.4.8,解压。

2.     关闭Mongod进程,替换新的Mongo2.4.8 Binary文件到Mongo2.2.2安装目录。

3.     重新启动Mongod,测试检查。

 

升级的优点:

1.     目前独立的Mongo服务器(Standalone Server),升级很方便,数据不需要迁移。

2.     最新的版本对于性能、管理、安全上面都有改进。

3.     未来需要扩展成Standalone Server Mongo Replica Set Cluster

4.     如果现在不升级,在2.2 版本扩展成Replica Set Cluster 那么后续的升级更复杂。

 

 

2     集群方式选择

Mongodb一共有三种集群搭建的方式Replica Set(复制模式、单点失效自动切换)Sharding(切片,分布式)和Master-Slaver(主从,主失效,需要手工切换)。

 

2.1         Replica Set复制模式(首先模式)

说明: Diagram of default routing of reads and writes to the primary.

 

复制模式操作图:

存在2个副节点

 

Diagram of a 3 member replica set that consists of a primary and two secondaries.

只有主的节点才可写入,主节点和副节点都满足Client可以读,一旦Primary 失效了,Client可以从复制节点读取数据。

一旦主节点失效,就会自动选择一个Secondary作为主节点,

Diagram of an election of a new primary. In a three member replica set with two secondaries, the primary becomes unreachable. The loss of a primary triggers an election where one of the secondaries becomes the new primary

  • replica set可以实现自动的failover和自动的recovery
  • replica set由两个或者更多的节点组成,实现彼此的复制。
  • replica set自动选择primary节点,没有一个节点是固定的primary
  • mongos会自动发现一个replica setprimary节点发生变化,并将写操作发送给这个新的primary节点。

通常用于下面几个场景

  • 数据冗余。
  • 自动failover,提供高可用性的服务。
  • 分散读的负载。
  • 简化维护(相对于master-slave来说)。
  • 灾难恢复。

 

Replica Set模式

   优点:

a)     解决单点失效的问题。

b)     满足数据存在多个复制,保证数据的可靠性。

c)     方便运维。

d)     满足未来的扩展更灵活的集群模式。

 

2.2         Sharding切片分布式模式(未来可扩展)

说明: Diagram of a sample sharded cluster for production purposes.  Contains exactly 3 config servers, 2 or more :program:`mongos` query routers, and at least 2 shards. The shards are replica sets.

 

   目前我们的Standalone Server 模式,这种存在一定的风险,如果文件损坏或者单点失效,会造成数据的丢失,或者恢复Standalone Server比较的麻烦。

   需要选择一种集群方式,考虑到数据的增长性,可以考虑目前采用复制模式,保证单点失效,和数据的多份备份。未来可以切换到Sharding模式。

 

 

 

2.3         Master-Slave模式(简单的复制模式)

mongod --master --dbpath /data/masterdb/
mongod --slave --source <masterhostname><:<port>> --dbpath /data/slavedb/
 
 

   一旦主节点失效或者不可用了,

a)     停止主服务器的进程

b)     停止Slave 的进程mongod on Slave

c)     复制Slave 所有的local下的数据文件覆盖到 dbpath目录

d)     启动Slave mongod 进程以—master 的方式启动。

 

主从切换也较复杂,暂不描述,这种方案很容易犯错,而且不方便运维。

 

 

3     Mongo 安装(linux 64

3.1         下载mongo linux x86_64

直接通过浏览器下载

shell 命令下载

curl http://downloads.mongodb.org/linux/mongodb-linux-x86_64-2.4.8.tgz > mongodb-linux-x86_64-2.4.8.tgz
 
 

3.2         解压mongodb安装包

tar -zxvf mongodb-linux-x86_64-2.4.8.tgz

 

3.3         复制解压的文件到指定目录

mkdir -p /usr/mongodb

cp -R -n mongodb-linux-x86_64-2.4.8/  /usr/mongodb

 

3.4         创建快捷链接

ln -s /usr/mongodb/bin/mongod   /usr/bin/mongod

or:

ln -s /usr/mongodb/bin/mongod   /usr/local/bin/mongod

 

这样就可以在任何地方 启用mongod

 

3.5         启动默认的一个Mongo 实例

先创建mongo数据存放的路径或存储设备

例如:

sudo mkdir  /data/mongodb/data

 

并指定当前的用户拥有读的权限:

 

chown mongodbUser /data/mongodb/data
 
 
mongod -dbpath /data/mongodb/data
 
注:详细的mongod 的启动参数,请参看官方文档
也可以配置一个conf文件, 
Mongod -f  *.conf 来启动
 

 

 

4     手动配置Mongodb Linux Service

4.1         安装Mongo 后创建Mongo快捷链接

ln -s /usr/mongodb/bin/mongod   /usr/bin/mongod

or:

ln -s /usr/mongodb/bin/mongod   /usr/local/bin/mongod

 

这样就可以在任何地方 启用mongod

 

4.2         创建数据存储或者日志的路径

mkdir -p /data/mongodb/data

mkdir -p /data/mongodb/log

 

注:指定用户具有读写权限

chmod  752 /data/mongodb

chown mongodbUser -R  /data/mongodb

 

 

4.3         创建mongod 的实例的配置文件

例如mongodb 的安装目录:/usr/mongodb

创建etc的配置路径

mkdir -p /usr/mongodb/etc

vim /usr/mongodb/etc/mongodb.conf

 

dbpath = /data/mongodb/data

logpath = /data/mongodb/log/mongodb.log

replSet = rs0

port = 27017

fork = true

rest = true

 

如果是复制集群模式增加:

replSet = rs0

 

也可以用命令产生:

Mongod -config /usr/mongodb/etc/mongdb.conf 再修改这个文件

 

4.4         创建启动和停止脚本并是可执行文件

创建mongodb 启动和停止脚本的目录:

Mkdir -p /usr/mongodb/sbin

 

创建启动脚本:

vim  /usr/mongodb/sbin/mongodb_start

#!/bin/sh

mongod -f /usr/mongodb/etc/mongodb.conf

 

创建停止脚本:

vim  /usr/mongodb/sbin/mongodb_stop

#!/bin/bash

pid=`ps -o pid,command ax | grep mongod | awk '!/awk/ && !/grep/ {print $1}'`;

if [ "${pid}" != "" ]; then

      kill -2 ${pid};

fi

 

添加执行权限:

chmod a+x /usr/mongodb/sbin/mongodb_start

chmod a+x /usr/ mongodb /sbin/mongodb_stop

4.5         创建Linux服务mongodb Service

创建服务可执行文件

vim /etc/rc.d/init.d/mongodb

 

#! /bin/sh

#

# mongodb - this script starts and stops the mongodb daemon

#

# chkconfig: - 85 15

# description: MongoDB is a non-relational database storage system.

# processname: mongodb

# config: /usr/mongodb/etc/mongodb.conf

PATH=/usr/mongodb/bin:/usr/mongodb/sbin:/bin:/usr/sbin:/usr/bin

NAME=mongodb

test -x $DAEMON || exit 0

set -e

case "$1" in

  start)

        echo -n "Starting MongoDB... "

        /usr/mongodb/sbin/mongodb_start

        ;;

  stop)

        echo -n "Stopping MongoDB... "

        /usr/ mongodb/sbin/mongodb_stop

        ;;

      *)

            N=/etc/init.d/$NAME

            echo "Usage: $N {start|stop}" >&2

            exit 1

            ;;

    esac

    exit 0

 

添加服务

chmod a+x /etc/rc.d/init.d/mongodb

chkconfig --add mongodb

chkconfig --level 345 mongodb on

需要配置Linux mongodb 的用户来启动该服务。

 

4.6         启动并测试服务

$ service mongodb start

$ service mongodb stop

 

手工配置成功,祝你好运

5     Mongo Replica Set Cluster 本地测试安装

Windows Linux差不多

5.1         创建Replica Set Cluster 的本地数据存储路径

/data/db/rep0-0

/data/db/rep0-1

/data/db/rep0-2

创建日志文件目录:

/data/dblog/log0

/data/dblog/log1

/data/ dblog/log2

 

 

注:Linux Or CentOs 保证当前Mongo 用户的权限:

chown -R curUser:curPasswd /data/db

 

5.2         本地创建mongod  3个实例

可以打开3个终端,也可以采用--fork后台运行模式,虚拟机下这种方式会出现分配空间不够的情况。

mongod --dbpath /data/db/rep0-0 --logpath /data/dblog/log0/mongodb.log --port 10001 --replSet repset --oplogSize 700 -rest -fork

 

mongod --dbpath /data/db/rep0-1 --logpath /data/dblog/log1/mongodb.log --port 10002 --replSet repset --oplogSize 700 -rest --fork

 

mongod --dbpath /data/db/rep0-2 --logpath /data/dblog/log2/mongodb.log --port 10003 --replSet repset --oplogSize 700 -rest --fork

 

 

5.3         连接到Mongo 实例,使用Mongo Shell 界面

bin/mongo localhost:10001/admin
MongoDB shell version: 2.4.8
connecting to: localhost:10001/admin
> 

注:“localhost,可以用域名、hostnameIP地址代替。

 

 

5.4         初始化第一个Replica Set Cluster

Use Db command:

db.runCommand({"replSetInitiate" : {"_id" : "repset", "members" : [{"_id" : 1, "host" : "localhost:10001"}, {"_id" : 2, "host" : "localhost:10002"}, {"_id" : 3, "host" : "localhost:10003"}]}})
{
    "info" : "Config now saved locally.  Should come online in about a minute.",
    "ok" : 1
}

 

 

或者使用以下命令:

rs.initiate()
rs.conf()
rs.add("localhost:10002")
rs.add("localhost:10003")

 

 

5.5         New Collection 测试

PRIMARY> use test
switched to db test
PRIMARY> people = ["Marc", "Bill", "George", "Eliot", "Matt", "Trey", "Tracy", "Greg", "Steve", "Kristina", "Katie", "Jeff"];
PRIMARY> for(var i=0; i<1000000; i++){
     name = people[Math.floor(Math.random()*people.length)];
     user_id = i;
     boolean = [true, false][Math.floor(Math.random()*2)];
     added_at = new Date();
     number = Math.floor(Math.random()*10001);
     db.test_collection.save({"name":name, "user_id":user_id, "boolean": boolean, "added_at":added_at, "number":number });
}

 

 

6     Mongo Replica Set Cluster Product安装

6.1         安装Mongodb

1.     准备三台电脑,或3台虚拟机,设置统一的用户,mongo设置统一的端口。虚拟机,我是先安装好一台,然后复制,通过copy 形成三个Mongo 节点。

2.     每台电脑参照上章《Mongo 安装(linux 64)》

3.     每台电脑参照上章《mongodb Service

 

6.2         修改mongodb 的配置文件绑定IP

修改各节点的配置文件,绑定节点IP地址,并保证IP地址可以互相PING

$ cd /usr/mongodb/etc/

$ vim mongodb.conf

dbpath = /data/mongodb/data

logpath = /data/mongodb/log/mongodb.log

replSet = rs0

bind_ip=192.168.200.X

port = 27017

fork = true

rest = true

 

6.3         修改Linux 防火墙,开启27017的端口

$ iptables -F

$ iptables -P INPUT ACCEPT

$ vim /etc/sysconfig/iptables

 

#增加下列一行,开始端口访问

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 27017 -j ACCEPT

 

6.4         配置Replica Set  Primary主服务器

$ cd /usr/mongodb/bin
$ ./mongo 192.168.200.234:27017/admin
 

> rs.initiate()
{
        "info2" : "no configuration explicitly specified -- making one",
        "me" : "192.168.200.236:27017",
        "info" : "Config now saved locally.  Should come online in about a minute.",
        "ok" : 1
}
 
> rs.conf()
{
        "_id" : "rs0",
        "version" : 1,
        "members" : [
               {
                       "_id" : 0,
                       "host" : "192.168.200.236:27017"
               }
        ]
}
 
这时主的以配置好了,增加节点
rs0:PRIMARY> rs.add("192.168.200.237:27017");
{ "ok" : 1 }
rs0:PRIMARY> rs.add("192.168.200.239:27017");
{ "ok" : 1 }
 

6.5         造数据测试

 

rs0:PRIMARY> use test

switched to db test

rs0:PRIMARY>db.example.add({name:”primary”, type:”test”});

 

6.6         查看节点数据,检查是否配置成功

6.6.1    默认Primary才具有读和写的权限,

登陆Secondany,会提示无法进行查询和任何的写入操作。

./mongo 192.168.200.239:27017

MongoDB shell version: 2.4.7

connecting to: 192.168.200.239:27017/test

rs0:SECONDARY> show tables;

Thu Nov  7 18:52:59.234 error: { "$err" : "not master and slaveOk=false", "code" : 13435 } at src/mongo/shell/query.js:128

6.6.2    修改Secondary 支持可读(生产上可以不设置)

如果修改此设置,那么主的只有写入权限,读的权限就分配给了各节点。

在写多读少的应用中,使用Replica Sets来实现读写分离

从库设置可以读:

rs0:SECONDARY> db.getMongo()

connection to 192.168.200.239:27017

rs0:SECONDARY> db.getMongo().setSlaveOk();

 

在主库上设置 slaveok=ok

[mongodb@ligh bin]$ ./mongo 192.168.200.236:27017

MongoDB shell version: 2.4.8

connecting to: 192.168.200.236:27017/test

PRIMARY> db.getMongo().setSlaveOk();

 

从库查看:

SECONDARY> db.example.find();

 

6.7         增加节点

增加新的节点,并重新配置。

$ cd /usr/mongodb/bin
$ ./mongo 192.168.200.236:27017/admin

 

   rs.add('192.168.0.21:27017') 
   rs.addArb('192.168.0.21:27017') 
   rs.reconfig(rs.conf()) 

6.8         关闭主节点测试自动切主节点

关闭主节点mongodb Service.

进入另外二个节点,使用mongo shell 登陆 发现有个节点 自动变成主节点了。

关闭的主节点启动,该主节点又自动变为secondary 节点。

 

6.9         强制某个节点为主节点

$ cd /usr/mongodb/bin
$ ./mongo 192.168.200.236:27017/admin
rs.reconfig()

显示

{

      "_id" : "rs0",

      "version" : 3,

      "members" : [

             {

                    "_id" : 0,

                    "host" : "192.168.200.236:27017"

             },

             {

                    "_id" : 1,

                    "host" : "192.168.200.237:27017"

             },

             {

                    "_id" : 2,

                    "host" : "192.168.200.239:27017"

             }

      ]

}

 

如果设置第2个为主节点:

mongo shell 中输入:

cfg = rs.conf()
cfg.members[0].priority = 0.5
cfg.members[1].priority = 0.5
cfg.members[2].priority = 1
rs.reconfig(cfg)
 

 
当前节点变成Secondary 192.168.200.239的变成主节点了。
 

 

 

 

分享到:
评论

相关推荐

    搭建Nosql MongoDB高可用集群

    MongoDB提供了一种快速配置高可用架构的方式,通过使用mongos作为查询路由器,以及分片技术,MongoDB可以迅速搭建出一个高可用的集群系统。此外,MongoDB支持主从复制模式,进一步提高了数据的安全性和可用性。在...

    MongoDB 集群配置示例之 sharding 模式

    配置MongoDB集群的sharding模式,需要遵循一系列步骤,包括服务器的准备、下载安装、规划以及启动集群。以下是详细的配置步骤: 1. **确认服务器平台信息**:了解集群中各服务器的硬件配置,如CPU型号、内存大小及...

    spring+mongodb集群搭建Demo

    MongoDB集群提供了高可用性和水平扩展性,它由多个组件组成,包括 mongod(数据库进程)、mongos(路由服务)和config servers(配置服务器)。在单个实例模式下,我们只需要运行一个mongod进程,但在集群模式下,...

    NoSql MongoDB权威指南.zip

    MongoDB是一种流行的开源、分布式NoSQL数据库系统,以其灵活性、高性能和可伸缩性而备受赞誉。NoSQL,意为“非关系型”,是相对于传统的关系型数据库(如MySQL、Oracle)而言的,它不再依赖于固定的表结构,而是采用...

    Mongodb集群配置

    MongoDB集群配置是一个复杂的过程,尤其当涉及到分片(Sharding)和复制集(Replica Sets)时。在这个配置中,我们看到一个在单台Windows机器上模拟的完整MongoDB集群,包括3个分片、每个分片由3个节点组成(1主2备的...

    MongoDB集群配置

    MongoDB是高性能的分布式文档存储数据库,作为NoSQL数据库的一...在实际应用中,MongoDB集群的搭建和维护涉及许多技术细节,需要深入理解其架构和工作机制,以便高效地配置和管理集群,同时确保数据的安全性和一致性。

    58同城高级系统架构师带你实战MongoDB集群分布式存储

    #### 三、MongoDB集群搭建与配置 1. **环境准备**: - 确保每台服务器上的MongoDB版本一致。 - 配置服务器时间同步(NTP)。 - 系统级优化,例如调整操作系统的参数设置。 2. **配置文件设置**: - `mongod....

    mongoDB集群部署文档借鉴.pdf

    MongoDB 是一个流行的 NoSQL 数据库,具有高性能、可靠性和可扩展性等特点。随着数据量的增长,单台服务器的存储能力和处理能力将面临极大的挑战,MongoDB 的集群部署模式可以满足大规模应用的需求。本文档将详细...

    mongodb3.2集群配置

    为了满足大规模数据处理的需求,本案例采用3台物理服务器搭建MongoDB集群,每台服务器上安装一个MongoDB实例,并通过合理的配置来实现数据的分片存储和高可用性。具体的部署规划如下: 1. **物理服务器准备**: - ...

    整理的MongoDB集群

    MongoDB集群配置实践通常采用的是副本集(Replica Set)和分片(Sharding)的方式,这两种方式结合可以构建出既具有高可用性又具备良好扩展性的集群环境。 #### 三、Master-Slave 主从结构 **主从架构**是一种常见...

    mongodb高可用完全分布集群搭建

    mongodb的安装和配置是mongodb集群搭建的基础。需要在每台服务器上安装mongodb,配置mongod.conf文件,并启动mongod服务。 配置必备目录 mongodb需要创建一些必备目录,例如数据目录、日志目录和配置目录。这些...

    NoSQL数据库之MongoDB源码和PPT

    MongoDB是一种流行的开源、分布式、文档型的NoSQL数据库,其设计目标是处理大量数据的同时,提供高可用性、高性能和可伸缩性。在这个"MongoDB源码和PPT"的压缩包中,我们可以期待深入理解MongoDB的核心概念、工作...

    Linux_64位 MongoDB集群软件及详细步骤

    MongoDB是一款高性能、开源、无模式的文档型数据库,尤其适合处理海量数据和高并发的Web应用。...通过这些步骤,你可以成功在Linux环境下搭建起一个稳定的MongoDB集群,为你的项目提供可靠的数据存储和处理能力。

    NoSQL数据库-MongoDB和Redis

    - **分片的配置和管理**:涉及配置分片集群、选择分片键和管理分片策略。 #### 八、Redis简介 Redis是一个开源的、基于内存的键值存储系统,支持多种数据结构,如字符串、列表、集合和有序集合等。Redis的特点...

    NoSQL-MongoDB大型部署详细方案

    MongoDB作为NoSQL数据库的一种,因其高性能、易扩展、分布式存储等特点,在大数据处理领域获得了广泛的应用。在部署大规模的MongoDB数据库时,需要考虑到数据的高可用性、负载均衡、数据备份和故障转移等需求。下面...

    Mongodb集群部署.docx

    在部署MongoDB集群时,首先要为每台参与集群的主机设定一个唯一的主机名,并确保所有机器上安装了相同版本的MongoDB软件,例如这里的3.0版本。MongoDB的存储引擎默认是WiredTiger,它提供了高性能、低延迟的数据存储...

Global site tag (gtag.js) - Google Analytics