mongdb集群

一、mongodb的集群

mongodb有两种架构:

    第一种架构:和mysql的结构类似,也有主从结构,但是他不能实现故障自动切换

于是有了第二种架构。官方不推荐使用这种架构。

    第二种:mongodb的复制集(副本集)。

           一般至少有3台机器,这两边也有主从,但是主从是通过选举出来的。

    主负责读写(写入到oplog日志中),从负责监控主服务器,同步主的数据。一旦主挂掉,然后代替主。

二、设置副本集的参数

(1)replset:设置副本集名称

(2)oplogsize:设置oplog日志文件大小

(3)fastsync:完成快速同步。

(4)replindexprefetch:在实现复制时,根据索引实现数据预取

    可以实现快速装载主节点上的数据的。尤其是在修改量特别大的情况下。

    可以使用它。它只能在2.2版本以后才能使用。它也只能基于ID索引实现

 

三.设置集群

实验环境

主机              IP                虚拟通道

centos1       192.168.3.10         vmnet8

centos2       192.168.3.11         vmnet8

centos3       192.168.3.12         vmnet8

 

1.将三台服务器全部安装mongo

tar xf mongodb-linux-x86_64-amazon-3.2.7.tgz

mv mongodb-linux-x86_64-amazon-3.2.7 /usr/local/mongodb

 

创建数据目录

mkdir /data/db -p

 

创建配置文件

cd /usr/local/mongodb/

vim mongodb.conf   #增加以下内容

dbpath = /data/db

logpath = /data/mongo.log 

logappend = true 

port = 27017

noauth = true   

fork = true

replSet = mongo 

#注意这里的"s" 必须大写

 

将配置文件复制到其他的两台服务器上

启动mongdb

/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/mongodb.conf

child process started successfully, parent exiting

此时启动成功。

 

2.初始化副本集

连接任意一台mongo

> rs.status()   #查看状态

{

    "info" : "run rs.initiate(...) if not yet done for the set",

    "ok" : 0,

    "errmsg" : "no replset config has been received",

    "code" : 94

定义初始化配置文件

cfg={"_id":"mongo","members":[{"_id":0,"host":"192.168.3.10:27017"},{"_id":1,"host":"192.168.3.11:27017"},{"_id":2,"host":"192.168.3.12:27017"}]}

显示以下内容为定义成功。

{

    "_id" : "mongo",

    "members" : [

       {

           "_id" : 0,

           "host" : "192.168.3.10:27017"

       },

       {

           "_id" : 1,

           "host" : "192.168.3.11:27017"

       },

       {

           "_id" : 2,

           "host" : "192.168.3.12:27017"

       }

    ]

}

 

初始化配置文件.

初始化的时候注意关闭另外两台从服务器的Iptables,否则会报错。

 > rs.initiate(cfg)

{ "ok" : 1 }

 

如果配置文件中有bind_ip=127.0.0.1初始化会报以下错误。

"errmsg" : "No host described in new configuration 1 for replica set mongo maps to this node",

 

 

>rs.status() 可以查看集群信息

 mongo:PRIMARY> db.isMaster()   #也可以查看本机的身份

{

    "hosts" : [

       "192.168.3.10:27017",

       "192.168.3.11:27017",

       "192.168.3.12:27017"

    ],

    "setName" : "mongo",

    "setVersion" : 1,

    "ismaster" : true,

    "secondary" : false,

    "primary" : "192.168.3.10:27017",

    "me" : "192.168.3.10:27017",

 

测试:

我们在主节点上插入数据

mongo:PRIMARY> use test

switched to db test

mongo:PRIMARY> db.test.insert({name:"xiaoming",age:50})

WriteResult({ "nInserted" : 1 })

mongo:PRIMARY> db.test.find()

{ "_id" : ObjectId("58b540f952cbd488f553914a"), "name" : "xiaoming","age" : 50 }

 

在从节点上查看数据

mongo:SECONDARY> rs.slaveOk()

mongo:SECONDARY> show dbs;

admin  0.000GB

local  0.000GB

test   0.000GB

mongo:SECONDARY> db.test.find()

{ "_id" : ObjectId("58b540f952cbd488f553914a"), "name" : "xiaoming", "age" : 50 }

 

测试数据库是否能够自动切换

我们停止主服务器。

退出第二台的mongo,重新登录

我们发现第二台mongo 自动成为了主。

 

 

 

原文地址:https://www.cnblogs.com/pangbing/p/7843523.html