ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

复本集 集群

2019-10-13 22:02:51  阅读:277  来源: 互联网

标签:r0 log 28010 复本 集群 key data rs1


目录

MongoDB部署Replica Sets

本节演示在1台服务器上部署3节点的Replica Sets,配置信息如下表所示。

配置信息 SERVER-1 SERVER-2 SERVER-3
数据文件存储路径 /data/data/r0 /data/data/r1 /data/data/r2
日志文件存储路径 /data/log/r0.log /data/log/r1.log /data/log/r2.log
复制集key文件 /data/key/r0 /data/key/r1 /data/key/r2
示例监听端口 28010 28011 28012

分别创建3个节点各自的数据文件存储路径

mkdir -p /data/data/r0
mkdir -p /data/data/r1
mkdir -p /data/data/r2

以上代码创建3个目录,其中SERVER-1使用"/data/data/r0"目录存储数据文件,SERVER-2使用"/data/data/r1"目录存储数据文件,SERVER-3使用"/data/data/r2"目录存储数据文件

创建日志文件存储路径

mkdir -p /data/log

在本例中,创建"/data/log"目录用于存储3个节点的系统日志文件

创建复制集key文件存储路径

mkdir -p /data/key
echo "this is rs1 super secret key" > /data/key/r0
echo "this is rs1 super secret key" > /data/key/r1
echo "this is rs1 super secret key" > /data/key/r2
chmod 600 /data/key/r*

以上代码创建3个文件用于存储复制集的key信息,其中SERVER-1使用"/data/key/r0" key文件,SERVER-2使用"/data/key/r1" key文件,SERVER-3使用"/data/key/r2" key文件

启动3个MongoDB实例来模拟 3个节点

/usr/local/software/mongodb/bin/mongod --replSet rs1 --keyFile /data/key/r0 --fork --port 28010 --dbpath /data/data/r0 --logpath=/data/log/r0.log --logappend

/usr/local/software/mongodb/bin/mongod --replSet rs1 --keyFile /data/key/r1 --fork --port 28011 --dbpath /data/data/r1 --logpath=/data/log/r1.log --logappend

/usr/local/software/mongodb/bin/mongod --replSet rs1 --keyFile /data/key/r2 --fork --port 28012 --dbpath /data/data/r2 --logpath=/data/log/r2.log --logappend

在本例中,启动3个MongoDB实例来模拟3个节点

参数说明:

  • replSet:指明复制集的名称。本例的取值是"rs1",其他的节点也必须起这个名字才能保证3个节点间的连通性。
  • keyFile:复制集key文件的路径,对于本例它的取值是"/data/key/r0",其他的节点也必须起这个名字才能保证3个节点间的连通性。
  • fork:将命令放在后台执行。
  • port:MongoDB的监听端口,用于接收客户端请求。
  • dbpath:数据文件存储路径。
  • logpath:系统日志文件存放的位置。
  • logappend:明确指明日志的写入模式是追加,而非覆盖方式。

配置节点信息,并初始化Replica Sets环境。

/usr/local/software/mongodb/bin/mongo -port 28010

config_rs1={_id:'rs1',members:[
    {_id:0,host:'localhost:28010'},
    {_id:1,host:'localhost:28011'},
    {_id:2,host:'localhost:28012'}]
}

rs.initiate(config_rs1);

在本例中,首先通过执行"/Apps/mongo/bin/mongo-port 28010"命令连接到SERVER-1实例;然后通过执行"config_rs1={_id:'rs1',members:……}"命令来命名Replica Sets配置的名字,指定Replica Sets 3个节点的信息。

其中,参数"id"指明Replica Sets的名字,本例的值是"rs1"。

接下来通过执行"rs.initiate(config_rs1)"命令启动Replica Sets,其中参数"config_rs1"就是Replica Sets配置的名字。

配置Replica Sets时需要注意priority(优先级)的概念。当priority=0时,说明这个实例永远不可能被设置成primary。也就是说,它只能作为一个slave而存在,即使在主库当机的情况下,它也不能被选为主库。这种方式其实与最原始的Master-Slave方式是一致的。

。例如下面的配置中,将28010和28012这两个端口的实例优先级调成0,系统就只能选28011作为主库,如下面的代码所示:

config_rs1={_id:'rs1',members:[
    {_id:0,host:'localhost:28010',priority:0},
    {_id:1,host:'localhost:28011'},
    {_id:2,host:'localhost:28012',priority:0}]
}

这样的设置在某些场景中还是非常有实际应用价值的。

然后可以通过rs.status()查看复制集的状态,分析复制集的各项运行指标(登陆mongo之后查看)

/usr/local/software/mongodb/bin/mongo -port 28010
rs1:PRIMARY> rs.status()

脚本

start.sh

#!bin/bash

#清空操作
if [ $1 == 'reset' ]; then
    pkill -9 mongo
    rm -rf /data/log
    rm -rf /data/key
    rm -rf /data/data/*
    exit
fi
# 启动
function start() {
    # 创建必要的文件
    mkdir -p /data/data/r0
    mkdir -p /data/data/r1
    mkdir -p /data/data/r2
    mkdir -p /data/log
    mkdir -p /data/key
    echo "this is rs1 super secret key" > /data/key/r0
    echo "this is rs1 super secret key" > /data/key/r1
    echo "this is rs1 super secret key" > /data/key/r2
    # 给拥有用户授权
    chmod 600 /data/key/r*

    # 启动三个mongo实例
    /usr/local/software/mongodb/bin/mongod --replSet rs1 --keyFile /data/key/r0 --fork --port 28010       --dbpath /data/data/r0 --logpath=/data/log/r0.log --logappend

    /usr/local/software/mongodb/bin/mongod --replSet rs1 --keyFile /data/key/r1 --fork --port 28011       --dbpath /data/data/r1 --logpath=/data/log/r1.log --logappend

    /usr/local/software/mongodb/bin/mongod --replSet rs1 --keyFile /data/key/r2 --fork --port 28012       --dbpath /data/data/r2 --logpath=/data/log/r2.log --logappend

    # 连接mongo实例并配置节点
    /usr/local/software/mongodb/bin/mongo -port 28010 << EOF
    config_rs1={_id:'rs1',members:[
        {_id:0,host:'localhost:28010'},
        {_id:1,host:'localhost:28011'},
        {_id:2,host:'localhost:28012'}]
    }
    # 初始化Replica Sets环境
    rs.initiate(config_rs1)
    # 启动完后检查状态
    rs.status()
EOF
}
if [ $1 == 'start' ]; then
    start
fi

运行脚本

# 重置环境
sh start reset
# 启动脚本
sh start start

查看状态

/usr/local/software/mongodb/bin/mongo -port 28010
rs1:PRIMARY> rs.status()
{
    "set" : "rs1",
    "date" : ISODate("2019-10-10T15:20:53.814Z"),
    "myState" : 1,
    "term" : NumberLong(1),
    "syncingTo" : "",
    "syncSourceHost" : "",
    "syncSourceId" : -1,
    "heartbeatIntervalMillis" : NumberLong(2000),
    "optimes" : {
        "lastCommittedOpTime" : {
            "ts" : Timestamp(1570720843, 1),
            "t" : NumberLong(1)
        },
        "readConcernMajorityOpTime" : {
            "ts" : Timestamp(1570720843, 1),
            "t" : NumberLong(1)
        },
        "appliedOpTime" : {
            "ts" : Timestamp(1570720843, 1),
            "t" : NumberLong(1)
        },
        "durableOpTime" : {
            "ts" : Timestamp(1570720843, 1),
            "t" : NumberLong(1)
        }
    },
    "lastStableCheckpointTimestamp" : Timestamp(1570720843, 1),
    "members" : [
        {
            "_id" : 0,
            "name" : "localhost:28010",
            //1表明状态正常;0表明状态异常
            "health" : 1,
            "state" : 1,
            // PRIMARY 表明此机器是主库
            "stateStr" : "PRIMARY",
            "uptime" : 90,
            "optime" : {
                "ts" : Timestamp(1570720843, 1),
                "t" : NumberLong(1)
            },
            "optimeDate" : ISODate("2019-10-10T15:20:43Z"),
            "syncingTo" : "",
            "syncSourceHost" : "",
            "syncSourceId" : -1,
            "infoMessage" : "could not find member to sync from",
            "electionTime" : Timestamp(1570720782, 1),
            "electionDate" : ISODate("2019-10-10T15:19:42Z"),
            "configVersion" : 1,
            "self" : true,
            "lastHeartbeatMessage" : ""
        },
        {
            "_id" : 1,
            "name" : "localhost:28011",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 82,
            "optime" : {
                "ts" : Timestamp(1570720843, 1),
                "t" : NumberLong(1)
            },
            "optimeDurable" : {
                "ts" : Timestamp(1570720843, 1),
                "t" : NumberLong(1)
            },
            "optimeDate" : ISODate("2019-10-10T15:20:43Z"),
            "optimeDurableDate" : ISODate("2019-10-10T15:20:43Z"),
            "lastHeartbeat" : ISODate("2019-10-10T15:20:52.379Z"),
            "lastHeartbeatRecv" : ISODate("2019-10-10T15:20:53.450Z"),
            "pingMs" : NumberLong(0),
            "lastHeartbeatMessage" : "",
            "syncingTo" : "localhost:28010",
            "syncSourceHost" : "localhost:28010",
            "syncSourceId" : 0,
            "infoMessage" : "",
            "configVersion" : 1
        },
        {
            "_id" : 2,
            "name" : "localhost:28012",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 82,
            "optime" : {
                "ts" : Timestamp(1570720843, 1),
                "t" : NumberLong(1)
            },
            "optimeDurable" : {
                "ts" : Timestamp(1570720843, 1),
                "t" : NumberLong(1)
            },
            "optimeDate" : ISODate("2019-10-10T15:20:43Z"),
            "optimeDurableDate" : ISODate("2019-10-10T15:20:43Z"),
            "lastHeartbeat" : ISODate("2019-10-10T15:20:52.379Z"),
            "lastHeartbeatRecv" : ISODate("2019-10-10T15:20:53.382Z"),
            "pingMs" : NumberLong(0),
            "lastHeartbeatMessage" : "",
            "syncingTo" : "localhost:28010",
            "syncSourceHost" : "localhost:28010",
            "syncSourceId" : 0,
            "infoMessage" : "",
            "configVersion" : 1
        }
    ],
    "ok" : 1,
    "operationTime" : Timestamp(1570720843, 1),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1570720843, 1),
        "signature" : {
            "hash" : BinData(0,"crIEP/ps9OmjKTmOvzF9+xNt8O0="),
            "keyId" : NumberLong("6746194394132512770")
        }
    }
}

官网教程

标签:r0,log,28010,复本,集群,key,data,rs1
来源: https://www.cnblogs.com/qiaozhuangshi/p/11668611.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有