• 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 自动成为了主。

     

     

     

  • 相关阅读:
    交叉编译GDB
    交叉编译Python
    DEBUG memory问题的一些工具以及注意事项
    [qemu] QEMU虚拟机的安装步骤
    分享一个public domain 的大数运算库,可以用于RSA加密解密
    [KERNEL] 在procfs中新增文件的方法
    [backtrace]在不改变代码的情况下,打印可执行文件的backtrace
    【幻化万千戏红尘】qianfeng-JAVA课程结束总结
    【幻化万千戏红尘】qianfengDay30-正则表达式、注解注释基础学习:
    【幻化万千戏红尘】qianfengDay29-Json解析、Gson解析、FASTJSON解析基础学习:
  • 原文地址:https://www.cnblogs.com/pangbing/p/7843523.html
Copyright © 2020-2023  润新知